// Write the result of an action into topology server func StoreActionResponse(ts topo.Server, actionNode *actionnode.ActionNode, actionPath string, actionErr error) error { // change our state if actionErr != nil { // on failure, set an error field on the node actionNode.Error = actionErr.Error() actionNode.State = actionnode.ACTION_STATE_FAILED } else { actionNode.Error = "" actionNode.State = actionnode.ACTION_STATE_DONE } actionNode.Pid = 0 // Write the data first to our action node, then to the log. // In the error case, this node will be left behind to debug. data := actionNode.ToJson() return ts.StoreTabletActionResponse(actionPath, data) }
func (wr *Wrangler) unlockShard(keyspace, shard string, actionNode *actionnode.ActionNode, lockPath string, actionError error) error { // first update the actionNode if actionError != nil { log.Infof("Unlocking shard %v/%v for action %v with error %v", keyspace, shard, actionNode.Action, actionError) actionNode.Error = actionError.Error() actionNode.State = actionnode.ACTION_STATE_FAILED } else { log.Infof("Unlocking shard %v/%v for successful action %v", keyspace, shard, actionNode.Action) actionNode.Error = "" actionNode.State = actionnode.ACTION_STATE_DONE } err := wr.ts.UnlockShardForAction(keyspace, shard, lockPath, actionNode.ToJson()) if actionError != nil { if err != nil { // this will be masked log.Warningf("UnlockShardForAction failed: %v", err) } return actionError } return err }