mirror of
				https://github.com/proxiodev/RedisBungee.git
				synced 2025-10-31 15:58:03 +00:00 
			
		
		
		
	readd support for redis versions below 6, change method of the summoner
This commit is contained in:
		
							parent
							
								
									b214e3dad7
								
							
						
					
					
						commit
						b0ab5e3cb4
					
				| @ -20,9 +20,9 @@ as its last version before internal changes. | ||||
| |:-------------:|:---------:| | ||||
| |     1.x.x     | ✖	 | | ||||
| |     2.x.x     | ✖	 | | ||||
| |     3.x.x     | ✖	 | | ||||
| |     4.x.x     | ✖	 | | ||||
| |     5.x.x     | ✖	 | | ||||
| |     3.x.x     | ✔	 | | ||||
| |     4.x.x     | ✔	 | | ||||
| |     5.x.x     | ✔	 | | ||||
| |     6.x.x     | ✔  | | ||||
| |     7.x.x     | ✔  | | ||||
| 
 | ||||
|  | ||||
| @ -7,7 +7,7 @@ import com.google.common.collect.Multimap; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.summoners.JedisSummoner; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.summoners.Summoner; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.util.RedisBungeeMode; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.RedisBungeeMode; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
| import redis.clients.jedis.Jedis; | ||||
| import redis.clients.jedis.JedisPool; | ||||
| @ -37,6 +37,7 @@ public class RedisBungeeAPI { | ||||
|                 "redisbungee-" + plugin.getConfiguration().getServerId(), | ||||
|                 "redisbungee-data" | ||||
|         ); | ||||
|         new RedisBungee(this); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|  | ||||
| @ -8,7 +8,7 @@ import com.google.common.util.concurrent.UncheckedExecutionException; | ||||
| import com.google.gson.Gson; | ||||
| import com.google.gson.JsonObject; | ||||
| import com.google.gson.JsonParser; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.util.RedisTask; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.tasks.RedisTask; | ||||
| import redis.clients.jedis.Jedis; | ||||
| import redis.clients.jedis.JedisCluster; | ||||
| 
 | ||||
