From d83c9021d6633903d910fdbe495b88bc87f067a3 Mon Sep 17 00:00:00 2001 From: Pierre Date: Sun, 15 Feb 2026 22:39:43 +0100 Subject: [PATCH] log stream improvement --- packages/meta-fuse-core/src/index.ts | 14 +++++++++++++- packages/meta-fuse-core/src/kv/RedisClient.ts | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/meta-fuse-core/src/index.ts b/packages/meta-fuse-core/src/index.ts index 284f028..1e364f1 100644 --- a/packages/meta-fuse-core/src/index.ts +++ b/packages/meta-fuse-core/src/index.ts @@ -166,9 +166,21 @@ async function main(): Promise { ); const bootstrapTime = Date.now() - bootstrapStart; - const stats = vfs.getStats(); + let stats = vfs.getStats(); logger.info(`Streaming bootstrap complete: ${stats.fileCount} files in ${bootstrapTime}ms`); + // Fallback: If stream was empty but Redis has files, bootstrap from Redis keys + // This handles the case where meta-core restarted and cleared the stream + if (stats.fileCount === 0) { + const indexCount = await redisClient.getIndexCount(); + if (indexCount > 0) { + logger.info(`Stream was empty but Redis has ${indexCount} files - bootstrapping from Redis keys...`); + await vfs.refresh(); + stats = vfs.getStats(); + logger.info(`Redis key bootstrap complete: ${stats.fileCount} files`); + } + } + // Start live stream consumer from where replay left off logger.info(`Starting live stream consumer from ${lastId}...`); redisClient.startSimpleStreamConsumer( diff --git a/packages/meta-fuse-core/src/kv/RedisClient.ts b/packages/meta-fuse-core/src/kv/RedisClient.ts index b8106fc..ec473a7 100644 --- a/packages/meta-fuse-core/src/kv/RedisClient.ts +++ b/packages/meta-fuse-core/src/kv/RedisClient.ts @@ -445,6 +445,24 @@ export class RedisClient implements Partial { } } + /** + * Get count of files in Redis index + * More efficient than getAllHashIds() when you only need the count + */ + async getIndexCount(): Promise { + if (!this.client || !this.isConnected) { + return 0; + } + + try { + const indexKey = `${this.config.prefix}file:__index__`; + return await this.client.scard(indexKey); + } catch (error) { + logger.error('Failed to get index count:', error); + return 0; + } + } + /** * Scan Redis keys matching pattern */