Skip to content

Commit

Permalink
Disable jedis call to redis Client SetInfo (#3056)
Browse files Browse the repository at this point in the history
  • Loading branch information
rainecp authored Dec 13, 2023
1 parent 5059ed8 commit 1616070
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package misk.redis

import org.apache.commons.pool2.PooledObject
import org.apache.commons.pool2.PooledObjectFactory
import redis.clients.jedis.ClientSetInfoConfig
import redis.clients.jedis.Connection
import redis.clients.jedis.ConnectionFactory
import redis.clients.jedis.ConnectionPoolConfig
Expand All @@ -18,7 +19,7 @@ internal class JedisPooledWithMetrics(
replicationGroupConfig: RedisReplicationGroupConfig,
ssl: Boolean = true,
requiresPassword: Boolean = true,
) : JedisPooled (
) : JedisPooled(
PooledConnectionProviderWithMetrics(
metrics,
poolConfig,
Expand Down Expand Up @@ -63,6 +64,8 @@ private fun createJedisClientConfig(
})
.database(Protocol.DEFAULT_DATABASE)
.ssl(ssl)
//CLIENT SETINFO is only supported in Redis v7.2+
.clientSetInfoConfig(ClientSetInfoConfig.DISABLED)
.build()
}

Expand Down
39 changes: 26 additions & 13 deletions misk-redis/src/main/kotlin/misk/redis/RedisClusterModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ import misk.ReadyService
import misk.ServiceModule
import misk.inject.KAbstractModule
import misk.metrics.v2.Metrics
import redis.clients.jedis.ClientSetInfoConfig
import redis.clients.jedis.ConnectionPoolConfig
import redis.clients.jedis.DefaultJedisClientConfig
import redis.clients.jedis.HostAndPort
import redis.clients.jedis.JedisCluster
import wisp.deployment.Deployment
Expand Down Expand Up @@ -70,23 +72,34 @@ class RedisClusterModule @JvmOverloads constructor(
// Create our jedis pool with client-side metrics.
val clientMetrics = RedisClientMetrics(ticker, metrics)

val jedisClientConfig = DefaultJedisClientConfig.builder()
.connectionTimeoutMillis(replicationGroup.timeout_ms)
.socketTimeoutMillis(replicationGroup.timeout_ms)
.password(replicationGroup.redis_auth_password
.ifEmpty {
check(!deployment.isReal) {
"This Redis client is configured to require an auth password, but none was provided!"
}
null
}
)
.clientName(replicationGroup.client_name)
.ssl(useSsl)
//CLIENT SETINFO is only supported in Redis v7.2+
.clientSetInfoConfig(ClientSetInfoConfig.DISABLED)
.build()

val jedisCluster = JedisCluster(
HostAndPort(
replicationGroup.configuration_endpoint.hostname,
replicationGroup.configuration_endpoint.port
setOf(
HostAndPort(
replicationGroup.configuration_endpoint.hostname,
replicationGroup.configuration_endpoint.port
)
),
replicationGroup.timeout_ms,
replicationGroup.timeout_ms,
jedisClientConfig,
replicationGroup.max_attempts,
replicationGroup.redis_auth_password.ifEmpty {
check(!deployment.isReal) { "Redis auth password cannot be empty in a real environment!" }
null
},
replicationGroup.client_name,
connectionPoolConfig,
useSsl
connectionPoolConfig
)

return RealRedis(jedisCluster, clientMetrics)
}
}

0 comments on commit 1616070

Please sign in to comment.