quarkus-redis-client java.util.concurrent.CompletionException: MOVED

Viewed 125

I'm implementing a Redis client (standalone mode) on Quarkus.

I get this intermittent error when I query if a key already exists in Redis :

Caused by: MOVED 3271 xxxx-memorydb-redis-cluster-0001-002.XXXX-memorydb-redis-cluster.xxxx.memorydb.us-east-1.amazonaws.com:6379 java.util.concurrent.CompletionException: MOVED 3814 xxxx-memorydb-redis-cluster-XXXX-002.xxx-memorydb-redis-cluster.xxxx.memorydb.us-east-1.amazonaws.com:6379 at io.smallrye.mutiny.operators.uni.UniBlockingAwait.await(UniBlockingAwait.java:79) at io.smallrye.mutiny.groups.UniAwait.atMost(UniAwait.java:65) at io.quarkus.redis.client.runtime.RedisClientImpl.await(RedisClientImpl.java:1046) at io.quarkus.redis.client.runtime.RedisClientImpl.exists(RedisClientImpl.java:172) at io.quarkus.redis.client.RedisClient_761b9a6e5f634178e3291b09c1921f229025da0c_Synthetic_ClientProxy.exists(Unknown Source)

PART OF CODE WHERE THE ERROR OCCURS:

    public ObjectNode generateMobileDeviceToken(long idClient) {

        Integer mobileDeviceToken = null;

        while (mobileDeviceToken == null) {
            mobileDeviceToken = ThreadLocalRandom.current().nextInt(100000, 1000000);         


            // ************************************
            // ***the error occurs on this line ***
            // Verify if token already exists
            int keysFound = this.redisClient.exists(List.of(REDIS_ENV + "." + MOBILE_DEVICE_TOKEN_GROUP_NAME + "." + mobileDeviceToken)).toInteger();
            // ***the error occurs on this line ***
            // ************************************


            if (keysFound != 0) {
                mobileDeviceToken = null;
            }
        }
        
        this.redisClient.setex(REDIS_ENV + "." + MOBILE_DEVICE_TOKEN_GROUP_NAME + "." + mobileDeviceToken, TOKEN_TTL_S.toString(), String.valueOf(idClient));
       

        ObjectNode mobileDeviceTokenJSON = OBJECT_MAPPER.createObjectNode();
        mobileDeviceTokenJSON.put("mobileDeviceToken", mobileDeviceToken);
        mobileDeviceTokenJSON.put("mobileDeviceTokenExpiration", LocalDateTime.now()
            .plus(TOKEN_TTL_S, ChronoUnit.SECONDS).toEpochSecond(ZoneOffset.UTC));

        return mobileDeviceTokenJSON;
    }

APPLICATION PROPERTIES

# Redis
quarkus.redis.hosts=rediss://<MY-REDIS-ADDRESS>.amazonaws.com:6379
quarkus.redis.ssl.enabled=true
quarkus.redis.max-pool-size=25
quarkus.redis.max-pool-waiting=100
quarkus.redis.client-type=standalone
quarkus.redis.devservices.enabled=false
0 Answers
Related