v.io: v.io/v23 Index | Files | Directories

package v23

import "v.io/v23"

Package v23 defines the runtime interface of Vanadium, and its subdirectories define the entire Vanadium public API.

Once Vanadium reaches version 1.0 these public APIs will be stable over an extended period. Changes to APIs will be managed to ensure backwards compatibility, using the same policy as http://golang.org/doc/go1compat.

This is version 0.1 - we will do our best to maintain backwards compatibility, but there's no guarantee until version 1.0.

For more information about the Vanadium project, please visit https://vanadium.github.io.

Index

Package Files

init.go model.go

func GetBackgroundContext Uses

func GetBackgroundContext(ctx *context.T) *context.T

GetBackgroundContext returns a background context. This context can be used for general background activities.

func GetClient Uses

func GetClient(ctx *context.T) rpc.Client

GetClient returns the Client in 'ctx'.

func GetListenSpec Uses

func GetListenSpec(ctx *context.T) rpc.ListenSpec

GetListenSpec returns the ListenSpec in 'ctx'.

func GetNamespace Uses

func GetNamespace(ctx *context.T) namespace.T

GetNamespace returns the Namespace in 'ctx'.

func GetPermissionsSpec Uses

func GetPermissionsSpec(ctx *context.T) access.PermissionsSpec

GetPermissionsSpec returns the Permissions for the specified name in 'ctx'.

func GetPrincipal Uses

func GetPrincipal(ctx *context.T) security.Principal

GetPrincipal returns the Principal in 'ctx'.

func GetRequestID Uses

func GetRequestID(ctx *context.T) uuid.UUID

GetRequestID returns the RequestID in 'ctx'. The underlying runtime should set a new request ID for each new request that it receives and is prepared to process.

func GetReservedNameDispatcher Uses

func GetReservedNameDispatcher(ctx *context.T) rpc.Dispatcher

GetReservedNameDispatcher returns the dispatcher used for reserved names.

func NewDiscovery Uses

func NewDiscovery(ctx *context.T) (discovery.T, error)

NewDiscovery returns a new Discovery.T instance.

func NewFlowManager Uses

func NewFlowManager(ctx *context.T, channelTimeout time.Duration) (flow.Manager, error)

NewFlowManager creates a new flow.Manager instance. channelTimeout specifies the duration we are willing to wait before determining that connections managed by this FlowManager are unhealthy and should be closed.

func RegisterRuntimeFactory Uses

func RegisterRuntimeFactory(f RuntimeFactory)

RegisterRuntimeFactory register the specified RuntimeFactory. It must be called before v23.Init; typically it will be called by an init function. It will panic if called more than once.

func WithListenSpec Uses

func WithListenSpec(ctx *context.T, ls rpc.ListenSpec) *context.T

WithListenSpec attaches a ListenSpec to the returned context.

func WithNewClient Uses

func WithNewClient(ctx *context.T, opts ...rpc.ClientOpt) (*context.T, rpc.Client, error)

WithNewClient creates a new Client instance and attaches it to a new context.

func WithNewDispatchingServer Uses

func WithNewDispatchingServer(ctx *context.T, name string, disp rpc.Dispatcher, opts ...rpc.ServerOpt) (*context.T, rpc.Server, error)

WithNewDispatchingServer creates a new flow.Manager instance and attaches it to ctx, and creates a new dispatching server on that flow.Manager.

func WithNewNamespace Uses

func WithNewNamespace(ctx *context.T, roots ...string) (*context.T, namespace.T, error)

WithNewNamespace creates a new Namespace instance and attaches it to the returned context.

func WithNewServer Uses

func WithNewServer(ctx *context.T, name string, object interface{}, auth security.Authorizer, opts ...rpc.ServerOpt) (*context.T, rpc.Server, error)

WithNewServer creates a new flow.Manager instance and attaches it to ctx, and creates a new server on that flow.Manager.

func WithPrincipal Uses

