Clarify pubsub durability boundary
This commit is contained in:
parent
475c6a4a2a
commit
2b690d6b42
5 changed files with 13 additions and 8 deletions
|
|
@ -210,9 +210,11 @@ older than the local value.
|
||||||
Remote pubsub publish uses the protected Iroh control path too. The remote peer
|
Remote pubsub publish uses the protected Iroh control path too. The remote peer
|
||||||
requires `pubsub.publish` on `resource:pubsub:<topic>` before recording the
|
requires `pubsub.publish` on `resource:pubsub:<topic>` before recording the
|
||||||
message in its local daemon-lifetime ring buffer. Pubsub remains lossy and is
|
message in its local daemon-lifetime ring buffer. Pubsub remains lossy and is
|
||||||
not durable storage. Remote pubsub subscribe uses the same protected path and
|
not durable storage; facts that must survive restart or reconcile offline
|
||||||
requires `pubsub.subscribe` on `resource:pubsub:<topic>` before returning the
|
belong in CAS, KV, document, or DB resources. Remote pubsub subscribe uses the
|
||||||
peer's current daemon-lifetime snapshot for that topic.
|
same protected path and requires `pubsub.subscribe` on
|
||||||
|
`resource:pubsub:<topic>` before returning the peer's current daemon-lifetime
|
||||||
|
snapshot for that topic.
|
||||||
Remote pipe connect uses the same protected Iroh control path and requires
|
Remote pipe connect uses the same protected Iroh control path and requires
|
||||||
`pipe.connect` on `resource:pipe:<name>`. The current prototype records a remote
|
`pipe.connect` on `resource:pipe:<name>`. The current prototype records a remote
|
||||||
connection attempt and whether a listener exists. `geth pipe send <name>
|
connection attempt and whether a listener exists. `geth pipe send <name>
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ pub fn validate_message(message: &str) -> Result<(), PubsubError> {
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn pubsub_storage_warning() -> &'static str {
|
pub fn pubsub_storage_warning() -> &'static str {
|
||||||
"pubsub is lossy notification transport, not authoritative storage"
|
"pubsub is lossy notification transport, not authoritative storage; durable facts belong in CAS, KV, documents, or DB resources"
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|
|
||||||
|
|
@ -1554,6 +1554,7 @@ fn pubsub_pub_sub_uses_lossy_in_memory_runtime() {
|
||||||
assert_eq!(messages.len(), 1);
|
assert_eq!(messages.len(), 1);
|
||||||
assert_eq!(messages[0].message, "online");
|
assert_eq!(messages[0].message, "online");
|
||||||
assert!(note.contains("not authoritative storage"));
|
assert!(note.contains("not authoritative storage"));
|
||||||
|
assert!(note.contains("CAS, KV, documents, or DB resources"));
|
||||||
}
|
}
|
||||||
other => panic!("unexpected response: {other:?}"),
|
other => panic!("unexpected response: {other:?}"),
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -196,9 +196,11 @@ encoding and sync are future work.
|
||||||
`geth-pubsub` currently supports local publish/subscribe snapshots through the
|
`geth-pubsub` currently supports local publish/subscribe snapshots through the
|
||||||
daemon control protocol. Messages live in a bounded in-memory ring buffer and
|
daemon control protocol. Messages live in a bounded in-memory ring buffer and
|
||||||
are lost when the daemon stops. This is deliberate: pubsub is a lossy wakeup and
|
are lost when the daemon stops. This is deliberate: pubsub is a lossy wakeup and
|
||||||
presence channel, not authoritative storage. `geth pubsub pub <topic> <message>
|
presence channel, not authoritative storage. Durable facts must be written to
|
||||||
--node <node-id>` can publish to an imported peer over the protected Iroh
|
CAS, KV, document, or DB resources before pubsub is used as a wakeup. `geth
|
||||||
control ALPN. The remote daemon validates endpoint/card binding and requires
|
pubsub pub <topic> <message> --node <node-id>` can publish to an imported peer
|
||||||
|
over the protected Iroh control ALPN. The remote daemon validates endpoint/card
|
||||||
|
binding and requires
|
||||||
`pubsub.publish` on `resource:pubsub:<topic>` before recording the message in
|
`pubsub.publish` on `resource:pubsub:<topic>` before recording the message in
|
||||||
its local ring buffer. `geth pubsub sub <topic> --node <node-id>` can read an
|
its local ring buffer. `geth pubsub sub <topic> --node <node-id>` can read an
|
||||||
authorized peer's current snapshot for that topic over the same protected path
|
authorized peer's current snapshot for that topic over the same protected path
|
||||||
|
|
|
||||||
|
|
@ -350,7 +350,7 @@ authorization and durable-state boundaries clear.
|
||||||
`resource:pubsub:<topic>`.
|
`resource:pubsub:<topic>`.
|
||||||
- `[x]` Tests cover denied and allowed remote pubsub subscribe.
|
- `[x]` Tests cover denied and allowed remote pubsub subscribe.
|
||||||
- `[ ]` Replace bootstrap remote publish with iroh-gossip topics.
|
- `[ ]` Replace bootstrap remote publish with iroh-gossip topics.
|
||||||
- `[ ]` Docs and tests keep durable state in CAS/KV/document/db instead.
|
- `[x]` Docs and tests keep durable state in CAS/KV/document/db instead.
|
||||||
|
|
||||||
## Phase 4: Pipes, SSH Proxy, And SSH Distribution
|
## Phase 4: Pipes, SSH Proxy, And SSH Distribution
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue