Correct the grant list above FileObject to the subjects it calls, flow control and consumer delete included (issue 1695)
mesh/merge-gate head fdb59bcf4eb7 merged into trunk c5c4caa2a4ab — pass: builds mesh-host → ace, g14, novox, shanks; no bus step; every machine composes wi…
mesh/repo-check head fdb59bcf4eb7 merged into trunk c5c4caa2a4ab — pass: THE CHANGE ALTERS ITS OWN CHECK (merge-check.sh): main's version judged it; the ch…
mesh/delivery delivered
mesh/merge-gate head fdb59bcf4eb7 merged into trunk c5c4caa2a4ab — pass: builds mesh-host → ace, g14, novox, shanks; no bus step; every machine composes wi…
mesh/repo-check head fdb59bcf4eb7 merged into trunk c5c4caa2a4ab — pass: THE CHANGE ALTERS ITS OWN CHECK (merge-check.sh): main's version judged it; the ch…
mesh/delivery delivered
This commit is contained in:
+15
-10
@@ -53,18 +53,23 @@ type objectInfo struct {
|
|||||||
// anything but the object it names (novox/hq ADR 0486 §2: a node-engine's account may read by name and may neither
|
// anything but the object it names (novox/hq ADR 0486 §2: a node-engine's account may read by name and may neither
|
||||||
// list nor write).
|
// list nor write).
|
||||||
//
|
//
|
||||||
// **The bus subjects this uses, and no others** (the grant of issue 1697 is exactly these), for bucket B =
|
// **The bus subjects this uses, and no others** (the grant of issue 1697 is exactly these; reviewer's note 5 there), for
|
||||||
// declaration-files, stream S = OBJ_B, name N and its base64 (URL alphabet) form E:
|
// bucket B = declaration-files, stream S = OBJ_B, and E the base64 (URL alphabet) of the object's name:
|
||||||
//
|
//
|
||||||
// $JS.API.DIRECT.GET.S.$O.B.M.E the object's metadata: the last message of one subject, read directly
|
// request $JS.API.DIRECT.GET.S.$O.B.M.E the object's metadata. Grant only as ...DIRECT.GET.S.$O.B.M.*, never
|
||||||
// $JS.API.CONSUMER.CREATE.S.> an ordered consumer on the object's chunks (the client names it; the filter is
|
// the bare ...DIRECT.GET.S, which takes a sequence number
|
||||||
// the chunk subject, so the grant may end the subject in the filter)
|
// request $JS.API.CONSUMER.CREATE.S.<hash>.$O.B.C.<nuid>
|
||||||
// $O.B.C.<nuid> the chunks, delivered to the consumer's inbox (the node's own _INBOX.node.<name>.>)
|
// an ordered consumer on the object's chunks. Grant only as
|
||||||
// $JS.ACK / flow control none: an ordered consumer takes no acks; its flow control and heartbeats are
|
// ...CREATE.S.*.$O.B.C.*, never with ">" (a consumer filtered on
|
||||||
// published to the inbox it delivers to
|
// $O.B.M.> would read every object's name). Repeated on a reset
|
||||||
|
// subscribe a new inbox under the connection's own inbox prefix, where the chunks are delivered
|
||||||
|
// publish $JS.FC.S.> the flow-control replies of the ordered consumer; without them a
|
||||||
|
// large object stalls at the flow-control window
|
||||||
|
// request $JS.API.CONSUMER.DELETE.S.<hash> on unsubscribe; best effort, the consumer's inactivity threshold
|
||||||
|
// removes it if refused
|
||||||
//
|
//
|
||||||
// It does not call js.ObjectStore, which asks for the stream's info (a list of every object's name), nor store.Get, which
|
// It calls no STREAM.INFO and no STREAM.MSG.GET: js.ObjectStore asks for the stream's info (which lists every object's name)
|
||||||
// reads the metadata with a message get a grant cannot keep from reading by sequence.
|
// and store.Get reads the metadata with a message get a grant cannot keep from reading by sequence.
|
||||||
func (b OverNATS) FileObject(ctx context.Context, name string, limit int64) ([]byte, error) {
|
func (b OverNATS) FileObject(ctx context.Context, name string, limit int64) ([]byte, error) {
|
||||||
js := b.JS
|
js := b.JS
|
||||||
wait := 10 * time.Second
|
wait := 10 * time.Second
|
||||||
|
|||||||
Reference in New Issue
Block a user