Skip to content

Commit 8da14ae

Browse files
authored
[HiCache] fix: StorageMetricsCollector was initialized twice (sgl-project#18354)
1 parent d94d0af commit 8da14ae

File tree

1 file changed

+20
-17
lines changed

1 file changed

+20
-17
lines changed

python/sglang/srt/mem_cache/hiradix_cache.py

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,14 @@ def _apply_storage_runtime_config(
195195
self.page_size / 1024 * prefetch_timeout_per_ki_token
196196
)
197197

198-
storage_metrics_collector = None
199-
if enable_storage_metrics:
198+
self.enable_storage = enable_storage
199+
self.prefetch_threshold = prefetch_threshold
200+
self.prefetch_timeout_base = prefetch_timeout_base
201+
self.prefetch_timeout_per_page = prefetch_timeout_per_page
202+
self.hicache_storage_pass_prefix_keys = hicache_storage_pass_prefix_keys
203+
self.enable_storage_metrics = enable_storage_metrics
204+
205+
if self.enable_storage_metrics:
200206
labels = {
201207
"storage_backend": storage_backend,
202208
"tp_rank": self.cache_controller.tp_rank,
@@ -206,19 +212,18 @@ def _apply_storage_runtime_config(
206212
}
207213
if extra_metric_labels:
208214
labels.update(extra_metric_labels)
209-
self.storage_metrics_collector = StorageMetricsCollector(labels=labels)
210-
storage_metrics_collector = StorageMetricsCollector(labels=labels)
211-
212-
self.enable_storage = enable_storage
213-
self.prefetch_threshold = prefetch_threshold
214-
self.prefetch_timeout_base = prefetch_timeout_base
215-
self.prefetch_timeout_per_page = prefetch_timeout_per_page
216-
self.hicache_storage_pass_prefix_keys = hicache_storage_pass_prefix_keys
217-
self.enable_storage_metrics = enable_storage_metrics
218-
if self.enable_storage_metrics:
219-
self.storage_metrics_collector = storage_metrics_collector
220-
else:
221-
self.storage_metrics_collector = None
215+
existing_collector = getattr(self, "storage_metrics_collector", None)
216+
if existing_collector is None:
217+
self.storage_metrics_collector = StorageMetricsCollector(labels=labels)
218+
elif set(existing_collector.labels.keys()) == set(labels.keys()):
219+
existing_collector.labels = labels
220+
else:
221+
logger.warning(
222+
"Storage metrics labels changed (%s -> %s). Keep existing labels to "
223+
"avoid duplicate metric registration.",
224+
sorted(existing_collector.labels.keys()),
225+
sorted(labels.keys()),
226+
)
222227

223228
def attach_storage_backend(
224229
self,
@@ -366,8 +371,6 @@ def detach_storage_backend(self) -> tuple[bool, str]:
366371

367372
self.enable_storage = False
368373
self.enable_storage_metrics = False
369-
if hasattr(self, "storage_metrics_collector"):
370-
self.storage_metrics_collector = None
371374
return True, "Detached HiCache storage backend successfully."
372375

373376
def _force_release_pending_storage_ops(self):

0 commit comments

Comments
 (0)