From db3b5714fd788cb41693e3f8e215984475a8f131 Mon Sep 17 00:00:00 2001 From: mboyd1 <5233780+mboyd1@users.noreply.github.com> Date: Mon, 19 Oct 2026 19:36:43 -0500 Subject: [PATCH] fix(cmd): start blob-store age sweeper in the all-in-one binary (#267) The sweeper was wired only into cmd/block-processor, so all-in-one deployments never age-swept file:// subtree blobs. A production store grew to 5.5M files in one directory, filled ext4's htree index and failed every write with ENOSPC at 19% disk usage, stalling SEEN_ON_NETWORK. --- cmd/merkle-service/main.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cmd/merkle-service/main.go b/cmd/merkle-service/main.go index c92ccb5..38d4e4e 100644 --- a/cmd/merkle-service/main.go +++ b/cmd/merkle-service/main.go @@ -42,6 +42,14 @@ func main() { } defer func() { _ = registry.Close() }() + // Blob-store age sweeper: the all-in-one process hosts the block-processor, + // so it owns the sweep exactly as cmd/block-processor does. Without it, + // subtree blobs whose delete-at-height never fires accumulate forever in + // one flat directory until ext4's htree index fills and every write fails + // with ENOSPC regardless of free space. + stopSweeper := store.StartAgeSweeperFromConfig(registry.Blob, cfg.BlobStore, logger) + defer stopSweeper() + subtreeProducer, err := kafka.NewProducer(cfg.Kafka.Brokers, cfg.Kafka.SubtreeTopic, cfg.Kafka.TopicPartitions(), cfg.Kafka.TopicRetention(), logger) if err != nil { log.Fatal("failed to create subtree producer: ", err)