Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 61 additions & 27 deletions backend/services/redis.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import parseJSON from "json-parse-even-better-errors"
import { createSentinel } from "redis"
import { createClient, createSentinel } from "redis"
import * as winston from "winston"

import {
Expand All @@ -9,6 +9,7 @@ import {
REDIS_PASSWORD,
REDIS_SENTINEL_MASTER_NAME,
REDIS_SENTINELS,
REDIS_URL,
} from "../config"
import { BaseContext } from "../context"
import { isDefined, isPromise } from "../util"
Expand All @@ -23,7 +24,10 @@ const _logger = winston.createLogger({
transports: [new winston.transports.Console()],
})

let redisClient: ReturnType<typeof createSentinel> | undefined
type RedisClient =
| ReturnType<typeof createClient>
| ReturnType<typeof createSentinel>
let redisClient: RedisClient | undefined

export const redisReconnectStrategy =
(redisName = "Redis", logger: winston.Logger = _logger) =>
Expand All @@ -40,44 +44,74 @@ export const redisReconnectStrategy =
return nextDelay
}

const getRedisClient = (): ReturnType<typeof createSentinel> | undefined => {
const getRedisClient = (): RedisClient | undefined => {
if (redisClient) {
return redisClient
}
if (NEXUS_REFLECTION || isTest) {
if (NEXUS_REFLECTION ?? isTest) {
return
}

const sentinels = REDIS_SENTINELS?.split(",").map((sentinel: string) => {
const [host, port] = sentinel.trim().split(":")
return { host, port: parseInt(port) ?? 26379 }
})
const useSentinel = REDIS_SENTINELS && REDIS_SENTINEL_MASTER_NAME

const client = createSentinel({
name: REDIS_SENTINEL_MASTER_NAME!,
sentinelRootNodes: sentinels ?? [],
nodeClientOptions: {
let client: RedisClient

if (useSentinel && REDIS_SENTINELS && REDIS_SENTINEL_MASTER_NAME) {
const sentinels = REDIS_SENTINELS.split(",").map((sentinel: string) => {
const [host, port] = sentinel.trim().split(":")
return { host, port: parseInt(port) ?? 26379 }
})

const sentinelClient = createSentinel({
name: REDIS_SENTINEL_MASTER_NAME,
sentinelRootNodes: sentinels,
nodeClientOptions: {
password: REDIS_PASSWORD,
database: REDIS_DB,
socket: {
reconnectStrategy: redisReconnectStrategy(),
},
},
})

sentinelClient.on("error", (err: any) => {
_logger.error(`Redis Sentinel error`, err)
})
sentinelClient.on("ready", () => {
_logger.info(
`Redis Sentinel connected to master: ${REDIS_SENTINEL_MASTER_NAME}`,
)
})

sentinelClient.connect().catch((err: any) => {
_logger.error(`Redis Sentinel connection failed`, err)
})

client = sentinelClient as RedisClient
} else {
const url = REDIS_URL ?? "redis://127.0.0.1:6379"
const regularClient = createClient({
url,
password: REDIS_PASSWORD,
database: REDIS_DB,
socket: {
reconnectStrategy: redisReconnectStrategy(),
},
},
})

client.on("error", (err: any) => {
_logger.error(`Redis Sentinel error`, err)
})
client.on("ready", () => {
_logger.info(
`Redis Sentinel connected to master: ${REDIS_SENTINEL_MASTER_NAME}`,
)
})
})

regularClient.on("error", (err: any) => {
_logger.error(`Redis error`, err)
})
regularClient.on("ready", () => {
_logger.info(`Redis connected to: ${url}`)
})

// Connect the Sentinel client
client.connect().catch((err: any) => {
_logger.error(`Redis Sentinel connection failed`, err)
})
regularClient.connect().catch((err: any) => {
_logger.error(`Redis connection failed`, err)
})

client = regularClient as RedisClient
}

redisClient = client
return client
Expand Down
10 changes: 0 additions & 10 deletions helm/templates/backend-deployment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,6 @@ spec:
secretKeyRef:
name: new-redis
key: redis-password
- name: REDIS_SENTINELS
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinels
- name: REDIS_SENTINEL_MASTER_NAME
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinel-master-name
- name: NEW_RELIC_NO_CONFIG_FILE
value: "true"
- name: CONNECTION_LIMIT
Expand Down
10 changes: 0 additions & 10 deletions helm/templates/background-emailer-deployment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,6 @@ spec:
secretKeyRef:
name: new-redis
key: redis-password
- name: REDIS_SENTINELS
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinels
- name: REDIS_SENTINEL_MASTER_NAME
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinel-master-name
- name: CONNECTION_LIMIT
value: "1"
- name: APPLICATION_NAME
Expand Down
10 changes: 0 additions & 10 deletions helm/templates/course-stats-emailer-cronjob.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,3 @@ spec:
secretKeyRef:
name: new-redis
key: redis-password
- name: REDIS_SENTINELS
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinels
- name: REDIS_SENTINEL_MASTER_NAME
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinel-master-name
10 changes: 0 additions & 10 deletions helm/templates/elements-consented-users-mailer-cronjob.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,3 @@ spec:
secretKeyRef:
name: new-redis
key: redis-password
- name: REDIS_SENTINELS
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinels
- name: REDIS_SENTINEL_MASTER_NAME
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinel-master-name
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,6 @@ spec:
secretKeyRef:
name: new-redis
key: redis-password
- name: REDIS_SENTINELS
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinels
- name: REDIS_SENTINEL_MASTER_NAME
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinel-master-name
volumeMounts:
- name: google-cloud-storage-serviceaccount
mountPath: "/etc/gcs"
Expand Down
10 changes: 0 additions & 10 deletions helm/templates/fetch-avoin-links-cronjob.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,3 @@ spec:
secretKeyRef:
name: new-redis
key: redis-password
- name: REDIS_SENTINELS
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinels
- name: REDIS_SENTINEL_MASTER_NAME
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinel-master-name
10 changes: 0 additions & 10 deletions helm/templates/fetch-user-app-datum-cronjob.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,5 @@ spec:
secretKeyRef:
name: new-redis
key: redis-password
- name: REDIS_SENTINELS
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinels
- name: REDIS_SENTINEL_MASTER_NAME
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinel-master-name
- name: CONFIG_NAME
value: "userAppDatum"
10 changes: 0 additions & 10 deletions helm/templates/fetch-user-field-values-cronjob.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,6 @@ spec:
secretKeyRef:
name: new-redis
key: redis-password
- name: REDIS_SENTINELS
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinels
- name: REDIS_SENTINEL_MASTER_NAME
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinel-master-name
- name: CONFIG_NAME
value: "userFieldValues"

10 changes: 0 additions & 10 deletions helm/templates/import-organizations-cronjob.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,3 @@ spec:
secretKeyRef:
name: new-redis
key: redis-password
- name: REDIS_SENTINELS
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinels
- name: REDIS_SENTINEL_MASTER_NAME
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinel-master-name
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,6 @@ spec:
secretKeyRef:
name: new-redis
key: redis-password
- name: REDIS_SENTINELS
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinels
- name: REDIS_SENTINEL_MASTER_NAME
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinel-master-name
- name: KAFKA_TOP_OF_THE_QUEUE
value: "1"
volumeMounts:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,6 @@ spec:
secretKeyRef:
name: new-redis
key: redis-password
- name: REDIS_SENTINELS
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinels
- name: REDIS_SENTINEL_MASTER_NAME
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinel-master-name
- name: KAFKA_TOP_OF_THE_QUEUE
value: "1"
volumeMounts:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,6 @@ spec:
secretKeyRef:
name: new-redis
key: redis-password
- name: REDIS_SENTINELS
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinels
- name: REDIS_SENTINEL_MASTER_NAME
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinel-master-name
- name: KAFKA_TOP_OF_THE_QUEUE
value: "1"
volumeMounts:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,6 @@ spec:
secretKeyRef:
name: new-redis
key: redis-password
- name: REDIS_SENTINELS
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinels
- name: REDIS_SENTINEL_MASTER_NAME
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinel-master-name
- name: KAFKA_TOP_OF_THE_QUEUE
value: "1"
volumeMounts:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,6 @@ spec:
secretKeyRef:
name: new-redis
key: redis-password
- name: REDIS_SENTINELS
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinels
- name: REDIS_SENTINEL_MASTER_NAME
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinel-master-name
- name: KAFKA_TOP_OF_THE_QUEUE
value: "1"
volumeMounts:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,6 @@ spec:
secretKeyRef:
name: new-redis
key: redis-password
- name: REDIS_SENTINELS
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinels
- name: REDIS_SENTINEL_MASTER_NAME
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinel-master-name
- name: KAFKA_CONSUMER_GROUP
value: try-again
volumeMounts:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,6 @@ spec:
secretKeyRef:
name: new-redis
key: redis-password
- name: REDIS_SENTINELS
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinels
- name: REDIS_SENTINEL_MASTER_NAME
valueFrom:
secretKeyRef:
name: new-redis
key: redis-sentinel-master-name
- name: KAFKA_CONSUMER_GROUP
value: try-again
volumeMounts:
Expand Down
Loading
Loading