buscalls: StreamPublish says an event on a module's own bound stream (A-42)
mesh/delivery merged: source.main moved to novox/mesh-sdk@8fbba810609e
mesh/delivery-group group feature/1979-zfs-owns-zfs merged: every member is merged
mesh/check being carried to 2895a21e69cd on 8fbba810609e | from e42b9491c931, mesh-catalog 117f933dacf0, mesh-delivery 7221a1e5cd7f, mesh-host 0193949…

Builds: design 42 zfs-owns-zfs §25, §24, lead answer A-42
This commit is contained in:
2026-11-13 01:47:29 +01:00
parent f84fe54c6c
commit 2895a21e69
2 changed files with 37 additions and 0 deletions
+16
View File
@@ -31,6 +31,8 @@ const (
StreamRead = "mesh/stream.read"
StreamFill = "mesh/stream.fill"
// StreamPublish says one event on the module's own bound stream (A-42).
StreamPublish = "mesh/stream.publish"
WorkQueueSize = "mesh/workqueue.size"
WorkQueueDead = "mesh/workqueue.dead"
@@ -153,6 +155,20 @@ type StreamPage struct {
Last uint64 `json:"last"`
}
// StreamPublishRequest says one event on a module's own stream, by the stream's local name: the tool runner publishes
// Body on the binding's subject plus "." plus Event, acknowledged, with ID as the message id (design 42 zfs-owns-zfs, A-42).
type StreamPublishRequest struct {
Stream string `json:"stream"`
Event string `json:"event"`
Body json.RawMessage `json:"body"`
ID string `json:"id,omitempty"`
}
// StreamPublished is publish's answer: the sequence the stream acknowledged the event at.
type StreamPublished struct {
Sequence uint64 `json:"sequence"`
}
// StreamFilled is fill's answer: the stream's fill and its first and last sequence.
type StreamFilled struct {
Fill
+21
View File
@@ -0,0 +1,21 @@
package buscalls
import (
"encoding/json"
"testing"
)
// A-42: stream.publish is a method of its own, beside read and fill, and its request and answer keep their field names.
func TestStreamPublishIsAMethodWithItsShapes(t *testing.T) {
if StreamPublish != "mesh/stream.publish" || StreamPublish == StreamRead || StreamPublish == StreamFill {
t.Fatalf("method %q", StreamPublish)
}
b, _ := json.Marshal(StreamPublishRequest{Stream: "events", Event: "scrub.requested", Body: json.RawMessage(`{"a":1}`), ID: "x"})
if string(b) != `{"stream":"events","event":"scrub.requested","body":{"a":1},"id":"x"}` {
t.Errorf("request %s", b)
}
a, _ := json.Marshal(StreamPublished{Sequence: 7})
if string(a) != `{"sequence":7}` {
t.Errorf("answer %s", a)
}
}