Skip to content

Commit a3814f5

Browse files
committed
use on_error callback in Sources.ResolveDatabases()
1 parent d2528ec commit a3814f5

3 files changed

Lines changed: 8 additions & 14 deletions

File tree

internal/cmdopts/cmdsource.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ func (cmd *SourceResolveCommand) Execute(args []string) error {
9999
}
100100
}
101101
}
102-
conns, err := foundSources.ResolveDatabases()
102+
conns, err := foundSources.ResolveDatabases(nil)
103103
if err != nil {
104104
return err
105105
}

internal/reaper/reaper.go

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -408,19 +408,10 @@ func (r *Reaper) LoadSources(ctx context.Context) (err error) {
408408
// filter out disabled sources and sources with group not in the list of groups to monitor
409409
return !s.IsEnabled || len(r.Sources.Groups) > 0 && !slices.Contains(r.Sources.Groups, s.Group)
410410
})
411-
newSrcs, err = srcs.ResolveDatabases()
412-
if err != nil {
411+
412+
if newSrcs, err = srcs.ResolveDatabases(r.WriteInstanceDown); err != nil {
413+
// discover dtabases for continuous monitoring sources
413414
r.logger.WithError(err).Error("could not resolve databases from sources")
414-
for _, s := range srcs {
415-
if s.Kind != sources.SourcePostgresContinuous && s.Kind != sources.SourcePatroni {
416-
continue
417-
}
418-
if !slices.ContainsFunc(newSrcs, func(sc *sources.SourceConn) bool {
419-
return sc.Name == s.Name || strings.HasPrefix(sc.Name, s.Name+"_")
420-
}) {
421-
r.WriteInstanceDown(s.Name)
422-
}
423-
}
424415
}
425416

426417
for i, newMD := range newSrcs {

internal/sources/resolver.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import (
2828

2929
// ResolveDatabases() updates list of monitored objects from continuous monitoring sources, e.g. patroni.
3030
// Each source is resolved concurrently so that a slow or unreachable source does not block the others.
31-
func (srcs Sources) ResolveDatabases() (_ SourceConns, err error) {
31+
func (srcs Sources) ResolveDatabases(on_error func(string)) (_ SourceConns, err error) {
3232
type result struct {
3333
dbs SourceConns
3434
err error
@@ -45,6 +45,9 @@ func (srcs Sources) ResolveDatabases() (_ SourceConns, err error) {
4545
resolvedDbs := make(SourceConns, 0, len(srcs))
4646
for i, res := range results {
4747
if res.err != nil {
48+
if on_error != nil {
49+
on_error(srcs[i].Name)
50+
}
4851
logger.WithField("source", srcs[i].Name).WithError(res.err).Error("could not resolve databases from source")
4952
err = errors.Join(err, res.err)
5053
}

0 commit comments

Comments
 (0)