Skip to content

Commit c03b94b

Browse files
committed
split session params and electionID when using modify command
1 parent 1c9bc44 commit c03b94b

File tree

1 file changed

+91
-29
lines changed

1 file changed

+91
-29
lines changed

app/modify.go

Lines changed: 91 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,12 @@ func (a *App) ModifyRunE(cmd *cobra.Command, args []string) error {
8787
return
8888
}
8989
if rsp != nil {
90-
a.Logger.Printf("%+v\n response: %s", rsp.TargetError, prototext.Format(rsp.rsp))
90+
if rsp.TargetError.Err != nil {
91+
a.Logger.Errorf("%+v", rsp.TargetError)
92+
} else {
93+
a.Logger.Printf("%s\nresponse: %s", rsp.TargetError.TargetName, prototext.Format(rsp.rsp))
94+
}
95+
9196
}
9297
case <-ctx.Done():
9398
a.Logger.Print(ctx.Err())
@@ -133,7 +138,7 @@ func (a *App) gribiModify(ctx context.Context, t *target) chan *modifyResponse {
133138
return
134139
}
135140

136-
// session parameters
141+
// session parameters & election ID
137142
modParams, err := a.createModifyRequestParams(modifyInput)
138143
if err != nil {
139144
rspCh <- &modifyResponse{
@@ -144,38 +149,87 @@ func (a *App) gribiModify(ctx context.Context, t *target) chan *modifyResponse {
144149
}
145150
return
146151
}
147-
a.Logger.Printf("sending request=%v to %q", modParams, t.Config.Name)
148-
err = modClient.Send(modParams)
149-
if err != nil {
152+
switch len(modParams) {
153+
case 1: // no election ID (all-primary)
154+
a.Logger.Printf("sending request=%v to %q", modParams[0], t.Config.Name)
155+
err = modClient.Send(modParams[0])
156+
if err != nil {
157+
rspCh <- &modifyResponse{
158+
TargetError: TargetError{
159+
TargetName: t.Config.Name,
160+
Err: err,
161+
},
162+
}
163+
return
164+
}
165+
modRsp, err := modClient.Recv()
150166
rspCh <- &modifyResponse{
151167
TargetError: TargetError{
152168
TargetName: t.Config.Name,
153169
Err: err,
154170
},
171+
rsp: modRsp,
172+
}
173+
if err != nil {
174+
return
175+
}
176+
case 2: // session params and electionID (single-primary)
177+
a.Logger.Printf("sending request=%v to %q", modParams[0], t.Config.Name)
178+
err = modClient.Send(modParams[0])
179+
if err != nil {
180+
rspCh <- &modifyResponse{
181+
TargetError: TargetError{
182+
TargetName: t.Config.Name,
183+
Err: err,
184+
},
185+
}
186+
return
187+
}
188+
modRsp, err := modClient.Recv()
189+
rspCh <- &modifyResponse{
190+
TargetError: TargetError{
191+
TargetName: t.Config.Name,
192+
Err: err,
193+
},
194+
rsp: modRsp,
195+
}
196+
if err != nil {
197+
return
155198
}
156-
return
157-
}
158199

159-
modRsp, err := modClient.Recv()
160-
rspCh <- &modifyResponse{
161-
TargetError: TargetError{
162-
TargetName: t.Config.Name,
163-
Err: err,
164-
},
165-
rsp: modRsp,
166-
}
167-
if err != nil {
168-
return
169-
}
170-
if a.electionID != nil && modRsp.ElectionId != nil {
171-
if a.electionID.High < modRsp.ElectionId.High {
172-
a.Logger.Infof("target's last known electionID is higher than client's: %+v > %+v", modRsp.ElectionId, a.electionID)
200+
// send election ID
201+
a.Logger.Printf("sending request=%v to %q", modParams[1], t.Config.Name)
202+
err = modClient.Send(modParams[1])
203+
if err != nil {
204+
rspCh <- &modifyResponse{
205+
TargetError: TargetError{
206+
TargetName: t.Config.Name,
207+
Err: err,
208+
},
209+
}
173210
return
174211
}
175-
if a.electionID.High == modRsp.ElectionId.High && a.electionID.Low < modRsp.ElectionId.Low {
176-
a.Logger.Infof("target's last known electionID is higher than client's: %+v > %+v", modRsp.ElectionId, a.electionID)
212+
modRsp, err = modClient.Recv()
213+
rspCh <- &modifyResponse{
214+
TargetError: TargetError{
215+
TargetName: t.Config.Name,
216+
Err: err,
217+
},
218+
rsp: modRsp,
219+
}
220+
if err != nil {
177221
return
178222
}
223+
if a.electionID != nil && modRsp.ElectionId != nil {
224+
if a.electionID.High < modRsp.ElectionId.High {
225+
a.Logger.Infof("target's last known electionID is higher than client's: %+v > %+v", modRsp.ElectionId, a.electionID)
226+
return
227+
}
228+
if a.electionID.High == modRsp.ElectionId.High && a.electionID.Low < modRsp.ElectionId.Low {
229+
a.Logger.Infof("target's last known electionID is higher than client's: %+v > %+v", modRsp.ElectionId, a.electionID)
230+
return
231+
}
232+
}
179233
}
180234
modReqs, err := a.createModifyRequestOperation(modifyInput)
181235
if err != nil {
@@ -200,7 +254,7 @@ func (a *App) gribiModify(ctx context.Context, t *target) chan *modifyResponse {
200254
}
201255
return
202256
}
203-
modRsp, err = modClient.Recv()
257+
modRsp, err := modClient.Recv()
204258
rspCh <- &modifyResponse{
205259
TargetError: TargetError{
206260
TargetName: t.Config.Name,
@@ -229,13 +283,14 @@ func (a *App) gribiModify(ctx context.Context, t *target) chan *modifyResponse {
229283
return rspCh
230284
}
231285

232-
func (a *App) createModifyRequestParams(modifyInput *config.ModifyInput) (*spb.ModifyRequest, error) {
286+
func (a *App) createModifyRequestParams(modifyInput *config.ModifyInput) ([]*spb.ModifyRequest, error) {
233287
if modifyInput.Params == nil {
234-
return api.NewModifyRequest(
288+
modReq, err := api.NewModifyRequest(
235289
api.PersistenceDelete(),
236290
api.RedundancyAllPrimary(),
237291
api.AckTypeRib(),
238292
)
293+
return []*spb.ModifyRequest{modReq}, err
239294
}
240295

241296
opts := make([]api.GRIBIOption, 0, 4)
@@ -253,7 +308,7 @@ func (a *App) createModifyRequestParams(modifyInput *config.ModifyInput) (*spb.M
253308
(modifyInput.Params.Redundancy == "single-primary" && !a.Config.ModifySessionRedundancySinglePrimary):
254309
opts = append(opts,
255310
api.RedundancySinglePrimary(),
256-
api.ElectionID(a.electionID),
311+
// ,
257312
)
258313
default:
259314
opts = append(opts, api.RedundancyAllPrimary())
@@ -266,8 +321,15 @@ func (a *App) createModifyRequestParams(modifyInput *config.ModifyInput) (*spb.M
266321
default:
267322
opts = append(opts, api.AckTypeRib())
268323
}
269-
270-
return api.NewModifyRequest(opts...)
324+
sessParams, err := api.NewModifyRequest(opts...)
325+
if err != nil {
326+
return nil, err
327+
}
328+
elecIdReq, err := api.NewModifyRequest(api.ElectionID(a.electionID))
329+
if err != nil {
330+
return nil, err
331+
}
332+
return []*spb.ModifyRequest{sessParams, elecIdReq}, err
271333
}
272334

273335
func (a *App) createModifyRequestOperation(modifyInput *config.ModifyInput) ([]*spb.ModifyRequest, error) {

0 commit comments

Comments
 (0)