View Source
const (

	// HistoryWindow specifies how far back to query results history by
	// default.
	HistoryWindow = 2 * year

	// ClockDriftBuffer how much time to add to the current time when
	// using it as a default upper bound for the query window.
	ClockDriftBuffer = 5 * time.Minute
View Source
const MaxNodes = 10000

MaxNodes is the maximum number of invocation nodes that ResultDB can operate on at a time.

View Source
const Shards = 100

Shards is the sharding level for the Invocations table. Column Invocations.ShardId is a value in range [0, Shards).


View Source
var ErrUnknownReach = fmt.Errorf("the reachable set is unknown")

ErrUnknownReach is returned by ReachCache.Read if the cached value is absent.

View Source
var TooManyTag = errors.BoolTag{
	Key: errors.NewTagKey("too many matching invocations matched the condition"),

TooManyTag set in an error indicates that too many invocations matched a condition.


func ByTimestamp

func ByTimestamp(ctx context.Context, realm string, timeRange *pb.TimeRange, callback func(inv ID, ts *timestamp.Timestamp) error) error

ByTimestamp queries indexed invocations in a given time range. It executes the callback once for each row, starting with the most recent.

func CurrentMaxShard

func CurrentMaxShard(ctx context.Context) (int, error)

CurrentMaxShard reads the highest shard id in the Invocations table. This may differ from the constant above when it has changed recently.

func InclusionKey

func InclusionKey(including, included ID) spanner.Key

InclusionKey returns a spanner key for an Inclusion row.

func Read

func Read(ctx context.Context, id ID) (*pb.Invocation, error)

Read reads one invocation from Spanner. If the invocation does not exist, the returned error is annotated with NotFound GRPC code.

func ReadBatch

func ReadBatch(ctx context.Context, ids IDSet) (map[ID]*pb.Invocation, error)

ReadBatch reads multiple invocations from Spanner. If any of them are not found, returns an error.

func ReadColumns

func ReadColumns(ctx context.Context, id ID, ptrMap map[string]interface{}) error

ReadColumns reads the specified columns from an invocation Spanner row. If the invocation does not exist, the returned error is annotated with NotFound GRPC code. For ptrMap see ReadRow comment in span/util.go.

func ReadRealm

func ReadRealm(ctx context.Context, id ID) (string, error)

ReadRealm returns the invocation's realm.

func ReadRealms

func ReadRealms(ctx context.Context, ids IDSet) (realms map[ID]string, err error)

ReadRealms returns the invocations' realms. Makes a single RPC.

func ReadState

func ReadState(ctx context.Context, id ID) (pb.Invocation_State, error)

ReadState returns the invocation's state.

func ReadStateBatch

func ReadStateBatch(ctx context.Context, ids IDSet) (map[ID]pb.Invocation_State, error)

ReadStateBatch reads the states of multiple invocations.

func ReadTestResultCount

func ReadTestResultCount(ctx context.Context, ids IDSet) (int64, error)

ReadTestResultCount returns the total number of test results of requested invocations.

func ShardStatement

func ShardStatement(st spanner.Statement, invIDsParamName string) []spanner.Statement

ShardStatement splits the statement into multiple shards by invocation parameter. For example, if a query retrieves test results from a set of invocations, then ShardQuery splits the set of invocations into subsets, and returns a statement for each of them. The returned statements are ordered by invocation row id.

Users of this function must be careful with LIMIT and ORDER BY operator, because each statement would have its own LIMIT and order.

st must have a parameter with the name invIDsParamName, and it must have a type IDSet.

TODO( remove this function.

func TokenToMap

func TokenToMap(token string, dest map[string]interface{}, keys ...string) error

TokenToMap parses a page token to a map. The first component of the token is expected to be an invocation ID. Convenient to initialize Spanner statement parameters. Expects the token to be either empty or have len(keys) components. If the token is empty, sets map values to "".


type ID

type ID string

ID can convert an invocation id to various formats.

func IDFromRowID

func IDFromRowID(rowID string) ID

IDFromRowID converts a Spanner-level row ID to an ID.

func MustParseName

func MustParseName(name string) ID

MustParseName converts an invocation name to an ID. Panics if the name is invalid. Useful for situations when name was already validated.

func (*ID) FromSpanner

func (id *ID) FromSpanner(b *spanutil.Buffer) error

FromSpanner implements span.Ptr.

func (ID) Key

func (id ID) Key(suffix ...interface{}) spanner.Key

Key returns a invocation spanner key.

func (ID) Name

func (id ID) Name() string

Name returns an invocation name.

func (ID) RowID

func (id ID) RowID() string

RowID returns an invocation ID used in spanner rows. If id is empty, returns "".

func (*ID) SpannerPtr

func (id *ID) SpannerPtr(b *spanutil.Buffer) interface{}

SpannerPtr implements span.Ptr.

func (ID) ToSpanner

func (id ID) ToSpanner() interface{}

ToSpanner implements span.Value.

type IDSet

type IDSet map[ID]struct{}

IDSet is an unordered set of invocation ids.

func MustParseNames

func MustParseNames(names []string) IDSet

MustParseNames converts invocation names to IDSet. Panics if a name is invalid. Useful for situations when names were already validated.

func NewIDSet

func NewIDSet(ids ...ID) IDSet

NewIDSet creates an IDSet from members.

func ParseNames

func ParseNames(names []string) (IDSet, error)

ParseNames converts invocation names to IDSet.

func Reachable

func Reachable(ctx context.Context, roots IDSet) (IDSet, error)

Reachable returns all invocations reachable from roots along the inclusion edges. May return an appstatus-annotated error.

func ReachableSkipRootCache

func ReachableSkipRootCache(ctx context.Context, roots IDSet) (IDSet, error)

ReachableSkipRootCache is similar to Reachable, but it ignores cache for the roots.

Useful to keep cache-hit stats high in cases where the roots are known not to have cache.

func ReadIncluded

func ReadIncluded(ctx context.Context, id ID) (IDSet, error)

ReadIncluded reads ids of included invocations.

func (IDSet) Add

func (s IDSet) Add(id ID)

Add adds id to the set.

func (IDSet) Batches

func (s IDSet) Batches() []IDSet

Batches splits s into batches. The batches are sorted by RowID(), such that interval (minRowID, maxRowID) of each batch does not overlap with any other batch.

The size of batch is hardcoded 50, because that's the maximum parallelism we get from Cloud Spanner.

func (*IDSet) FromSpanner

func (s *IDSet) FromSpanner(b *spanutil.Buffer) error

FromSpanner implements span.Ptr.

func (IDSet) Has

func (s IDSet) Has(id ID) bool

Has returns true if id is in the set.

func (IDSet) Keys

func (s IDSet) Keys(suffix ...interface{}) spanner.KeySet

Keys returns a spanner.KeySet.

func (IDSet) Names

func (s IDSet) Names() []string

Names returns a sorted slice of invocation names.

func (IDSet) Remove

func (s IDSet) Remove(id ID)

Remove removes id from the set if it was present.

func (IDSet) SortByRowID

func (s IDSet) SortByRowID() []ID

SortByRowID returns IDs in the set sorted by row id.

func (*IDSet) SpannerPtr

func (s *IDSet) SpannerPtr(b *spanutil.Buffer) interface{}

SpannerPtr implements span.Ptr.

func (IDSet) String

func (s IDSet) String() string

String implements fmt.Stringer.

func (IDSet) ToSpanner

func (s IDSet) ToSpanner() interface{}

ToSpanner implements span.Value.

func (IDSet) Union

func (s IDSet) Union(other IDSet)

Union adds other ids.

type ReachCache

type ReachCache ID

ReachCache is a cache of all invocations reachable from the given invocation, stored in Redis. The cached set is either correct or absent.

The cache must be written only after the set of reachable invocations becomes immutable, i.e. when the including invocation is finalized. This is important to be able to tolerate transient Redis failures and avoid a situation where we failed to update the currently stored set, ignored the failure and then, after Redis came back online, read the stale set.

func (ReachCache) Read

func (c ReachCache) Read(ctx context.Context) (ids IDSet, err error)

Read reads the current value. Returns ErrUnknownReach if the value is absent.

If err is nil, ids includes c, even if it was not passed in Write().

func (ReachCache) TryWrite

func (c ReachCache) TryWrite(ctx context.Context, value IDSet)

TryWrite tries to write the new value. On failure, logs it.

func (ReachCache) Write

func (c ReachCache) Write(ctx context.Context, value IDSet) (err error)

Write writes the new value. The value does not have to include c, this is implied.