// StopReplicationAndGetStatus stops MySQL replication, and returns the // current status. func (agent *ActionAgent) StopReplicationAndGetStatus(ctx context.Context) (*replicationdatapb.Status, error) { if err := agent.lock(ctx); err != nil { return nil, err } defer agent.unlock() // get the status before we stop replication rs, err := agent.MysqlDaemon.SlaveStatus() if err != nil { return nil, fmt.Errorf("before status failed: %v", err) } if !rs.SlaveIORunning && !rs.SlaveSQLRunning { // no replication is running, just return what we got return replication.StatusToProto(rs), nil } if err := agent.stopSlaveLocked(ctx); err != nil { return nil, fmt.Errorf("stop slave failed: %v", err) } // now patch in the current position rs.Position, err = agent.MysqlDaemon.MasterPosition() if err != nil { return nil, fmt.Errorf("after position failed: %v", err) } return replication.StatusToProto(rs), nil }
// SlaveStatus returns the replication status // Should be called under RPCWrap. func (agent *ActionAgent) SlaveStatus(ctx context.Context) (*replicationdatapb.Status, error) { status, err := agent.MysqlDaemon.SlaveStatus() if err != nil { return nil, err } return replication.StatusToProto(status), nil }