Skip to content

Commit

Permalink
bugfix
Browse files Browse the repository at this point in the history
  • Loading branch information
PeppaO committed Oct 30, 2023
1 parent a574f75 commit 74fddb5
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 11 deletions.
16 changes: 16 additions & 0 deletions server/src/main/java/io/seata/server/storage/redis/LuaParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,26 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.exceptions.JedisDataException;
import redis.clients.jedis.exceptions.JedisNoScriptException;

/**
* lua related utils
*
* @author conghuhu
*/
public class LuaParser {
private static final Logger LOGGER = LoggerFactory.getLogger(LuaParser.class);

private static final String WHITE_SPACE = " ";

private static final String ANNOTATION_LUA = "--";

private static String ACQUIRE_LUA_FILE;

private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();

public final static class LuaResult implements Serializable {
Expand Down Expand Up @@ -149,4 +155,14 @@ public static <T> List<T> getListFromJson(String json, Class<T> classz) {
throw new StoreException(e.getMessage());
}
}

public static String jedisEvalSha(Jedis jedis, String luaSHA, String luaFileName, List<String> keys, List<String> args){
try {
return (String)jedis.evalsha(luaSHA, keys, args);
}catch (JedisNoScriptException e) {
LOGGER.warn("jedis ex:" + e.getMessage());
jedis.scriptLoad(luaFileName);
return (String)jedis.evalsha(luaSHA, keys, args);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ public boolean acquireLock(List<RowLock> rowLocks, boolean autoCommit, boolean s
// reset args index 2
args.set(1, String.valueOf(args.size()));

String result = (String) jedis.evalsha(luaSHA, keys, args);
String result = LuaParser.jedisEvalSha(jedis, luaSHA, ACQUIRE_LOCK_LUA_FILE_NAME, keys, args);

LuaParser.LuaResult luaResult = LuaParser.getObjectFromJson(result, LuaParser.LuaResult.class);

Expand Down Expand Up @@ -162,7 +162,7 @@ public boolean releaseLock(String xid) {
List<String> keys = new ArrayList<>();
List<String> args = Collections.emptyList();
keys.add(xidLockKey);
jedis.evalsha(luaSHA, keys, args);
LuaParser.jedisEvalSha(jedis, luaSHA, RELEASE_LOCK_LUA_FILE_NAME, keys, args);
return true;
}
}
Expand All @@ -182,7 +182,7 @@ public boolean releaseLock(String xid, Long branchId) {
List<String> args = Collections.emptyList();
keys.add(xidLockKey);
keys.add(String.valueOf(branchId));
jedis.evalsha(luaSHA, keys, args);
LuaParser.jedisEvalSha(jedis, luaSHA, RELEASE_LOCK_LUA_FILE_NAME, keys, args);
return true;
}
}
Expand All @@ -208,7 +208,7 @@ public boolean isLockable(List<RowLock> rowLocks) {
keys.addAll(lockKeys);
List<String> args = new ArrayList<>();
args.add(xid);
String res = (String) jedis.evalsha(luaSHA, keys, args);
String res = LuaParser.jedisEvalSha(jedis, luaSHA, LOCKABLE_LUA_FILE_NAME, keys, args);
return "true".equals(res);
}
}
Expand All @@ -227,7 +227,7 @@ public void updateLockStatus(String xid, LockStatus lockStatus) {
keys.add(xidLockKey);
keys.add(STATUS);
args.add(String.valueOf(lockStatus.getCode()));
jedis.evalsha(luaSHA, keys, args);
LuaParser.jedisEvalSha(jedis, luaSHA, UPDATE_LOCK_LUA_FILE_NAME, keys, args);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ protected boolean insertBranchTransactionDO(BranchTransactionDO branchTransactio
keys.add(entry.getKey());
args.add(entry.getValue());
}
jedis.evalsha(luaSHA, keys, args);
LuaParser.jedisEvalSha(jedis, luaSHA, INSERT_TRANSACTION_DO_LUA_FILE_NAME, keys, args);
return true;
} catch (Exception ex) {
throw new RedisException(ex);
Expand Down Expand Up @@ -180,7 +180,7 @@ protected boolean deleteBranchTransactionDO(BranchTransactionDO branchTransactio
add("branch");
}
};
jedis.evalsha(luaSHA, keys, args);
LuaParser.jedisEvalSha(jedis, luaSHA, DELETE_TRANSACTION_DO_LUA_FILE_NAME, keys, args);
return true;
} catch (Exception ex) {
throw new RedisException(ex);
Expand Down Expand Up @@ -212,7 +212,7 @@ protected boolean updateBranchTransactionDO(BranchTransactionDO branchTransactio
add(applicationData);
}
};
String result = (String) jedis.evalsha(luaSHA, keys, args);
String result = LuaParser.jedisEvalSha(jedis, luaSHA, UPDATE_BRANCH_TRANSACTION_DO_LUA_FILE_NAME, keys, args);
LuaParser.LuaResult luaResult = LuaParser.getObjectFromJson(result, LuaParser.LuaResult.class);
if (!luaResult.getSuccess()) {
throw new StoreException("Branch transaction is not exist, update branch transaction failed.");
Expand Down Expand Up @@ -258,7 +258,7 @@ protected boolean insertGlobalTransactionDO(GlobalTransactionDO globalTransactio
keys.add(REDIS_SEATA_BEGIN_TRANSACTIONS_KEY);
args.add(xid);
args.add(String.valueOf(globalTransactionDO.getBeginTime() + globalTransactionDO.getTimeout()));
jedis.evalsha(luaSHA, keys, args);
LuaParser.jedisEvalSha(jedis, luaSHA, INSERT_TRANSACTION_DO_LUA_FILE_NAME, keys, args);
return true;
} catch (Exception ex) {
throw new RedisException(ex);
Expand Down Expand Up @@ -290,7 +290,7 @@ protected boolean deleteGlobalTransactionDO(GlobalTransactionDO globalTransactio
add(String.valueOf(globalTransactionDO.getStatus()));
}
};
jedis.evalsha(luaSHA, keys, args);
LuaParser.jedisEvalSha(jedis, luaSHA, DELETE_TRANSACTION_DO_LUA_FILE_NAME, keys, args);
return true;
} catch (Exception ex) {
throw new RedisException(ex);
Expand Down Expand Up @@ -323,7 +323,7 @@ protected boolean updateGlobalTransactionDO(GlobalTransactionDO globalTransactio
add(xid);
}
};
String result = (String) jedis.evalsha(luaSHA, keys, args);
String result = LuaParser.jedisEvalSha(jedis, luaSHA, UPDATE_GLOBAL_TRANSACTION_DO_LUA_FILE_NAME, keys, args);
LuaParser.LuaResult luaResult = LuaParser.getObjectFromJson(result, LuaParser.LuaResult.class);
// fail
if (!luaResult.getSuccess()) {
Expand Down

0 comments on commit 74fddb5

Please sign in to comment.