narupa.state.state_service module¶
Module providing an implementation of the StateServicer.
-
class
narupa.state.state_service.StateService¶ Bases:
narupa.protocol.state.state_service_pb2_grpc.StateServicerImplementation of the State service, for tracking and making changes to a shared key/value store.
-
SubscribeStateUpdates(request: narupa.protocol.state.state_service_pb2.SubscribeStateUpdatesRequest, context) → Iterable[narupa.protocol.state.state_service_pb2.StateUpdate]¶ Provides a stream of updates to a shared key/value store.
-
UpdateLocks(request: narupa.protocol.state.state_service_pb2.UpdateLocksRequest, context) → narupa.protocol.state.state_service_pb2.UpdateLocksResponse¶ Attempts to acquire and release locks on keys in the shared key/value store. If any of the locks cannot be acquired, none of them will be.
-
UpdateState(request: narupa.protocol.state.state_service_pb2.UpdateStateRequest, context) → narupa.protocol.state.state_service_pb2.UpdateStateResponse¶ Attempts an atomic update of the shared key/value store. If any key cannot be updates, no change will be made.
-
close()¶
-
copy_state() → Dict[str, Union[None, str, int, float, bool, Iterable[Union[None, str, int, float, bool, Iterable[Any], Mapping[str, Any]]], Mapping[str, Union[None, str, int, float, bool, Iterable[Any], Mapping[str, Any]]]]]¶ Return a deep copy of the current state.
-
get_change_buffer() → AbstractContextManager[narupa.utilities.change_buffers.DictionaryChangeBuffer]¶ Return a DictionaryChangeBuffer that tracks changes to this service’s state.
-
lock_state() → AbstractContextManager[Dict[str, Union[None, str, int, float, bool, Iterable[Union[None, str, int, float, bool, Iterable[Any], Mapping[str, Any]]], Mapping[str, Union[None, str, int, float, bool, Iterable[Any], Mapping[str, Any]]]]]]¶ Context manager for reading the current state while delaying any changes to it.
-
update_locks(access_token: Union[None, str, int, float, bool, Iterable[Union[None, str, int, float, bool, Iterable[Any], Mapping[str, Any]]], Mapping[str, Union[None, str, int, float, bool, Iterable[Any], Mapping[str, Any]]]], acquire: Optional[Dict[str, float]] = None, release: Optional[Set[str]] = None)¶ Attempts to acquire and release locks on keys in the shared key/value store. If any of the locks cannot be acquired, none of them will be. Requested lock releases are carried out regardless.
Raises: ResourceLockedError – if the access token cannot acquire all requested keys.
-
update_state(access_token: Union[None, str, int, float, bool, Iterable[Union[None, str, int, float, bool, Iterable[Any], Mapping[str, Any]]], Mapping[str, Union[None, str, int, float, bool, Iterable[Any], Mapping[str, Any]]]], change: narupa.utilities.change_buffers.DictionaryChange)¶ Attempts an atomic update of the shared key/value store. If any key cannot be updated, no change will be made.
Raises: - ResourceLockedError – if the access token cannot acquire all keys for updating.
- TypeError – if the update values cannot be serialized for transmission.
-
-
narupa.state.state_service.dictionary_change_to_state_update(change: narupa.utilities.change_buffers.DictionaryChange) → narupa.protocol.state.state_service_pb2.StateUpdate¶ Convert a DictionaryChange to a protobuf StateUpdate.
Parameters: change – a DictionaryChange which species key changes and key removals to make to a dictionary. Returns: an equivalent protobuf StateUpdate representing the key removals as key changes to a protobuf null value.
-
narupa.state.state_service.locks_update_to_acquire_release(update: narupa.protocol.state.state_service_pb2.UpdateLocksRequest) → Tuple[Dict[str, float], Set[str]]¶ Convert a grpc UpdateLocksRequest to a tuple of lock times and locked keys to release.
-
narupa.state.state_service.state_update_to_dictionary_change(update: narupa.protocol.state.state_service_pb2.StateUpdate) → narupa.utilities.change_buffers.DictionaryChange¶ Convert a protobuf StateUpdate to a DictionaryChange.
Parameters: update – a protobuf StateUpdate which encodes key removals as keys with a protobuf null value. Returns: an equivalent DictionaryChange representing the key changes and key removals of the StateUpdate.
-
narupa.state.state_service.validate_dict_is_serializable(dictionary)¶ Raises: TypeError – if the given dictionary cannot be converted to a protobuf struct.