server

package
v0.0.0-...-d39c007 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 16, 2022 License: Apache-2.0 Imports: 16 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var DefaultOptions = Options{
	ConcurrencyLimit: 64,
}

DefaultOptions provides defaults for Server.

Functions

This section is empty.

Types

type FuncMiddleware

type FuncMiddleware func(ctx context.Context, hdr *fine.RequestHeader, req fine.Request, i Invoker) (fine.Response, error)

FuncMiddleware is a function that implements Middleware.

func (FuncMiddleware) HandleRequest

func (f FuncMiddleware) HandleRequest(ctx context.Context, h *fine.RequestHeader, req fine.Request, i Invoker) (fine.Response, error)

type Handler

type Handler interface {
	// Init is called at the start of serving a handler.
	Init(context.Context) error

	// Close is called when closing a handler.
	Close() error

	Lookup(context.Context, *fine.RequestHeader, *fine.LookupRequest) (*fine.EntryResponse, error)
	Forget(context.Context, *fine.RequestHeader, *fine.ForgetRequest)
	Getattr(context.Context, *fine.RequestHeader, *fine.GetattrRequest) (*fine.AttrResponse, error)
	Setattr(context.Context, *fine.RequestHeader, *fine.SetattrRequest) (*fine.AttrResponse, error)
	Readlink(context.Context, *fine.RequestHeader) (*fine.ReadlinkResponse, error)
	Symlink(context.Context, *fine.RequestHeader, *fine.SymlinkRequest) (*fine.EntryResponse, error)
	Mknod(context.Context, *fine.RequestHeader, *fine.MknodRequest) (*fine.EntryResponse, error)
	Mkdir(context.Context, *fine.RequestHeader, *fine.MkdirRequest) (*fine.EntryResponse, error)
	Unlink(context.Context, *fine.RequestHeader, *fine.UnlinkRequest) error
	Rmdir(context.Context, *fine.RequestHeader, *fine.RmdirRequest) error
	Rename(context.Context, *fine.RequestHeader, *fine.RenameRequest) error
	Link(context.Context, *fine.RequestHeader, *fine.LinkRequest) (*fine.EntryResponse, error)
	Open(context.Context, *fine.RequestHeader, *fine.OpenRequest) (*fine.OpenedResponse, error)
	Read(context.Context, *fine.RequestHeader, *fine.ReadRequest) (*fine.ReadResponse, error)
	Write(context.Context, *fine.RequestHeader, *fine.WriteRequest) (*fine.WriteResponse, error)
	Release(context.Context, *fine.RequestHeader, *fine.ReleaseRequest) error
	Fsync(context.Context, *fine.RequestHeader, *fine.FsyncRequest) error
	Flush(context.Context, *fine.RequestHeader, *fine.FlushRequest) error
	Opendir(context.Context, *fine.RequestHeader, *fine.OpenRequest) (*fine.OpenedResponse, error)
	Readdir(context.Context, *fine.RequestHeader, *fine.ReadRequest) (*fine.ReaddirResponse, error)
	Releasedir(context.Context, *fine.RequestHeader, *fine.ReleaseRequest) error
	Fsyncdir(context.Context, *fine.RequestHeader, *fine.FsyncRequest) error
	Access(context.Context, *fine.RequestHeader, *fine.AccessRequest) error
	Create(context.Context, *fine.RequestHeader, *fine.CreateRequest) (*fine.CreateResponse, error)
	BatchForget(context.Context, *fine.RequestHeader, *fine.BatchForgetRequest) error
	Lseek(context.Context, *fine.RequestHeader, *fine.LseekRequest) (*fine.LseekResponse, error)
}

Handler processes messages from a transport. Handler is passed to Serve, which will invoke methods as requests come in.

func Passthrough

func Passthrough(l log.Logger, root string) Handler

Passthrough creates a new Handler which passes through requests to the host filesystem. Requests are transformed relative to the provided root. Note that this isn't a chroot, and it's possible to read files in higher directives via symbolic links.

type Invoker

type Invoker func(ctx context.Context, hdr *fine.RequestHeader, req fine.Request) (fine.Response, error)

Invoker is called by Middleware to complete requests.

type LazyHandler

type LazyHandler struct {
	// contains filtered or unexported fields
}

LazyHandler is a Handler which allows to defer setting of the real Handler implementation. The zero value is ready for use.

