mirror of
https://github.com/savoirfairelinux/opendht.git
synced 2026-11-08 04:21:51 +00:00
python: expose node state persistence configuration
This commit is contained in:
1 parent
2ddf1e5ec5
commit
cf58d66282
2 files changed
+37
No files matched your search
@@ -78,6 +78,36 @@ async def dht_async_demo(key_str: str):
|
||||
asyncio.run(dht_async_demo("unique_key"))
|
||||
```
|
||||
|
||||
## Node State Persistence
|
||||
|
||||
Set the state file path before starting a node:
|
||||
|
||||
```python
|
||||
import threading
|
||||
import opendht as dht
|
||||
|
||||
config = dht.DhtConfig()
|
||||
config.setPersistPath("dht-state.msgpack")
|
||||
node = dht.DhtRunner()
|
||||
node.run(config=config)
|
||||
stopped = threading.Event()
|
||||
node.shutdown(stopped.set)
|
||||
stopped.wait()
|
||||
node.join()
|
||||
```
|
||||
|
||||
The node loads its saved DHT node ID, known peers, and stored values on startup,
|
||||
and saves state during `shutdown()`. Wait for the shutdown callback before
|
||||
calling `join()` or reusing the state path; `join()` alone does not save state.
|
||||
Port hints are
|
||||
stored in a sibling file named `<path>_port.txt`; saved ports are reused when
|
||||
available. The parent directory must already exist and be writable. Use a
|
||||
different state path for each node.
|
||||
|
||||
Persistence is disabled by default. `config.setPersistPath("")` disables it
|
||||
explicitly. This state does not include private keys or certificates; persist
|
||||
cryptographic identities separately as described below.
|
||||
|
||||
## Identity Persistence
|
||||
|
||||
Keys can be imported from PEM or DER bytes. Private keys export PKCS#8 PEM;
|
||||
|
||||
@@ -697,6 +697,13 @@ cdef class DhtConfig(object):
|
||||
self._config.dht_config.node_config.network = netid
|
||||
def setMaintainStorage(self, bool maintain_storage):
|
||||
self._config.dht_config.node_config.maintain_storage = maintain_storage
|
||||
def setPersistPath(self, str path):
|
||||
"""Set the native state file path; an empty string disables persistence."""
|
||||
if path is None:
|
||||
raise TypeError("path must be a string")
|
||||
if '\0' in path:
|
||||
raise ValueError("path must not contain NUL characters")
|
||||
self._config.dht_config.node_config.persist_path = path.encode()
|
||||
def setRateLimit(self, ssize_t max_req_per_sec, ssize_t max_peer_req_per_sec):
|
||||
self._config.dht_config.node_config.max_req_per_sec = max_req_per_sec
|
||||
self._config.dht_config.node_config.max_peer_req_per_sec = max_peer_req_per_sec
|
||||
|
||||
Reference in new issue
Block a user