buscompose: the assigner may read the controller's lease, to choose where grants are read from (issue 774)

This commit is contained in:
2026-10-28 21:54:04 +01:00
parent a1a688b19e
commit 0062bdc4a6
2 changed files with 7 additions and 3 deletions
+1 -1
View File
@@ -439,7 +439,7 @@ func TestTheCopiedComposerComposesAsTheControllers(t *testing.T) {
} }
} }
announced := map[string]announce.States{ControllerSeat: ControllerAnnouncement("novox")} announced := map[string]announce.States{ControllerSeat: ControllerAnnouncement("novox")}
for reader, want := range map[string]bool{VaultSeat: true, GrantsModule: true, "mesh-delivery-view": false} { for reader, want := range map[string]bool{VaultSeat: true, GrantsModule: true, AssignerModule: true, "mesh-delivery-view": false} {
granted, _ := ReadsAnnouncedBy(reader, []string{ControllerLease}, announced) granted, _ := ReadsAnnouncedBy(reader, []string{ControllerLease}, announced)
if (len(granted) == 1) != want { if (len(granted) == 1) != want {
t.Errorf("%s reads the lease: %v, want %v", reader, granted, want) t.Errorf("%s reads the lease: %v, want %v", reader, granted, want)
+6 -2
View File
@@ -79,9 +79,13 @@ const VaultBusAccounts = "mesh-vault.bus-accounts"
// NamedReaders are the states only the modules named may read, by `<owner>.<name>`: the grants part's wanted accounts // NamedReaders are the states only the modules named may read, by `<owner>.<name>`: the grants part's wanted accounts
// are read by the vault alone (novox/hq ADR 0561 §2). // are read by the vault alone (novox/hq ADR 0561 §2).
// The controller's lease is read by the two parts that turn on at its write (ADR 0561 §3, §6). // The controller's lease is read by the two parts that turn on at its write (ADR 0561 §3, §6) and by the assigner, which
// reads the grants from the grants part from then on (ADR 0547 §4, §5; delivery.GrantSource).
var NamedReaders = map[string][]string{VaultBusAccounts: {GrantsModule}, GrantsAccounts: {VaultSeat}, var NamedReaders = map[string][]string{VaultBusAccounts: {GrantsModule}, GrantsAccounts: {VaultSeat},
ControllerLease: {VaultSeat, GrantsModule}} ControllerLease: {VaultSeat, GrantsModule, AssignerModule}}
// AssignerModule is the assigner, which reads the lease to choose the source of the grants.
const AssignerModule = "mesh-delivery-assigner"
// ReaderMay says whether module may read the state read (`<owner>.<name>`) by the named readers: always, for a state // ReaderMay says whether module may read the state read (`<owner>.<name>`) by the named readers: always, for a state
// that names none. // that names none.