aboutsummaryrefslogtreecommitdiff
path: root/weed/operation/grpc_client.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/operation/grpc_client.go')
-rw-r--r--weed/operation/grpc_client.go53
1 files changed, 53 insertions, 0 deletions
diff --git a/weed/operation/grpc_client.go b/weed/operation/grpc_client.go
new file mode 100644
index 000000000..c27954c53
--- /dev/null
+++ b/weed/operation/grpc_client.go
@@ -0,0 +1,53 @@
+package operation
+
+import (
+ "fmt"
+ "strings"
+ "strconv"
+
+ "github.com/chrislusf/seaweedfs/weed/glog"
+ "github.com/chrislusf/seaweedfs/weed/pb/volume_server_pb"
+ "github.com/chrislusf/seaweedfs/weed/pb/master_pb"
+ "github.com/chrislusf/seaweedfs/weed/util"
+)
+
+func withVolumeServerClient(volumeServer string, fn func(volume_server_pb.VolumeServerClient) error) error {
+
+ grpcAddress, err := toVolumeServerGrpcAddress(volumeServer)
+ if err != nil {
+ return err
+ }
+
+ grpcConnection, err := util.GrpcDial(grpcAddress)
+ if err != nil {
+ return fmt.Errorf("fail to dial %s: %v", grpcAddress, err)
+ }
+ defer grpcConnection.Close()
+
+ client := volume_server_pb.NewVolumeServerClient(grpcConnection)
+
+ return fn(client)
+}
+
+func toVolumeServerGrpcAddress(volumeServer string) (grpcAddress string, err error) {
+ sepIndex := strings.LastIndex(volumeServer, ":")
+ port, err := strconv.Atoi(volumeServer[sepIndex+1:])
+ if err != nil {
+ glog.Errorf("failed to parse volume server address: %v", volumeServer)
+ return "", err
+ }
+ return fmt.Sprintf("%s:%d", volumeServer[0:sepIndex], port+10000), nil
+}
+
+func withMasterServerClient(masterServer string, fn func(masterClient master_pb.SeaweedClient) error) error {
+
+ grpcConnection, err := util.GrpcDial(masterServer)
+ if err != nil {
+ return fmt.Errorf("fail to dial %s: %v", masterServer, err)
+ }
+ defer grpcConnection.Close()
+
+ client := master_pb.NewSeaweedClient(grpcConnection)
+
+ return fn(client)
+}