Skip to content

Commit 7d0b99a

Browse files
committed
PYCBC-1771: txcouchbase: Cleanup ObservableRequestHandler context manager creation
Changes -------- * Add `create_or_none()` static method on `ObservableRequestHandler` that will return the observability context manager if observability is enabled, otherwise will return None * Removed `if instruments.is_noop:` branches in KV operations to use new `create_or_none()` path. Change-Id: I9caaf90fb62229281d42e644bd76b0ea8af113ee Reviewed-on: https://review.couchbase.org/c/couchbase-python-client/+/245025 Reviewed-by: Dimitris Christodoulou <dimitris.christodoulou@couchbase.com> Tested-by: Build Bot <build@couchbase.com>
1 parent 0260c24 commit 7d0b99a

3 files changed

Lines changed: 70 additions & 163 deletions

File tree

couchbase/logic/observability/handler.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,16 @@ def create(op_type: OpType,
305305
return _NOOP_OBS_HANDLER_CTX
306306
return ObservableRequestHandler(op_type, observability_instruments, op_type_toggle=op_type_toggle)
307307

308+
@staticmethod
309+
def create_or_none(op_type: OpType,
310+
observability_instruments: ObservabilityInstruments,
311+
op_type_toggle: Optional[bool] = None) -> Optional[ObservableRequestHandler]:
312+
if observability_instruments.is_noop:
313+
return None
314+
handler = ObservableRequestHandler(op_type, observability_instruments, op_type_toggle=op_type_toggle)
315+
handler.__enter__()
316+
return handler
317+
308318
@staticmethod
309319
def get_query_context_components(query_context: str,
310320
is_analytics: Optional[bool] = False) -> Optional[Tuple[str, str]]:

txcouchbase/binary_collection.py

Lines changed: 12 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -46,20 +46,15 @@ def increment(
4646
**kwargs, # type: Any
4747
) -> Deferred[CounterResult]:
4848
instruments = self._impl.observability_instruments
49-
if instruments.is_noop:
50-
req = self._impl.request_builder.build_increment_request(key, None, *opts, **kwargs)
51-
d = self._impl.increment_deferred(req, None)
52-
d.addBoth(self._impl._finish_span, None)
53-
return d
54-
obs_handler = ObservableRequestHandler(KeyValueOperationType.Increment, instruments)
55-
obs_handler.__enter__()
49+
obs_handler = ObservableRequestHandler.create_or_none(KeyValueOperationType.Increment, instruments)
5650
try:
5751
req = self._impl.request_builder.build_increment_request(key, obs_handler, *opts, **kwargs)
5852
d = self._impl.increment_deferred(req, obs_handler)
5953
d.addBoth(self._impl._finish_span, obs_handler)
6054
return d
6155
except Exception as e:
62-
obs_handler.__exit__(type(e), e, e.__traceback__)
56+
if obs_handler is not None:
57+
obs_handler.__exit__(type(e), e, e.__traceback__)
6358
raise
6459

6560
def decrement(
@@ -69,20 +64,15 @@ def decrement(
6964
**kwargs, # type: Any
7065
) -> Deferred[CounterResult]:
7166
instruments = self._impl.observability_instruments
72-
if instruments.is_noop:
73-
req = self._impl.request_builder.build_decrement_request(key, None, *opts, **kwargs)
74-
d = self._impl.decrement_deferred(req, None)
75-
d.addBoth(self._impl._finish_span, None)
76-
return d
77-
obs_handler = ObservableRequestHandler(KeyValueOperationType.Decrement, instruments)
78-
obs_handler.__enter__()
67+
obs_handler = ObservableRequestHandler.create_or_none(KeyValueOperationType.Decrement, instruments)
7968
try:
8069
req = self._impl.request_builder.build_decrement_request(key, obs_handler, *opts, **kwargs)
8170
d = self._impl.decrement_deferred(req, obs_handler)
8271
d.addBoth(self._impl._finish_span, obs_handler)
8372
return d
8473
except Exception as e:
85-
obs_handler.__exit__(type(e), e, e.__traceback__)
74+
if obs_handler is not None:
75+
obs_handler.__exit__(type(e), e, e.__traceback__)
8676
raise
8777

8878
def append(
@@ -93,20 +83,15 @@ def append(
9383
**kwargs, # type: Any
9484
) -> Deferred[MutationResult]:
9585
instruments = self._impl.observability_instruments
96-
if instruments.is_noop:
97-
req = self._impl.request_builder.build_append_request(key, value, None, *opts, **kwargs)
98-
d = self._impl.append_deferred(req, None)
99-
d.addBoth(self._impl._finish_span, None)
100-
return d
101-
obs_handler = ObservableRequestHandler(KeyValueOperationType.Append, instruments)
102-
obs_handler.__enter__()
86+
obs_handler = ObservableRequestHandler.create_or_none(KeyValueOperationType.Append, instruments)
10387
try:
10488
req = self._impl.request_builder.build_append_request(key, value, obs_handler, *opts, **kwargs)
10589
d = self._impl.append_deferred(req, obs_handler)
10690
d.addBoth(self._impl._finish_span, obs_handler)
10791
return d
10892
except Exception as e:
109-
obs_handler.__exit__(type(e), e, e.__traceback__)
93+
if obs_handler is not None:
94+
obs_handler.__exit__(type(e), e, e.__traceback__)
11095
raise
11196

11297
def prepend(
@@ -117,18 +102,13 @@ def prepend(
117102
**kwargs, # type: Any
118103
) -> Deferred[MutationResult]:
119104
instruments = self._impl.observability_instruments
120-
if instruments.is_noop:
121-
req = self._impl.request_builder.build_prepend_request(key, value, None, *opts, **kwargs)
122-
d = self._impl.prepend_deferred(req, None)
123-
d.addBoth(self._impl._finish_span, None)
124-
return d
125-
obs_handler = ObservableRequestHandler(KeyValueOperationType.Prepend, instruments)
126-
obs_handler.__enter__()
105+
obs_handler = ObservableRequestHandler.create_or_none(KeyValueOperationType.Prepend, instruments)
127106
try:
128107
req = self._impl.request_builder.build_prepend_request(key, value, obs_handler, *opts, **kwargs)
129108
d = self._impl.prepend_deferred(req, obs_handler)
130109
d.addBoth(self._impl._finish_span, obs_handler)
131110
return d
132111
except Exception as e:
133-
obs_handler.__exit__(type(e), e, e.__traceback__)
112+
if obs_handler is not None:
113+
obs_handler.__exit__(type(e), e, e.__traceback__)
134114
raise

0 commit comments

Comments
 (0)