common/producer_state_table_apply_view.lua (16 lines of code) (raw):
--[[
Sample args format:
KEYS:
SAMPLE_CHANNEL
SAMPLE_KEY_SET
SAMPLE_DEL_KEY_SET
_SAMPLE:key_0
_SAMPLE:key_1
ARGV:
G (String to be published to channel)
2 (Count of objects to set)
key_0
key_1
0 (Count of objects to del)
2 (Count of A/V pair of object 0)
attribute_0
value_0
attribute_1
value_1
1 (Count of A/V pair of object 1)
attribute_0
value_0
]]
local arg_start = 2
for i = 1, ARGV[arg_start] do
redis.call('SADD', KEYS[2], ARGV[arg_start + i])
end
arg_start = arg_start + ARGV[arg_start] + 1
for i = 1, ARGV[arg_start] do
redis.call('SADD', KEYS[3], ARGV[arg_start + i])
end
arg_start = arg_start + ARGV[arg_start] + 1
for j = 4, #KEYS do
for i = 1, ARGV[arg_start] do
redis.call('HSET', KEYS[j], ARGV[arg_start + i * 2 - 1], ARGV[arg_start + i * 2])
end
arg_start = arg_start + 2 * ARGV[arg_start] + 1
end
redis.call('PUBLISH', KEYS[1], ARGV[1])