Skip to content

Commit

Permalink
[Chassis][LAG_ID] Address the same lagid been used in two different L…
Browse files Browse the repository at this point in the history
…Cs issue.

Signed-off-by: mlok <[email protected]>
  • Loading branch information
mlok-nokia committed Sep 28, 2024
1 parent 9a6a86f commit 9e6c12d
Showing 1 changed file with 36 additions and 16 deletions.
52 changes: 36 additions & 16 deletions orchagent/lagids.lua
Original file line number Diff line number Diff line change
Expand Up @@ -37,24 +37,41 @@ if op == "add" then
end
-- proposed lag id is different than that in database OR
-- the portchannel does not exist in the database
-- If proposed lagid is available, return the same proposed lag id
if redis.call("sismember", "SYSTEM_LAG_ID_SET", tostring(plagid)) == 0 then
redis.call("sadd", "SYSTEM_LAG_ID_SET", tostring(plagid))
redis.call("srem", "SYSTEM_LAG_ID_SET", tostring(dblagid))
redis.call("hset", "SYSTEM_LAG_ID_TABLE", pcname, tostring(plagid))
return plagid
-- If proposed lagid is not available, lpop the first availabe ID
local index = redis.call("lpos", "SYSTEM_LAG_IDS_FREE_LIST", tostring(plagid))
if index == false then
local lagid = redis.call("lpop", "SYSTEM_LAG_IDS_FREE_LIST")
redis.call("hset", "SYSTEM_LAG_ID_TABLE", pcname, lagid)
redis.call("sadd", "SYSTEM_LAG_ID_SET", lagid)
if dblagid then
redis.call("srem", "SYSTEM_LAG_ID_SET", tostring(dblagid))
if redis.call("lpos", "SYSTEM_LAG_IDS_FREE_LIST", tostring(dblagid)) == false then
redis.call("rpush", "SYSTEM_LAG_IDS_FREE_LIST", tostring(dblagid))
end
end
return tonumber(lagid)
else
redis.call("lrem", "SYSTEM_LAG_IDS_FREE_LIST", 1, tostring(plagid))
redis.call("hset", "SYSTEM_LAG_ID_TABLE", pcname, tostring(plagid))
redis.call("sadd", "SYSTEM_LAG_ID_SET", tostring(plagid))
if dblagid then
redis.call("srem", "SYSTEM_LAG_ID_SET", tostring(dblagid))
if redis.call("lpos", "SYSTEM_LAG_IDS_FREE_LIST", tostring(dblagid)) == false then
redis.call("rpush", "SYSTEM_LAG_IDS_FREE_LIST", tostring(dblagid))
end
end
return plagid
end
end

local lagid = lagid_start
while lagid <= lagid_end do
if redis.call("sismember", "SYSTEM_LAG_ID_SET", tostring(lagid)) == 0 then
redis.call("sadd", "SYSTEM_LAG_ID_SET", tostring(lagid))
redis.call("srem", "SYSTEM_LAG_ID_SET", tostring(dblagid))
redis.call("hset", "SYSTEM_LAG_ID_TABLE", pcname, tostring(lagid))
return lagid
else
local lagid = redis.call("lpop", "SYSTEM_LAG_IDS_FREE_LIST")
redis.call("hset", "SYSTEM_LAG_ID_TABLE", pcname, lagid)
redis.call("sadd", "SYSTEM_LAG_ID_SET", lagid)
if dblagid then
if redis.call("lpos", "SYSTEM_LAG_IDS_FREE_LIST", tostring(dblagid)) == false then
redis.call("rpush", "SYSTEM_LAG_IDS_FREE_LIST", tostring(dblagid))
end
end
lagid = lagid + 1
return tonumber(lagid)
end

return -1
Expand All @@ -67,6 +84,9 @@ if op == "del" then
local lagid = redis.call("hget", "SYSTEM_LAG_ID_TABLE", pcname)
redis.call("srem", "SYSTEM_LAG_ID_SET", lagid)
redis.call("hdel", "SYSTEM_LAG_ID_TABLE", pcname)
if redis.call("lpos", "SYSTEM_LAG_IDS_FREE_LIST", lagid) == false then
redis.call("rpush", "SYSTEM_LAG_IDS_FREE_LIST", lagid)
end
return tonumber(lagid)
end

Expand Down

0 comments on commit 9e6c12d

Please sign in to comment.