blob: 04a266ea7ad25666a08e2a5ad37d618e68cbd130 [file] [log] [blame]
giolekva892a4e22020-04-27 16:46:22 +04001package main
2
3import (
4 "context"
5 "flag"
6 "fmt"
7 "log"
8 "net"
9 "time"
10
11 "google.golang.org/grpc"
12
13 "github.com/giolekva/pcloud/pfs/api"
14 "github.com/giolekva/pcloud/pfs/chunk"
15)
16
17var controllerAddress = flag.String("controller", "localhost:123", "Metadata storage address.")
18var selfAddress = flag.String("self", "", "Metadata storage address.")
19
20func main() {
21 flag.Parse()
22 log.Print("Chunk server starting")
23
24 // Create Master server client.
25 var opts []grpc.DialOption
26 opts = append(opts, grpc.WithInsecure())
27 opts = append(opts, grpc.WithBlock())
28 conn, err := grpc.Dial(*controllerAddress, opts...)
29 if err != nil {
30 log.Fatalf("Failed to dial %s: %v", *controllerAddress, err)
31 }
32 defer conn.Close()
33 client := api.NewMetadataStorageClient(conn)
34
35 // Register current Chunk server with Master.
36 ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)
37 _, err = client.AddChunkServer(
38 ctx,
39 &api.AddChunkServerRequest{Address: *selfAddress})
40 if err != nil {
41 log.Fatalf("failed to register chunk server: %v", err)
42 }
43 log.Print("Registered myself")
44
45 // Start RPC server
46 lis, err := net.Listen("tcp", fmt.Sprintf(":%d", 234))
47 if err != nil {
48 log.Fatalf("failed to listen: %v", err)
49 }
50 server := grpc.NewServer()
51 api.RegisterChunkStorageServer(server, chunk.NewChunkServer(
52 &chunk.InMemoryChunkFactory{},
53 &chunk.NonChangingReplicaAssignment{}))
54 server.Serve(lis)
55}