| package main |
| |
| import "context" |
| import "flag" |
| import "fmt" |
| import "log" |
| import "net" |
| import "time" |
| |
| import "google.golang.org/grpc" |
| |
| import "pcloud/api" |
| import "pcloud/chunk" |
| |
| var masterAddress = flag.String("master", "localhost:123", "Metadata storage address.") |
| var selfAddress = flag.String("self", "", "Metadata storage address.") |
| |
| func main() { |
| flag.Parse() |
| log.Print("Chunk server starting") |
| |
| // Create Master server client. |
| var opts []grpc.DialOption |
| opts = append(opts, grpc.WithInsecure()) |
| opts = append(opts, grpc.WithBlock()) |
| conn, err := grpc.Dial(*masterAddress, opts...) |
| if err != nil { |
| log.Fatalf("Failed to dial %s: %v", *masterAddress, err) |
| } |
| defer conn.Close() |
| client := api.NewMetadataStorageClient(conn) |
| |
| // Register current Chunk server with Master. |
| ctx, _ := context.WithTimeout(context.Background(), 5*time.Second) |
| _, err = client.AddChunkServer( |
| ctx, |
| &api.AddChunkServerRequest{Address: *selfAddress}) |
| if err != nil { |
| log.Fatalf("failed to register chunk server: %v", err) |
| } |
| log.Print("Registered myself") |
| |
| // Start RPC server |
| lis, err := net.Listen("tcp", fmt.Sprintf(":%d", 234)) |
| if err != nil { |
| log.Fatalf("failed to listen: %v", err) |
| } |
| server := grpc.NewServer() |
| api.RegisterChunkStorageServer(server, chunk.NewChunkServer()) |
| server.Serve(lis) |
| } |