diff --git a/go/vt/vtctl/grpcvtctldserver/server.go b/go/vt/vtctl/grpcvtctldserver/server.go index 92ae7c66146..31b42c2d493 100644 --- a/go/vt/vtctl/grpcvtctldserver/server.go +++ b/go/vt/vtctl/grpcvtctldserver/server.go @@ -486,6 +486,11 @@ func (s *VtctldServer) BackupShard(req *vtctldatapb.BackupShardRequest, stream v continue } + // ignore tablet with an unknown replication lag status + if stats[i].ReplicationLagUnknown { + continue + } + if lag := stats[i].ReplicationLagSeconds; backupTablet == nil || lag < backupTabletLag { backupTablet = tablet.Tablet backupTabletLag = lag diff --git a/go/vt/vtctl/grpcvtctldserver/server_test.go b/go/vt/vtctl/grpcvtctldserver/server_test.go index 71f521967fd..4fb14a919d2 100644 --- a/go/vt/vtctl/grpcvtctldserver/server_test.go +++ b/go/vt/vtctl/grpcvtctldserver/server_test.go @@ -935,6 +935,9 @@ func TestBackupShard(t *testing.T) { "zone1-0000000100": { Events: []*logutilpb.Event{{}, {}, {}}, }, + "zone1-0000000101": { + Events: []*logutilpb.Event{{}, {}, {}}, + }, }, PrimaryPositionResults: map[string]struct { Position string @@ -951,11 +954,18 @@ func TestBackupShard(t *testing.T) { "zone1-0000000100": { Position: &replicationdatapb.Status{ ReplicationLagSeconds: 0, + ReplicationLagUnknown: true, + }, + }, + "zone1-0000000101": { + Position: &replicationdatapb.Status{ + ReplicationLagSeconds: 1, }, }, }, SetReplicationSourceResults: map[string]error{ "zone1-0000000100": nil, + "zone1-0000000101": nil, }, }, tablets: []*topodatapb.Tablet{ @@ -968,6 +978,15 @@ func TestBackupShard(t *testing.T) { Shard: "-", Type: topodatapb.TabletType_REPLICA, }, + { + Alias: &topodatapb.TabletAlias{ + Cell: "zone1", + Uid: 101, + }, + Keyspace: "ks", + Shard: "-", + Type: topodatapb.TabletType_REPLICA, + }, { Alias: &topodatapb.TabletAlias{ Cell: "zone1", @@ -985,6 +1004,9 @@ func TestBackupShard(t *testing.T) { assertion: func(t *testing.T, responses []*vtctldatapb.BackupResponse, err error) { assert.ErrorIs(t, err, io.EOF, "expected Recv loop to end with io.EOF") assert.Equal(t, 3, len(responses), "expected 3 messages from backupclient stream") + for _, resp := range responses { + assert.Equal(t, 101, int(resp.TabletAlias.Uid)) + } }, }, {