+ \r
+ //Handle services without any resources \r
+ if (iNotif.getResources() == null || iNotif.getResources().size() < 1){\r
+ \r
+ this.processResourceNotification(iNotif, new ResourceInstance());\r
+ }\r
+ \r
+ //********************************************************************************************************\r
+ //Start Watchdog loop and wait for all components to complete before reporting final status back. \r
+ // **If timer expires first then we will report a Distribution Error back to ASDC\r
+ //********************************************************************************************************\r
+ long initialStartTime = System.currentTimeMillis();\r
+ boolean componentsComplete = false;\r
+ String distributionStatus = null;\r
+ String watchdogError = null;\r
+ String overallStatus = null;\r
+ int watchDogTimeout = asdcConfig.getWatchDogTimeout() * 1000;\r
+ boolean isDeploySuccess = false;\r
+ WatchdogDistributionStatusDb wdDistributionStatus = WatchdogDistributionStatusDb.getInstance();\r
+ \r
+ \r
+ while(componentsComplete == false && (System.currentTimeMillis() - initialStartTime) < watchDogTimeout)\r
+ {\r
+ \r
+ try{\r
+ \r
+ distributionStatus = wd.getOverallDistributionStatus(iNotif.getDistributionID());\r
+ Thread.sleep(watchDogTimeout / 10);\r
+ \r
+ }catch(Exception e){\r
+ LOGGER.debug ("Exception in Watchdog Loop " + e.getMessage());\r
+ Thread.sleep(watchDogTimeout / 10);\r
+ }\r
+ \r
+ if(distributionStatus != null && !distributionStatus.equalsIgnoreCase(DistributionStatus.INCOMPLETE.name())){\r
+ \r
+ if(distributionStatus.equalsIgnoreCase(DistributionStatus.SUCCESS.name())){\r
+ isDeploySuccess = true;\r
+ overallStatus = DistributionStatusEnum.DISTRIBUTION_COMPLETE_OK.name();\r
+ }else{\r
+ overallStatus = DistributionStatusEnum.DISTRIBUTION_COMPLETE_ERROR.name();\r
+ }\r
+ \r
+ componentsComplete = true;\r
+ }\r
+ }\r
+ \r
+ if(componentsComplete == false){\r
+ LOGGER.debug("Timeout of " + watchDogTimeout + " seconds was reached before all components reported status");\r
+ watchdogError = "Timeout occurred while waiting for all components to report status";\r
+ overallStatus = DistributionStatusEnum.DISTRIBUTION_COMPLETE_ERROR.name();\r
+ }\r
+ \r
+ if(distributionStatus == null){\r
+ overallStatus = DistributionStatusEnum.DISTRIBUTION_COMPLETE_ERROR.name();\r
+ LOGGER.debug("DistributionStatus is null for DistributionId: " + iNotif.getDistributionID());\r
+ \r
+ }\r
+ \r
+ try {\r
+ wd.executePatchAAI(iNotif.getDistributionID(), iNotif.getServiceInvariantUUID(), overallStatus);\r
+ LOGGER.debug ("A&AI Updated succefully with Distribution Status!");\r
+ }\r
+ catch(Exception e) {\r
+ LOGGER.debug ("Exception in Watchdog executePatchAAI(): " + e.getMessage());\r
+ watchdogError = "Error calling A&AI " + e.getMessage();\r
+ if(e.getCause() != null) {\r
+ LOGGER.debug ("Exception caused by: " + e.getCause().getMessage());\r
+ }\r
+ }\r
+ \r
+ \r
+ if(isDeploySuccess && watchdogError == null){\r
+ sendFinalDistributionStatus(iNotif.getDistributionID(), DistributionStatusEnum.DISTRIBUTION_COMPLETE_OK, null);\r
+ wdDistributionStatus.updateWatchdogDistributionIdStatus(iNotif.getDistributionID(), DistributionStatusEnum.DISTRIBUTION_COMPLETE_OK.name()); \r
+ } else {\r
+ sendFinalDistributionStatus(iNotif.getDistributionID(), DistributionStatusEnum.DISTRIBUTION_COMPLETE_ERROR, watchdogError);\r
+ wdDistributionStatus.updateWatchdogDistributionIdStatus(iNotif.getDistributionID(), DistributionStatusEnum.DISTRIBUTION_COMPLETE_ERROR.name()); \r
+ }\r
+ \r
+ \r