coordinode 3.0.0__tar.gz → 4.0.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 (94) hide show
  1. {coordinode-3.0.0 → coordinode-4.0.1}/.gitignore +0 -6
  2. {coordinode-3.0.0 → coordinode-4.0.1}/PKG-INFO +15 -4
  3. {coordinode-3.0.0 → coordinode-4.0.1}/README.md +11 -0
  4. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/__init__.py +7 -3
  5. coordinode-4.0.1/coordinode/_proto/coordinode/internode/handshake_pb2.py +38 -0
  6. coordinode-4.0.1/coordinode/_proto/coordinode/internode/handshake_pb2.pyi +11 -0
  7. coordinode-4.0.1/coordinode/_proto/coordinode/internode/handshake_pb2_grpc.py +132 -0
  8. coordinode-4.0.1/coordinode/_proto/coordinode/v1/admin/cluster_pb2.py +77 -0
  9. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/admin/cluster_pb2.pyi +12 -6
  10. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/admin/cluster_pb2_grpc.py +14 -13
  11. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/common/pagination_pb2_grpc.py +1 -1
  12. coordinode-4.0.1/coordinode/_proto/coordinode/v1/common/types_pb2.py +58 -0
  13. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/common/types_pb2.pyi +7 -9
  14. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/common/types_pb2_grpc.py +1 -1
  15. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/graph/blob_pb2_grpc.py +1 -1
  16. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/graph/graph_pb2_grpc.py +1 -1
  17. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/health/health_pb2_grpc.py +1 -1
  18. coordinode-4.0.1/coordinode/_proto/coordinode/v1/query/cypher_pb2.py +89 -0
  19. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/query/cypher_pb2.pyi +12 -4
  20. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/query/cypher_pb2_grpc.py +1 -1
  21. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/query/text_pb2_grpc.py +1 -1
  22. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/query/vector_pb2_grpc.py +1 -1
  23. coordinode-4.0.1/coordinode/_proto/coordinode/v1/replication/cdc_pb2.py +62 -0
  24. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/replication/cdc_pb2.pyi +56 -2
  25. coordinode-4.0.1/coordinode/_proto/coordinode/v1/replication/cdc_pb2_grpc.py +243 -0
  26. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/replication/consistency_pb2.py +5 -3
  27. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/replication/consistency_pb2.pyi +11 -0
  28. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/replication/consistency_pb2_grpc.py +1 -1
  29. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/replication/raft_pb2.py +6 -6
  30. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/replication/raft_pb2.pyi +4 -2
  31. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/replication/raft_pb2_grpc.py +51 -1
  32. coordinode-4.0.1/coordinode/_proto/coordinode/v1/replication/transfer_pb2.py +52 -0
  33. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/replication/transfer_pb2.pyi +4 -2
  34. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/replication/transfer_pb2_grpc.py +1 -1
  35. coordinode-4.0.1/coordinode/_proto/coordinode/v1/session/session_pb2.py +91 -0
  36. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/session/session_pb2.pyi +92 -10
  37. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/session/session_pb2_grpc.py +16 -10
  38. coordinode-4.0.1/coordinode/_proto/coordinode/v2/graph/__init__.py +0 -0
  39. coordinode-4.0.1/coordinode/_proto/coordinode/v2/graph/schema_pb2.py +167 -0
  40. coordinode-4.0.1/coordinode/_proto/coordinode/v2/graph/schema_pb2.pyi +538 -0
  41. coordinode-4.0.1/coordinode/_proto/coordinode/v2/graph/schema_pb2_grpc.py +825 -0
  42. coordinode-4.0.1/coordinode/_proto/google/__init__.py +0 -0
  43. coordinode-4.0.1/coordinode/_proto/google/api/__init__.py +0 -0
  44. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/google/api/annotations_pb2_grpc.py +1 -1
  45. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/google/api/http_pb2_grpc.py +1 -1
  46. coordinode-4.0.1/coordinode/_proto/google/rpc/__init__.py +0 -0
  47. coordinode-4.0.1/coordinode/_proto/google/rpc/status_pb2.py +38 -0
  48. coordinode-4.0.1/coordinode/_proto/google/rpc/status_pb2.pyi +18 -0
  49. coordinode-4.0.1/coordinode/_proto/google/rpc/status_pb2_grpc.py +24 -0
  50. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_types.py +42 -6
  51. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_version.py +2 -2
  52. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/client.py +395 -117
  53. {coordinode-3.0.0 → coordinode-4.0.1}/pyproject.toml +5 -4
  54. coordinode-3.0.0/coordinode/_proto/coordinode/v1/admin/cluster_pb2.py +0 -77
  55. coordinode-3.0.0/coordinode/_proto/coordinode/v1/common/types_pb2.py +0 -58
  56. coordinode-3.0.0/coordinode/_proto/coordinode/v1/graph/schema_pb2.py +0 -75
  57. coordinode-3.0.0/coordinode/_proto/coordinode/v1/graph/schema_pb2.pyi +0 -181
  58. coordinode-3.0.0/coordinode/_proto/coordinode/v1/graph/schema_pb2_grpc.py +0 -233
  59. coordinode-3.0.0/coordinode/_proto/coordinode/v1/query/cypher_pb2.py +0 -89
  60. coordinode-3.0.0/coordinode/_proto/coordinode/v1/replication/cdc_pb2.py +0 -48
  61. coordinode-3.0.0/coordinode/_proto/coordinode/v1/replication/cdc_pb2_grpc.py +0 -127
  62. coordinode-3.0.0/coordinode/_proto/coordinode/v1/replication/transfer_pb2.py +0 -52
  63. coordinode-3.0.0/coordinode/_proto/coordinode/v1/session/session_pb2.py +0 -75
  64. {coordinode-3.0.0 → coordinode-4.0.1}/LICENSE +0 -0
  65. {coordinode-3.0.0 → coordinode-4.0.1}/NOTICE +0 -0
  66. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/__init__.py +0 -0
  67. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/__init__.py +0 -0
  68. {coordinode-3.0.0/coordinode/_proto/coordinode/v1 → coordinode-4.0.1/coordinode/_proto/coordinode/internode}/__init__.py +0 -0
  69. {coordinode-3.0.0/coordinode/_proto/coordinode/v1/admin → coordinode-4.0.1/coordinode/_proto/coordinode/v1}/__init__.py +0 -0
  70. {coordinode-3.0.0/coordinode/_proto/coordinode/v1/common → coordinode-4.0.1/coordinode/_proto/coordinode/v1/admin}/__init__.py +0 -0
  71. {coordinode-3.0.0/coordinode/_proto/coordinode/v1/graph → coordinode-4.0.1/coordinode/_proto/coordinode/v1/common}/__init__.py +0 -0
  72. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/common/pagination_pb2.py +0 -0
  73. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/common/pagination_pb2.pyi +0 -0
  74. {coordinode-3.0.0/coordinode/_proto/coordinode/v1/health → coordinode-4.0.1/coordinode/_proto/coordinode/v1/graph}/__init__.py +0 -0
  75. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/graph/blob_pb2.py +0 -0
  76. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/graph/blob_pb2.pyi +0 -0
  77. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/graph/graph_pb2.py +0 -0
  78. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/graph/graph_pb2.pyi +0 -0
  79. {coordinode-3.0.0/coordinode/_proto/coordinode/v1/query → coordinode-4.0.1/coordinode/_proto/coordinode/v1/health}/__init__.py +0 -0
  80. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/health/health_pb2.py +0 -0
  81. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/health/health_pb2.pyi +0 -0
  82. {coordinode-3.0.0/coordinode/_proto/coordinode/v1/replication → coordinode-4.0.1/coordinode/_proto/coordinode/v1/query}/__init__.py +0 -0
  83. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/query/text_pb2.py +0 -0
  84. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/query/text_pb2.pyi +0 -0
  85. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/query/vector_pb2.py +0 -0
  86. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/coordinode/v1/query/vector_pb2.pyi +0 -0
  87. {coordinode-3.0.0/coordinode/_proto/coordinode/v1/session → coordinode-4.0.1/coordinode/_proto/coordinode/v1/replication}/__init__.py +0 -0
  88. {coordinode-3.0.0/coordinode/_proto/google → coordinode-4.0.1/coordinode/_proto/coordinode/v1/session}/__init__.py +0 -0
  89. {coordinode-3.0.0/coordinode/_proto/google/api → coordinode-4.0.1/coordinode/_proto/coordinode/v2}/__init__.py +0 -0
  90. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/google/api/annotations_pb2.py +0 -0
  91. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/google/api/annotations_pb2.pyi +0 -0
  92. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/google/api/http_pb2.py +0 -0
  93. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_proto/google/api/http_pb2.pyi +0 -0
  94. {coordinode-3.0.0 → coordinode-4.0.1}/coordinode/_source.py +0 -0
