Documentation ¶
Overview ¶
Package client implements the XRootD client following protocol from http://xrootd.org.
The NewClient function connects to a server:
ctx := context.Background() client, err := NewClient(ctx, addr, username) if err != nil { // handle error } // ... if err := client.Close(); err != nil { // handle error }
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
A Client to xrootd server which allows to send requests and receive responses. Concurrent requests are supported. Zero value is invalid, Client should be instantiated using NewClient.
Example (Chmod) ¶
ctx := context.Background() const username = "gopher" client, err := NewClient(ctx, "ccxrootdgotest.in2p3.fr:9001", username) if err != nil { log.Fatal(err) } defer client.Close() if err := client.FS().Chmod(ctx, "/tmp/test.txt", xrdfs.OpenModeOwnerRead|xrdfs.OpenModeOwnerWrite); err != nil { log.Fatal(err) } if err := client.Close(); err != nil { log.Fatal(err) }
Output:
Example (Dirlist) ¶
ctx := context.Background() const username = "gopher" client, err := NewClient(ctx, "ccxrootdgotest.in2p3.fr:9001", username) if err != nil { log.Fatal(err) } defer client.Close() entries, err := client.FS().Dirlist(ctx, "/tmp/dir1") if err != nil { log.Fatal(err) } for _, entry := range entries { fmt.Printf("Name: %s, size: %d\n", entry.Name(), entry.Size()) } if err := client.Close(); err != nil { log.Fatal(err) }
Output: Name: file1.txt, size: 0
Example (Mkdir) ¶
ctx := context.Background() const username = "gopher" client, err := NewClient(ctx, "ccxrootdgotest.in2p3.fr:9001", username) if err != nil { log.Fatal(err) } defer client.Close() if err := client.FS().Mkdir(ctx, "/tmp/testdir", xrdfs.OpenModeOwnerRead|xrdfs.OpenModeOwnerWrite); err != nil { log.Fatal(err) } if err := client.Close(); err != nil { log.Fatal(err) }
Output:
Example (MkdirAll) ¶
ctx := context.Background() const username = "gopher" client, err := NewClient(ctx, "ccxrootdgotest.in2p3.fr:9001", username) if err != nil { log.Fatal(err) } defer client.Close() if err := client.FS().MkdirAll(ctx, "/tmp/testdir/subdir", xrdfs.OpenModeOwnerRead|xrdfs.OpenModeOwnerWrite); err != nil { log.Fatal(err) } if err := client.Close(); err != nil { log.Fatal(err) }
Output:
Example (Open) ¶
ctx := context.Background() const username = "gopher" client, err := NewClient(ctx, "ccxrootdgotest.in2p3.fr:9001", username) if err != nil { log.Fatal(err) } defer client.Close() file, err := client.FS().Open(ctx, "/tmp/test.txt", xrdfs.OpenModeOwnerRead, xrdfs.OpenOptionsOpenRead) if err != nil { log.Fatal(err) } if err := file.Close(ctx); err != nil { log.Fatal(err) } if err := client.Close(); err != nil { log.Fatal(err) }
Output:
Example (Read) ¶
ctx := context.Background() const username = "gopher" client, err := NewClient(ctx, "ccxrootdgotest.in2p3.fr:9001", username) if err != nil { log.Fatal(err) } defer client.Close() file, err := client.FS().Open(ctx, "/tmp/test.txt", xrdfs.OpenModeOwnerRead, xrdfs.OpenOptionsOpenRead) if err != nil { log.Fatal(err) } defer file.Close(ctx) data := make([]byte, 10) n, err := file.ReadAt(data, 0) if err != nil { log.Fatal(err) } data = data[:n] fmt.Printf("%s\n", data) if err := file.Close(ctx); err != nil { log.Fatal(err) } if err := client.Close(); err != nil { log.Fatal(err) }
Output: test
Example (RemoveAll) ¶
ctx := context.Background() const username = "gopher" client, err := NewClient(ctx, "ccxrootdgotest.in2p3.fr:9001", username) if err != nil { log.Fatal(err) } defer client.Close() if err := client.FS().RemoveAll(ctx, "/tmp/testdir"); err != nil { log.Fatal(err) } if err := client.Close(); err != nil { log.Fatal(err) }
Output:
Example (RemoveDir) ¶
ctx := context.Background() const username = "gopher" client, err := NewClient(ctx, "ccxrootdgotest.in2p3.fr:9001", username) if err != nil { log.Fatal(err) } defer client.Close() if err := client.FS().RemoveDir(ctx, "/tmp/testdir"); err != nil { log.Fatal(err) } if err := client.Close(); err != nil { log.Fatal(err) }
Output:
Example (RemoveFile) ¶
ctx := context.Background() const username = "gopher" client, err := NewClient(ctx, "ccxrootdgotest.in2p3.fr:9001", username) if err != nil { log.Fatal(err) } defer client.Close() if err := client.FS().RemoveFile(ctx, "/tmp/test.txt"); err != nil { log.Fatal(err) } if err := client.Close(); err != nil { log.Fatal(err) }
Output:
Example (Rename) ¶
ctx := context.Background() const username = "gopher" client, err := NewClient(ctx, "ccxrootdgotest.in2p3.fr:9001", username) if err != nil { log.Fatal(err) } defer client.Close() if err := client.FS().Rename(ctx, "/tmp/old.txt", "/tmp/new.txt"); err != nil { log.Fatal(err) } if err := client.Close(); err != nil { log.Fatal(err) }
Output:
Example (Stat) ¶
ctx := context.Background() const username = "gopher" client, err := NewClient(ctx, "ccxrootdgotest.in2p3.fr:9001", username) if err != nil { log.Fatal(err) } defer client.Close() info, err := client.FS().Stat(ctx, "/tmp/test.txt") if err != nil { log.Fatal(err) } log.Printf("Name: %s, size: %d", info.Name(), info.Size()) if err := client.Close(); err != nil { log.Fatal(err) }
Output:
Example (Truncate) ¶
ctx := context.Background() const username = "gopher" client, err := NewClient(ctx, "ccxrootdgotest.in2p3.fr:9001", username) if err != nil { log.Fatal(err) } defer client.Close() if err := client.FS().Truncate(ctx, "/tmp/test.txt", 10); err != nil { log.Fatal(err) } if err := client.Close(); err != nil { log.Fatal(err) }
Output:
Example (VirtualStat) ¶
ctx := context.Background() const username = "gopher" client, err := NewClient(ctx, "ccxrootdgotest.in2p3.fr:9001", username) if err != nil { log.Fatal(err) } defer client.Close() info, err := client.FS().VirtualStat(ctx, "/tmp/") if err != nil { log.Fatal(err) } log.Printf("RW: %d%% is free", info.FreeRW) if err := client.Close(); err != nil { log.Fatal(err) }
Output:
Example (Write) ¶
ctx := context.Background() const username = "gopher" client, err := NewClient(ctx, "ccxrootdgotest.in2p3.fr:9001", username) if err != nil { log.Fatal(err) } defer client.Close() file, err := client.FS().Open(ctx, "/tmp/test.txt", xrdfs.OpenModeOwnerRead|xrdfs.OpenModeOwnerWrite, xrdfs.OpenOptionsOpenUpdate|xrdfs.OpenOptionsNew) if err != nil { log.Fatal(err) } defer file.Close(ctx) if _, err := file.WriteAt([]byte("test"), 0); err != nil { log.Fatal(err) } if err := file.Sync(ctx); err != nil { log.Fatal(err) } if err := file.Close(ctx); err != nil { log.Fatal(err) } if err := client.Close(); err != nil { log.Fatal(err) }
Output:
func NewClient ¶
func NewClient(ctx context.Context, address string, username string, opts ...Option) (*Client, error)
NewClient creates a new xrootd client that connects to the given address using username. Options opts configure the client and are applied in the order they were specified. When the context expires, a response handling is stopped, however, it is necessary to call Cancel to correctly free resources.
func (*Client) Close ¶
Close closes the connection. Any blocked operation will be unblocked and return error.
func (*Client) FS ¶
func (cli *Client) FS() xrdfs.FileSystem
FS returns a xrdfs.FileSystem which uses this client to make requests.
func (*Client) Send ¶
func (client *Client) Send(ctx context.Context, resp xrdproto.Response, req xrdproto.Request) (string, error)
Send sends the request to the server and stores the response inside the resp. If the resp is nil, then no response is stored. Send returns a session id which identifies the server that provided response.
type Option ¶
Option configures an XRootD client.