core: go.gazette.dev/core/broker/journalspace Index | Files

package journalspace

import "go.gazette.dev/core/broker/journalspace"

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

Package Files

node.go

type Node Uses

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 Uses

func FromListResponse(resp *pb.ListResponse) Node

FromListResponse builds a tree from a ListResponse, and returns its root Node.

func (*Node) Hoist Uses

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 Uses

func (n Node) IsDir() bool

IsDir returns whether the Node.JournalSpec.Name is empty or ends in a slash ('/').

func (*Node) MarkUnpatchedForDeletion Uses

func (n *Node) MarkUnpatchedForDeletion()

MarkUnpatchedForDeletion sets Delete for each terminal Node of the tree which has not been Patched.

func (*Node) Patch Uses

func (n *Node) Patch(p Node) *Node

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 Uses

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.

func (*Node) Validate Uses

func (n *Node) Validate() error

Validate returns an error if the Node hierarchy is not well formed. Note that Validate does *not* also Validate contained JournalSpecs, as partial or incomplete JournalSpecs are permitted within a Node hierarchy. They must be checked separately.

func (*Node) WalkTerminalNodes Uses

func (n *Node) WalkTerminalNodes(cb func(*Node) error) error

WalkTerminalNodes invokes the callback for each of the terminal Nodes of the tree. A returned error aborts the recursive walk, and is returned.

Package journalspace imports 3 packages (graph) and is imported by 1 packages. Updated 2020-08-03. Refresh now. Tools for package owners.