Exemplo n.º 1
0
// Internal control command.
// SlaveStatus reads migration/slave status.
func (c *CtrlContext) SlaveStatus(migration bool, slotId uint16) (int, error) {
	call := c.cli.newCall(proto.CmdSlaveSt, nil)
	if call.err != nil {
		return ctrl.NotSlave, call.err
	}

	var p ctrl.PkgSlaveStatus
	p.Migration = migration
	p.SlotId = slotId

	pkg, err := ctrl.Encode(call.cmd, c.dbId, call.seq, &p)
	if err != nil {
		c.cli.errCall(call, err)
		return ctrl.NotSlave, call.err
	}

	call.pkg = pkg
	c.cli.sending <- call

	r, err := (<-call.Done).Reply()
	if err != nil {
		return ctrl.NotSlave, call.err
	}

	t := r.(*ctrl.PkgSlaveStatus)
	if t.ErrMsg != "" {
		return ctrl.NotSlave, errors.New(t.ErrMsg)
	}
	return t.Status, nil
}