def update_persistent_subscription(
stub: persistent_pb2_grpc.PersistentSubscriptionsStub,
group_name: str | None,
stream: str | None = None,
resolve_link_to_s: Optional[bool] = None,
from_revision: Optional[Union[int, str]] = None,
commit_position: Optional[int] = None,
prepare_position: Optional[int] = None,
extra_statistics: Optional[bool] = None,
message_timeout_ms: Optional[int] = None,
checkpoint_after_ms: Optional[int] = None,
max_retry_count: Optional[int] = None,
min_checkpoint_count: Optional[int] = None,
max_checkpoint_count: Optional[int] = None,
max_subscriber_count: Optional[int] = None,
live_buffer_size: Optional[int] = None,
history_buffer_size: Optional[int] = None,
read_batch_size: Optional[int] = None,
named_consumer_strategy: Optional[str] = None,
**kwargs,
) -> persistent_pb2.UpdateResp:
"""Updates a persistent subscription."""
if history_buffer_size is None:
# TODO: talk with EventStoreDB about this behavior?
log.warning(
f"If you don't send `history_buffer_size` EventStoreDB will hang indefinitely: forcing it to its default value -> 500"
)
history_buffer_size = 500
settings = _build_settings(
resolve_link_to_s=resolve_link_to_s,
extra_statistics=extra_statistics,
message_timeout_ms=message_timeout_ms,
checkpoint_after_ms=checkpoint_after_ms,
max_retry_count=max_retry_count,
min_checkpoint_count=min_checkpoint_count,
max_checkpoint_count=max_checkpoint_count,
max_subscriber_count=max_subscriber_count,
live_buffer_size=live_buffer_size,
history_buffer_size=history_buffer_size,
read_batch_size=read_batch_size,
named_consumer_strategy=named_consumer_strategy,
)
options = persistent_pb2.UpdateReq.Options(settings=settings, group_name=group_name)
if stream is None: # $all
options.all.CopyFrom(
_build_options_all(
commit_position=commit_position,
prepare_position=prepare_position,
from_revision=from_revision,
)
)
else:
options.stream.CopyFrom(
_build_options_stream(stream=stream, from_revision=from_revision)
)
request = persistent_pb2.UpdateReq(options=options)
response = stub.Update(request, **kwargs)
return response