public ConfigUpdateItem addItem(String name) { ConfigUpdateItem item = new ConfigUpdateItem(name); items.add(item); return item; }
protected static void addToList(List<ConfigUpdateItem> list, ConfigUpdateItem item) { if (PRIORITY_ITEMS.get().contains(item.getName())) { list.add(0, item); } else { list.add(item); } }
protected boolean itemDone(ConfigUpdateItem item, Map<String, ItemVersion> applied) { ItemVersion version = applied.get(item.getName()); if (version == null) { return false; } if (item.getRequestedVersion() == null) { return false; } if (version.getRevision() < item.getRequestedVersion()) { return false; } return true; }
String name = item.getName(); ConfigItemStatus status = statuses.get(name); Long requestedVersion = item.getRequestedVersion(); if (item.isApply()) { log.trace("ITEM UPDATE: incrementOrApply [{}]", request.getClient()); configItemStatusDao.incrementOrApply(client, name); requestedVersion = configItemStatusDao.getRequestedVersion(client, name); log.trace("ITEM UPDATE: done get requested [{}]", request.getClient()); } else if (requestedVersion == null && item.getSetVersion() != null) { log.trace("ITEM UPDATE: setVersion [{}]", request.getClient()); configItemStatusDao.setIfOlder(client, name, item.getSetVersion()); log.trace("ITEM UPDATE: done setVersion [{}]", request.getClient()); requestedVersion = item.getSetVersion(); } else if (requestedVersion == null && item.isIncrement()) { log.trace("ITEM UPDATE: incrementOrApply [{}]", request.getClient()); configItemStatusDao.incrementOrApply(client, name); item.setRequestedVersion(requestedVersion); toTrigger.add(item);
String name = item.getName(); ConfigItemStatus status = statuses.get(item.getName()); if (item.isCheckInSyncOnly()) { if (!checkVersions || !ObjectUtils.equals(status.getRequestedVersion(), status.getAppliedVersion())) { if (request.isMigration()) { } else if (item.getRequestedVersion() != null) { Long applied = status.getAppliedVersion(); if (applied == null || item.getRequestedVersion() > applied) { log.debug("Waiting on [{}] on [{}], not applied requested [{}] > applied [{}]", client, name, item.getRequestedVersion(), applied); addToList(toTrigger, item);
request.addItem(item).withApply(false).withIncrement(false).withCheckInSyncOnly(true);
protected ConfigUpdateRequest before(ConfigUpdateRequest request, Agent agent) { if (request == null) { request = ConfigUpdateRequest.forResource(Agent.class, agent.getId()); for (String item : ITEMS.get()) { request.addItem(item).withIncrement(false).setCheckInSyncOnly(true); } } statusManager.updateConfig(request); return request; }
@Override public HandlerResult handle(ProcessState state, ProcessInstance process) { Instance instance = (Instance)state.getResource(); if (!Boolean.TRUE.equals(instance.getSystem())) { return null; } List<Long> agentIds = agentInstanceDao.getAgentProviderIgnoreHealth(SystemLabels.LABEL_AGENT_SERVICE_IPSEC, instance.getAccountId()); for (long agentId : agentIds) { ConfigUpdateRequest request = ConfigUpdateRequest.forResource(Agent.class, agentId); ConfigUpdateItem item = request.addItem("psk"); item.setApply(true); item.setIncrement(false); statusManager.updateConfig(request); } return null; }
@Override public String toString() { StringBuilder message = new StringBuilder("update ["); boolean first = true; for (ConfigUpdateItem item : items) { if (!first) { message.append(", "); } first = false; message.append(item.getName()); } message.append("] on [").append(client).append("]"); return message.toString(); }
protected boolean satisfies(boolean isRequest, ConfigUpdate request, Map<String, ItemVersion> applied) { if (request.getData() == null) { return true; } for (ConfigUpdateItem item : request.getData().getItems()) { ItemVersion version = applied.get(item.getName()); if (version == null) { if (log.isTraceEnabled() && !isRequest) { log.info("\t\tUnsatified item {} [{}] is not assigned", item.hashCode(), item.getName()); } return false; } if (item.getRequestedVersion() == null) { if (isRequest) { return false; } else { continue; } } if (version.getRevision() < item.getRequestedVersion()) { if (log.isTraceEnabled() && !isRequest) { log.info("\t\tUnsatified item {} [{}] [{}<{}]", item.hashCode(), item.getName(), version.getRevision(), item.getRequestedVersion()); } return false; } } return true; }
protected void publishItemUpdates(long agentId) { Client client = new Client(Agent.class, agentId); Map<String, ItemVersion> version = configItemStatusDao.getApplied(client); List<ConfigUpdateItem> items = new ArrayList<>(version.size()); for (String name : version.keySet()) { items.add(new ConfigUpdateItem(name)); } final Agent agent = objectManager.loadResource(Agent.class, agentId); final Event configUpdate = new ConfigUpdate(client.getEventName(), ServerContext.getHostApiBaseUrl(BaseProtocol.HTTP), items) .withResourceType(AgentConstants.TYPE).withResourceId(Long.toString(agentId)); DeferredUtils.defer(new Runnable() { @Override public void run() { try { configUpdateProcessor.handle(agent, configUpdate); } catch (IOException e) { throw new IllegalStateException(e); } } }); }
private static String message(ConfigUpdateRequest request, List<ConfigUpdateItem> items) { List<String> names = new ArrayList<String>(); for (ConfigUpdateItem item : items) { names.add(item.getName()); } return String.format("Timeout waiting for [%s] to update %s", request.getClient(), names); }
protected void downloadAndPost(String auth, String url, ConfigUpdateItem item) throws IOException { if (item.getName().equals("metadata-answers") || item.getName().equals("psk")) { return; String contentUrl = (url + "/configcontent/" + item.getName()).toLowerCase(); URLConnection urlConnection = getConnection(contentUrl, auth); log.info("Simulator in [{}] file [{}]", item.getName(), entry.getName()); log.info("Simulator found version [{}] for [{}]", version, item.getName()); throw new IllegalStateException("Failed to find versions for [" + item.getName() + "]"); log.info("Simulator POSTing version [{}] for [{}]", version, item.getName()); HttpURLConnection conn = (HttpURLConnection) getConnection(contentUrl + "?version=" + version, auth); conn.setRequestMethod("PUT");
@Override public boolean runUpdateForEvent(final String itemName, final ConfigUpdate update, final Client client, final Runnable run) { boolean found = false; for (ConfigUpdateItem item : update.getData().getItems()) { if (itemName.equals(item.getName())) { found = true; } } if (!found) { return false; } return lockManager.tryLock(new ConfigItemProcessLock(itemName, client), new LockCallback<Object>() { @Override public Object doWithLock() { ItemVersion itemVersion = getRequestedVersion(client, itemName); if (itemVersion == null) { return null; } run.run(); setApplied(client, itemName, itemVersion); eventService.publish(EventVO.reply(update)); return new Object(); } }) != null; }
List<String> items = new ArrayList<>(); for (ConfigUpdateItem updateItem : updateItems) { items.add(updateItem.getName());
@Override public List<? extends ConfigItemStatus> listItems(ConfigUpdateRequest request) { Set<String> names = new HashSet<String>(); for ( ConfigUpdateItem item : request.getItems() ) { names.add(item.getName()); } return create() .selectFrom(CONFIG_ITEM_STATUS) .where( CONFIG_ITEM_STATUS.NAME.in(names) .and(targetObjectCondition(request.getClient()))) .fetch(); }