func (*LazyHandler) Access

func (*LazyHandler) BatchForget

func (lh *LazyHandler) BatchForget(ctx context.Context, h *fine.RequestHeader, req *fine.BatchForgetRequest) error

func (*LazyHandler) Close

func (lh *LazyHandler) Close() error

Close closes the LazyHandler and the inner handler, if set. The returned error will be propagated from the inner handler.

func (*LazyHandler) Create

func (*LazyHandler) Flush

func (*LazyHandler) Forget

func (lh *LazyHandler) Forget(ctx context.Context, h *fine.RequestHeader, req *fine.ForgetRequest)

func (*LazyHandler) Fsync

func (*LazyHandler) Fsyncdir

func (lh *LazyHandler) Fsyncdir(ctx context.Context, h *fine.RequestHeader, req *fine.FsyncRequest) error

func (*LazyHandler) Getattr

func (*LazyHandler) Init

func (lh *LazyHandler) Init(ctx context.Context) error

Init implements Handler. Init will forward the Init to the inner Handler whenever it is set.

func (*LazyHandler) Lookup

func (*LazyHandler) Lseek

func (*LazyHandler) Mkdir

func (*LazyHandler) Mknod

func (*LazyHandler) Open

func (*LazyHandler) Opendir

func (*LazyHandler) Read

func (*LazyHandler) Readdir

func (*LazyHandler) Release

func (*LazyHandler) Releasedir

func (lh *LazyHandler) Releasedir(ctx context.Context, h *fine.RequestHeader, req *fine.ReleaseRequest) error

func (*LazyHandler) Rename

func (*LazyHandler) Rmdir

func (*LazyHandler) SetHandler

func (lh *LazyHandler) SetHandler(ctx context.Context, h Handler) error

SetHandler configures LazyHandler to forward requests to the specified h. SetHandler may not be called after LazyHandler has been closed.

h.Init will immediately be called if the lazy handler has already been initialized.

func (*LazyHandler) Setattr

func (*LazyHandler) Write

type Middleware

type Middleware interface {
	// HandleRequest handles an individual request.
	HandleRequest(ctx context.Context, hdr *fine.RequestHeader, req fine.Request, invoker Invoker) (fine.Response, error)
}

Middleware hooks into requests.

func NewLoggingMiddleware

func NewLoggingMiddleware(l log.Logger) Middleware

NewLoggingMiddleware returns a new logging middleware.

type Options

type Options struct {
	// ConcurrencyLimit is the maximum number of concurrent requests a Server can
	// run. If ConcurrencyLimit is <= 0, it will obtain its default from
	// DefaultOptions.
	ConcurrencyLimit int

	// RequestTimeout will force a request to abort after a given amount of time.
	// 0 means to never time out.
	RequestTimeout time.Duration

	// Transport is the transport used to read and write requests. Server takes
	// ownership of the Transport after passing to New; do not close directly.
	Transport fine.Transport

	// Handler is used for handling individual requests.
	Handler Handler

	// Optional middleware to preprocess requests with.
	Middleware []Middleware
}

type Server

type Server struct {
	// contains filtered or unexported fields
}

Server is a FINE server, which asynchronously handles requests from a transport by passing them to a Handler.

func New

func New(l log.Logger, o Options) (*Server, error)

New creates a new Server. Read messages will be passed to Handler for handling.

Call Serve to start the Server.

func (*Server) Serve

func (s *Server) Serve(ctx context.Context) error

Serve starts the server. Serve only returns if there was an error while serving or if ctx is canceled.

Serve should not be called again after it has exited.

type UnimplementedHandler

type UnimplementedHandler struct{}

UnimplementedHandler implements Handler and returns ErrorUnimplemented for all requests.

func (UnimplementedHandler) Access

func (UnimplementedHandler) BatchForget

func (UnimplementedHandler) Close

func (UnimplementedHandler) Close() error

func (UnimplementedHandler) Flush

func (UnimplementedHandler) Forget

func (UnimplementedHandler) Fsync

func (UnimplementedHandler) Fsyncdir

func (UnimplementedHandler) Init

func (UnimplementedHandler) Read

func (UnimplementedHandler) Release

func (UnimplementedHandler) Releasedir

func (UnimplementedHandler) Rename

func (UnimplementedHandler) Rmdir

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL