@@ -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\n response: %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
273335func (a * App ) createModifyRequestOperation (modifyInput * config.ModifyInput ) ([]* spb.ModifyRequest , error ) {
0 commit comments