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]
|
|