Skip to content

Commit e4a218c

Browse files
committed
fix api-gateway update on substrate failure
1 parent 601fca9 commit e4a218c

2 files changed

Lines changed: 48 additions & 50 deletions

File tree

cmds/modules/api_gateway/main.go

Lines changed: 32 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"time"
1010

1111
"github.com/cenkalti/backoff/v3"
12-
"github.com/pkg/errors"
1312
"github.com/rs/zerolog/log"
1413
substrate "github.com/threefoldtech/tfchain/clients/tfchain-client-go"
1514
"github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go/peer"
@@ -144,7 +143,16 @@ func action(cli *cli.Context) error {
144143
return nil
145144
// check if we need to run an update on the peer and only do the update if all the changes are done successfully
146145
case <-time.After(10 * time.Minute):
147-
log.Debug().Msg("checking for updates in zos config")
146+
147+
log.Debug().Msg("checking if node is maintaining a healty substrate connection")
148+
cl, _, err := manager.Raw()
149+
if err == nil {
150+
// skip update if the connection is working properly
151+
log.Debug().Msg("the open connection is healty, no update needed")
152+
cl.Client.Close()
153+
continue
154+
}
155+
148156
env, err := environment.Get()
149157
if err != nil {
150158
// skip update if we can't get env
@@ -163,26 +171,35 @@ func action(cli *cli.Context) error {
163171

164172
// skip update if substrate and relay urls did not change
165173
if slices.Equal(subURLs, updatedSubURLs) && slices.Equal(relayURLs, updatedRelayURLs) {
174+
log.Debug().Msg("zos-config doesn't have updated config to update the node with")
166175
continue
167176
}
168177

169-
// skip update if the old substrate connection is working fine
170-
if !slices.Equal(subURLs, updatedSubURLs) {
171-
if _, err := gw.GetTime(); err == nil {
172-
log.Debug().Msg("the open connection is already working, no update needed")
173-
continue
174-
}
178+
log.Debug().Strs("relays_urls", updatedRelayURLs).Strs("substrate_urls", updatedSubURLs).Msg("detected new update in configuration")
179+
newPeerCtx, newCancel := context.WithCancel(ctx)
180+
181+
newManager, err := environment.GetSubstrate()
182+
if err != nil {
183+
// skip update if can't get sub manager
184+
log.Debug().Err(err).Msg("failed to get substrate manager")
185+
continue
175186
}
176187

177-
newPeerCtx, newCancel := context.WithCancel(ctx)
178-
if err := updatePeer(newPeerCtx, updatedSubURLs, updatedRelayURLs, pair.Seed(), router.Serve); err != nil {
179-
log.Debug().Err(err).Send()
180-
newCancel()
188+
if _, err = peer.NewPeer(
189+
newPeerCtx,
190+
hex.EncodeToString(pair.Seed()),
191+
newManager,
192+
router.Serve,
193+
peer.WithKeyType(peer.KeyTypeEd25519),
194+
peer.WithRelay(updatedRelayURLs...),
195+
peer.WithInMemoryExpiration(6*60*60), // 6 hours
196+
); err != nil {
197+
log.Debug().Err(err).Msg("failed to start a new rmb peer")
181198
continue
182199
}
183200

184201
if !slices.Equal(subURLs, updatedSubURLs) {
185-
err = gw.UpdateSubstrateGatewayConnection(manager)
202+
err = gw.UpdateSubstrateGatewayConnection(newManager)
186203
if err != nil {
187204
log.Debug().Err(err).Msg("failed to update substrate gateway with new manager")
188205
newCancel()
@@ -194,33 +211,11 @@ func action(cli *cli.Context) error {
194211
peerCtx = newPeerCtx
195212
cancel = newCancel
196213

214+
manager = newManager
197215
relayURLs = updatedRelayURLs
198216
subURLs = updatedSubURLs
217+
199218
log.Debug().Strs("relays_urls", relayURLs).Strs("substrate_urls", subURLs).Msg("updated substrate and relay urls")
200219
}
201220
}
202221
}
203-
204-
func updatePeer(ctx context.Context, subURLs, relayURLs []string, seed []byte, serve peer.Handler) error {
205-
log.Debug().Strs("relays_urls", relayURLs).Strs("substrate_urls", subURLs).Msg("detected new update in configuration")
206-
207-
manager, err := environment.GetSubstrate()
208-
if err != nil {
209-
// skip update if can't get sub manager
210-
return errors.Wrap(err, "failed to get substrate manager")
211-
}
212-
213-
if _, err = peer.NewPeer(
214-
ctx,
215-
hex.EncodeToString(seed),
216-
manager,
217-
serve,
218-
peer.WithKeyType(peer.KeyTypeEd25519),
219-
peer.WithRelay(relayURLs...),
220-
peer.WithInMemoryExpiration(6*60*60), // 6 hours
221-
); err != nil {
222-
return errors.Wrap(err, "failed to start a new rmb peer")
223-
}
224-
225-
return nil
226-
}

cmds/modules/noded/main.go

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -252,14 +252,15 @@ func action(cli *cli.Context) error {
252252
for {
253253
<-time.After(10 * time.Minute)
254254

255-
log.Debug().Msg("checking for updates in zos config")
255+
log.Debug().Msg("checking if node is maintaining a healty substrate connection")
256256
cl, _, err := sub.Raw()
257257
if err == nil {
258258
// skip update if the connection is working properly
259-
log.Debug().Msg("the open connection is working, no update needed")
259+
log.Debug().Msg("the open connection is healty, no update needed")
260260
cl.Client.Close()
261261
continue
262262
}
263+
log.Debug().Err(err).Msg("used substrate manager is not healty, trying to update it")
263264

264265
// update only if the substrate connection is not healty
265266
newEnv, err := environment.Get()
@@ -272,19 +273,21 @@ func action(cli *cli.Context) error {
272273
slices.Sort(subURLs)
273274
slices.Sort(newSubURLs)
274275

275-
if !slices.Equal(subURLs, newSubURLs) {
276-
newSub, err := environment.GetSubstrate()
277-
if err != nil {
278-
log.Debug().Err(err).Msg("failed to get updated substrate manager")
279-
continue
280-
}
281-
282-
sub = newSub
283-
subURLs = newSubURLs
284-
events.UpdateSubstrateManager(sub)
285-
log.Debug().Strs("substrate_urls", newEnv.SubstrateURL).Msg("updated substrate events handler to use new substrate urls")
276+
if slices.Equal(subURLs, newSubURLs) {
277+
log.Debug().Msg("zos-config doesn't have updated config to update the node with")
278+
continue
279+
}
286280

281+
newSub, err := environment.GetSubstrate()
282+
if err != nil {
283+
log.Debug().Err(err).Msg("failed to get updated substrate manager")
284+
continue
287285
}
286+
287+
sub = newSub
288+
subURLs = newSubURLs
289+
events.UpdateSubstrateManager(sub)
290+
log.Debug().Strs("substrate_urls", newEnv.SubstrateURL).Msg("updated substrate events handler to use new substrate urls")
288291
}
289292
}()
290293

0 commit comments

Comments
 (0)