xuekang
2024-05-10 edf3b7fde038fcf3e6d86b8b4b88c2ff6f9014cf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
--
-- User: tianyu.li
-- Date: 2021/1/19
--
-- init data
local array = {}; local result; local keySize = ARGV[1]; local argSize = ARGV[2];
-- Loop through all keys to see if they can be used , when a key is not available, exit
for i= 1, keySize do
    -- search lock xid
    result = redis.call('HGET',KEYS[i],'xid');
    -- if lock xid is nil
    if (not result)
        -- set 'no' mean There is need to store lock information
        then array[i]='no'
        else
           if (result ~= ARGV[3])
           then
               -- return fail
               return result
           else
               -- set 'yes' mean  There is not need to store lock information
               array[i]= 'yes'
           end
    end
end
-- Loop through array
for i =1, keySize do
    -- if is no ,The lock information is stored
    if(array[i] == 'no')
        then
            -- set xid
            redis.call('HSET',KEYS[i],'xid',ARGV[3]);
            -- set transactionId
            redis.call('HSET',KEYS[i],'transactionId',ARGV[(i-1)*6+4]);
            -- set branchId
            redis.call('HSET',KEYS[i],'branchId',ARGV[(i-1)*6+5]);
            -- set resourceId
            redis.call('HSET',KEYS[i],'resourceId',ARGV[(i-1)*6+6]);
            -- set tableName
            redis.call('HSET',KEYS[i],'tableName',ARGV[(i-1)*6+7]);
            -- set rowKey
            redis.call('HSET',KEYS[i],'rowKey',ARGV[(i-1)*6+8]);
            -- set pk
            redis.call('HSET',KEYS[i],'pk',ARGV[(i-1)*6+9]);
    -- exit if
    end
-- exit for
end
-- set SEATA_GLOBAL_LOCK
redis.call('HSET',KEYS[(keySize+1)],KEYS[(keySize+2)],ARGV[(argSize+0)]);
--  return success
return ARGV[3]