serverish 2.2.0__tar.gz → 2.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. {serverish-2.2.0 → serverish-2.2.1}/PKG-INFO +1 -1
  2. {serverish-2.2.0 → serverish-2.2.1}/pyproject.toml +1 -1
  3. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/messenger.py +8 -1
  4. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_publisher.py +5 -1
  5. {serverish-2.2.0 → serverish-2.2.1}/LICENSE +0 -0
  6. {serverish-2.2.0 → serverish-2.2.1}/README.md +0 -0
  7. {serverish-2.2.0 → serverish-2.2.1}/serverish/__init__.py +0 -0
  8. {serverish-2.2.0 → serverish-2.2.1}/serverish/base/__init__.py +0 -0
  9. {serverish-2.2.0 → serverish-2.2.1}/serverish/base/asyncio_util_functions.py +0 -0
  10. {serverish-2.2.0 → serverish-2.2.1}/serverish/base/collector.py +0 -0
  11. {serverish-2.2.0 → serverish-2.2.1}/serverish/base/datetime.py +0 -0
  12. {serverish-2.2.0 → serverish-2.2.1}/serverish/base/exceptions.py +0 -0
  13. {serverish-2.2.0 → serverish-2.2.1}/serverish/base/fifoset.py +0 -0
  14. {serverish-2.2.0 → serverish-2.2.1}/serverish/base/hasstatuses.py +0 -0
  15. {serverish-2.2.0 → serverish-2.2.1}/serverish/base/idmanger.py +0 -0
  16. {serverish-2.2.0 → serverish-2.2.1}/serverish/base/iterators.py +0 -0
  17. {serverish-2.2.0 → serverish-2.2.1}/serverish/base/manageable.py +0 -0
  18. {serverish-2.2.0 → serverish-2.2.1}/serverish/base/singleton.py +0 -0
  19. {serverish-2.2.0 → serverish-2.2.1}/serverish/base/status.py +0 -0
  20. {serverish-2.2.0 → serverish-2.2.1}/serverish/base/task_manager.py +0 -0
  21. {serverish-2.2.0 → serverish-2.2.1}/serverish/connection/__init__.py +0 -0
  22. {serverish-2.2.0 → serverish-2.2.1}/serverish/connection/connection.py +0 -0
  23. {serverish-2.2.0 → serverish-2.2.1}/serverish/connection/connection_jets.py +0 -0
  24. {serverish-2.2.0 → serverish-2.2.1}/serverish/connection/connection_nats.py +0 -0
  25. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/__init__.py +0 -0
  26. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/live_document.py +0 -0
  27. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/logging.py +0 -0
  28. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_callback_sub.py +0 -0
  29. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_cmd_pub.py +0 -0
  30. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_cmd_sub.py +0 -0
  31. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_core_pub.py +0 -0
  32. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_core_read.py +0 -0
  33. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_core_sub.py +0 -0
  34. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_document_read.py +0 -0
  35. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_journal_pub.py +0 -0
  36. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_journal_read.py +0 -0
  37. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_kv.py +0 -0
  38. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_kv_read.py +0 -0
  39. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_kv_store.py +0 -0
  40. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_kv_sub.py +0 -0
  41. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_progress_pub.py +0 -0
  42. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_progress_read.py +0 -0
  43. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_reader.py +0 -0
  44. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_rpc_req.py +0 -0
  45. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_rpc_resp.py +0 -0
  46. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_single_pub.py +0 -0
  47. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msg_single_read.py +0 -0
  48. {serverish-2.2.0 → serverish-2.2.1}/serverish/messenger/msgvalidator.py +0 -0
  49. {serverish-2.2.0 → serverish-2.2.1}/serverish/monitoring/__init__.py +0 -0
  50. {serverish-2.2.0 → serverish-2.2.1}/serverish/monitoring/bridge.py +0 -0
  51. {serverish-2.2.0 → serverish-2.2.1}/serverish/monitoring/factory.py +0 -0
  52. {serverish-2.2.0 → serverish-2.2.1}/serverish/monitoring/monitored.py +0 -0
  53. {serverish-2.2.0 → serverish-2.2.1}/serverish/monitoring/monitored_nats.py +0 -0
  54. {serverish-2.2.0 → serverish-2.2.1}/serverish/schema/config.schema.json +0 -0
  55. {serverish-2.2.0 → serverish-2.2.1}/serverish/schema/default.schema.json +0 -0
  56. {serverish-2.2.0 → serverish-2.2.1}/serverish/schema/include/timestamp.schema.json +0 -0
  57. {serverish-2.2.0 → serverish-2.2.1}/serverish/schema/journal.schema.json +0 -0
  58. {serverish-2.2.0 → serverish-2.2.1}/serverish/schema/meta.schema.json +0 -0
  59. {serverish-2.2.0 → serverish-2.2.1}/serverish/schema/program_current_state.schema.json +0 -0
  60. {serverish-2.2.0 → serverish-2.2.1}/serverish/schema/program_state.schema.json +0 -0
  61. {serverish-2.2.0 → serverish-2.2.1}/serverish/schema/progress.schema.json +0 -0
  62. {serverish-2.2.0 → serverish-2.2.1}/serverish/schema/telemetry.schema.json +0 -0
  63. {serverish-2.2.0 → serverish-2.2.1}/serverish/services/TODO.txt +0 -0
  64. {serverish-2.2.0 → serverish-2.2.1}/serverish/slog.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: serverish
