Keep assignments in the assignments bucket and move the rows there at start (issue 1093)
Once chain_moved records the kind, Assign, Unassign and Assigned write and read the keys <node>.<module>, and every join of the store that read assignments is made from the bucket: where a module runs, what is behind, what a machine awaits, a given value due for replacement, taking a module, and whether a module may be forgotten (refused while a standing assignment names it). An unassignment ends the key with a marker and keeps its earlier values, as it removed the row; no ended or pending mark is written yet. The generation rises with each change, and a seat held by an assignment goes with it: the foreign key from seat_holding is dropped by migration 0104 and the controller says both. The provisioner's plan is kept in the values by a pass of the tick that writes that one field by compare-and-set; the assignment-changed event is said from what the bucket holds, whoever wrote it. The start moves the rows with what each machine was last sent, keeping a plan the mirror put in a value.
This commit is contained in:
+15
-2
@@ -182,8 +182,20 @@ type Chain struct {
|
||||
Rollouts Bucket[Rollout]
|
||||
Assignments Bucket[Assignment]
|
||||
|
||||
rollouts Backend
|
||||
holds Holds
|
||||
rollouts Backend
|
||||
assignments Backend
|
||||
holds Holds
|
||||
}
|
||||
|
||||
// RemoveAssignment ends an assignment's key with a marker, at the revision it was read at, only by a controller that holds
|
||||
// the lease. **The one removal the chain has**, for an unassignment in the delivery that moves the assignments: the
|
||||
// key's earlier values stay (history), and nothing is purged. The delivery after it keeps an unassigned key with an end
|
||||
// mark in its place and removes this (issue 1096). Builds and rollouts have none.
|
||||
func (c *Chain) RemoveAssignment(ctx context.Context, key string, revision uint64) error {
|
||||
if err := c.Assignments.guard(ctx, key, nil); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.assignments.Remove(ctx, key, revision)
|
||||
}
|
||||
|
||||
// RolloutsOf is the rollouts bucket typed as the controller's plan, which carries more than the chain's Rollout names:
|
||||
@@ -197,6 +209,7 @@ func New(builds, rollouts, assignments Backend, holds Holds) *Chain {
|
||||
Rollouts: Bucket[Rollout]{rollouts, holds},
|
||||
Assignments: Bucket[Assignment]{assignments, holds},
|
||||
rollouts: rollouts,
|
||||
assignments: assignments,
|
||||
holds: holds,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user