The node-engine states the seats of the seat list it holds, again at each change (issue 1966)
mesh/delivery merged: source.main moved to novox/mesh-host@875b4ee5ce38
mesh/delivery-group group fix/1966-seat-reads-bootstrap merged: every member is merged
mesh/check failed (2): mesh-delivery-checker: no published of the tagged version of go-sdk of mesh-delivery…; and 1 more | 9ab85ef92e6c on 875b4ee5ce38
mesh/delivery merged: source.main moved to novox/mesh-host@875b4ee5ce38
mesh/delivery-group group fix/1966-seat-reads-bootstrap merged: every member is merged
mesh/check failed (2): mesh-delivery-checker: no published of the tagged version of go-sdk of mesh-delivery…; and 1 more | 9ab85ef92e6c on 875b4ee5ce38
manifestReads froze the statement at its first call, before the engine gave catalogue even its bootstrapped seats (ADR 0635 empties mesh-sdk's table until the list is read), so ace's engine stated no seat and its own next build, naming mesh-catalog, was held on it. The words and forms stay the build's, computed once; the seats are those of the list held now. The reader of the seat list restates after each change: the node record carries the new statement at once and the node seat's event manifest-reads-changed says it (ADR 0618 §4); an unchanged statement writes and says nothing; the verb manifest-reads answers when it was made. Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
This commit is contained in:
@@ -135,7 +135,8 @@ func (w findingsOfTheNode) Delete(f views.Finding) error {
|
||||
}
|
||||
|
||||
// startSeatList starts this run's reader: its bootstrapped seats are given to catalogue at once, and every change of what
|
||||
// it holds again, saying so to the composer and to the waiter that writes the five-minute finding.
|
||||
// it holds again, saying so to the composer and to the waiter that writes the five-minute finding, and stating again what
|
||||
// the engine reads (link.Session.RestateReads, ADR 0618 §4): the seats it states are those of the list it holds.
|
||||
func startSeatList(ctx context.Context, session *link.Session, node string, say func(string)) (*seatListState, error) {
|
||||
st := &seatListState{changed: make(chan struct{}, 1)}
|
||||
// Start returns at once and reads the seat on a goroutine, which may announce a change before the waiter exists.
|
||||
@@ -143,6 +144,9 @@ func startSeatList(ctx context.Context, session *link.Session, node string, say
|
||||
reader, err := seatlist.Start(seatlist.Config{Bus: sessionBus{ctx, session}, Bootstrap: seatlist.Bootstrapped(),
|
||||
OnChange: func(seats []catalogue.Seat) {
|
||||
catalogue.UseSeats(seats)
|
||||
// What the engine reads changed with the list: its record and its event say it (ADR 0618 §4), off the
|
||||
// reader's goroutine, which returns quickly.
|
||||
go session.RestateReads(ctx)
|
||||
if f := announce.Load(); f != nil { // the first read may end before the waiter exists
|
||||
(*f)()
|
||||
}
|
||||
@@ -162,6 +166,7 @@ func startSeatList(ctx context.Context, session *link.Session, node string, say
|
||||
}
|
||||
announce.Store(&told)
|
||||
catalogue.UseSeats(reader.Seats())
|
||||
session.RestateReads(ctx) // its first statement holds the bootstrapped seats at least (issue 1966)
|
||||
told()
|
||||
// The first read ends whether the seat answered or not, and a read that held what the reader held already says no
|
||||
// change: its end is told to the waiter and the composer, so a status that moved from reading to heard starts or ends
|
||||
@@ -170,6 +175,7 @@ func startSeatList(ctx context.Context, session *link.Session, node string, say
|
||||
select {
|
||||
case <-reader.Ready():
|
||||
catalogue.UseSeats(reader.Seats())
|
||||
session.RestateReads(ctx)
|
||||
told()
|
||||
case <-ctx.Done():
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user