python + typescript + bash: mirror the durability fixes from go/
Parity pass on the other three language templates. Same guarantees as go/: survive server restart, client restart, half-open TCP, and long outages; rejoin and drain prime-side backlog on reconnect, without the user writing any of this in process.*. python/main.py: - grpc.keepalive_time_ms=10000, keepalive_timeout_ms=3000, keepalive_permit_without_calls=1 on the channel. Half-open TCP is detected within ~13s instead of the OS default ~2h. - Exponential backoff with jitter; max_backoff_seconds config ceiling (default 120). Attempts counter resets after a session runs healthy for 60s so transient restarts don't escalate the delay. - chain_id added as a required config field and sent as the x-chain-id gRPC metadata header (prime rejects streams without it). typescript/src/main.ts: - Same keepalive options on the @grpc/grpc-js client. - Same exponential backoff + jitter logic. - chain_id added to Config + metadata. bash/: - Config + README updated. The bash template uses Python's main.py as its runtime, so the behavioural changes above flow through without a separate main per language. Docs: each README gains a "Durability guarantees" section so contract authors see the invariants without reading the runtime code.
This commit is contained in:
@@ -4,6 +4,11 @@
|
||||
# The gRPC server address to connect to
|
||||
server_address: "localhost:50051"
|
||||
|
||||
# The public chain id on which this smart contract is registered.
|
||||
# Sent as the x-chain-id gRPC metadata header — prime rejects streams
|
||||
# without it.
|
||||
chain_id: "your-chain-public-id"
|
||||
|
||||
# Your smart contract ID (provided by Dragonchain)
|
||||
smart_contract_id: "your-smart-contract-id"
|
||||
|
||||
@@ -19,6 +24,12 @@ use_tls: false
|
||||
# Number of concurrent workers for processing transactions
|
||||
num_workers: 10
|
||||
|
||||
# Reconnect settings
|
||||
reconnect_delay_seconds: 5
|
||||
# Reconnect settings. The client uses exponential backoff with jitter:
|
||||
# effective delay = min(max_backoff_seconds, reconnect_delay_seconds * 2^attempts) + random(0, reconnect_delay_seconds).
|
||||
# Keep max_reconnect_attempts at 0 (infinite) unless you have a specific
|
||||
# reason to stop — the client is designed to survive arbitrarily long
|
||||
# outages and resume processing from the prime-side queue when the
|
||||
# server returns.
|
||||
reconnect_delay_seconds: 3
|
||||
max_backoff_seconds: 120
|
||||
max_reconnect_attempts: 0 # 0 = infinite retries
|
||||
|
||||
Reference in New Issue
Block a user