Refactoring rollback when service create fails
The new rollback feature is primarily implemented in the method
deviceRendering in the class RendererServiceOperationsImpl.
The new class TransactionHistory is passed into
DeviceRendererServiceImpl via DeviceRenderingTask.
DeviceRendererServiceImpl populates the TransationHistory class
with created interfaces etc.
A new rollback task NetworkDeviceRenderingRollbackTask has been
created intended to replace DeviceRenderingRollbackTask. The
class is instantiated with a TransactionHistory object intended
to be used in case of a rollback.
Sample pseudo code extract
class RendererServiceOperationsImpl:
private List<DeviceRenderingResult> deviceRendering(...) {
History transactionHistory = new TransactionHistory();
ListenableFuture<DeviceRenderingResult> atozrenderingFuture =
this.executor.submit(
new DeviceRenderingTask(..., transactionHistory));
ListenableFuture<DeviceRenderingResult> ztoarenderingFuture =
this.executor.submit(
new DeviceRenderingTask(..., transactionHistory));
ListenableFuture<List<DeviceRenderingResult>>
renderingCombinedFuture = Futures.allAsList(
atozrenderingFuture, ztoarenderingFuture
);
List<DeviceRenderingResult> renderingResults = new ArrayList<>(2);
renderingResults = renderingCombinedFuture.get(...);
rollbackProcessor.addTask(
new NetworkDeviceRenderingRollbackTask(
"RollbackTransactionHistoryTask",
transactionHistory,
! (renderingResults.get(0).isSuccess()
&& renderingResults.get(1).isSuccess()),
deviceRenderer,
new RollbackResultMessage()
)
);
return renderingResults;
}
New somewhat simplified rollback method using TransactionHistory
intended to replace the previous method using RendererRollbackInput:
class RendererServiceOperationsImpl:
@Override
public RendererRollbackOutput rendererRollback(
History transactionHistory
) {
LOG.info("Rolling back...");
Result rollbackResult = new FailedRollbackResult();
Subscriber deleteSubscriber = new DeleteSubscriber(rollbackResult);
transactionHistory.rollback(
new DeleteService(
crossConnect,
openRoadmInterfaces,
deleteSubscriber
)
);
LOG.info("Rollback done!");
return rollbackResult.renderRollbackOutput();
}
JIRA: TRNSPRTPCE-615
Change-Id: Ib795f077ae763bd92bac44ee77186a19ed0e4b2a
Signed-off-by: Joakim Törnqvist <joakim.tornqvist@smartoptics.com>