You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Setup https://github.com/ligato/vpp-agent to watch Redis "config/vpp/v2/interfaces" events. Set up Redis to notify all events CONFIG SET notify-keyspace-events AKE
Create many Put watch events by writing some values into Redis /vnf-agent/$mslbl/config/vpp/v2/interfaces/. E.g. 4000 GRE tunnels.
Immediately (<1sec) after Redis provisioning do launch Lua script that deletes these keys EVAL "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 /vnf-agent/*/config/vpp/v2/interfaces/*.
According to redis-cli watch CN-Infra has queue of keys to notify VPP-Agent with Put events. On each event it separately reads value for given key. But since Lua script blocks Redis and wipes all keys these values becomes nil. As soon as keys are deleted, Redis gets unblocked and plugin continues to read data that is already deleted.
Expected results:
On nil value watch event CN-Infra protoWatchResp.GetValue() should return error. VPP agent's orchestrator plugin Plugin.watchEvents() should get an error, log it, and continue operating.
Actual results: proto_watcher_impl.go:GetValue() tries to unmarshall protoWatchResp.BytesWatchResp.value that is nil. VPP-agent crashes with SIGSEGV
The text was updated successfully, but these errors were encountered:
CONFIG SET notify-keyspace-events AKE
/vnf-agent/$mslbl/config/vpp/v2/interfaces/
. E.g. 4000 GRE tunnels.EVAL "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 /vnf-agent/*/config/vpp/v2/interfaces/*
.According to
redis-cli watch
CN-Infra has queue of keys to notify VPP-Agent with Put events. On each event it separately reads value for given key. But since Lua script blocks Redis and wipes all keys these values becomes nil. As soon as keys are deleted, Redis gets unblocked and plugin continues to read data that is already deleted.Expected results:
On nil value watch event CN-Infra
protoWatchResp.GetValue()
should return error. VPP agent's orchestrator pluginPlugin.watchEvents()
should get an error, log it, and continue operating.Actual results:
proto_watcher_impl.go:GetValue()
tries to unmarshallprotoWatchResp.BytesWatchResp.value
that is nil. VPP-agent crashes with SIGSEGVThe text was updated successfully, but these errors were encountered: