From 073f2c1504aa58cb700e71da2279a9d7c0530d54 Mon Sep 17 00:00:00 2001 From: Naeel Date: Sun, 26 Apr 2026 10:59:39 +0300 Subject: [PATCH] layer1: add live namespace counts --- .../2026-04-26-namespace-manager-step48.md | 19 +++++++++++++++++++ pkg/utils/namespace_manager.go | 2 ++ pkg/utils/namespace_manager_model.go | 1 + pkg/utils/namespace_manager_test.go | 6 ++++++ 4 files changed, 28 insertions(+) create mode 100644 doc/thinking/2026-04-26-namespace-manager-step48.md diff --git a/doc/thinking/2026-04-26-namespace-manager-step48.md b/doc/thinking/2026-04-26-namespace-manager-step48.md new file mode 100644 index 00000000..11879edc --- /dev/null +++ b/doc/thinking/2026-04-26-namespace-manager-step48.md @@ -0,0 +1,19 @@ +# 2026-04-26 — NamespaceManager rewrite, step 48 + +## Цель шага + +Убрать двусмысленность в `NamespaceManagerSummary`: сейчас `TotalNamespaces` включает и removed-записи. + +## Что меняем + +1. Добавляем `LiveNamespaces`. +2. `Summary()` считает его по `Snapshot()`. +3. `LogNamespaceManagerSummary()` пишет оба значения: + - `total_namespaces` + - `live_namespaces` +4. Обновляем unit tests. + +## Что НЕ меняем + +- не меняем правила хранения removed records; +- не меняем watcher behavior. \ No newline at end of file diff --git a/pkg/utils/namespace_manager.go b/pkg/utils/namespace_manager.go index 9b5c4a66..68610e40 100644 --- a/pkg/utils/namespace_manager.go +++ b/pkg/utils/namespace_manager.go @@ -123,6 +123,7 @@ func LogNamespaceManagerSummary(logger *zap.Logger, message string, summary Name } logger.Info(message, zap.Int("total_namespaces", summary.TotalNamespaces), + zap.Int("live_namespaces", summary.LiveNamespaces), zap.Any("phase_counts", summary.PhaseCounts), zap.Any("source_counts", summary.SourceCounts), zap.Strings("subscribers", summary.Subscribers), @@ -258,6 +259,7 @@ func (m *inMemoryNamespaceManager) Summary() NamespaceManagerSummary { records := m.SnapshotRecords() summary := NamespaceManagerSummary{ TotalNamespaces: len(records), + LiveNamespaces: len(m.Snapshot()), PhaseCounts: make(map[NamespacePhase]int), SourceCounts: make(map[NamespaceSource]int), Subscribers: m.SnapshotSubscribers(), diff --git a/pkg/utils/namespace_manager_model.go b/pkg/utils/namespace_manager_model.go index 21af97f3..0e935842 100644 --- a/pkg/utils/namespace_manager_model.go +++ b/pkg/utils/namespace_manager_model.go @@ -75,6 +75,7 @@ type NamespaceEvent struct { type NamespaceManagerSummary struct { TotalNamespaces int + LiveNamespaces int PhaseCounts map[NamespacePhase]int SourceCounts map[NamespaceSource]int Subscribers []string diff --git a/pkg/utils/namespace_manager_test.go b/pkg/utils/namespace_manager_test.go index 934588f2..f00cb9a2 100644 --- a/pkg/utils/namespace_manager_test.go +++ b/pkg/utils/namespace_manager_test.go @@ -63,6 +63,9 @@ func TestNamespaceManagerSnapshotAndGet(t *testing.T) { if summary.TotalNamespaces != 2 { t.Fatalf("expected summary total namespaces to be 2, got %d", summary.TotalNamespaces) } + if summary.LiveNamespaces != 2 { + t.Fatalf("expected live namespaces to be 2, got %d", summary.LiveNamespaces) + } if summary.SourceCounts[NamespaceSourceWatcher] != 2 { t.Fatalf("expected watcher source count to be 2") } @@ -467,6 +470,9 @@ func TestNamespaceManagerSummary(t *testing.T) { if summary.TotalNamespaces != 2 { t.Fatalf("expected total namespaces 2, got %d", summary.TotalNamespaces) } + if summary.LiveNamespaces != 1 { + t.Fatalf("expected one live namespace, got %d", summary.LiveNamespaces) + } if summary.PhaseCounts[NamespacePhaseRegistering] != 1 { t.Fatalf("expected one registering namespace") }