Skip to content

Commit 85e3a7e

Browse files
committed
check for updates only if substrate connection is broken
1 parent b581167 commit 85e3a7e

2 files changed

Lines changed: 51 additions & 25 deletions

File tree

cmds/modules/api_gateway/main.go

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

1111
"github.com/cenkalti/backoff/v3"
12+
"github.com/pkg/errors"
1213
"github.com/rs/zerolog/log"
1314
substrate "github.com/threefoldtech/tfchain/clients/tfchain-client-go"
1415
"github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go/peer"
@@ -143,6 +144,11 @@ func action(cli *cli.Context) error {
143144
return nil
144145
// check if we need to run an update on the peer and only do the update if all the changes are done successfully
145146
case <-time.After(10 * time.Minute):
147+
// if we can get time from substrate then we don't need to update the connection
148+
if _, err := gw.GetTime(); err == nil {
149+
continue
150+
}
151+
146152
env, err := environment.Get()
147153
if err != nil {
148154
// skip update if we can't get env
@@ -164,35 +170,18 @@ func action(cli *cli.Context) error {
164170
continue
165171
}
166172

167-
log.Debug().Strs("relays_urls", updatedRelayURLs).Strs("substrate_urls", env.SubstrateURL).Msg("detected new update in configuration")
168-
169-
manager, err = environment.GetSubstrate()
170-
if err != nil {
171-
// skip update if can't get sub manager
172-
log.Debug().Err(err).Msg("failed to get substrate manager")
173-
continue
174-
}
175-
176173
newPeerCtx, newCancel := context.WithCancel(ctx)
177-
if _, err = peer.NewPeer(
178-
newPeerCtx,
179-
hex.EncodeToString(pair.Seed()),
180-
manager,
181-
router.Serve,
182-
peer.WithKeyType(peer.KeyTypeEd25519),
183-
peer.WithRelay(updatedRelayURLs...),
184-
peer.WithInMemoryExpiration(6*60*60), // 6 hours
185-
); err != nil {
174+
if err := updatePeer(newPeerCtx, updatedSubURLs, updatedRelayURLs, pair.Seed(), router.Serve); err != nil {
175+
log.Debug().Err(err).Send()
186176
newCancel()
187-
log.Debug().Err(err).Msg("failed to start a new rmb peer")
188177
continue
189178
}
190179

191180
if !slices.Equal(subURLs, updatedSubURLs) {
192181
err = gw.UpdateSubstrateGatewayConnection(manager)
193182
if err != nil {
194-
newCancel()
195183
log.Debug().Err(err).Msg("failed to update substrate gateway with new manager")
184+
newCancel()
196185
continue
197186
}
198187
}
@@ -203,8 +192,31 @@ func action(cli *cli.Context) error {
203192

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

cmds/modules/noded/main.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ func action(cli *cli.Context) error {
8686
printNet bool = cli.Bool("net")
8787
)
8888
env := environment.MustGet()
89+
subURLs := env.SubstrateURL
8990

9091
redis, err := zbus.NewRedisClient(msgBrokerCon)
9192
if err != nil {
@@ -251,20 +252,33 @@ func action(cli *cli.Context) error {
251252
for {
252253
<-time.After(10 * time.Minute)
253254

255+
cl, _, err := sub.Raw()
256+
if err == nil {
257+
// skip update if the connection is working properly
258+
cl.Client.Close()
259+
continue
260+
}
261+
262+
// update only if the substrate connection is not healty
254263
newEnv, err := environment.Get()
255264
if err != nil {
256-
log.Error().Err(err).Msg("failed to get updated config")
265+
log.Debug().Err(err).Msg("failed to get updated config")
257266
continue
258267
}
259268

260-
if !slices.Equal(env.SubstrateURL, newEnv.SubstrateURL) {
261-
sub, err = environment.GetSubstrate()
269+
newSubURLs := newEnv.SubstrateURL
270+
slices.Sort(subURLs)
271+
slices.Sort(newSubURLs)
272+
273+
if !slices.Equal(subURLs, newSubURLs) {
274+
newSub, err := environment.GetSubstrate()
262275
if err != nil {
263276
log.Debug().Err(err).Msg("failed to get updated substrate manager")
264277
continue
265278
}
266279

267-
env = newEnv
280+
sub = newSub
281+
subURLs = newSubURLs
268282
events.UpdateSubstrateManager(sub)
269283
log.Debug().Strs("substrate_urls", newEnv.SubstrateURL).Msg("updated substrate events handler to use new substrate urls")
270284

0 commit comments

Comments
 (0)