- private ListenableFuture<Void> onDeviceTakeClusterLeadership(final DeviceInfo deviceInfo) {
- LOG.trace("onDeviceTakeClusterLeadership for node: {}", deviceInfo.getNodeId());
- /* validation */
- StatisticsContext statisticsContext = conductor.getStatisticsContext(deviceInfo);
- if (statisticsContext == null) {
- final String errMsg = String.format("DeviceCtx %s is up but we are missing StatisticsContext", deviceInfo.getDatapathId());
- LOG.warn(errMsg);
- return Futures.immediateFailedFuture(new IllegalStateException(errMsg));
- }
- DeviceContext deviceContext = deviceContexts.get(deviceInfo);
- /* Prepare init info collecting */
- notifyDeviceSynchronizeListeners(deviceInfo, false);
- ((DeviceContextImpl)deviceContext).getTransactionChainManager().activateTransactionManager();
- ((DeviceContextImpl)deviceContext).getTransactionChainManager().initialSubmitWriteTransaction();
- /* Init Collecting NodeInfo */
- final ListenableFuture<Void> initCollectingDeviceInfo = DeviceInitializationUtils.initializeNodeInformation(
- deviceContext, switchFeaturesMandatory, convertorExecutor);
- /* Init Collecting StatInfo */
- final ListenableFuture<Boolean> statPollFuture = Futures.transform(initCollectingDeviceInfo,
- new AsyncFunction<Void, Boolean>() {
-
- @Override
- public ListenableFuture<Boolean> apply(@Nonnull final Void input) throws Exception {
- statisticsContext.statListForCollectingInitialization();
- return statisticsContext.initialGatherDynamicData();
- }
- });
-
- return Futures.transform(statPollFuture, getInitialDeviceInformation(deviceContext));
- }
-
- private Function<Boolean, Void> getInitialDeviceInformation(final DeviceContext deviceContext) {
- return input -> {
- if (ConnectionContext.CONNECTION_STATE.RIP.equals(
- conductor.gainConnectionStateSafely(deviceContext.getDeviceInfo())
- )) {
- final String errMsg =
- String.format("We lost connection for Device %s, context has to be closed.",
- deviceContext.getDeviceInfo().getNodeId());
- LOG.warn(errMsg);
- throw new IllegalStateException(errMsg);
- }
-
- if (input == null || !input) {
- final String errMsg =
- String.format("Get Initial Device %s information fails",
- deviceContext.getDeviceInfo().getNodeId());
- LOG.warn(errMsg);
- throw new IllegalStateException(errMsg);
- }
- LOG.debug("Get Initial Device {} information is successful",
- deviceContext.getDeviceInfo().getNodeId());
- notifyDeviceSynchronizeListeners(deviceContext.getDeviceInfo(), true);
- deviceContext.getDeviceState().setStatisticsPollingEnabledProp(true);
- return null;
- };
- }
-