@@ -22,10 +22,4 @@ coordinode/coordinode/_version.py
22
22
  langchain-coordinode/langchain_coordinode/_version.py
23
23
  llama-index-coordinode/llama_index/graph_stores/coordinode/_version.py
24
24
 
25
- # Local dev / arch docs — not part of the SDK
26
- GAPS.md
27
- CLAUDE.md
28
- DEVLOG*.md
29
-
30
25
  **/.ipynb_checkpoints/
31
- .claude/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: coordinode
3
- Version: 3.0.0
3
+ Version: 4.0.1
4
4
  Summary: Python client for CoordiNode — graph + vector + full-text database
5
5
  Project-URL: Homepage, https://github.com/structured-world/coordinode
6
6
  Project-URL: Repository, https://github.com/structured-world/coordinode-python
@@ -21,13 +21,13 @@ Classifier: Topic :: Database
21
21
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
22
22
  Requires-Python: >=3.11
23
23
  Requires-Dist: googleapis-common-protos>=1.74.0
24
- Requires-Dist: grpcio>=1.83.1
24
+ Requires-Dist: grpcio>=1.84.0
25
25
  Requires-Dist: protobuf>=7.35.1
26
26
  Provides-Extra: dev
27
- Requires-Dist: grpcio-tools>=1.83.1; extra == 'dev'
27
+ Requires-Dist: grpcio-tools>=1.84.0; extra == 'dev'
28
28
  Requires-Dist: pytest-asyncio>=1.4; extra == 'dev'
29
29
  Requires-Dist: pytest>=9; extra == 'dev'
30
- Requires-Dist: ruff>=0.16; extra == 'dev'
30
+ Requires-Dist: ruff>=0.17.0; extra == 'dev'
31
31
  Description-Content-Type: text/markdown
32
32
 
33
33
  # coordinode
@@ -231,6 +231,17 @@ Accepted values:
231
231
  - ``read_concern``: ``local`` (default) · ``majority`` · ``linearizable`` · ``snapshot``. Causal reads (``after_index`` > 0) require ``majority`` here.
232
232
  - ``write_concern``: ``"majority"`` (default) · a member count (``1`` leader only, ``0`` fire-and-forget) · ``WriteConcern(w, journal, timeout_ms)`` with ``journal`` one of ``journal`` (default) · ``cache`` · ``memory``. The volatile ``cache`` and ``memory`` states are accepted only with ``w`` of 0 or 1.
233
233
  - ``read_preference``: ``primary`` (default) · ``primary_preferred`` · ``secondary`` · ``secondary_preferred`` · ``nearest``
234
+ - ``vector_consistency``: ``current`` (the index as it is: fastest, may include writes newer than the read) · ``snapshot`` (index candidates filtered at the read's snapshot) · ``exact`` (every vector of the label, without the index). Omitted, the mode the read concern implies. A ``vector_consistency`` hint in the query wins.
235
+ - ``vector_build_wait_ms``: how long a vector search waits for an index still being built; ``0`` refuses a building index at once. Omitted, the server's default.
236
+
237
+ ```python
238
+ db.cypher(
239
+ "MATCH (d:Doc) RETURN d.title AS title ORDER BY vector_distance(d.embedding, $q) LIMIT 5",
240
+ params={"q": query_vector},
241
+ vector_consistency="exact",
242
+ vector_build_wait_ms=0,
243
+ )
244
+ ```
234
245
 
235
246
  ## Related Packages
236
247
 
@@ -199,6 +199,17 @@ Accepted values:
199
199
  - ``read_concern``: ``local`` (default) · ``majority`` · ``linearizable`` · ``snapshot``. Causal reads (``after_index`` > 0) require ``majority`` here.
200
200
  - ``write_concern``: ``"majority"`` (default) · a member count (``1`` leader only, ``0`` fire-and-forget) · ``WriteConcern(w, journal, timeout_ms)`` with ``journal`` one of ``journal`` (default) · ``cache`` · ``memory``. The volatile ``cache`` and ``memory`` states are accepted only with ``w`` of 0 or 1.
201
201
  - ``read_preference``: ``primary`` (default) · ``primary_preferred`` · ``secondary`` · ``secondary_preferred`` · ``nearest``
202
+ - ``vector_consistency``: ``current`` (the index as it is: fastest, may include writes newer than the read) · ``snapshot`` (index candidates filtered at the read's snapshot) · ``exact`` (every vector of the label, without the index). Omitted, the mode the read concern implies. A ``vector_consistency`` hint in the query wins.
203
+ - ``vector_build_wait_ms``: how long a vector search waits for an index still being built; ``0`` refuses a building index at once. Omitted, the server's default.
204
+
205
+ ```python
206
+ db.cypher(
207
+ "MATCH (d:Doc) RETURN d.title AS title ORDER BY vector_distance(d.embedding, $q) LIMIT 5",
208
+ params={"q": query_vector},
209
+ vector_consistency="exact",
210
+ vector_build_wait_ms=0,
211
+ )
212
+ ```
202
213
 
203
214
  ## Related Packages
204
215
 
@@ -18,10 +18,11 @@ Async::
18
18
  result = await db.cypher("MATCH (n) RETURN count(n) AS total")
19
19
  """
20
20
 
21
- from coordinode._types import MultiVector, Path
21
+ from coordinode._types import MultiVector, Path, Timestamp
22
22
  from coordinode.client import (
23
23
  AsyncCoordinodeClient,
24
24
  AsyncTransaction,
25
+ ConstraintInfo,
25
26
  CoordinodeClient,
26
27
  EdgeResult,
27
28
  EdgeTypeInfo,
@@ -49,10 +50,12 @@ __all__ = [
49
50
  "Transaction",
50
51
  "AsyncTransaction",
51
52
  # Values whose wire type only a tag can carry: a plain nested list encodes
52
- # as a list and a plain dict as a map, so sending either of these types
53
- # requires the constructor, not just the shape.
53
+ # as a list, a plain dict as a map and a plain int as an integer, so
54
+ # sending one of these types requires the constructor, not just the shape.
55
+ # An aware datetime encodes as a timestamp too.
54
56
  "MultiVector",
55
57
  "Path",
58
+ "Timestamp",
56
59
  # How a write is acknowledged: member count or majority, and how durably.
57
60
  "WriteConcern",
58
61
  "NodeResult",
@@ -62,6 +65,7 @@ __all__ = [
62
65
  "LabelInfo",
63
66
  "EdgeTypeInfo",
64
67
  "PropertyDefinitionInfo",
68
+ "ConstraintInfo",
65
69
  "TextIndexInfo",
66
70
  "TraverseResult",
67
71
  ]
@@ -0,0 +1,38 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: coordinode/internode/handshake.proto
5
+ # Protobuf Python Version: 7.35.1
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 7,
15
+ 35,
16
+ 1,
17
+ '',
18
+ 'coordinode/internode/handshake.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+
26
+
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$coordinode/internode/handshake.proto\x12\x14\x63oordinode.internode\"!\n\x0fHandshakeRecord\x12\x0e\n\x06record\x18\x01 \x01(\x0c\x32l\n\x10VersionHandshake\x12X\n\x08\x45xchange\x12%.coordinode.internode.HandshakeRecord\x1a%.coordinode.internode.HandshakeRecordb\x06proto3')
28
+
29
+ _globals = globals()
30
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'coordinode.internode.handshake_pb2', _globals)
32
+ if not _descriptor._USE_C_DESCRIPTORS:
33
+ DESCRIPTOR._loaded_options = None
34
+ _globals['_HANDSHAKERECORD']._serialized_start=62
35
+ _globals['_HANDSHAKERECORD']._serialized_end=95
36
+ _globals['_VERSIONHANDSHAKE']._serialized_start=97
37
+ _globals['_VERSIONHANDSHAKE']._serialized_end=205
38
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,11 @@
1
+ from google.protobuf import descriptor as _descriptor
2
+ from google.protobuf import message as _message
3
+ from typing import ClassVar as _ClassVar, Optional as _Optional
4
+
5
+ DESCRIPTOR: _descriptor.FileDescriptor
6
+
7
+ class HandshakeRecord(_message.Message):
8
+ __slots__ = ("record",)
9
+ RECORD_FIELD_NUMBER: _ClassVar[int]
10
+ record: bytes
11
+ def __init__(self, record: _Optional[bytes] = ...) -> None: ...
@@ -0,0 +1,132 @@
1
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
+ """Client and server classes corresponding to protobuf-defined services."""
3
+ import grpc
4
+ import warnings
5
+
6
+ from coordinode.internode import handshake_pb2 as coordinode_dot_internode_dot_handshake__pb2
7
+
8
+ GRPC_GENERATED_VERSION = '1.84.0'
9
+ GRPC_VERSION = grpc.__version__
10
+ _version_not_supported = False
11
+
12
+ try:
13
+ from grpc._utilities import first_version_is_lower
14
+ _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
15
+ except ImportError:
16
+ _version_not_supported = True
17
+
18
+ if _version_not_supported:
19
+ raise RuntimeError(
20
+ f'The grpc package installed is at version {GRPC_VERSION},'
21
+ + ' but the generated code in coordinode/internode/handshake_pb2_grpc.py depends on'
22
+ + f' grpcio>={GRPC_GENERATED_VERSION}.'
23
+ + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
24
+ + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
25
+ )
26
+
27
+
28
+ class VersionHandshakeStub:
29
+ """The version handshake between two members of a consensus group.
30
+
31
+ This file is frozen for the life of the product: its package, service,
32
+ method and messages never change, so that members of any two releases can
33
+ tell each other which version they run. Members whose versions differ
34
+ exchange nothing but this.
35
+
36
+ The same record also travels in the `cn-version-handshake-bin` request
37
+ and response metadata of every other inter-node call; a call whose record
38
+ does not match the receiver's version is refused before its payload is
39
+ read.
40
+ """
41
+
42
+ def __init__(self, channel):
43
+ """Constructor.
44
+
45
+ Args:
46
+ channel: A grpc.Channel.
47
+ """
48
+ self.Exchange = channel.unary_unary(
49
+ '/coordinode.internode.VersionHandshake/Exchange',
50
+ request_serializer=coordinode_dot_internode_dot_handshake__pb2.HandshakeRecord.SerializeToString,
51
+ response_deserializer=coordinode_dot_internode_dot_handshake__pb2.HandshakeRecord.FromString,
52
+ _registered_method=True)
53
+
54
+
55
+ class VersionHandshakeServicer:
56
+ """The version handshake between two members of a consensus group.
57
+
58
+ This file is frozen for the life of the product: its package, service,
59
+ method and messages never change, so that members of any two releases can
60
+ tell each other which version they run. Members whose versions differ
61
+ exchange nothing but this.
62
+
63
+ The same record also travels in the `cn-version-handshake-bin` request
64
+ and response metadata of every other inter-node call; a call whose record
65
+ does not match the receiver's version is refused before its payload is
66
+ read.
67
+ """
68
+
69
+ def Exchange(self, request, context):
70
+ """Exchange version records. Answered whether or not the two members
71
+ match; the caller compares the records itself.
72
+ """
73
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
74
+ context.set_details('Method not implemented!')
75
+ raise NotImplementedError('Method not implemented!')
76
+
77
+
78
+ def add_VersionHandshakeServicer_to_server(servicer, server):
79
+ rpc_method_handlers = {
80
+ 'Exchange': grpc.unary_unary_rpc_method_handler(
81
+ servicer.Exchange,
82
+ request_deserializer=coordinode_dot_internode_dot_handshake__pb2.HandshakeRecord.FromString,
83
+ response_serializer=coordinode_dot_internode_dot_handshake__pb2.HandshakeRecord.SerializeToString,
84
+ ),
85
+ }
86
+ generic_handler = grpc.method_handlers_generic_handler(
87
+ 'coordinode.internode.VersionHandshake', rpc_method_handlers)
88
+ server.add_generic_rpc_handlers((generic_handler,))
89
+ server.add_registered_method_handlers('coordinode.internode.VersionHandshake', rpc_method_handlers)
90
+
91
+
92
+ # This class is part of an EXPERIMENTAL API.
93
+ class VersionHandshake:
94
+ """The version handshake between two members of a consensus group.
95
+
96
+ This file is frozen for the life of the product: its package, service,
97
+ method and messages never change, so that members of any two releases can
98
+ tell each other which version they run. Members whose versions differ
99
+ exchange nothing but this.
100
+
101
+ The same record also travels in the `cn-version-handshake-bin` request
102
+ and response metadata of every other inter-node call; a call whose record
103
+ does not match the receiver's version is refused before its payload is
104
+ read.
105
+ """
106
+
107
+ @staticmethod
108
+ def Exchange(request,
109
+ target,
110
+ options=(),
111
+ channel_credentials=None,
112
+ call_credentials=None,
113
+ insecure=False,
114
+ compression=None,
115
+ wait_for_ready=None,
116
+ timeout=None,
117
+ metadata=None):
118
+ return grpc.experimental.unary_unary(
119
+ request,
120
+ target,
121
+ '/coordinode.internode.VersionHandshake/Exchange',
122
+ coordinode_dot_internode_dot_handshake__pb2.HandshakeRecord.SerializeToString,
123
+ coordinode_dot_internode_dot_handshake__pb2.HandshakeRecord.FromString,
124
+ options,
125
+ channel_credentials,
126
+ insecure,
127
+ call_credentials,
128
+ compression,
129
+ wait_for_ready,
130
+ timeout,
131
+ metadata,
132
+ _registered_method=True)
@@ -0,0 +1,77 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: coordinode/v1/admin/cluster.proto
5
+ # Protobuf Python Version: 7.35.1
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 7,
15
+ 35,
16
+ 1,
17
+ '',
18
+ 'coordinode/v1/admin/cluster.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+ from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
26
+
27
+
28
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!coordinode/v1/admin/cluster.proto\x12\x13\x63oordinode.v1.admin\x1a\x1cgoogle/api/annotations.proto\"\x19\n\x17GetClusterStatusRequest\"z\n\rClusterStatus\x12/\n\x05nodes\x18\x01 \x03(\x0b\x32 .coordinode.v1.admin.ClusterNode\x12\x11\n\tleader_id\x18\x02 \x01(\t\x12\x11\n\traft_term\x18\x03 \x01(\x04\x12\x12\n\ndeployment\x18\x04 \x01(\t\"\xb7\x01\n\x0b\x43lusterNode\x12\x0f\n\x07node_id\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\x12+\n\x04role\x18\x03 \x01(\x0e\x32\x1d.coordinode.v1.admin.NodeRole\x12-\n\x05state\x18\x04 \x01(\x0e\x32\x1e.coordinode.v1.admin.NodeState\x12\x13\n\x0blag_entries\x18\x05 \x01(\x04\x12\x15\n\rnode_identity\x18\x06 \x01(\t\"^\n\x0fJoinNodeRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\x12\x12\n\npre_seeded\x18\x03 \x01(\x08\x12\x15\n\rnode_identity\x18\x04 \x01(\t\"3\n\x10JoinNodeResponse\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\x12\x0e\n\x06status\x18\x02 \x01(\t\"&\n\x13JoinProgressRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\"\x83\x01\n\nJoinStatus\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\x12-\n\x05phase\x18\x02 \x01(\x0e\x32\x1e.coordinode.v1.admin.JoinPhase\x12\x13\n\x0blag_entries\x18\x03 \x01(\x04\x12\x0f\n\x07percent\x18\x04 \x01(\r\x12\x0f\n\x07message\x18\x05 \x01(\t\"!\n\x0e\x41\x64\x64NodeRequest\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"$\n\x11RemoveNodeRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\t\"\x14\n\x12RemoveNodeResponse\"e\n\x17\x44\x65\x63ommissionNodeRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\x12\x0f\n\x07pruning\x18\x02 \x01(\x08\x12\r\n\x05\x66orce\x18\x03 \x01(\x08\x12\x19\n\x11skip_confirmation\x18\x04 \x01(\x08\"_\n\x18\x44\x65\x63ommissionNodeResponse\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\x12\x0f\n\x07message\x18\x02 \x01(\t\x12!\n\x19operator_cleanup_required\x18\x03 \x01(\x08*j\n\x08NodeRole\x12\x19\n\x15NODE_ROLE_UNSPECIFIED\x10\x00\x12\x14\n\x10NODE_ROLE_LEADER\x10\x01\x12\x16\n\x12NODE_ROLE_FOLLOWER\x10\x02\x12\x15\n\x11NODE_ROLE_LEARNER\x10\x03*m\n\tNodeState\x12\x1a\n\x16NODE_STATE_UNSPECIFIED\x10\x00\x12\x16\n\x12NODE_STATE_HEALTHY\x10\x01\x12\x17\n\x13NODE_STATE_DEGRADED\x10\x02\x12\x13\n\x0fNODE_STATE_DOWN\x10\x03*\xa5\x01\n\tJoinPhase\x12\x1a\n\x16JOIN_PHASE_UNSPECIFIED\x10\x00\x12\x16\n\x12JOIN_PHASE_LEARNER\x10\x01\x12\x1a\n\x16JOIN_PHASE_READY_CHECK\x10\x02\x12\x18\n\x14JOIN_PHASE_PROMOTING\x10\x03\x12\x17\n\x13JOIN_PHASE_COMPLETE\x10\x04\x12\x15\n\x11JOIN_PHASE_FAILED\x10\x05\x32\x92\x06\n\x0e\x43lusterService\x12\x86\x01\n\x10GetClusterStatus\x12,.coordinode.v1.admin.GetClusterStatusRequest\x1a\".coordinode.v1.admin.ClusterStatus\" \x82\xd3\xe4\x93\x02\x1a\x12\x18/v1/admin/cluster/status\x12z\n\x08JoinNode\x12$.coordinode.v1.admin.JoinNodeRequest\x1a%.coordinode.v1.admin.JoinNodeResponse\"!\x82\xd3\xe4\x93\x02\x1b\"\x16/v1/admin/cluster/join:\x01*\x12]\n\x0cJoinProgress\x12(.coordinode.v1.admin.JoinProgressRequest\x1a\x1f.coordinode.v1.admin.JoinStatus\"\x00\x30\x01\x12t\n\x07\x41\x64\x64Node\x12#.coordinode.v1.admin.AddNodeRequest\x1a .coordinode.v1.admin.ClusterNode\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/admin/cluster/nodes:\x01*\x12\x88\x01\n\nRemoveNode\x12&.coordinode.v1.admin.RemoveNodeRequest\x1a\'.coordinode.v1.admin.RemoveNodeResponse\")\x82\xd3\xe4\x93\x02#*!/v1/admin/cluster/nodes/{node_id}\x12\x9a\x01\n\x10\x44\x65\x63ommissionNode\x12,.coordinode.v1.admin.DecommissionNodeRequest\x1a-.coordinode.v1.admin.DecommissionNodeResponse\")\x82\xd3\xe4\x93\x02#\"\x1e/v1/admin/cluster/decommission:\x01*b\x06proto3')
29
+
30
+ _globals = globals()
31
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
32
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'coordinode.v1.admin.cluster_pb2', _globals)
33
+ if not _descriptor._USE_C_DESCRIPTORS:
34
+ DESCRIPTOR._loaded_options = None
35
+ _globals['_CLUSTERSERVICE'].methods_by_name['GetClusterStatus']._loaded_options = None
36
+ _globals['_CLUSTERSERVICE'].methods_by_name['GetClusterStatus']._serialized_options = b'\202\323\344\223\002\032\022\030/v1/admin/cluster/status'
37
+ _globals['_CLUSTERSERVICE'].methods_by_name['JoinNode']._loaded_options = None
38
+ _globals['_CLUSTERSERVICE'].methods_by_name['JoinNode']._serialized_options = b'\202\323\344\223\002\033\"\026/v1/admin/cluster/join:\001*'
39
+ _globals['_CLUSTERSERVICE'].methods_by_name['AddNode']._loaded_options = None
40
+ _globals['_CLUSTERSERVICE'].methods_by_name['AddNode']._serialized_options = b'\202\323\344\223\002\034\"\027/v1/admin/cluster/nodes:\001*'
41
+ _globals['_CLUSTERSERVICE'].methods_by_name['RemoveNode']._loaded_options = None
42
+ _globals['_CLUSTERSERVICE'].methods_by_name['RemoveNode']._serialized_options = b'\202\323\344\223\002#*!/v1/admin/cluster/nodes/{node_id}'
43
+ _globals['_CLUSTERSERVICE'].methods_by_name['DecommissionNode']._loaded_options = None
44
+ _globals['_CLUSTERSERVICE'].methods_by_name['DecommissionNode']._serialized_options = b'\202\323\344\223\002#\"\036/v1/admin/cluster/decommission:\001*'
45
+ _globals['_NODEROLE']._serialized_start=1043
46
+ _globals['_NODEROLE']._serialized_end=1149
47
+ _globals['_NODESTATE']._serialized_start=1151
48
+ _globals['_NODESTATE']._serialized_end=1260
49
+ _globals['_JOINPHASE']._serialized_start=1263
50
+ _globals['_JOINPHASE']._serialized_end=1428
51
+ _globals['_GETCLUSTERSTATUSREQUEST']._serialized_start=88
52
+ _globals['_GETCLUSTERSTATUSREQUEST']._serialized_end=113
53
+ _globals['_CLUSTERSTATUS']._serialized_start=115
54
+ _globals['_CLUSTERSTATUS']._serialized_end=237
55
+ _globals['_CLUSTERNODE']._serialized_start=240
56
+ _globals['_CLUSTERNODE']._serialized_end=423
57
+ _globals['_JOINNODEREQUEST']._serialized_start=425
58
+ _globals['_JOINNODEREQUEST']._serialized_end=519
59
+ _globals['_JOINNODERESPONSE']._serialized_start=521
60
+ _globals['_JOINNODERESPONSE']._serialized_end=572
61
+ _globals['_JOINPROGRESSREQUEST']._serialized_start=574
62
+ _globals['_JOINPROGRESSREQUEST']._serialized_end=612
63
+ _globals['_JOINSTATUS']._serialized_start=615
64
+ _globals['_JOINSTATUS']._serialized_end=746
65
+ _globals['_ADDNODEREQUEST']._serialized_start=748
66
+ _globals['_ADDNODEREQUEST']._serialized_end=781
67
+ _globals['_REMOVENODEREQUEST']._serialized_start=783
68
+ _globals['_REMOVENODEREQUEST']._serialized_end=819
69
+ _globals['_REMOVENODERESPONSE']._serialized_start=821
70
+ _globals['_REMOVENODERESPONSE']._serialized_end=841
71
+ _globals['_DECOMMISSIONNODEREQUEST']._serialized_start=843
72
+ _globals['_DECOMMISSIONNODEREQUEST']._serialized_end=944
73
+ _globals['_DECOMMISSIONNODERESPONSE']._serialized_start=946
74
+ _globals['_DECOMMISSIONNODERESPONSE']._serialized_end=1041
75
+ _globals['_CLUSTERSERVICE']._serialized_start=1431
76
+ _globals['_CLUSTERSERVICE']._serialized_end=2217
77
+ # @@protoc_insertion_point(module_scope)
@@ -50,38 +50,44 @@ class GetClusterStatusRequest(_message.Message):
50
50
  def __init__(self) -> None: ...
51
51
 
52
52
  class ClusterStatus(_message.Message):
53
- __slots__ = ("nodes", "leader_id", "raft_term")
53
+ __slots__ = ("nodes", "leader_id", "raft_term", "deployment")
54
54
  NODES_FIELD_NUMBER: _ClassVar[int]
55
55
  LEADER_ID_FIELD_NUMBER: _ClassVar[int]
56
56
  RAFT_TERM_FIELD_NUMBER: _ClassVar[int]
57
+ DEPLOYMENT_FIELD_NUMBER: _ClassVar[int]
57
58
  nodes: _containers.RepeatedCompositeFieldContainer[ClusterNode]
58
59
  leader_id: str
59
60
  raft_term: int
60
- def __init__(self, nodes: _Optional[_Iterable[_Union[ClusterNode, _Mapping]]] = ..., leader_id: _Optional[str] = ..., raft_term: _Optional[int] = ...) -> None: ...
61
+ deployment: str
62
+ def __init__(self, nodes: _Optional[_Iterable[_Union[ClusterNode, _Mapping]]] = ..., leader_id: _Optional[str] = ..., raft_term: _Optional[int] = ..., deployment: _Optional[str] = ...) -> None: ...
61
63
 
62
64
  class ClusterNode(_message.Message):
63
- __slots__ = ("node_id", "address", "role", "state", "lag_entries")
65
+ __slots__ = ("node_id", "address", "role", "state", "lag_entries", "node_identity")
64
66
  NODE_ID_FIELD_NUMBER: _ClassVar[int]
65
67
  ADDRESS_FIELD_NUMBER: _ClassVar[int]
66
68
  ROLE_FIELD_NUMBER: _ClassVar[int]
67
69
  STATE_FIELD_NUMBER: _ClassVar[int]
68
70
  LAG_ENTRIES_FIELD_NUMBER: _ClassVar[int]
71
+ NODE_IDENTITY_FIELD_NUMBER: _ClassVar[int]
69
72
  node_id: str
70
73
  address: str
71
74
  role: NodeRole
72
75
  state: NodeState
73
76
  lag_entries: int
74
- def __init__(self, node_id: _Optional[str] = ..., address: _Optional[str] = ..., role: _Optional[_Union[NodeRole, str]] = ..., state: _Optional[_Union[NodeState, str]] = ..., lag_entries: _Optional[int] = ...) -> None: ...
77
+ node_identity: str
78
+ def __init__(self, node_id: _Optional[str] = ..., address: _Optional[str] = ..., role: _Optional[_Union[NodeRole, str]] = ..., state: _Optional[_Union[NodeState, str]] = ..., lag_entries: _Optional[int] = ..., node_identity: _Optional[str] = ...) -> None: ...
75
79
 
76
80
  class JoinNodeRequest(_message.Message):
77
- __slots__ = ("node_id", "address", "pre_seeded")
81
+ __slots__ = ("node_id", "address", "pre_seeded", "node_identity")
78
82
  NODE_ID_FIELD_NUMBER: _ClassVar[int]
79
83
  ADDRESS_FIELD_NUMBER: _ClassVar[int]
80
84
  PRE_SEEDED_FIELD_NUMBER: _ClassVar[int]
85
+ NODE_IDENTITY_FIELD_NUMBER: _ClassVar[int]
81
86
  node_id: int
82
87
  address: str
83
88
  pre_seeded: bool
84
- def __init__(self, node_id: _Optional[int] = ..., address: _Optional[str] = ..., pre_seeded: _Optional[bool] = ...) -> None: ...
89
+ node_identity: str
90
+ def __init__(self, node_id: _Optional[int] = ..., address: _Optional[str] = ..., pre_seeded: _Optional[bool] = ..., node_identity: _Optional[str] = ...) -> None: ...
85
91
 
86
92
  class JoinNodeResponse(_message.Message):
87
93
  __slots__ = ("node_id", "status")
@@ -5,7 +5,7 @@ import warnings
5
5
 
6
6
  from coordinode._proto.coordinode.v1.admin import cluster_pb2 as coordinode_dot_v1_dot_admin_dot_cluster__pb2
7
7
 
8
- GRPC_GENERATED_VERSION = '1.83.1'
8
+ GRPC_GENERATED_VERSION = '1.84.0'
9
9
  GRPC_VERSION = grpc.__version__
10
10
  _version_not_supported = False
11
11
 
@@ -126,18 +126,19 @@ class ClusterServiceServicer:
126
126
  def DecommissionNode(self, request, context):
127
127
  """Gracefully decommission a node from the cluster.
128
128
 
129
- Implements the Phase 0-2 decommission protocol:
130
- Phase 0: Quorum gate — verify removing node_id still leaves ≥ 2 voters.
131
- Aborts with FAILED_PRECONDITION if quorum would be lost.
132
- Phase 1: Leadership transfer — if node_id is the current Raft leader,
133
- leadership is transferred to a peer before removal.
134
- For self-decommission (leader removing itself), the request is
135
- internally forwarded to the new leader after transfer.
136
- Phase 2: Membership remove — change_membership(remove: node_id).
137
- Node stops receiving log replication and is removed from quorum.
138
-
139
- CE behaviour: single Raft group, all nodes hold full data. Pruning (Phase 3)
140
- is advisory — operator must delete data on the decommissioned node manually.
129
+ First the quorum gate: removing node_id must still leave at least 2
130
+ voters, otherwise the call aborts with FAILED_PRECONDITION.
131
+
132
+ Then the leadership transfer: if node_id is the current Raft leader,
133
+ leadership moves to a peer before removal. For self-decommission (the
134
+ leader removing itself) the request is forwarded to the new leader after
135
+ the transfer.
136
+
137
+ Last the membership remove, change_membership(remove: node_id): the node
138
+ stops receiving log replication and leaves the quorum.
139
+
140
+ CE behaviour: single Raft group, all nodes hold full data. Pruning is
141
+ advisory: the operator deletes data on the decommissioned node manually.
141
142
 
142
143
  Must be called on the current Raft leader, or on the node being decommissioned
143
144
  when that node is the leader (self-decommission path).
@@ -4,7 +4,7 @@ import grpc
4
4
  import warnings
5
5
 
6
6
 
7
- GRPC_GENERATED_VERSION = '1.83.1'
7
+ GRPC_GENERATED_VERSION = '1.84.0'
8
8
  GRPC_VERSION = grpc.__version__
9
9
  _version_not_supported = False
10
10
 
@@ -0,0 +1,58 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: coordinode/v1/common/types.proto
5
+ # Protobuf Python Version: 7.35.1
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 7,
15
+ 35,
16
+ 1,
17
+ '',
18
+ 'coordinode/v1/common/types.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+
26
+
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n coordinode/v1/common/types.proto\x12\x14\x63oordinode.v1.common\"\x14\n\x06NodeId\x12\n\n\x02id\x18\x01 \x01(\x04\"\x14\n\x06\x45\x64geId\x12\n\n\x02id\x18\x01 \x01(\x04\" \n\tTimestamp\x12\x13\n\x0bunix_micros\x18\x01 \x01(\x03\"\xe0\x03\n\rPropertyValue\x12\x13\n\tint_value\x18\x01 \x01(\x03H\x00\x12\x15\n\x0b\x66loat_value\x18\x02 \x01(\x01H\x00\x12\x16\n\x0cstring_value\x18\x03 \x01(\tH\x00\x12\x14\n\nbool_value\x18\x04 \x01(\x08H\x00\x12\x15\n\x0b\x62ytes_value\x18\x05 \x01(\x0cH\x00\x12:\n\x0ftimestamp_value\x18\x06 \x01(\x0b\x32\x1f.coordinode.v1.common.TimestampH\x00\x12\x34\n\x0cvector_value\x18\x07 \x01(\x0b\x32\x1c.coordinode.v1.common.VectorH\x00\x12\x38\n\nlist_value\x18\x08 \x01(\x0b\x32\".coordinode.v1.common.PropertyListH\x00\x12\x36\n\tmap_value\x18\t \x01(\x0b\x32!.coordinode.v1.common.PropertyMapH\x00\x12?\n\x12multi_vector_value\x18\n \x01(\x0b\x32!.coordinode.v1.common.MultiVectorH\x00\x12\x30\n\npath_value\x18\x0b \x01(\x0b\x32\x1a.coordinode.v1.common.PathH\x00\x42\x07\n\x05value\"\x18\n\x06Vector\x12\x0e\n\x06values\x18\x01 \x03(\x02\"C\n\x0cPropertyList\x12\x33\n\x06values\x18\x01 \x03(\x0b\x32#.coordinode.v1.common.PropertyValue\"\xa3\x01\n\x0bPropertyMap\x12?\n\x07\x65ntries\x18\x01 \x03(\x0b\x32..coordinode.v1.common.PropertyMap.EntriesEntry\x1aS\n\x0c\x45ntriesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.coordinode.v1.common.PropertyValue:\x02\x38\x01\"9\n\x0bMultiVector\x12*\n\x04rows\x18\x01 \x03(\x0b\x32\x1c.coordinode.v1.common.Vector\"B\n\x04Path\x12\r\n\x05nodes\x18\x01 \x03(\x04\x12+\n\x04rels\x18\x02 \x03(\x0b\x32\x1d.coordinode.v1.common.PathRel\"<\n\x07PathRel\x12\x11\n\tedge_type\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\x04\x12\x0e\n\x06target\x18\x03 \x01(\x04\x62\x06proto3')
28
+
29
+ _globals = globals()
30
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'coordinode.v1.common.types_pb2', _globals)
32
+ if not _descriptor._USE_C_DESCRIPTORS:
33
+ DESCRIPTOR._loaded_options = None
34
+ _globals['_PROPERTYMAP_ENTRIESENTRY']._loaded_options = None
35
+ _globals['_PROPERTYMAP_ENTRIESENTRY']._serialized_options = b'8\001'
36
+ _globals['_NODEID']._serialized_start=58
37
+ _globals['_NODEID']._serialized_end=78
38
+ _globals['_EDGEID']._serialized_start=80
39
+ _globals['_EDGEID']._serialized_end=100
40
+ _globals['_TIMESTAMP']._serialized_start=102
41
+ _globals['_TIMESTAMP']._serialized_end=134
42
+ _globals['_PROPERTYVALUE']._serialized_start=137
43
+ _globals['_PROPERTYVALUE']._serialized_end=617
44
+ _globals['_VECTOR']._serialized_start=619
45
+ _globals['_VECTOR']._serialized_end=643
46
+ _globals['_PROPERTYLIST']._serialized_start=645
47
+ _globals['_PROPERTYLIST']._serialized_end=712
48
+ _globals['_PROPERTYMAP']._serialized_start=715
49
+ _globals['_PROPERTYMAP']._serialized_end=878
50
+ _globals['_PROPERTYMAP_ENTRIESENTRY']._serialized_start=795
51
+ _globals['_PROPERTYMAP_ENTRIESENTRY']._serialized_end=878
52
+ _globals['_MULTIVECTOR']._serialized_start=880
53
+ _globals['_MULTIVECTOR']._serialized_end=937
54
+ _globals['_PATH']._serialized_start=939
55
+ _globals['_PATH']._serialized_end=1005
56
+ _globals['_PATHREL']._serialized_start=1007
57
+ _globals['_PATHREL']._serialized_end=1067
58
+ # @@protoc_insertion_point(module_scope)
@@ -18,13 +18,11 @@ class EdgeId(_message.Message):
18
18
  id: int
19
19
  def __init__(self, id: _Optional[int] = ...) -> None: ...
20
20
 
21
- class HlcTimestamp(_message.Message):
22
- __slots__ = ("wall_time", "logical")
23
- WALL_TIME_FIELD_NUMBER: _ClassVar[int]
24
- LOGICAL_FIELD_NUMBER: _ClassVar[int]
25
- wall_time: int
26
- logical: int
27
- def __init__(self, wall_time: _Optional[int] = ..., logical: _Optional[int] = ...) -> None: ...
21
+ class Timestamp(_message.Message):
22
+ __slots__ = ("unix_micros",)
23
+ UNIX_MICROS_FIELD_NUMBER: _ClassVar[int]
24
+ unix_micros: int
25
+ def __init__(self, unix_micros: _Optional[int] = ...) -> None: ...
28
26
 
29
27
  class PropertyValue(_message.Message):
30
28
  __slots__ = ("int_value", "float_value", "string_value", "bool_value", "bytes_value", "timestamp_value", "vector_value", "list_value", "map_value", "multi_vector_value", "path_value")
@@ -44,13 +42,13 @@ class PropertyValue(_message.Message):
44
42
  string_value: str
45
43
  bool_value: bool
46
44
  bytes_value: bytes
47
- timestamp_value: HlcTimestamp
45
+ timestamp_value: Timestamp
48
46
  vector_value: Vector
49
47
  list_value: PropertyList
50
48
  map_value: PropertyMap
51
49
  multi_vector_value: MultiVector
52
50
  path_value: Path
53
- def __init__(self, int_value: _Optional[int] = ..., float_value: _Optional[float] = ..., string_value: _Optional[str] = ..., bool_value: _Optional[bool] = ..., bytes_value: _Optional[bytes] = ..., timestamp_value: _Optional[_Union[HlcTimestamp, _Mapping]] = ..., vector_value: _Optional[_Union[Vector, _Mapping]] = ..., list_value: _Optional[_Union[PropertyList, _Mapping]] = ..., map_value: _Optional[_Union[PropertyMap, _Mapping]] = ..., multi_vector_value: _Optional[_Union[MultiVector, _Mapping]] = ..., path_value: _Optional[_Union[Path, _Mapping]] = ...) -> None: ...
51
+ def __init__(self, int_value: _Optional[int] = ..., float_value: _Optional[float] = ..., string_value: _Optional[str] = ..., bool_value: _Optional[bool] = ..., bytes_value: _Optional[bytes] = ..., timestamp_value: _Optional[_Union[Timestamp, _Mapping]] = ..., vector_value: _Optional[_Union[Vector, _Mapping]] = ..., list_value: _Optional[_Union[PropertyList, _Mapping]] = ..., map_value: _Optional[_Union[PropertyMap, _Mapping]] = ..., multi_vector_value: _Optional[_Union[MultiVector, _Mapping]] = ..., path_value: _Optional[_Union[Path, _Mapping]] = ...) -> None: ...
54
52
 
55
53
  class Vector(_message.Message):
56
54
  __slots__ = ("values",)
@@ -4,7 +4,7 @@ import grpc
4
4
  import warnings
5
5
 
6
6
 
7
- GRPC_GENERATED_VERSION = '1.83.1'
7
+ GRPC_GENERATED_VERSION = '1.84.0'
8
8
  GRPC_VERSION = grpc.__version__
9
9
  _version_not_supported = False
10
10
 
@@ -5,7 +5,7 @@ import warnings
5
5
 
6
6
  from coordinode._proto.coordinode.v1.graph import blob_pb2 as coordinode_dot_v1_dot_graph_dot_blob__pb2
7
7
 
8
- GRPC_GENERATED_VERSION = '1.83.1'
8
+ GRPC_GENERATED_VERSION = '1.84.0'
9
9
  GRPC_VERSION = grpc.__version__
10
10
  _version_not_supported = False
11
11
 
@@ -5,7 +5,7 @@ import warnings
5
5
 
6
6
  from coordinode._proto.coordinode.v1.graph import graph_pb2 as coordinode_dot_v1_dot_graph_dot_graph__pb2
7
7
 
8
- GRPC_GENERATED_VERSION = '1.83.1'
8
+ GRPC_GENERATED_VERSION = '1.84.0'
9
9
  GRPC_VERSION = grpc.__version__
10
10
  _version_not_supported = False
11
11
 
@@ -5,7 +5,7 @@ import warnings
5
5
 
6
6
  from coordinode._proto.coordinode.v1.health import health_pb2 as coordinode_dot_v1_dot_health_dot_health__pb2
7
7
 
8
- GRPC_GENERATED_VERSION = '1.83.1'
8
+ GRPC_GENERATED_VERSION = '1.84.0'
9
9
  GRPC_VERSION = grpc.__version__
10
10
  _version_not_supported = False
11
11