damccorm commented on code in PR #41271:
URL: https://github.com/apache/beam/pull/41271#discussion_r4560576457
##########
sdks/python/apache_beam/metrics/metricbase.py:
##########
@@ -82,9 +82,12 @@ def __init__(
self.name = name
self.urn = urn
self.labels = labels if labels else {}
+ self._cached_fast_name: Optional[str] = None
+ self._cached_hash: Optional[int] = None
+ self._typed_metric_names: dict = {}
Review Comment:
Fixed in 5cd4e050750: removed `self._typed_metric_names = {}` from
`MetricName.__init__` and `__setstate__` (it is lazily initialized in #41275).
##########
sdks/python/apache_beam/metrics/metricbase.py:
##########
@@ -97,17 +100,33 @@ def __str__(self):
self.namespace, self.name)
def __hash__(self):
- return hash((self.namespace, self.name, self.urn) +
- tuple(self.labels.items()))
+ if self._cached_hash is None:
+ self._cached_hash = hash(
+ (self.namespace, self.name, self.urn) +
+ tuple(self.labels.items())) if self.labels else hash(
+ (self.namespace, self.name, self.urn))
+ return self._cached_hash
def fast_name(self):
- name = self.name or ''
- namespace = self.namespace or ''
- urn = self.urn or ''
- labels = ''
- if self.labels:
- labels = '_'.join(['%s=%s' % (k, v) for (k, v) in self.labels.items()])
- return '%d_%s%s%s%s' % (len(name), name, namespace, urn, labels)
+ if self._cached_fast_name is None:
+ name = self.name or ''
+ namespace = self.namespace or ''
+ urn = self.urn or ''
+ labels = ''
+ if self.labels:
+ labels = '_'.join(['%s=%s' % (k, v) for (k, v) in self.labels.items()])
+ self._cached_fast_name = '%d_%s%s%s%s' % (
+ len(name), name, namespace, urn, labels)
+ return self._cached_fast_name
+
+ def __getstate__(self):
+ return (self.namespace, self.name, self.urn, self.labels)
+
+ def __setstate__(self, state):
+ self.namespace, self.name, self.urn, self.labels = state
Review Comment:
Fixed in 5cd4e050750: added `isinstance(state, dict)` handling in
`MetricName.__setstate__` and added
`NameTest.test_metric_name_pickle_and_legacy_dict_state`.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]