3
- Version: 2.2.0
3
+ Version: 2.2.1
4
4
  Summary: helpers for server alike projects
5
5
  License-File: LICENSE
6
6
  Author: Mikołaj Kałuszyński
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "serverish"
3
- version = "2.2.0"
3
+ version = "2.2.1"
4
4
  description = "helpers for server alike projects"
5
5
  authors = ["Mikołaj Kałuszyński", "MMME team"]
6
6
  readme = "README.md"
@@ -24,7 +24,7 @@ from nats.aio.msg import Msg
24
24
  from serverish.base import dt_utcnow_array, dt_from_array, Task, create_task, dt_ensure_array
25
25
  from serverish.base.collector import Collector
26
26
  from serverish.connection.connection_jets import ConnectionJetStream
27
- from serverish.base.idmanger import gen_id
27
+ from serverish.base.idmanger import gen_id, gen_uid
28
28
  from serverish.base.manageable import Manageable
29
29
  from serverish.messenger.msgvalidator import MsgValidator
30
30
  from serverish.base.singleton import Singleton
@@ -51,6 +51,13 @@ class Messenger(Singleton):
51
51
  def __init__(self, name: str = None, parent: Collector = None, **kwargs) -> None:
52
52
  self.validator = MsgValidator()
53
53
  self.opener_task: Task | None = None
54
+ # Random per-process token, part of the Nats-Msg-Id dedup header.
55
+ # meta.id (gen_id) is only process-locally unique - two processes (or one
56
+ # process restarted within the stream's duplicate window) both emit
57
+ # 'msg-1', 'msg-2', ..., and JetStream would silently drop the later
58
+ # publishes as duplicates. The instance prefix makes the dedup identity
59
+ # global while retries still reuse the exact same header.
60
+ self.instance_id: str = gen_uid('mi', 12)
54
61
  super().__init__(name, parent, **kwargs)
55
62
 
56
63
  @property
@@ -75,7 +75,11 @@ class MsgPublisher(MsgDriver):
75
75
  raise e
76
76
  self.messenger.log_msg_trace(msg['data'], msg['meta'], f"PUB to {self.subject}")
77
77
  headers = dict(kwargs.pop('headers', None) or {})
78
- headers.setdefault('Nats-Msg-Id', msg['meta']['id']) # server-side dedup, makes ack-timeout retries safe
78
+ # Server-side dedup id: makes ack-timeout retries safe. Must be globally
79
+ # unique, hence the per-process instance prefix - meta.id alone is only
80
+ # process-locally unique and would collide across processes/restarts,
81
+ # silently dropping messages within the stream's duplicate window.
82
+ headers.setdefault('Nats-Msg-Id', f"{self.messenger.instance_id}:{msg['meta']['id']}")
79
83
  try:
80
84
  await self._publish_with_ack_retries(bdata, headers, msg['meta']['id'], **kwargs)
81
85
  # Track successful publish
File without changes
File without changes
File without changes