| @ -55,7 +55,7 @@ public abstract class AbstractDataManager<P, PL, PD, PS> { | ||||
|         try { | ||||
|             return serverCache.get(uuid, new RedisTask<String>(plugin.getApi()) { | ||||
|                 @Override | ||||
|                 public String singleJedisTask(Jedis jedis) { | ||||
|                 public String jedisTask(Jedis jedis) { | ||||
|                     return Objects.requireNonNull(jedis.hget("player:" + uuid, "server"), "user not found"); | ||||
| 
 | ||||
|                 } | ||||
| @ -84,7 +84,7 @@ public abstract class AbstractDataManager<P, PL, PD, PS> { | ||||
|         try { | ||||
|             return proxyCache.get(uuid, new RedisTask<String>(plugin.getApi()) { | ||||
|                 @Override | ||||
|                 public String singleJedisTask(Jedis jedis) { | ||||
|                 public String jedisTask(Jedis jedis) { | ||||
|                     return Objects.requireNonNull(jedis.hget("player:" + uuid, "proxy"), "user not found"); | ||||
|                 } | ||||
| 
 | ||||
| @ -110,7 +110,7 @@ public abstract class AbstractDataManager<P, PL, PD, PS> { | ||||
|         try { | ||||
|             return ipCache.get(uuid, new RedisTask<InetAddress>(plugin.getApi()) { | ||||
|                 @Override | ||||
|                 public InetAddress singleJedisTask(Jedis jedis) { | ||||
|                 public InetAddress jedisTask(Jedis jedis) { | ||||
|                     String result = jedis.hget("player:" + uuid, "ip"); | ||||
|                     if (result == null) | ||||
|                         throw new NullPointerException("user not found"); | ||||
| @ -142,7 +142,7 @@ public abstract class AbstractDataManager<P, PL, PD, PS> { | ||||
|         try { | ||||
|             return lastOnlineCache.get(uuid, new RedisTask<Long>(plugin.getApi()) { | ||||
|                 @Override | ||||
|                 public Long singleJedisTask(Jedis jedis) { | ||||
|                 public Long jedisTask(Jedis jedis) { | ||||
|                     String result = jedis.hget("player:" + uuid, "online"); | ||||
|                     return result == null ? -1 : Long.parseLong(result); | ||||
|                 } | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| package com.imaginarycode.minecraft.redisbungee.api; | ||||
| 
 | ||||
| import com.imaginarycode.minecraft.redisbungee.api.util.RedisTask; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.tasks.RedisTask; | ||||
| import redis.clients.jedis.Jedis; | ||||
| import redis.clients.jedis.JedisCluster; | ||||
| import redis.clients.jedis.exceptions.JedisConnectionException; | ||||
| @ -24,7 +24,7 @@ public class PubSubListener implements Runnable { | ||||
|     public void run() { | ||||
|         RedisTask<Void> subTask = new RedisTask<Void>(plugin.getApi()) { | ||||
|             @Override | ||||
|             public Void singleJedisTask(Jedis jedis) { | ||||
|             public Void jedisTask(Jedis jedis) { | ||||
|                 try { | ||||
|                     jpsh = new JedisPubSubHandler(plugin); | ||||
|                     addedChannels.add("redisbungee-" + plugin.getConfiguration().getServerId()); | ||||
|  | ||||
| @ -0,0 +1,5 @@ | ||||
| package com.imaginarycode.minecraft.redisbungee.api; | ||||
| 
 | ||||
| public enum RedisBungeeMode { | ||||
|     SINGLE, CLUSTER | ||||
| } | ||||
| @ -3,7 +3,6 @@ package com.imaginarycode.minecraft.redisbungee.api; | ||||
| import com.google.common.collect.Multimap; | ||||
| import com.imaginarycode.minecraft.redisbungee.RedisBungeeAPI; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.summoners.Summoner; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.util.RedisBungeeMode; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.util.uuid.UUIDTranslator; | ||||
| 
 | ||||
| import java.net.InetAddress; | ||||
| @ -99,4 +98,6 @@ public interface RedisBungeePlugin<P> extends EventsPlatform{ | ||||
| 
 | ||||
|     RedisBungeeMode getRedisBungeeMode(); | ||||
| 
 | ||||
|     Long getRedisClusterTime(); | ||||
| 
 | ||||
| } | ||||
|  | ||||
| @ -11,6 +11,10 @@ public class JedisSummoner implements Summoner<Jedis> { | ||||
| 
 | ||||
|     public JedisSummoner(JedisPool jedisPool) { | ||||
|         this.jedisPool = jedisPool; | ||||
|         try (Jedis jedis = this.jedisPool.getResource()) { | ||||
|             // Test the connection to make sure configuration is right | ||||
|             jedis.ping(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|  | ||||
| @ -1,10 +1,11 @@ | ||||
| package com.imaginarycode.minecraft.redisbungee.api.util; | ||||
| package com.imaginarycode.minecraft.redisbungee.api.tasks; | ||||
| 
 | ||||
| import com.imaginarycode.minecraft.redisbungee.RedisBungeeAPI; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.summoners.ClusterJedisSummoner; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.summoners.JedisSummoner; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.summoners.Summoner; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.RedisBungeeMode; | ||||
| import redis.clients.jedis.Jedis; | ||||
| import redis.clients.jedis.JedisCluster; | ||||
| 
 | ||||
| @ -14,7 +15,7 @@ public abstract class RedisTask<V> implements Runnable, Callable<V> { | ||||
| 
 | ||||
|     private final Summoner<?> summoner; | ||||
|     private final RedisBungeeAPI api; | ||||
| 
 | ||||
|     private Jedis jedis; | ||||
|     private RedisBungeePlugin<?> plugin; | ||||
| 
 | ||||
|     @Override | ||||
| @ -33,7 +34,23 @@ public abstract class RedisTask<V> implements Runnable, Callable<V> { | ||||
|         this.summoner = api.getSummoner(); | ||||
|     } | ||||
| 
 | ||||
|     public abstract V singleJedisTask(Jedis jedis); | ||||
|     // way to reuse jedis inside another RedisTask object | ||||
|     public RedisTask(RedisBungeeAPI api, Jedis jedis) { | ||||
|         this.api = api; | ||||
|         this.summoner = api.getSummoner(); | ||||
|         this.jedis = jedis; | ||||
|     } | ||||
| 
 | ||||
|     // way to reuse jedis inside another RedisTask object | ||||
|     public RedisTask(RedisBungeePlugin<?> plugin, Jedis jedis) { | ||||
|         this.plugin = plugin; | ||||
|         this.api = plugin.getApi(); | ||||
|         this.summoner = api.getSummoner(); | ||||
|         this.jedis = jedis; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     public abstract V jedisTask(Jedis jedis); | ||||
| 
 | ||||
|     public abstract V clusterJedisTask(JedisCluster jedisCluster); | ||||
| 
 | ||||
| @ -44,12 +61,16 @@ public abstract class RedisTask<V> implements Runnable, Callable<V> { | ||||
| 
 | ||||
|     public V execute(){ | ||||
|         if (api.getMode() == RedisBungeeMode.SINGLE) { | ||||
|             if (this.jedis != null){ | ||||
|                 return this.jedisTask(this.jedis); | ||||
|             } | ||||
|             JedisSummoner jedisSummoner = (JedisSummoner) summoner; | ||||
|             try (Jedis jedis = jedisSummoner.obtainResource()) { | ||||
|                 return this.singleJedisTask(jedis); | ||||
|             try (Jedis newJedis = jedisSummoner.obtainResource()) { | ||||
|                 return this.jedisTask(newJedis); | ||||
|             } | ||||
| 
 | ||||
|         } else if (api.getMode() == RedisBungeeMode.CLUSTER) { | ||||
|             // Jedis cluster does not need new instance since its single instance anyways. | ||||
|             ClusterJedisSummoner clusterJedisSummoner = (ClusterJedisSummoner) summoner; | ||||
|             return this.clusterJedisTask(clusterJedisSummoner.obtainResource()); | ||||
|         } | ||||
| @ -1,5 +0,0 @@ | ||||
| package com.imaginarycode.minecraft.redisbungee.api.util; | ||||
| 
 | ||||
| public enum RedisBungeeMode { | ||||
|     SINGLE, CLUSTER | ||||
| } | ||||
| @ -1,8 +1,9 @@ | ||||
| package com.imaginarycode.minecraft.redisbungee.api; | ||||
| package com.imaginarycode.minecraft.redisbungee.api.util; | ||||
| 
 | ||||
| import com.google.common.annotations.VisibleForTesting; | ||||
| import com.google.gson.Gson; | ||||
| import com.imaginarycode.minecraft.redisbungee.RedisBungeeAPI; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.AbstractDataManager; | ||||
| import redis.clients.jedis.Jedis; | ||||
| import redis.clients.jedis.JedisCluster; | ||||
| import redis.clients.jedis.Pipeline; | ||||
| @ -43,19 +44,19 @@ public class RedisUtil { | ||||
|     } | ||||
| 
 | ||||
|     public static boolean isRedisVersionRight(String redisVersion) { | ||||
|         // Need to use >=6.2 to use Lua optimizations. | ||||
|         String[] args = redisVersion.split("\\."); | ||||
|         if (args.length < 2) { | ||||
|             return false; | ||||
|         } | ||||
|         int major = Integer.parseInt(args[0]); | ||||
|         int minor = Integer.parseInt(args[1]); | ||||
|         return major >= 6 && minor >= 0; | ||||
|         return major >= 3 && minor >= 0; | ||||
|     } | ||||
| 
 | ||||
|     // Ham1255: i am keeping this if some plugin uses this *IF* | ||||
|     @Deprecated | ||||
|     public static boolean canUseLua(String redisVersion) { | ||||
|         // Need to use >=3 to use Lua optimizations. | ||||
|         return isRedisVersionRight(redisVersion); | ||||
|     } | ||||
| } | ||||
| @ -1,4 +1,4 @@ | ||||
| package com.imaginarycode.minecraft.redisbungee.api.util; | ||||
| package com.imaginarycode.minecraft.redisbungee.api.util.io; | ||||
| 
 | ||||
| import com.google.common.io.ByteStreams; | ||||
| 
 | ||||
| @ -1,6 +1,7 @@ | ||||
| package com.imaginarycode.minecraft.redisbungee.api.util; | ||||
| package com.imaginarycode.minecraft.redisbungee.api.util.lua; | ||||
| 
 | ||||
| import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.tasks.RedisTask; | ||||
| import redis.clients.jedis.Jedis; | ||||
| import redis.clients.jedis.JedisCluster; | ||||
| import redis.clients.jedis.exceptions.JedisDataException; | ||||
| @ -19,7 +20,7 @@ public class LuaManager { | ||||
|     public Script createScript(String script) { | ||||
|         RedisTask<Script> scriptRedisTask = new RedisTask<Script>(plugin.getApi()) { | ||||
|             @Override | ||||
|             public Script singleJedisTask(Jedis jedis) { | ||||
|             public Script jedisTask(Jedis jedis) { | ||||
|                 String hash = jedis.scriptLoad(script); | ||||
|                 return new Script(script, hash); | ||||
|             } | ||||
| @ -53,7 +54,7 @@ public class LuaManager { | ||||
|         public Object eval(List<String> keys, List<String> args) { | ||||
|             RedisTask<Object> objectRedisTask = new RedisTask<Object>(plugin.getApi()) { | ||||
|                 @Override | ||||
|                 public Object singleJedisTask(Jedis jedis) { | ||||
|                 public Object jedisTask(Jedis jedis) { | ||||
|                     Object data; | ||||
|                     try { | ||||
|                         data = jedis.evalsha(hashed, keys, args); | ||||
| @ -6,7 +6,7 @@ import com.google.common.collect.Iterables; | ||||
| import com.google.gson.Gson; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin; | ||||
| 
 | ||||
| import com.imaginarycode.minecraft.redisbungee.api.util.RedisTask; | ||||
| import com.imaginarycode.minecraft.redisbungee.api.tasks.RedisTask; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
| import redis.clients.jedis.Jedis; | ||||
| import redis.clients.jedis.JedisCluster; | ||||
| @ -74,7 +74,7 @@ public final class UUIDTranslator { | ||||
|         } | ||||
|         RedisTask<UUID> redisTask = new RedisTask<UUID>(plugin.getApi()) { | ||||
|             @Override | ||||
|             public UUID singleJedisTask(Jedis jedis) { | ||||
|             public UUID jedisTask(Jedis jedis) { | ||||
|                 String stored = jedis.hget("uuid-cache", player.toLowerCase()); | ||||
|                 if (stored != null) { | ||||
|                     // Found an entry value. Deserialize it. | ||||
| @ -178,7 +178,7 @@ public final class UUIDTranslator { | ||||
| 
 | ||||
|         RedisTask<String> redisTask = new RedisTask<String>(plugin.getApi()) { | ||||
|             @Override | ||||
|             public String singleJedisTask(Jedis jedis) { | ||||
|             public String jedisTask(Jedis jedis) { | ||||
|                 String stored = jedis.hget("uuid-cache", player.toString()); | ||||
|                 if (stored != null) { | ||||
|                     // Found an entry value. Deserialize it. | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user