Add design notes for build state
This commit is contained in:
parent
022868b7b0
commit
ac567240ea
1 changed files with 21 additions and 0 deletions
|
|
@ -7,6 +7,27 @@ use serde::{Deserialize, Serialize};
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Design Notes
|
||||||
|
|
||||||
|
The build state struct is the heart of the service and orchestrator, adapting build events to
|
||||||
|
higher level questions about build state. One temptation is to implement the build state as a set
|
||||||
|
of hierarchically defined reducers, to achieve information hiding and factor system capabilities and
|
||||||
|
state tracking simply. Unfortunately, to update state based on an event, you need a mutable borrow
|
||||||
|
of some part of the build state (that the reducer controls, for instance), and an immutable borrow
|
||||||
|
of the whole state for read/query purposes. The whole state needs to be available to handle state
|
||||||
|
updates like "this is the list of currently active job runs" in response to a job run event. Put
|
||||||
|
simply, this isn't possible without introducing some locking of the whole state and mutable state
|
||||||
|
subset, since they would conflict (the mutable subset would have already been borrowed, so can't
|
||||||
|
be borrowed immutably as part of the whole state borrow). You might also define a "query" phase
|
||||||
|
in which reducers query the state based on the received event, but that just increases complexity.
|
||||||
|
|
||||||
|
Instead, databuild opts for an entity-component system (ECS) that just provides the whole build
|
||||||
|
state mutably to all state update functionality, trusting that we know how to use it responsibly.
|
||||||
|
This means no boxing or "query phase", and means we can have all state updates happen as map lookups
|
||||||
|
and updates, which is exceptionally fast.
|
||||||
|
*/
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct BuildState {
|
pub struct BuildState {
|
||||||
wants: BTreeMap<String, WantDetail>,
|
wants: BTreeMap<String, WantDetail>,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue