diff --git a/server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java b/server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java index 6a506df9116..202c6e3c5a1 100644 --- a/server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java +++ b/server/src/main/java/io/seata/server/storage/redis/JedisPooledFactory.java @@ -98,8 +98,12 @@ public static JedisPoolAbstract getJedisPoolInstance(JedisPoolAbstract... jedisP Set sentinels = new HashSet<>(SENTINEL_HOST_NUMBER); String[] sentinelHosts = CONFIGURATION.getConfig(ConfigurationKeys.STORE_REDIS_SENTINEL_HOST).split(","); Arrays.asList(sentinelHosts).forEach(sentinelHost -> sentinels.add(sentinelHost)); + String sentinelPassword = CONFIGURATION.getConfig(ConfigurationKeys.STORE_REDIS_SENTINEL_PASSWORD); + if (StringUtils.isBlank(password)) { + sentinelPassword = null; + } tempJedisPool = new JedisSentinelPool(masterName, sentinels, poolConfig, 60000, 60000, password, CONFIGURATION.getInt(ConfigurationKeys.STORE_REDIS_DATABASE, DATABASE), - null, Protocol.DEFAULT_TIMEOUT, Protocol.DEFAULT_TIMEOUT, CONFIGURATION.getConfig(ConfigurationKeys.STORE_REDIS_SENTINEL_PASSWORD), null); + null, Protocol.DEFAULT_TIMEOUT, Protocol.DEFAULT_TIMEOUT, sentinelPassword, null); } else if (mode.equals(ConfigurationKeys.REDIS_SINGLE_MODE)) { String host = CONFIGURATION.getConfig(ConfigurationKeys.STORE_REDIS_SINGLE_HOST); host = StringUtils.isBlank(host) ? CONFIGURATION.getConfig(ConfigurationKeys.STORE_REDIS_HOST, HOST) : host; diff --git a/server/src/main/java/io/seata/server/storage/redis/LuaParser.java b/server/src/main/java/io/seata/server/storage/redis/LuaParser.java index bc5fdac17a8..69938da7b99 100644 --- a/server/src/main/java/io/seata/server/storage/redis/LuaParser.java +++ b/server/src/main/java/io/seata/server/storage/redis/LuaParser.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.Serializable; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -49,7 +50,7 @@ public class LuaParser { private static final String ANNOTATION_LUA = "--"; - private static String ACQUIRE_LUA_FILE; + private static Map LUA_FILE_MAP = new HashMap<>(); private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); @@ -129,6 +130,7 @@ public static Map getEvalShaMapFromFile(String fileName) throws } catch (IOException e) { throw new IOException(e); } + LUA_FILE_MAP.put(fileName, luaByFile.toString()); Map resultMap = new ConcurrentHashMap<>(1); try (Jedis jedis = JedisPooledFactory.getJedisInstance()) { resultMap.put(fileName, jedis.scriptLoad(luaByFile.toString())); @@ -156,13 +158,13 @@ public static List getListFromJson(String json, Class classz) { } } - public static String jedisEvalSha(Jedis jedis, String luaSHA, String luaFileName, List keys, List args){ + public static Object jedisEvalSha(Jedis jedis, String luaSHA, String luaFileName, List keys, List args){ try { - return (String)jedis.evalsha(luaSHA, keys, args); + return jedis.evalsha(luaSHA, keys, args); }catch (JedisNoScriptException e) { - LOGGER.warn("jedis ex:" + e.getMessage()); - jedis.scriptLoad(luaFileName); - return (String)jedis.evalsha(luaSHA, keys, args); + LOGGER.warn("jedis ex: " + e.getMessage()); + jedis.scriptLoad(LUA_FILE_MAP.get(luaFileName)); + return jedis.evalsha(luaSHA, keys, args); } } } diff --git a/server/src/main/java/io/seata/server/storage/redis/lock/RedisLuaLocker.java b/server/src/main/java/io/seata/server/storage/redis/lock/RedisLuaLocker.java index 62a3cdbd110..465eaeeef30 100644 --- a/server/src/main/java/io/seata/server/storage/redis/lock/RedisLuaLocker.java +++ b/server/src/main/java/io/seata/server/storage/redis/lock/RedisLuaLocker.java @@ -131,7 +131,7 @@ public boolean acquireLock(List rowLocks, boolean autoCommit, boolean s // reset args index 2 args.set(1, String.valueOf(args.size())); - String result = LuaParser.jedisEvalSha(jedis, luaSHA, ACQUIRE_LOCK_LUA_FILE_NAME, keys, args); + String result = (String)LuaParser.jedisEvalSha(jedis, luaSHA, ACQUIRE_LOCK_LUA_FILE_NAME, keys, args); LuaParser.LuaResult luaResult = LuaParser.getObjectFromJson(result, LuaParser.LuaResult.class); @@ -208,7 +208,7 @@ public boolean isLockable(List rowLocks) { keys.addAll(lockKeys); List args = new ArrayList<>(); args.add(xid); - String res = LuaParser.jedisEvalSha(jedis, luaSHA, LOCKABLE_LUA_FILE_NAME, keys, args); + String res = (String)LuaParser.jedisEvalSha(jedis, luaSHA, LOCKABLE_LUA_FILE_NAME, keys, args); return "true".equals(res); } } diff --git a/server/src/main/java/io/seata/server/storage/redis/store/RedisLuaTransactionStoreManager.java b/server/src/main/java/io/seata/server/storage/redis/store/RedisLuaTransactionStoreManager.java index d5768ffa7d1..332c475be2d 100644 --- a/server/src/main/java/io/seata/server/storage/redis/store/RedisLuaTransactionStoreManager.java +++ b/server/src/main/java/io/seata/server/storage/redis/store/RedisLuaTransactionStoreManager.java @@ -212,7 +212,7 @@ protected boolean updateBranchTransactionDO(BranchTransactionDO branchTransactio add(applicationData); } }; - String result = LuaParser.jedisEvalSha(jedis, luaSHA, UPDATE_BRANCH_TRANSACTION_DO_LUA_FILE_NAME, keys, args); + String result = (String)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."); @@ -323,7 +323,7 @@ protected boolean updateGlobalTransactionDO(GlobalTransactionDO globalTransactio add(xid); } }; - String result = LuaParser.jedisEvalSha(jedis, luaSHA, UPDATE_GLOBAL_TRANSACTION_DO_LUA_FILE_NAME, keys, args); + String result = (String)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()) {