1 module neton.rpcservice.RegistryService;
2 
3 import neton.protocol.neton;
4 import neton.protocol.neton;
5 import neton.protocol.netonrpc;
6 import grpc;
7 import hunt.logging;
8 import neton.server.NetonRpcServer;
9 import neton.util.Future;
10 import neton.rpcservice.Command;
11 import std.stdio;
12 
13 class RegistryService : RegistryBase
14 {
15 
16     override Status Range(RangeRequest req, ref RangeResponse response)
17     {
18         if(req.key.length == 0)
19         {
20             logError("get key is null");
21             return new Status(StatusCode.INVALID_ARGUMENT);
22         }
23 
24         auto f = new Future!(RangeRequest, RangeResponse)(req);
25 
26         RpcRequest rreq;
27         rreq.CMD = RpcReqCommand.RegistryRangeRequest;
28         rreq.Key = cast(string)(req.key);
29         rreq.Hash = f.toHash();
30         NetonRpcServer.instance().ReadIndex(rreq, f);
31         logDebug("waiting ..... : ", rreq);
32         response = f.get();
33         logDebug("waiting done..... : ",response);
34         if(response is null)
35             response = new RangeResponse();
36 
37         return Status.OK;
38     }
39 
40     override Status Put(PutRequest req, ref PutResponse response)
41     {
42         logDebug("--------------");
43 
44         if(req.key.length == 0)
45         {
46             logError("put key is null");
47             return new Status(StatusCode.INVALID_ARGUMENT);
48         }
49 
50         auto f = new Future!(PutRequest, PutResponse)(req);
51 
52         RpcRequest rreq;
53         rreq.CMD = RpcReqCommand.RegistryPutRequest;
54         rreq.Key = cast(string)(req.key);
55         rreq.Value = cast(string)(req.value);
56         rreq.LeaseID = req.lease;
57         rreq.Hash = f.toHash();
58         NetonRpcServer.instance().Propose(rreq, f);
59         logDebug("waiting ..... : ", rreq);
60         response = f.get();
61         logDebug("waiting done.....");
62         if(response !is null)
63             return Status.OK;
64         else
65             return new Status(StatusCode.INVALID_ARGUMENT);
66     }
67 
68     override Status DeleteRange(DeleteRangeRequest req, ref DeleteRangeResponse response)
69     {
70         logDebug("--------------");
71 
72         if(req.key.length == 0)
73         {
74             logError("delete key is null");
75             return new Status(StatusCode.INVALID_ARGUMENT);
76         }
77 
78         auto f = new Future!(DeleteRangeRequest, DeleteRangeResponse)(req);
79 
80         RpcRequest rreq;
81         rreq.CMD = RpcReqCommand.RegistryDeleteRangeRequest;
82         rreq.Key = cast(string)(req.key);
83         rreq.Hash = f.toHash();
84         NetonRpcServer.instance().Propose(rreq, f);
85         logDebug("waiting ..... : ", rreq);
86         response = f.get();
87         logDebug("waiting done.....");
88 
89         if(response !is null)
90             return Status.OK;
91         else
92             return new Status(StatusCode.INVALID_ARGUMENT);
93     }
94 
95 }