Skip to content

Commit 6a455ff

Browse files
committed
rpn: propogate errs from forkAll
1 parent 381a68d commit 6a455ff

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

intra/ipn/rpn.go

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ var (
5858
errRpnBadEmplace = errors.New("proxy: rpn: emplace: bad args")
5959
errRpnBadCC = errors.New("proxy: rpn: bad country code")
6060
errRpnIDsMismatch = errors.New("proxy: rpn: provider x proxy mismatch")
61+
errRpnMainProxyMissing = errors.New("proxy: rpn: cannot fork; main proxy missing")
6162
errRpnMainProxyStopped = errors.New("proxy: rpn: cannot fork; main proxy stopped")
6263
errRpnNotForked = errors.New("proxy: rpn: not forked")
6364
)
@@ -304,13 +305,16 @@ func (r *rpnp) Fork(cc string) (x.Proxy, error) {
304305
func (r *rpnp) fork(cc string) (x.Proxy, error) {
305306
// do not hold lock while calling into pxr as it can callback via Emplace.
306307
main, err := r.requireProxy()
307-
if err != nil {
308-
return nil, err
308+
if err != nil || main == nil {
309+
return nil, core.OneErr(err, errRpnMainProxyMissing)
309310
}
310311
acc := r.RpnAcc
311312

312313
mainpid := idstr(main)
313-
if len(mainpid) <= 0 || main.Status() == END {
314+
if len(mainpid) <= 0 {
315+
return nil, errMissingProxyID
316+
}
317+
if main.Status() == END {
314318
// TODO: PurgeAll?
315319
return nil, errRpnMainProxyStopped
316320
}
@@ -348,35 +352,41 @@ func (r *rpnp) fork(cc string) (x.Proxy, error) {
348352
return kid, err
349353
}
350354

351-
func (r *rpnp) forkMain() {
355+
func (r *rpnp) forkMain() error {
352356
main, err := r.requireProxy()
353-
if err != nil {
354-
return
357+
if err != nil || main == nil {
358+
return log.EE("proxy: rpn: forkMain: main missing; err? %v", err)
355359
}
356360

357361
mainpid := idstr(main)
358362

359363
_, err = r.fork(mainpid) // re-adds main proxy (via Emplace)
360364

361365
logei(err)("proxy: rpn: forkMain: %s; err? %v", mainpid, err)
366+
return err
362367
}
363368

364-
func (r *rpnp) forkAll() {
369+
func (r *rpnp) forkAll() error {
365370
provider := r.RpnAcc.ProviderID()
366371
kids := r.flattenKids()
367372
log.I("proxy: rpn: forkAll: %s[%v]", provider, kids)
368373

369-
r.forkMain()
374+
errs := make([]error, 0) // may contain nil errors
375+
376+
e := r.forkMain()
377+
378+
errs = append(errs, e)
370379

371380
for _, cc := range kids {
372-
_, err := r.fork(cc)
373-
loged(err)("proxy: rpn: forkAll: forked %s[%s]; err? %v", provider, cc, err)
381+
_, e := r.fork(cc)
382+
loged(e)("proxy: rpn: forkAll: forked %s[%s]; err? %v", provider, cc, e)
383+
errs = append(errs, e)
374384
}
385+
return core.JoinErr(errs...)
375386
}
376387

377388
func (r *rpnp) Redo() (err error) {
378-
r.forkAll()
379-
return nil
389+
return r.forkAll()
380390
}
381391

382392
func (r *rpnp) PingAll() (csvpids string, err error) {
@@ -540,7 +550,7 @@ func (r *rpnp) flattenKids() (ccs []string) {
540550
func (r *rpnp) Update(rotate bool) (newState []byte, err error) {
541551
newState, err = r.RpnAcc.Update(rotate)
542552
if err == nil {
543-
core.Gx("rpn.fork."+r.ProviderID(), r.forkAll)
553+
core.Gxe("rpn.fork."+r.ProviderID(), r.forkAll)
544554
}
545555
return
546556
}

0 commit comments

Comments
 (0)