Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions go/mysql/replication/primary_status.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,16 @@ type PrimaryStatus struct {
Position Position
// FilePosition represents the server's file based position.
FilePosition Position
// ServerUUID is the UUID of the server.
ServerUUID string
}

// PrimaryStatusToProto translates a PrimaryStatus to proto3.
func PrimaryStatusToProto(s PrimaryStatus) *replicationdatapb.PrimaryStatus {
return &replicationdatapb.PrimaryStatus{
Position: EncodePosition(s.Position),
FilePosition: EncodePosition(s.FilePosition),
ServerUuid: s.ServerUUID,
}
}

Expand Down
19 changes: 19 additions & 0 deletions go/test/endtoend/utils/mysql_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,3 +123,22 @@ func TestSetSuperReadOnlyMySQL(t *testing.T) {
isReadOnly, _ = mysqld.IsReadOnly()
assert.True(t, isReadOnly, "read_only should be set to True")
}

func TestPrimaryStatus(t *testing.T) {
require.NotNil(t, mysqld)

res, err := mysqld.PrimaryStatus(context.Background())
assert.NoError(t, err)

r, err := mysqld.ReplicationStatus()
assert.NoError(t, err)

assert.True(t, res.Position.Equal(r.Position), "primary replication status should be same as replication status here")

suuid, err := mysqld.GetServerUUID(context.Background())
assert.NoError(t, err)
assert.NotEmpty(t, suuid)

// The server UUID read from primary status and GetServerUUID should match
assert.Equal(t, suuid, res.ServerUUID)
}
10 changes: 9 additions & 1 deletion go/vt/mysqlctl/replication.go
Original file line number Diff line number Diff line change
Expand Up @@ -417,7 +417,15 @@ func (mysqld *Mysqld) PrimaryStatus(ctx context.Context) (replication.PrimarySta
}
defer conn.Recycle()

return conn.Conn.ShowPrimaryStatus()
primaryStatus, err := conn.Conn.ShowPrimaryStatus()
if err != nil {
return replication.PrimaryStatus{}, err
}
primaryStatus.ServerUUID, err = conn.Conn.GetServerUUID()
if err != nil {
return replication.PrimaryStatus{}, err
}
return primaryStatus, nil
}

// GetGTIDPurged returns the gtid purged statuses
Expand Down
33 changes: 33 additions & 0 deletions go/vt/mysqlctl/replication_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,14 @@ limitations under the License.
package mysqlctl

import (
"context"
"testing"

"github.com/stretchr/testify/assert"

"vitess.io/vitess/go/mysql/fakesqldb"
"vitess.io/vitess/go/sqltypes"
"vitess.io/vitess/go/vt/dbconfigs"
)

func testRedacted(t *testing.T, source, expected string) {
Expand Down Expand Up @@ -80,3 +87,29 @@ func TestRedactPassword(t *testing.T) {
PASSWORD = '****'
`)
}

func TestPrimaryStatus(t *testing.T) {
db := fakesqldb.New(t)
defer db.Close()

params := db.ConnParams()
cp := *params
dbc := dbconfigs.NewTestDBConfigs(cp, cp, "fakesqldb")

db.AddQuery("SELECT 1", &sqltypes.Result{})
db.AddQuery("SHOW MASTER STATUS", sqltypes.MakeTestResult(sqltypes.MakeTestFields("test_field", "varchar"), "test_status"))
db.AddQuery("SELECT @@global.server_uuid", sqltypes.MakeTestResult(sqltypes.MakeTestFields("test_field", "varchar"), "test_uuid"))

testMysqld := NewMysqld(dbc)
defer testMysqld.Close()

ctx := context.Background()
res, err := testMysqld.PrimaryStatus(ctx)
assert.NoError(t, err)
assert.NotNil(t, res)
assert.EqualValues(t, "test_uuid", res.ServerUUID)

db.AddQuery("SHOW MASTER STATUS", &sqltypes.Result{})
_, err = testMysqld.PrimaryStatus(ctx)
assert.ErrorContains(t, err, "no master status")
}
154 changes: 82 additions & 72 deletions go/vt/proto/replicationdata/replicationdata.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading