protected internal override bool RetryBatch() { // Retry requires keys for this node to be split among other nodes. // This can cause an exponential number of commands. List <BatchNode> batchNodes = GenerateBatchNodes(); if (batchNodes.Count == 1 && batchNodes[0].node == batch.node) { // Batch node is the same. Go through normal retry. return(false); } // Close original command. base.PutBackArgsOnError(); // Execute new commands. AsyncMultiCommand[] cmds = new AsyncMultiCommand[batchNodes.Count]; int count = 0; foreach (BatchNode batchNode in batchNodes) { AsyncBatchCommand cmd = CreateCommand(batchNode); cmd.sequenceAP = sequenceAP; cmd.sequenceSC = sequenceSC; cmd.SetBatchRetry(this); cmds[count++] = cmd; } parent.ExecuteBatchRetry(cmds, this); return(true); }
protected internal override bool RetryBatch() { List <BatchNode> batchNodes = null; try { // Retry requires keys for this node to be split among other nodes. // This can cause an exponential number of commands. batchNodes = GenerateBatchNodes(); if (batchNodes.Count == 1 && batchNodes[0].node == batch.node) { // Batch node is the same. Go through normal retry. // Normal retries reuse eventArgs, so PutBackArgsOnError() // should not be called here. return(false); } } catch (Exception) { // Close original command. base.PutBackArgsOnError(); throw; } // Close original command. base.PutBackArgsOnError(); // Execute new commands. AsyncMultiCommand[] cmds = new AsyncMultiCommand[batchNodes.Count]; int count = 0; foreach (BatchNode batchNode in batchNodes) { AsyncBatchCommand cmd = CreateCommand(batchNode); cmd.sequenceAP = sequenceAP; cmd.sequenceSC = sequenceSC; cmd.SetBatchRetry(this); cmds[count++] = cmd; } // Retry new commands. parent.Retry(cmds); // Return true so original batch command is stopped. return(true); }