private String getServerName() { CloudStatistics cs = CloudStatistics.get(); next_number: for (;;) { // Using static counter to ensure colliding template names (between clouds) will not cause a clash String nameCandidate = name + "-" + nodeCounter.getAndIncrement(); // Collide with existing node - quite likely from this cloud if (Jenkins.getInstance().getNode(nameCandidate) != null) continue; // Collide with node being provisioned (at this point this plugin does not assign final name before launch // is completed) or recently used name (just to avoid confusion). for (ProvisioningActivity provisioningActivity : cs.getActivities()) { if (nameCandidate.equals(provisioningActivity.getId().getNodeName())) { continue next_number; } } return nameCandidate; } }
public void cleanCloudStatistics() { Jenkins jenkins = Jenkins.getInstance(); Set<ProvisioningActivity.Id> plannedNodesSet = new HashSet<>(); for (NodeProvisioner.PlannedNode node : jenkins.unlabeledNodeProvisioner.getPendingLaunches()) { if (node instanceof TrackedItem) { plannedNodesSet.add(((TrackedItem) node).getId()); } } for (Label l : jenkins.getLabels()) { for (NodeProvisioner.PlannedNode node : l.nodeProvisioner.getPendingLaunches()) { if (node instanceof TrackedItem) { plannedNodesSet.add(((TrackedItem) node).getId()); } } } for (Node node : jenkins.getNodes()) { if (node instanceof TrackedItem) { plannedNodesSet.add(((TrackedItem) node).getId()); } } Collection<ProvisioningActivity> activities = CloudStatistics.get().getNotCompletedActivities(); for (ProvisioningActivity activity : activities) { if (activity.getCurrentPhase().equals(ProvisioningActivity.Phase.PROVISIONING) && !plannedNodesSet.contains(activity.getId())) { Exception e = new Exception(String.format("Node %s has lost. Mark as failure", activity.getId().toString())); CloudStatistics.ProvisioningListener.get().onFailure(activity.getId(), e); } } }