@@ -3,6 +3,7 @@ package gorums
3
3
import (
4
4
"context"
5
5
"fmt"
6
+ "log/slog"
6
7
"net"
7
8
"sync"
8
9
"time"
@@ -43,6 +44,7 @@ type csr struct {
43
44
}
44
45
45
46
type ClientServer struct {
47
+ id uint64 // should correpond to the ID given to the manager
46
48
mu sync.Mutex
47
49
csr map [uint64 ]* csr
48
50
reqChan chan * ClientRequest
@@ -52,10 +54,14 @@ type ClientServer struct {
52
54
inProgress uint64
53
55
grpcServer * grpc.Server
54
56
handlers map [string ]requestHandler
57
+ logger * slog.Logger
55
58
ordering.UnimplementedGorumsServer
56
59
}
57
60
58
61
func (srv * ClientServer ) Stop () {
62
+ if srv .logger != nil {
63
+ srv .logger .Info ("clientserver: stopped" )
64
+ }
59
65
if srv .cancelCtx != nil {
60
66
srv .cancelCtx ()
61
67
}
@@ -85,12 +91,16 @@ func (srv *ClientServer) AddRequest(broadcastID uint64, clientCtx context.Contex
85
91
}
86
92
srv .mu .Unlock ()
87
93
88
- go createReq (ctx , clientCtx , cancel , in , doneChan , respChan , handler )
94
+ var logger * slog.Logger
95
+ if srv .logger != nil {
96
+ logger = srv .logger .With (slog .Uint64 ("BroadcastID" , broadcastID ))
97
+ }
98
+ go createReq (ctx , clientCtx , cancel , in , doneChan , respChan , handler , logger )
89
99
90
100
return doneChan , cd
91
101
}
92
102
93
- func createReq (ctx , clientCtx context.Context , cancel context.CancelFunc , req protoreflect.ProtoMessage , doneChan chan protoreflect.ProtoMessage , respChan chan protoreflect.ProtoMessage , handler ReplySpecHandler ) {
103
+ func createReq (ctx , clientCtx context.Context , cancel context.CancelFunc , req protoreflect.ProtoMessage , doneChan chan protoreflect.ProtoMessage , respChan chan protoreflect.ProtoMessage , handler ReplySpecHandler , logger * slog. Logger ) {
94
104
// make sure to cancel the req ctx when returning to
95
105
// prevent a leaking ctx.
96
106
defer cancel ()
@@ -99,6 +109,9 @@ func createReq(ctx, clientCtx context.Context, cancel context.CancelFunc, req pr
99
109
select {
100
110
case <- clientCtx .Done ():
101
111
// client provided ctx
112
+ if logger != nil {
113
+ logger .Warn ("clientserver: stopped by client" )
114
+ }
102
115
return
103
116
case <- ctx .Done ():
104
117
// request ctx. this is a child to the server ctx.
@@ -110,6 +123,9 @@ func createReq(ctx, clientCtx context.Context, cancel context.CancelFunc, req pr
110
123
// chooses not to timeout the request and the server
111
124
// goes down.
112
125
close (doneChan )
126
+ if logger != nil {
127
+ logger .Warn ("clientserver: stopped by server" )
128
+ }
113
129
return
114
130
case resp := <- respChan :
115
131
// keep track of all responses thus far
@@ -122,6 +138,9 @@ func createReq(ctx, clientCtx context.Context, cancel context.CancelFunc, req pr
122
138
case <- ctx .Done ():
123
139
case <- clientCtx .Done ():
124
140
}
141
+ if logger != nil {
142
+ logger .Info ("clientserver: req done" )
143
+ }
125
144
close (doneChan )
126
145
return
127
146
}
@@ -141,6 +160,9 @@ func (srv *ClientServer) AddResponse(ctx context.Context, resp protoreflect.Prot
141
160
if ! ok {
142
161
return fmt .Errorf ("doesn't exist" )
143
162
}
163
+ if srv .logger != nil {
164
+ srv .logger .Info ("clientserver: got a reply" , "BroadcastID" , broadcastID )
165
+ }
144
166
select {
145
167
case <- ctx .Done ():
146
168
return ctx .Err ()
@@ -191,13 +213,19 @@ func NewClientServer(lis net.Listener, opts ...ServerOption) *ClientServer {
191
213
for _ , opt := range opts {
192
214
opt (& serverOpts )
193
215
}
216
+ var logger * slog.Logger
217
+ if serverOpts .logger != nil {
218
+ logger = serverOpts .logger .With (slog .Uint64 ("ClientID" , serverOpts .machineID ))
219
+ }
194
220
ctx , cancel := context .WithCancel (context .Background ())
195
221
srv := & ClientServer {
222
+ id : serverOpts .machineID ,
196
223
ctx : ctx ,
197
224
cancelCtx : cancel ,
198
225
csr : make (map [uint64 ]* csr ),
199
226
grpcServer : grpc .NewServer (serverOpts .grpcOpts ... ),
200
227
handlers : make (map [string ]requestHandler ),
228
+ logger : logger ,
201
229
}
202
230
ordering .RegisterGorumsServer (srv .grpcServer , srv )
203
231
srv .lis = lis
0 commit comments