mirror of
https://github.com/OpenHands/OpenHands.git
synced 2026-03-22 13:47:19 +08:00
(Hotfix): ConversationStats metrics loss for unregistered services (#10676)
Co-authored-by: openhands <openhands@all-hands.dev>
This commit is contained in:
@@ -36,7 +36,30 @@ class ConversationStats:
|
||||
return
|
||||
|
||||
with self._save_lock:
|
||||
pickled = pickle.dumps(self.service_to_metrics)
|
||||
# Check for duplicate service IDs between restored and service metrics
|
||||
duplicate_services = set(self.restored_metrics.keys()) & set(
|
||||
self.service_to_metrics.keys()
|
||||
)
|
||||
if duplicate_services:
|
||||
logger.error(
|
||||
f'Duplicate service IDs found between restored and service metrics: {duplicate_services}. '
|
||||
'This should not happen as registered services should be removed from restored_metrics. '
|
||||
'Proceeding by preferring service_to_metrics values for duplicates.',
|
||||
extra={
|
||||
'conversation_id': self.conversation_id,
|
||||
'duplicate_services': list(duplicate_services),
|
||||
},
|
||||
)
|
||||
|
||||
# Combine both restored metrics and service metrics to avoid data loss
|
||||
# Start with restored metrics (for services not yet registered)
|
||||
combined_metrics = self.restored_metrics.copy()
|
||||
|
||||
# Add service metrics (for registered services)
|
||||
# Since we checked for duplicates above, this is safe
|
||||
combined_metrics.update(self.service_to_metrics)
|
||||
|
||||
pickled = pickle.dumps(combined_metrics)
|
||||
serialized_metrics = base64.b64encode(pickled).decode('utf-8')
|
||||
self.file_store.write(self.metrics_path, serialized_metrics)
|
||||
logger.info(
|
||||
|
||||
Reference in New Issue
Block a user