Documentation ¶
Overview ¶
Package journalspace provides mechanisms for mapping a collection of JournalSpecs into a minimally-described hierarchical structure, and for mapping back again. This is principally useful for tooling over JournalSpecs, which must be written to (& read from) Etcd in fully-specified and explicit form (a representation which is great for implementors, but rather tedious for cluster operators to work with). Tooling can map JournalSpecs into a tree, allow the operator to apply edits in that hierarchical space, and then flatten resulting changes for storage back to Etcd.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Node ¶
type Node struct { // Comment is a no-op field which allows tooling to generate and pass-through // comments in written YAML output. Comment string `yaml:",omitempty"` // Delete marks that a Node, and all Nodes which it parents, should be deleted. Delete *bool `yaml:",omitempty"` // JournalSpec of the Node, which may be partial and incomplete. Specs apply // hierarchically, where Nodes having zero-valued fields inherit those of // their parent, and parent Nodes may only have a subset of fields specified. // A Node is understood to be a "directory" Node if it ends in a slash '/', // and a literal or terminal Node otherwise. Spec pb.JournalSpec `yaml:",omitempty,inline"` // Revision of the Journal within Etcd. Non-zero for non-directory Nodes only. Revision int64 `yaml:",omitempty"` // Children of this Node. Directory Nodes must have one or more Children, and // non-directory terminal Nodes may not have any. Children []Node `yaml:",omitempty"` // contains filtered or unexported fields }
Node represents a collection of JournalSpecs which are related by hierarchical path components, and which may share common portions of their journal specifications.
func FromListResponse ¶
func FromListResponse(resp *pb.ListResponse) Node
FromListResponse builds a tree from a ListResponse, and returns its root Node.
func (*Node) Hoist ¶
func (n *Node) Hoist()
Hoist recursively hoists specification values which are common across each of a Node's children into the Node itself. Hoisted values are then zeroed at each of the Node's children.
func (Node) IsDir ¶
IsDir returns whether the Node.JournalSpec.Name is empty or ends in a slash ('/').
func (*Node) MarkUnpatchedForDeletion ¶
func (n *Node) MarkUnpatchedForDeletion()
MarkUnpatchedForDeletion sets Delete for each terminal Node of the tree which has not been Patched.
func (*Node) Patch ¶
Patch |p| into the tree rooted by the Node, inserting it if required and otherwise updating with fields of |p| which are not zero-valued. Patch returns a reference to the patched *Node, which may also be inspected and updated directly. However, note the returned *Node is invalidated with the next call to Patch.
func (*Node) PushDown ¶
func (n *Node) PushDown()
PushDown specification values from parent Nodes to children, recursively copying fields from parent to child where the child field is zero-valued. After PushDownSpecs, the hierarchically-implied configuration of each terminal made explicit in the representation of that Node.