nucliadb 6.3.1.post3546__py3-none-any.whl → 6.3.1.post3549__py3-none-any.whl
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.
- migrations/0020_drain_nodes_from_cluster.py +1 -45
- nucliadb/common/cluster/settings.py +1 -40
- nucliadb/standalone/config.py +1 -8
- nucliadb/standalone/run.py +0 -3
- nucliadb/standalone/settings.py +0 -11
- {nucliadb-6.3.1.post3546.dist-info → nucliadb-6.3.1.post3549.dist-info}/METADATA +6 -6
- {nucliadb-6.3.1.post3546.dist-info → nucliadb-6.3.1.post3549.dist-info}/RECORD +10 -12
- nucliadb/common/cluster/index_node.py +0 -77
- nucliadb/ingest/cache.py +0 -25
- {nucliadb-6.3.1.post3546.dist-info → nucliadb-6.3.1.post3549.dist-info}/WHEEL +0 -0
- {nucliadb-6.3.1.post3546.dist-info → nucliadb-6.3.1.post3549.dist-info}/entry_points.txt +0 -0
- {nucliadb-6.3.1.post3546.dist-info → nucliadb-6.3.1.post3549.dist-info}/top_level.txt +0 -0
@@ -28,9 +28,6 @@ create new shards in the remaining nodes.
|
|
28
28
|
|
29
29
|
import logging
|
30
30
|
|
31
|
-
from nucliadb.common import datamanagers
|
32
|
-
from nucliadb.common.cluster.rollover import rollover_kb_index
|
33
|
-
from nucliadb.common.cluster.settings import settings as cluster_settings
|
34
31
|
from nucliadb.migrator.context import ExecutionContext
|
35
32
|
|
36
33
|
logger = logging.getLogger(__name__)
|
@@ -39,45 +36,4 @@ logger = logging.getLogger(__name__)
|
|
39
36
|
async def migrate(context: ExecutionContext) -> None: ...
|
40
37
|
|
41
38
|
|
42
|
-
async def migrate_kb(context: ExecutionContext, kbid: str) -> None:
|
43
|
-
"""
|
44
|
-
Rollover KB shards if any of the shards are on the nodes to drain
|
45
|
-
"""
|
46
|
-
drain_node_ids = cluster_settings.drain_nodes
|
47
|
-
if len(drain_node_ids) == 0:
|
48
|
-
logger.info("Skipping migration because no drain_nodes are set")
|
49
|
-
return
|
50
|
-
|
51
|
-
if not await kb_has_shards_on_drain_nodes(kbid, drain_node_ids):
|
52
|
-
logger.info(
|
53
|
-
"KB does not have shards on the nodes to drain, skipping rollover",
|
54
|
-
extra={"kbid": kbid},
|
55
|
-
)
|
56
|
-
return
|
57
|
-
|
58
|
-
logger.info("Rolling over affected KB", extra={"kbid": kbid})
|
59
|
-
await rollover_kb_index(context, kbid, drain_nodes=drain_node_ids)
|
60
|
-
|
61
|
-
|
62
|
-
async def kb_has_shards_on_drain_nodes(kbid: str, drain_node_ids: list[str]) -> bool:
|
63
|
-
async with datamanagers.with_ro_transaction() as txn:
|
64
|
-
shards = await datamanagers.cluster.get_kb_shards(txn, kbid=kbid)
|
65
|
-
if not shards:
|
66
|
-
logger.warning("Shards object not found", extra={"kbid": kbid})
|
67
|
-
return False
|
68
|
-
shard_in_drain_nodes = False
|
69
|
-
for shard in shards.shards:
|
70
|
-
for replica in shard.replicas:
|
71
|
-
if replica.node in drain_node_ids:
|
72
|
-
logger.info(
|
73
|
-
"Shard found in drain nodes, will rollover it",
|
74
|
-
extra={
|
75
|
-
"kbid": kbid,
|
76
|
-
"logical_shard": shard.shard,
|
77
|
-
"replica_shard_id": replica.shard.id,
|
78
|
-
"node": replica.node,
|
79
|
-
"drain_node_ids": drain_node_ids,
|
80
|
-
},
|
81
|
-
)
|
82
|
-
shard_in_drain_nodes = True
|
83
|
-
return shard_in_drain_nodes
|
39
|
+
async def migrate_kb(context: ExecutionContext, kbid: str) -> None: ...
|
@@ -24,12 +24,6 @@ from pydantic import Field
|
|
24
24
|
from pydantic_settings import BaseSettings
|
25
25
|
|
26
26
|
|
27
|
-
class ClusterDiscoveryMode(str, enum.Enum):
|
28
|
-
MANUAL = "manual"
|
29
|
-
KUBERNETES = "kubernetes"
|
30
|
-
SINGLE_NODE = "single_node"
|
31
|
-
|
32
|
-
|
33
27
|
class StandaloneNodeRole(enum.Enum):
|
34
28
|
ALL = "all"
|
35
29
|
INDEX = "index"
|
@@ -39,53 +33,20 @@ class StandaloneNodeRole(enum.Enum):
|
|
39
33
|
class Settings(BaseSettings):
|
40
34
|
data_path: str = "./data/node"
|
41
35
|
standalone_mode: bool = False
|
42
|
-
standalone_node_port: int = Field(
|
43
|
-
default=10009,
|
44
|
-
title="Standalone node port",
|
45
|
-
description="Port to use for standalone nodes to communication with each other through",
|
46
|
-
)
|
47
36
|
standalone_node_role: StandaloneNodeRole = StandaloneNodeRole.ALL
|
48
37
|
|
49
|
-
|
50
|
-
|
51
|
-
node_writer_port: int = 10000
|
52
|
-
node_reader_port: int = 10001
|
53
|
-
|
54
|
-
# Only for testing purposes
|
55
|
-
writer_port_map: dict[str, int] = {}
|
56
|
-
reader_port_map: dict[str, int] = {}
|
57
|
-
|
58
|
-
# Node limits
|
38
|
+
# Index limits
|
59
39
|
max_shard_paragraphs: int = Field(
|
60
40
|
default=500_000,
|
61
41
|
title="Max shard paragraphs",
|
62
42
|
description="Maximum number of paragraphs to target per shard",
|
63
43
|
)
|
64
|
-
max_node_replicas: int = Field(
|
65
|
-
default=800,
|
66
|
-
title="Max node replicas",
|
67
|
-
description="Maximum number of shard replicas a single node will manage",
|
68
|
-
)
|
69
44
|
max_resource_paragraphs: int = Field(
|
70
45
|
default=50_000,
|
71
46
|
title="Max paragraphs per resource",
|
72
47
|
description="Maximum number of paragraphs allowed on a single resource",
|
73
48
|
)
|
74
49
|
|
75
|
-
drain_nodes: list[str] = Field(
|
76
|
-
default=[],
|
77
|
-
title="Drain nodes",
|
78
|
-
description="List of node IDs to ignore when creating new shards. It is used for draining nodes from a cluster. Example: ['1bf3bfe7-e164-4a19-a4d9-41372fc15aca',]", # noqa: E501
|
79
|
-
)
|
80
|
-
|
81
|
-
local_reader_threads: int = 5
|
82
|
-
local_writer_threads: int = 5
|
83
|
-
|
84
|
-
cluster_discovery_mode: ClusterDiscoveryMode = ClusterDiscoveryMode.KUBERNETES
|
85
|
-
cluster_discovery_kubernetes_namespace: str = "nucliadb"
|
86
|
-
cluster_discovery_kubernetes_selector: str = "appType=node"
|
87
|
-
cluster_discovery_manual_addresses: list[str] = []
|
88
|
-
|
89
50
|
nidx_api_address: Optional[str] = Field(default=None, description="NIDX gRPC API address")
|
90
51
|
nidx_searcher_address: Optional[str] = Field(
|
91
52
|
default=None, description="NIDX gRPC searcher API address"
|
nucliadb/standalone/config.py
CHANGED
@@ -22,7 +22,7 @@ import logging
|
|
22
22
|
import os
|
23
23
|
|
24
24
|
from nucliadb.common.cluster.settings import StandaloneNodeRole
|
25
|
-
from nucliadb.standalone.settings import Settings
|
25
|
+
from nucliadb.standalone.settings import Settings
|
26
26
|
|
27
27
|
logger = logging.getLogger(__name__)
|
28
28
|
|
@@ -76,7 +76,6 @@ def config_nucliadb(nucliadb_args: Settings):
|
|
76
76
|
use some specific settings.
|
77
77
|
"""
|
78
78
|
|
79
|
-
from nucliadb.common.cluster.settings import ClusterDiscoveryMode
|
80
79
|
from nucliadb.common.cluster.settings import settings as cluster_settings
|
81
80
|
from nucliadb.ingest.settings import settings as ingest_settings
|
82
81
|
from nucliadb.train.settings import settings as train_settings
|
@@ -91,14 +90,8 @@ def config_nucliadb(nucliadb_args: Settings):
|
|
91
90
|
|
92
91
|
cluster_settings.standalone_mode = True
|
93
92
|
cluster_settings.data_path = nucliadb_args.data_path
|
94
|
-
cluster_settings.standalone_node_port = nucliadb_args.standalone_node_port
|
95
93
|
cluster_settings.standalone_node_role = nucliadb_args.standalone_node_role
|
96
94
|
|
97
|
-
if nucliadb_args.cluster_discovery_mode == StandaloneDiscoveryMode.DEFAULT:
|
98
|
-
# default for standalone is single node
|
99
|
-
cluster_settings.cluster_discovery_mode = ClusterDiscoveryMode.SINGLE_NODE
|
100
|
-
cluster_settings.node_replicas = 1
|
101
|
-
|
102
95
|
ingest_settings.nuclia_partitions = 1
|
103
96
|
ingest_settings.replica_number = 0
|
104
97
|
ingest_settings.partitions = ["1"]
|
nucliadb/standalone/run.py
CHANGED
@@ -99,10 +99,7 @@ def run():
|
|
99
99
|
"Admin UI": f"http://{settings.http_host}:{settings.http_port}/admin",
|
100
100
|
"Key-value backend": ingest_settings.driver.value,
|
101
101
|
"Blob storage backend": storage_settings.file_backend.value,
|
102
|
-
"Cluster discovery mode": cluster_settings.cluster_discovery_mode.value,
|
103
|
-
"Node replicas": cluster_settings.node_replicas,
|
104
102
|
"Index data path": os.path.realpath(cluster_settings.data_path),
|
105
|
-
"Node port": cluster_settings.standalone_node_port,
|
106
103
|
"Auth policy": settings.auth_policy.value,
|
107
104
|
"Node role": cluster_settings.standalone_node_role.value,
|
108
105
|
}
|
nucliadb/standalone/settings.py
CHANGED
@@ -30,13 +30,6 @@ from nucliadb_utils.settings import StorageSettings
|
|
30
30
|
from nucliadb_utils.storages.settings import Settings as ExtendedStorageSettings
|
31
31
|
|
32
32
|
|
33
|
-
class StandaloneDiscoveryMode(Enum):
|
34
|
-
DEFAULT = "default"
|
35
|
-
MANUAL = "manual"
|
36
|
-
KUBERNETES = "kubernetes"
|
37
|
-
SINGLE_NODE = "single_node"
|
38
|
-
|
39
|
-
|
40
33
|
class AuthPolicy(Enum):
|
41
34
|
UPSTREAM_NAIVE = "upstream_naive"
|
42
35
|
UPSTREAM_AUTH_HEADER = "upstream_auth_header"
|
@@ -60,8 +53,6 @@ class Settings(DriverSettings, StorageSettings, ExtendedStorageSettings):
|
|
60
53
|
http_port: int = pydantic.Field(default=8080, description="HTTP Port")
|
61
54
|
ingest_grpc_port: int = pydantic.Field(default=8030, description="Ingest GRPC Port")
|
62
55
|
train_grpc_port: int = pydantic.Field(default=8031, description="Train GRPC Port")
|
63
|
-
standalone_node_port: int = pydantic.Field(default=10009, description="Node GRPC Port")
|
64
|
-
|
65
56
|
auth_policy: AuthPolicy = pydantic.Field(
|
66
57
|
default=AuthPolicy.UPSTREAM_NAIVE,
|
67
58
|
description="""Auth policy to use for http requests.
|
@@ -111,8 +102,6 @@ Examples:
|
|
111
102
|
description="JWK key used for temporary token generation and validation.",
|
112
103
|
)
|
113
104
|
|
114
|
-
cluster_discovery_mode: StandaloneDiscoveryMode = StandaloneDiscoveryMode.DEFAULT
|
115
|
-
|
116
105
|
fork: bool = pydantic.Field(default=False, description="Fork process on startup")
|
117
106
|
|
118
107
|
# Standalone logging settings
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: nucliadb
|
3
|
-
Version: 6.3.1.
|
3
|
+
Version: 6.3.1.post3549
|
4
4
|
Summary: NucliaDB
|
5
5
|
Author-email: Nuclia <nucliadb@nuclia.com>
|
6
6
|
License: AGPL
|
@@ -20,11 +20,11 @@ Classifier: Programming Language :: Python :: 3.12
|
|
20
20
|
Classifier: Programming Language :: Python :: 3 :: Only
|
21
21
|
Requires-Python: <4,>=3.9
|
22
22
|
Description-Content-Type: text/markdown
|
23
|
-
Requires-Dist: nucliadb-telemetry[all]>=6.3.1.
|
24
|
-
Requires-Dist: nucliadb-utils[cache,fastapi,storages]>=6.3.1.
|
25
|
-
Requires-Dist: nucliadb-protos>=6.3.1.
|
26
|
-
Requires-Dist: nucliadb-models>=6.3.1.
|
27
|
-
Requires-Dist: nidx-protos>=6.3.1.
|
23
|
+
Requires-Dist: nucliadb-telemetry[all]>=6.3.1.post3549
|
24
|
+
Requires-Dist: nucliadb-utils[cache,fastapi,storages]>=6.3.1.post3549
|
25
|
+
Requires-Dist: nucliadb-protos>=6.3.1.post3549
|
26
|
+
Requires-Dist: nucliadb-models>=6.3.1.post3549
|
27
|
+
Requires-Dist: nidx-protos>=6.3.1.post3549
|
28
28
|
Requires-Dist: nucliadb-admin-assets>=1.0.0.post1224
|
29
29
|
Requires-Dist: nuclia-models>=0.24.2
|
30
30
|
Requires-Dist: uvicorn
|
@@ -16,7 +16,7 @@ migrations/0016_upgrade_to_paragraphs_v2.py,sha256=9eepvzme-nb_mw6rwIdjjJzbFcpOq
|
|
16
16
|
migrations/0017_multiple_writable_shards.py,sha256=HSi-eXXI0kO9sLgunUMuVpFnYMjVhWTVfDS_lIjlkuM,2095
|
17
17
|
migrations/0018_purge_orphan_kbslugs.py,sha256=ztEOAjqlWVagv1UMg_sOm8HaW6S9FoDOIg7-rZ05tro,2177
|
18
18
|
migrations/0019_upgrade_to_paragraphs_v3.py,sha256=zP13_IKE7u4ox2gyc493L2_ewyiPlr7Csn5K6n5eylI,2479
|
19
|
-
migrations/0020_drain_nodes_from_cluster.py,sha256=
|
19
|
+
migrations/0020_drain_nodes_from_cluster.py,sha256=BeECAI0T8u14M2U5USl1fFNcsfmdMerNhisolYQN_eA,1411
|
20
20
|
migrations/0021_overwrite_vectorsets_key.py,sha256=O6nb2a7kDFX9I3XFrVtudCUyKptpGyv2_GYvcvbQOI8,1583
|
21
21
|
migrations/0022_fix_paragraph_deletion_bug.py,sha256=-tH342VXF-8xwc_h3P1cYaUtTT1wHSGf7ZoeVEpnaYs,1422
|
22
22
|
migrations/0023_backfill_pg_catalog.py,sha256=gw22pU5cAtg2a7n7xVaVqT2itjAoDMNtzWwTllwqIvg,2993
|
@@ -58,11 +58,10 @@ nucliadb/common/cluster/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIX
|
|
58
58
|
nucliadb/common/cluster/base.py,sha256=kklDqyvsubNX0W494ttl9f3E58lGaX6AXqAd8XX8ZHE,5522
|
59
59
|
nucliadb/common/cluster/exceptions.py,sha256=t7v_l93t44l2tQpdQXgO_w-c4YZRcaayOz1A2i0w4RQ,1258
|
60
60
|
nucliadb/common/cluster/grpc_node_dummy.py,sha256=LxONv0mhDFhx7mI91qqGfQlQ-R0qOGDYaxhXoBHLXaE,3548
|
61
|
-
nucliadb/common/cluster/index_node.py,sha256=g38H1kiAliF3Y6et_CWYInpn_xPxf7THAFJ7RtgLNZo,3246
|
62
61
|
nucliadb/common/cluster/manager.py,sha256=KIzqAYGgdVK3GicJ9LdLoei8arWZ7H60imbc32USPj4,12754
|
63
62
|
nucliadb/common/cluster/rebalance.py,sha256=cLUlR08SsqmnoA_9GDflV6k2tXmkAPpyFxZErzp45vo,8754
|
64
63
|
nucliadb/common/cluster/rollover.py,sha256=iTJ9EQmHbzXL34foNFto-hqdC0Kq1pF1mNxqv0jqhBs,25362
|
65
|
-
nucliadb/common/cluster/settings.py,sha256=
|
64
|
+
nucliadb/common/cluster/settings.py,sha256=JPwV_0U_i618Tn66GWUq6qCKNjy4TWkGEGld9GwH5uk,2048
|
66
65
|
nucliadb/common/cluster/utils.py,sha256=7nQvnVFxM4XV7J560R8hUA-GPzrgD19UlQxHrl4mZUc,4687
|
67
66
|
nucliadb/common/cluster/standalone/__init__.py,sha256=itSI7dtTwFP55YMX4iK7JzdMHS5CQVUiB1XzQu4UBh8,833
|
68
67
|
nucliadb/common/cluster/standalone/utils.py,sha256=af3r-x_GF7A6dwIAhZLR-r-SZQEVxsFrDKeMfUTA6G0,1908
|
@@ -113,7 +112,6 @@ nucliadb/export_import/tasks.py,sha256=yPNdBdvTD7eGc7zvV9Rp7UZ0-mDhA34OOsLqHvns_
|
|
113
112
|
nucliadb/export_import/utils.py,sha256=iAQAjYuNx0dhM2b5-1A0NEs8tSRsznuT-izysUrTwS0,19986
|
114
113
|
nucliadb/ingest/__init__.py,sha256=fsw3C38VP50km3R-nHL775LNGPpJ4JxqXJ2Ib1f5SqE,1011
|
115
114
|
nucliadb/ingest/app.py,sha256=rX1KE5vsAzG9hlArBk8WE2SOlvdYylcb-jNkMQNPJdQ,7407
|
116
|
-
nucliadb/ingest/cache.py,sha256=w7jMMzamOmQ7gwXna6Dqm6isRNBVv6l5BTBlTxaYWjE,1005
|
117
115
|
nucliadb/ingest/partitions.py,sha256=2NIhMYbNT0TNBL6bX1UMSi7vxFGICstCKEqsB0TXHOE,2410
|
118
116
|
nucliadb/ingest/processing.py,sha256=8OggvuxNzktTTKDTUwsIuazhDParEWhn46CBZaMYAy8,20659
|
119
117
|
nucliadb/ingest/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -258,13 +256,13 @@ nucliadb/standalone/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20
|
|
258
256
|
nucliadb/standalone/api_router.py,sha256=hgq9FXpihzgjHkwcVGfGCSwyXy67fqXTfLFHuINzIi0,5567
|
259
257
|
nucliadb/standalone/app.py,sha256=mAApNK_iVsQgJyd-mtwCeZq5csSimwnXmlQGH9a70pE,5586
|
260
258
|
nucliadb/standalone/auth.py,sha256=UwMv-TywhMZabvVg3anQLeCRdoHDnWf2o3luvnoNBjs,7670
|
261
|
-
nucliadb/standalone/config.py,sha256=
|
259
|
+
nucliadb/standalone/config.py,sha256=hJ3p4dBRSsj5FOmIgAiEX9ZsAGUYd1W-_UJIol5LCCg,4967
|
262
260
|
nucliadb/standalone/lifecycle.py,sha256=rdKLG-oOLN4rfd2VGG_2vlDUWYneWSCiuEhoeiFKfnM,2343
|
263
261
|
nucliadb/standalone/migrations.py,sha256=s9-3RSZ-O3bjEw2TnBe_YWLUEKbub0bARUxi1gA3yuY,1950
|
264
262
|
nucliadb/standalone/purge.py,sha256=ZY-cebb214FFiPG7OFmXZGg0G3CK5Amw0FLLm9WJhKE,1343
|
265
263
|
nucliadb/standalone/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
266
|
-
nucliadb/standalone/run.py,sha256=
|
267
|
-
nucliadb/standalone/settings.py,sha256=
|
264
|
+
nucliadb/standalone/run.py,sha256=0QKEAT6pCaLvnuxTG3RltTlhE2g5-HI21KbOWfusBGE,5425
|
265
|
+
nucliadb/standalone/settings.py,sha256=fbgqVT37XB2cJHJARnR19MO_dz6NLbkuIC2okH7J80o,5714
|
268
266
|
nucliadb/standalone/versions.py,sha256=8CxNMNt2NgWM8ct50UsR4d44-ae7wtQI-sV-yGiFqyI,3508
|
269
267
|
nucliadb/standalone/static/favicon.ico,sha256=96pKGp6Sx457JkTfjy1dtApMhkitixfU6invCUGAYOU,2285
|
270
268
|
nucliadb/standalone/static/index.html,sha256=PEZfuEQFYnYACAL1ceN8xC0im8lBrUx838RkE8tbvgA,3833
|
@@ -349,8 +347,8 @@ nucliadb/writer/tus/local.py,sha256=7jYa_w9b-N90jWgN2sQKkNcomqn6JMVBOVeDOVYJHto,
|
|
349
347
|
nucliadb/writer/tus/s3.py,sha256=vF0NkFTXiXhXq3bCVXXVV-ED38ECVoUeeYViP8uMqcU,8357
|
350
348
|
nucliadb/writer/tus/storage.py,sha256=ToqwjoYnjI4oIcwzkhha_MPxi-k4Jk3Lt55zRwaC1SM,2903
|
351
349
|
nucliadb/writer/tus/utils.py,sha256=MSdVbRsRSZVdkaum69_0wku7X3p5wlZf4nr6E0GMKbw,2556
|
352
|
-
nucliadb-6.3.1.
|
353
|
-
nucliadb-6.3.1.
|
354
|
-
nucliadb-6.3.1.
|
355
|
-
nucliadb-6.3.1.
|
356
|
-
nucliadb-6.3.1.
|
350
|
+
nucliadb-6.3.1.post3549.dist-info/METADATA,sha256=zRXMEsuY63780s274oEzv-I_wLynIyYEfW8iLptlP-U,4291
|
351
|
+
nucliadb-6.3.1.post3549.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
|
352
|
+
nucliadb-6.3.1.post3549.dist-info/entry_points.txt,sha256=XqGfgFDuY3zXQc8ewXM2TRVjTModIq851zOsgrmaXx4,1268
|
353
|
+
nucliadb-6.3.1.post3549.dist-info/top_level.txt,sha256=hwYhTVnX7jkQ9gJCkVrbqEG1M4lT2F_iPQND1fCzF80,20
|
354
|
+
nucliadb-6.3.1.post3549.dist-info/RECORD,,
|
@@ -1,77 +0,0 @@
|
|
1
|
-
# Copyright (C) 2021 Bosutech XXI S.L.
|
2
|
-
#
|
3
|
-
# nucliadb is offered under the AGPL v3.0 and as commercial software.
|
4
|
-
# For commercial licensing, contact us at info@nuclia.com.
|
5
|
-
#
|
6
|
-
# AGPL:
|
7
|
-
# This program is free software: you can redistribute it and/or modify
|
8
|
-
# it under the terms of the GNU Affero General Public License as
|
9
|
-
# published by the Free Software Foundation, either version 3 of the
|
10
|
-
# License, or (at your option) any later version.
|
11
|
-
#
|
12
|
-
# This program is distributed in the hope that it will be useful,
|
13
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
-
# GNU Affero General Public License for more details.
|
16
|
-
#
|
17
|
-
# You should have received a copy of the GNU Affero General Public License
|
18
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
-
#
|
20
|
-
from typing import Optional
|
21
|
-
|
22
|
-
from lru import LRU
|
23
|
-
|
24
|
-
from nucliadb.common.cluster.base import AbstractIndexNode
|
25
|
-
from nucliadb.common.cluster.grpc_node_dummy import DummyReaderStub, DummyWriterStub
|
26
|
-
from nucliadb.ingest import SERVICE_NAME
|
27
|
-
from nucliadb_protos.nodereader_pb2_grpc import NodeReaderStub
|
28
|
-
from nucliadb_protos.nodewriter_pb2_grpc import NodeWriterStub
|
29
|
-
from nucliadb_utils.grpc import get_traced_grpc_channel
|
30
|
-
|
31
|
-
from .settings import settings
|
32
|
-
|
33
|
-
READ_CONNECTIONS = LRU(50) # type: ignore
|
34
|
-
WRITE_CONNECTIONS = LRU(50) # type: ignore
|
35
|
-
|
36
|
-
|
37
|
-
class IndexNode(AbstractIndexNode):
|
38
|
-
_writer: Optional[NodeWriterStub] = None
|
39
|
-
_reader: Optional[NodeReaderStub] = None
|
40
|
-
|
41
|
-
def _get_service_address(self, port_map: dict[str, int], port: Optional[int]) -> str:
|
42
|
-
hostname = self.address.split(":")[0]
|
43
|
-
if port is None:
|
44
|
-
# For testing purposes we need to be able to have a writing port
|
45
|
-
port = port_map[hostname]
|
46
|
-
grpc_address = f"localhost:{port}"
|
47
|
-
else:
|
48
|
-
grpc_address = f"{hostname}:{port}"
|
49
|
-
return grpc_address
|
50
|
-
|
51
|
-
@property
|
52
|
-
def writer(self) -> NodeWriterStub:
|
53
|
-
if self._writer is None or self.address not in WRITE_CONNECTIONS:
|
54
|
-
if not self.dummy:
|
55
|
-
grpc_address = self._get_service_address(
|
56
|
-
settings.writer_port_map, settings.node_writer_port
|
57
|
-
)
|
58
|
-
channel = get_traced_grpc_channel(grpc_address, SERVICE_NAME, variant="_writer")
|
59
|
-
WRITE_CONNECTIONS[self.address] = NodeWriterStub(channel)
|
60
|
-
else:
|
61
|
-
WRITE_CONNECTIONS[self.address] = DummyWriterStub()
|
62
|
-
self._writer = WRITE_CONNECTIONS[self.address]
|
63
|
-
return self._writer # type: ignore
|
64
|
-
|
65
|
-
@property
|
66
|
-
def reader(self) -> NodeReaderStub:
|
67
|
-
if self._reader is None or self.address not in READ_CONNECTIONS:
|
68
|
-
if not self.dummy:
|
69
|
-
grpc_address = self._get_service_address(
|
70
|
-
settings.reader_port_map, settings.node_reader_port
|
71
|
-
)
|
72
|
-
channel = get_traced_grpc_channel(grpc_address, SERVICE_NAME, variant="_reader")
|
73
|
-
READ_CONNECTIONS[self.address] = NodeReaderStub(channel)
|
74
|
-
else:
|
75
|
-
READ_CONNECTIONS[self.address] = DummyReaderStub()
|
76
|
-
self._reader = READ_CONNECTIONS[self.address]
|
77
|
-
return self._reader # type: ignore
|
nucliadb/ingest/cache.py
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
# Copyright (C) 2021 Bosutech XXI S.L.
|
2
|
-
#
|
3
|
-
# nucliadb is offered under the AGPL v3.0 and as commercial software.
|
4
|
-
# For commercial licensing, contact us at info@nuclia.com.
|
5
|
-
#
|
6
|
-
# AGPL:
|
7
|
-
# This program is free software: you can redistribute it and/or modify
|
8
|
-
# it under the terms of the GNU Affero General Public License as
|
9
|
-
# published by the Free Software Foundation, either version 3 of the
|
10
|
-
# License, or (at your option) any later version.
|
11
|
-
#
|
12
|
-
# This program is distributed in the hope that it will be useful,
|
13
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
-
# GNU Affero General Public License for more details.
|
16
|
-
#
|
17
|
-
# You should have received a copy of the GNU Affero General Public License
|
18
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
-
#
|
20
|
-
from nucliadb.common.cluster.index_node import READ_CONNECTIONS, WRITE_CONNECTIONS
|
21
|
-
|
22
|
-
|
23
|
-
def clear_ingest_cache():
|
24
|
-
READ_CONNECTIONS.clear()
|
25
|
-
WRITE_CONNECTIONS.clear()
|
File without changes
|
File without changes
|
File without changes
|