commit eb3e47e41e784eb25aee63371198067e54d97b52 Author: 17BaoH <963030965@qq.com> Date: Wed Mar 15 14:58:51 2023 +0800 创建项目 diff --git a/clientCommand.go b/clientCommand.go new file mode 100644 index 0000000..58e35f6 --- /dev/null +++ b/clientCommand.go @@ -0,0 +1,369 @@ +package main + +import ( + "context" + "io" + "os" + "fmt" + "path/filepath" + "sync" + "strconv" + agentcaller "proto" + + //"github.com/pborman/uuid" + //"github.com/streadway/amqp" + + "google.golang.org/grpc" + + _ "google.golang.org/grpc/balancer/grpclb" +) +const ( + port = ":5000" + packetSizeInBytes=10 +) + +func Move(bucketName string, objectName string, destination string){ + //将bucketName, objectName, destination发给协调端,分析是否允许调度,若允许,则返回调度目的地ip、冗余策略、replication hash或blocks hash + ip := "localhost" + redundancy := "rep" + hashs := []string{"rep.json0"} + ids := []int{0,1,2,3,4} + ecName := "ecname" + + switch redundancy { + case "ec": + ecMove(ip, hashs, ids, ecName) + case "rep": + repMove(ip, hashs[0]) + } + +} + +func RepRead(localFilePath string, bucketName string, objectName string){ + fmt.Println("read "+bucketName+"/"+objectName+" to "+localFilePath) + //获取块hash,ip,序号,编码参数等 + + repHash := "rep.json0" + ip := "localhost" + var fileSizeInBytes int64=41 + + numPacket := (fileSizeInBytes+packetSizeInBytes-1)/(packetSizeInBytes) + fmt.Println(numPacket) + //rpc相关 + conn, err := grpc.Dial(ip+port, grpc.WithInsecure()) + if err != nil { + panic(err) + } + client := agentcaller.NewTranBlockOrReplicaClient(conn) + + fDir, err := os.Executable() + if err != nil { + panic(err) + } + fURL := filepath.Join(filepath.Dir(fDir), "assets") + _, err = os.Stat(fURL) + if os.IsNotExist(err) { + os.MkdirAll(fURL, os.ModePerm) + } + + file, err := os.Create(filepath.Join(fURL, localFilePath)) + if err != nil { + return + } + + stream, _ := client.GetBlockOrReplica(context.Background(), &agentcaller.GetReq{ + BlockOrReplicaHash: repHash, + }) + fmt.Println(numPacket) + for i:=0;int64(i)0 { + numPacket++ + } + + //发送写请求,分配写入节点 + ips:=make([]string, numRep) + + for i:=0;i0 { + buf := make([]byte, lastPacketInBytes) + file.Read(buf) + for j:=0;j ../proto + +require ( + github.com/golang/protobuf v1.5.2 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/pborman/uuid v1.2.1 // indirect + github.com/streadway/amqp v1.0.0 // indirect + golang.org/x/net v0.5.0 // indirect + golang.org/x/sys v0.4.0 // indirect + golang.org/x/text v0.6.0 // indirect + google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect + google.golang.org/grpc v1.53.0 // indirect + google.golang.org/protobuf v1.28.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..681f9da --- /dev/null +++ b/go.sum @@ -0,0 +1,28 @@ +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/pborman/uuid v1.2.1 h1:+ZZIw58t/ozdjRaXh/3awHfmWRbzYxJoAdNJxe/3pvw= +github.com/pborman/uuid v1.2.1/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo= +github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= diff --git a/main.go b/main.go new file mode 100644 index 0000000..e2028ad --- /dev/null +++ b/main.go @@ -0,0 +1,42 @@ +package main + +import ( + //"context" + //"io" + "os" + "fmt" + //"path/filepath" + //"sync" + "strconv" + //agentcaller "proto" + + //"github.com/pborman/uuid" + //"github.com/streadway/amqp" + + //"google.golang.org/grpc" + + _ "google.golang.org/grpc/balancer/grpclb" +) + +func main() { + args := os.Args + arg_num := len(os.Args) + for i := 0; i < arg_num; i++ { + fmt.Println(args[i]) + } + + switch args[1] { + case "ecWrite": + EcWrite(args[2], args[3], args[4], args[5]) + case "ecRead": + EcRead(args[2], args[3], args[4]) + case "write": + numRep,_ :=strconv.Atoi(args[5]) + RepWrite(args[2], args[3], args[4], numRep) + case "read": + RepRead(args[2], args[3], args[4]) + case "move": + Move(args[2],args[3], args[4])//bucket object destination + } +} +