Skip to content

Commit 3f06c85

Browse files
committed
service cluster: create method which checks versions of agents to sm version
1 parent ec9e631 commit 3f06c85

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

pkg/cmd/scylla-manager/server.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,12 @@ func (s *server) startServices(ctx context.Context) error {
328328
if err := s.clusterSvc.Init(ctx); err != nil {
329329
return errors.Wrapf(err, "cluster service")
330330
}
331+
332+
// Instead this could be called from the restapi
333+
if err := s.clusterSvc.VerifySMAndAgentVersions(ctx); err != nil {
334+
return errors.Wrapf(err, "cluster service")
335+
}
336+
331337
if err := s.schedSvc.LoadTasks(ctx); err != nil {
332338
return errors.Wrapf(err, "schedule service")
333339
}

pkg/service/cluster/service.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"github.com/scylladb/go-log"
1818
"github.com/scylladb/gocqlx/v2"
1919
"github.com/scylladb/gocqlx/v2/qb"
20+
"github.com/scylladb/scylla-manager/v3/pkg"
2021
"github.com/scylladb/scylla-manager/v3/pkg/metrics"
2122
"github.com/scylladb/scylla-manager/v3/pkg/schema/table"
2223
"github.com/scylladb/scylla-manager/v3/pkg/scyllaclient"
@@ -853,3 +854,33 @@ func GetRPCAddresses(ctx context.Context, client *scyllaclient.Client, hosts []s
853854

854855
return sessionHosts, combinedError
855856
}
857+
858+
func (s *Service) VerifySMAndAgentVersions(ctx context.Context) error {
859+
smVersion := pkg.Version()
860+
var combinedError error
861+
862+
clusters, err := s.ListClusters(ctx, &Filter{})
863+
if err != nil {
864+
return errors.New("unable to get list of clusters")
865+
}
866+
867+
// Possible improvement could be to process each cluster in parallel
868+
for _, cluster := range clusters {
869+
client, err := s.CreateClientNoCache(ctx, cluster.ID)
870+
if err != nil {
871+
return fmt.Errorf("unable to create client for cluster %s", cluster.ID.String())
872+
}
873+
for _, h := range client.Config().Hosts {
874+
ni, err := client.NodeInfo(ctx, h)
875+
if err != nil {
876+
combinedError = multierr.Append(combinedError, err)
877+
continue
878+
}
879+
if ni.AgentVersion != smVersion {
880+
combinedError = multierr.Append(fmt.Errorf("agent version %s on host %s does not match scylla manager version %s", h, ni.AgentVersion, smVersion), combinedError)
881+
}
882+
}
883+
}
884+
885+
return combinedError
886+
}

0 commit comments

Comments
 (0)