func WithPrincipal(ctx *context.T, principal security.Principal) (*context.T, error)

WithPrincipal attaches 'principal' to the returned context.

func WithReservedNameDispatcher Uses

func WithReservedNameDispatcher(ctx *context.T, d rpc.Dispatcher) *context.T

WithReservedNameDispatcher returns a context that uses the provided dispatcher to handle reserved names in particular __debug.

type Runtime Uses

type Runtime interface {
    // Init is a chance to initialize state in the runtime implementation
    // after the runtime has been registered in the v23 package.
    // Code that runs in this routine, unlike the code in the Runtime's
    // constructor, can use the v23.Get/With methods.
    Init(ctx *context.T) error

    // WithPrincipal attaches 'principal' to the returned context.
    WithPrincipal(ctx *context.T, principal security.Principal) (*context.T, error)

    // GetPrincipal returns the Principal in 'ctx'.
    GetPrincipal(ctx *context.T) security.Principal

    // WithNewClient creates a new Client instance and attaches it to a
    // new context.
    WithNewClient(ctx *context.T, opts ...rpc.ClientOpt) (*context.T, rpc.Client, error)

    // GetClient returns the Client in 'ctx'.
    GetClient(ctx *context.T) rpc.Client

    // WithNewNamespace creates a new Namespace instance and attaches it to the
    // returned context.
    WithNewNamespace(ctx *context.T, roots ...string) (*context.T, namespace.T, error)

    // GetNamespace returns the Namespace in 'ctx'.
    GetNamespace(ctx *context.T) namespace.T

    // GetListenSpec returns the ListenSpec in 'ctx'.
    GetListenSpec(ctx *context.T) rpc.ListenSpec

    // WithListenSpec attaches a ListenSpec to the returned context.
    WithListenSpec(ctx *context.T, ls rpc.ListenSpec) *context.T

    // GetPermissionSpec returns the PermissonsSpec stored in 'ctx'.
    GetPermissionsSpec(ctx *context.T) access.PermissionsSpec

    // WithBackgroundContext creates a new context derived from 'ctx'
    // with the given context set as the background context.
    WithBackgroundContext(ctx *context.T) *context.T

    // GetBackgroundContext returns a background context. This context can be used
    // for general background activities.
    GetBackgroundContext(ctx *context.T) *context.T

    // NewDiscovery returns a new Discovery.T instance.
    NewDiscovery(ctx *context.T) (discovery.T, error)

    // WithReservedNameDispatcher returns a context that uses the
    // provided dispatcher to control access to the framework managed
    // portion of the namespace.
    WithReservedNameDispatcher(ctx *context.T, d rpc.Dispatcher) *context.T

    // GetReservedNameDispatcher returns the dispatcher used for
    // reserved names.
    GetReservedNameDispatcher(ctx *context.T) rpc.Dispatcher

    // NewFlowManager creates a new flow.Manager instance.
    // channelTimeout specifies the duration we are willing to wait before determining
    // that connections managed by this FlowManager are unhealthy and should be
    // closed.
    NewFlowManager(ctx *context.T, channelTimeout time.Duration) (flow.Manager, error)

    // WithNewServer creates a new Server instance to serve a service object.
    //
    // The server will listen for network connections as specified by the
    // ListenSpec attached to ctx. Depending on your RuntimeFactory, 'roaming'
    // support may be enabled. In this mode the server will listen for
    // changes in the network configuration using a Stream created on the
    // supplied Publisher and change the set of Endpoints it publishes to
    // the mount table accordingly.
    //
    // The server associates object with name by publishing the address of
    // this server in the namespace under the supplied name and using
    // authorizer to authorize access to it. RPCs invoked on the supplied
    // name will be delivered to methods implemented by the supplied
    // object.  Reflection is used to match requests to the object's
    // method set.  As a special-case, if the object implements the
    // Invoker interface, the Invoker is used to invoke methods directly,
    // without reflection.  If name is an empty string, no attempt will
    // made to publish.
    //
    // WithNewServer will create a new flow.Manager to back the server
    // and return a new context with that flow.Manager attached.  This
    // means that clients who use the returned context will be able to
    // share connections with the server, enabling bidirectional RPC.
    WithNewServer(ctx *context.T, name string, object interface{}, auth security.Authorizer, opts ...rpc.ServerOpt) (*context.T, rpc.Server, error)

    // WithNewDispatchingServer creates a new Server instance to serve a given dispatcher.
    //
    // WithNewDispatchingServer is similar to WithNewServer except it
    // allows users to specify a dispatcher, which provides control over
    // which object and authorizer are used for each method call.  RPCs
    // invoked on the supplied name will be delivered to the supplied
    // Dispatcher's Lookup method which will returns the object and
    // security.Authorizer used to serve the actual RPC call.
    WithNewDispatchingServer(ctx *context.T, name string, disp rpc.Dispatcher, opts ...rpc.ServerOpt) (*context.T, rpc.Server, error)

    // GetRequestID returns the RequestID in 'ctx'.
    GetRequestID(ctx *context.T) uuid.UUID
}

