diff --git a/package.json b/package.json index 37159dbf..0889c0a7 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "fastq": "^1.15.0", "fs-extra": "^11.2.0", "graphql": "^16.8.1", + "ioredis": "^5.4.2", "json-canonicalize": "^1.0.6", "lmdb": "^2.9.2", "middleware-async": "^1.3.5", @@ -40,7 +41,6 @@ "prom-client": "^14.0.1", "ramda": "^0.28.0", "range-parser": "^1.2.1", - "redis": "^4.6.10", "retry-axios": "^3.1.3", "rfc4648": "^1.5.2", "sql-bricks": "^3.0.0", diff --git a/src/init/header-stores.ts b/src/init/header-stores.ts index 52468a17..dfc90d2e 100644 --- a/src/init/header-stores.ts +++ b/src/init/header-stores.ts @@ -34,14 +34,12 @@ const createKvBufferStore = ({ log, redisUrl = config.REDIS_CACHE_URL, redisTtlSeconds = config.REDIS_CACHE_TTL_SECONDS, - useTls = config.REDIS_USE_TLS, }: { pathKey: string; type: string; log: winston.Logger; redisUrl?: string; redisTtlSeconds?: number; - useTls?: boolean; }): KVBufferStore => { log.info(`Using ${type} for KVBufferStore for ${pathKey}`); switch (type) { @@ -54,7 +52,6 @@ const createKvBufferStore = ({ return new RedisKvStore({ redisUrl, ttlSeconds: redisTtlSeconds, - useTls, log, }); } diff --git a/src/init/resolvers.ts b/src/init/resolvers.ts index d5f7e885..34b7e728 100644 --- a/src/init/resolvers.ts +++ b/src/init/resolvers.ts @@ -37,14 +37,12 @@ export const createArNSKvStore = ({ log, type, redisUrl, - useTls, ttlSeconds, maxKeys, }: { type: 'redis' | 'node' | string; log: Logger; redisUrl: string; - useTls: boolean; ttlSeconds: number; maxKeys: number; }): KVBufferStore => { @@ -59,7 +57,6 @@ export const createArNSKvStore = ({ log, redisUrl, ttlSeconds, - useTls, }); } return new NodeKvStore({ ttlSeconds, maxKeys }); diff --git a/src/store/redis-kv-store.ts b/src/store/redis-kv-store.ts index c3772837..95d353b4 100644 --- a/src/store/redis-kv-store.ts +++ b/src/store/redis-kv-store.ts @@ -15,36 +15,29 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ -import { RedisClientType, commandOptions, createClient } from 'redis'; + +import { Redis } from 'ioredis'; import winston from 'winston'; import * as metrics from '../metrics.js'; import { KVBufferStore } from '../types.js'; export class RedisKvStore implements KVBufferStore { - private client: RedisClientType; + private client: Redis; private log: winston.Logger; private ttlSeconds: number; constructor({ log, redisUrl, - useTls, ttlSeconds, }: { log: winston.Logger; redisUrl: string; - useTls: boolean; ttlSeconds: number; }) { this.log = log.child({ class: this.constructor.name }); this.ttlSeconds = ttlSeconds; - this.client = createClient({ - url: redisUrl, - socket: { - tls: useTls, - connectTimeout: 10000, - }, - }); + this.client = new Redis(redisUrl); this.client.on('error', (error: any) => { this.log.error(`Redis error`, { message: error.message, @@ -53,21 +46,10 @@ export class RedisKvStore implements KVBufferStore { }); metrics.redisErrorCounter.inc(); }); - this.client.connect().catch((error: any) => { - this.log.error(`Redis connection error`, { - message: error.message, - stack: error.stack, - url: redisUrl, - }); - metrics.redisConnectionErrorsCounter.inc(); - }); } async get(key: string): Promise { - const value = await this.client.get( - commandOptions({ returnBuffers: true }), - key, - ); + const value = await this.client.getBuffer(key); return value ?? undefined; } @@ -83,9 +65,7 @@ export class RedisKvStore implements KVBufferStore { async set(key: string, buffer: Buffer): Promise { // set the key with a TTL for every key - await this.client.set(key, buffer, { - EX: this.ttlSeconds, - }); + await this.client.set(key, buffer, 'EX', this.ttlSeconds); } async close(): Promise { diff --git a/src/system.ts b/src/system.ts index 058a8a6e..1f1c1cf1 100644 --- a/src/system.ts +++ b/src/system.ts @@ -606,7 +606,6 @@ export const arnsResolutionCache = new KvArNSResolutionStore({ redisUrl: config.REDIS_CACHE_URL, ttlSeconds: config.ARNS_CACHE_TTL_SECONDS, maxKeys: config.ARNS_CACHE_MAX_KEYS, - useTls: config.REDIS_USE_TLS, }), }); @@ -618,7 +617,6 @@ export const arnsRegistryCache = new KvArNSRegistryStore({ redisUrl: config.REDIS_CACHE_URL, ttlSeconds: config.ARNS_CACHE_TTL_SECONDS, maxKeys: config.ARNS_CACHE_MAX_KEYS, - useTls: config.REDIS_USE_TLS, }), }); diff --git a/yarn.lock b/yarn.lock index 5e5cb78d..f86c080d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1359,6 +1359,11 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== +"@ioredis/commands@^1.1.1": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" + integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== + "@irys/arweave@^0.0.2": version "0.0.2" resolved "https://registry.yarnpkg.com/@irys/arweave/-/arweave-0.0.2.tgz#c0e73eb8c15e323342d33ea92701d4036fd22ae3" @@ -1748,40 +1753,6 @@ dependencies: "@randlabs/communication-bridge" "1.0.1" -"@redis/bloom@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@redis/bloom/-/bloom-1.2.0.tgz#d3fd6d3c0af3ef92f26767b56414a370c7b63b71" - integrity sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg== - -"@redis/client@1.5.17": - version "1.5.17" - resolved "https://registry.yarnpkg.com/@redis/client/-/client-1.5.17.tgz#44d179f2b5b542754d6f218bb352bac3ccf150eb" - integrity sha512-IPvU9A31qRCZ7lds/x+ksuK/UMndd0EASveAvCvEtFFKIZjZ+m/a4a0L7S28KEWoR5ka8526hlSghDo4Hrc2Hg== - dependencies: - cluster-key-slot "1.1.2" - generic-pool "3.9.0" - yallist "4.0.0" - -"@redis/graph@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@redis/graph/-/graph-1.1.1.tgz#8c10df2df7f7d02741866751764031a957a170ea" - integrity sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw== - -"@redis/json@1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@redis/json/-/json-1.0.6.tgz#b7a7725bbb907765d84c99d55eac3fcf772e180e" - integrity sha512-rcZO3bfQbm2zPRpqo82XbW8zg4G/w4W3tI7X8Mqleq9goQjAGLL7q/1n1ZX4dXEAmORVZ4s1+uKLaUOg7LrUhw== - -"@redis/search@1.1.6": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@redis/search/-/search-1.1.6.tgz#33bcdd791d9ed88ab6910243a355d85a7fedf756" - integrity sha512-mZXCxbTYKBQ3M2lZnEddwEAks0Kc7nauire8q20oA0oA/LoA+E/b5Y5KZn232ztPb1FkIGqo12vh3Lf+Vw5iTw== - -"@redis/time-series@1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@redis/time-series/-/time-series-1.0.5.tgz#a6d70ef7a0e71e083ea09b967df0a0ed742bc6ad" - integrity sha512-IFjIgTusQym2B5IZJG3XKr5llka7ey84fw/NOYqESP5WUfQs9zz1ww/9+qoz4ka/S6KcGBodzlCeZ5UImKbscg== - "@rushstack/node-core-library@5.4.1": version "5.4.1" resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-5.4.1.tgz#3d7fe919a2ca0e84fd1410a3700f6a2e49950d20" @@ -3849,7 +3820,7 @@ clone@2.x: resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== -cluster-key-slot@1.1.2: +cluster-key-slot@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== @@ -4169,6 +4140,11 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== +denque@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" + integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== + depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -4922,11 +4898,6 @@ gc-stats@1.4.1, gc-stats@^1.4.0: nan "^2.18.0" node-gyp-build "^4.8.0" -generic-pool@3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.9.0.tgz#36f4a678e963f4fdb8707eab050823abc4e8f5e4" - integrity sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g== - get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -5339,6 +5310,21 @@ int64-buffer@^0.1.9: resolved "https://registry.yarnpkg.com/int64-buffer/-/int64-buffer-0.1.10.tgz#277b228a87d95ad777d07c13832022406a473423" integrity sha512-v7cSY1J8ydZ0GyjUHqF+1bshJ6cnEVLo9EnjB8p+4HDRPZc9N5jjmvUV7NvEsqQOKyH0pmIBFWXVQbiS0+OBbA== +ioredis@^5.4.2: + version "5.4.2" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.4.2.tgz#ebb6f1a10b825b2c0fb114763d7e82114a0bee6c" + integrity sha512-0SZXGNGZ+WzISQ67QDyZ2x0+wVxjjUndtD8oSeik/4ajifeiRufed8fCb8QW8VMyi4MXcS+UO1k/0NGhvq1PAg== + dependencies: + "@ioredis/commands" "^1.1.1" + cluster-key-slot "^1.1.0" + debug "^4.3.4" + denque "^2.1.0" + lodash.defaults "^4.2.0" + lodash.isarguments "^3.1.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + standard-as-callback "^2.1.0" + ip-address@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" @@ -5758,6 +5744,11 @@ lodash.get@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== +lodash.isarguments@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== + lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" @@ -7080,17 +7071,17 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -redis@^4.6.10: - version "4.6.15" - resolved "https://registry.yarnpkg.com/redis/-/redis-4.6.15.tgz#b94599fbbd8279182b02f5bb34866c2a1556d71c" - integrity sha512-2NtuOpMW3tnYzBw6S8mbXSX7RPzvVFCA2wFJq9oErushO2UeBkxObk+uvo7gv7n0rhWeOj/IzrHO8TjcFlRSOg== +redis-errors@^1.0.0, redis-errors@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" + integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== + +redis-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== dependencies: - "@redis/bloom" "1.2.0" - "@redis/client" "1.5.17" - "@redis/graph" "1.1.1" - "@redis/json" "1.0.6" - "@redis/search" "1.1.6" - "@redis/time-series" "1.0.5" + redis-errors "^1.0.0" regexp-tree@^0.1.27: version "0.1.27" @@ -7557,6 +7548,11 @@ stack-trace@0.0.x: resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== +standard-as-callback@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" + integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== + statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" @@ -8409,7 +8405,7 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@4.0.0, yallist@^4.0.0: +yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==