621164bc84
After iterating on the GRPC API, the changes required for the actual implementation are now included in the content store. The begin change is the move to a single, atomic `Ingester.Writer` method for locking content ingestion on a key. From this, comes several new interface definitions. The main benefit here is the clarification between `Status` and `Info` that came out of the GPRC API. `Status` tells the status of a write, whereas `Info` is for querying metadata about various blobs. Signed-off-by: Stephen J Day <stephen.day@docker.com>
34 lines
735 B
Go
34 lines
735 B
Go
package main
|
|
|
|
import (
|
|
"net"
|
|
"path/filepath"
|
|
"time"
|
|
|
|
"github.com/docker/containerd/content"
|
|
"github.com/urfave/cli"
|
|
"google.golang.org/grpc"
|
|
)
|
|
|
|
func resolveContentStore(context *cli.Context) (*content.Store, error) {
|
|
root := context.GlobalString("root")
|
|
if !filepath.IsAbs(root) {
|
|
var err error
|
|
root, err = filepath.Abs(root)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
return content.NewStore(root)
|
|
}
|
|
|
|
func connectGRPC(context *cli.Context) (*grpc.ClientConn, error) {
|
|
socket := context.GlobalString("socket")
|
|
return grpc.Dial(socket,
|
|
grpc.WithBlock(),
|
|
grpc.WithInsecure(),
|
|
grpc.WithDialer(func(addr string, timeout time.Duration) (net.Conn, error) {
|
|
return net.DialTimeout("unix", socket, timeout)
|
|
}),
|
|
)
|
|
}
|