Runtime is the interface that concrete Vanadium implementations must implement. It will not be used directly by application builders. They will instead use the package level functions that mirror these factories.

type RuntimeFactory Uses

type RuntimeFactory func(ctx *context.T) (Runtime, *context.T, Shutdown, error)

A RuntimeFactory represents the combination of hardware, operating system, compiler and libraries available to the application. The RuntimeFactory creates a runtime implementation with the required hardware, operating system and library specific dependencies included.

The implementations of the RuntimeFactory are intended to capture all of the dependencies implied by that RuntimeFactory. For example, if a RuntimeFactory requires a particular hardware specific library (say Bluetooth support), then the implementation of the RuntimeFactory should include that dependency in the resulting runtime instance; the package implementing the RuntimeFactory should expose the additional APIs needed to use the functionality.

RuntimeFactories range from the generic to the very specific (e.g. "linux" or "my-sprinkler-controller-v2". Applications should, in general, use as generic a RuntimeFactory as possible.

RuntimeFactories are registered using v23.RegisterRuntimeFactory. Packages that implement RuntimeFactories will typically call RegisterRuntimeFactory in their init functions so importing a RuntimeFactory will be sufficient to register it. Only one RuntimeFactory can be registered in any program, and subsequent registrations will panic. Typically a program's main package will be the only place to import a RuntimeFactory.

This scheme allows applications to use a pre-supplied RuntimeFactory as well as for developers to create their own RuntimeFactories (to represent their hardware and software system).

At a minimum a RuntimeFactory must do the following:

- Initialize a Runtime implementation (providing the flags to it)
- Return a Runtime implementation, initial context, Shutdown func.

See the v.io/x/ref/runtime/factories package for a complete description of the precanned RuntimeFactories and how to use them.

type Shutdown Uses

type Shutdown func()

func Init Uses

func Init() (*context.T, Shutdown)

Init should be called once for each vanadium executable, providing the setup of the vanadium initial context.T and a Shutdown function that can be used to clean up the runtime. We allow calling Init multiple times (useful in tests), but only as long as you call the Shutdown returned previously before calling Init the second time. Init panics if it encounters an error.

func TryInit Uses

func TryInit() (*context.T, Shutdown, error)

TryInit is like Init, except that it returns an error instead of panicking.

Directories

PathSynopsis
contextPackage context provides an implementation of context.Context with additional functionality used within the Vanadium code base.
conventionsPackage conventions implements unenforced conventions for Vanadium.
discoverynolint:golint
flowPackage flow defines interfaces for the management of authenticated bidirectional byte Flows.
flow/message
globPackage glob defines a globbing syntax and implements matching routines.
i18nPackage i18n implements internationalization of formatted message strings in different languages.
internal/sectestPackage sectest contains support for security related tests
loggingPackage loging defines an interface for logging modeled on Google's glog.
namespacePackage namespace defines an interface for resolving and managing names.
namingPackage naming defines types and utilities associated with naming.
optionsPackage options defines common options recognized by vanadium implementations.
queryThe query packages implement Vanadium's query capabilities.
query/enginePackage engine defines a Create function which returns an instance of datasource.QueryEngine
query/engine/datasourcePackage datasource defines the interfaces a system must implement to support querying.
query/engine/internalPackage internal implements Exec, executing SQL-like queries on a given database.
query/engine/internal/conversions
query/engine/internal/querycheckerPackage querychecker performs a semantic check on an AST produced by the queryparser package.
query/engine/internal/queryfunctionsPackage queryfunctions describes SyncQL's built-in functions.
query/engine/internal/queryparserPackage queryparser is a parser to parse a simplified select statement (a la SQL) for the Vanadium key value store (a.k.a., syncbase).
query/engine/internal/testPackage query_test contains tests for the query package.
query/engine/publicPackage public defines the QueryEngine interface which is returned from calling v.io/v23/query/engine.Create and PreparedStatement which is returned from the QueryEngine.PrepareStatement function.
query/patternPackage pattern handles parsing and matching SQL LIKE-style glob patterns.
query/syncqlThe ResultStream interface is used to iterate over query results.
rpcPackage rpc defines interfaces for communication via remote procedure call.
rpc/reservedPackage reserved implements client-side support for reserved RPC methods implemented by all servers.
rpc/versionPackage version defines a mechanism for versioning the RPC protocol.
securityPackage security defines types and utilities associated with security.
security/accessPackage access defines types and interfaces for dynamic access control.
security/access/internalPackage internal provides a VDL specification for a service used in the unittest of the access package.
security/internal/ecdsaonlynolint:golint
services/groupsPackage groups defines interfaces for managing access control groups.
services/httpPackage HTTP defines an interface to send a http.Request from a client to a Vanadium server.
services/logreaderPackage logreader defines interfaces for reading log files remotely.
services/mounttablePackage mounttable defines interfaces for managing associations between names and servers.
services/permissionsPackage permissions defines an interface for managing access control permissions.
services/pprofPackage pprof defines an interface for accessing runtime profiling data in the format expected by the pprof visualization tool.
services/statsPackage stats defines an interface to access statistical information for troubleshooting and monitoring purposes.
services/tidyablePackage tidyable defines an interface for services that can be requested to clean up transient resource use (such as logs or caches.) nolint:golint
services/vtracePackage vtrace defines an interface to access v.io/v23/vtrace traces, to help analyze and debug distributed systems.
services/watchPackage watch defines interfaces for watching a sequence of changes.
uniqueidPackage uniqueid defines functions that are likely to generate globally unique identifiers.
vdlPackage vdl implements the Vanadium Definition Language type and value system.
vdlrootPackage vdlroot defines the standard VDL packages; the VDLROOT environment variable should point at this directory.
vdlroot/mathnolint:golint
vdlroot/signaturePackage signature defines types representing interface and method signatures.
vdlroot/timePackage time defines standard representations of absolute and relative times.
vdlroot/vdltoolPackage vdltool defines types used by the vdl tool itself, including the format of vdl.config files.
vdl/vdltestPackage vdltest provides a variety of VDL types and values for testing.
verrorPackage verror implements an error reporting mechanism that works across programming environments, and a set of common errors.
vomPackage vom implements the Vanadium Object Marshaling serialization format.
vom/internalnolint:golint
vom/internal/vombenchgen
vom/vomtestPackage vomtest provides protocol conformance tests for the Vanadium Object Marshaller (VOM).
vtracePackage vtrace defines a system for collecting debugging information about operations that span a distributed system.

Package v23 imports 15 packages (graph) and is imported by 402 packages. Updated 2020-12-01. Refresh now. Tools for package owners.