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); }
@Override public void run() { request.setUpdateFuture(call(request.getClient(), event)); } };
@Override public void updateConfig(ConfigUpdateRequest request) { if (request.getClient() == null) { throw new IllegalArgumentException("Client is null on request [" + request + "]"); log.trace("ITEM UPDATE: for [{}]", request.getClient()); Client client = request.getClient(); Map<String, ConfigItemStatus> statuses = getStatus(request); List<ConfigUpdateItem> toTrigger = new ArrayList<ConfigUpdateItem>(); log.trace("ITEM UPDATE: incrementOrApply [{}]", request.getClient()); configItemStatusDao.incrementOrApply(client, name); log.trace("ITEM UPDATE: done incrementOrApply [{}]", request.getClient()); } else { log.info("ITEM UPDATE: ignore [{}] [{}]", name, request.getClient()); continue; log.trace("ITEM UPDATE: get requested [{}]", request.getClient()); 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); log.trace("ITEM UPDATE: done incrementOrApply [{}]", request.getClient()); requestedVersion = status.getRequestedVersion() + 1;
@Override public ListenableFuture<?> whenReady(final ConfigUpdateRequest request) { ConfigUpdate event = getEvent(request); if (event.getData().getItems().size() == 0) { return AsyncUtils.done(); } ListenableFuture<? extends Event> future = request.getUpdateFuture(); if (future == null) { future = call(request.getClient(), event); } return Futures.transform(future, new Function<Event, Object>() { @Override public Object apply(Event input) { logResponse(request, input); List<ConfigUpdateItem> toTrigger = getNeedsUpdating(request, true); if (toTrigger.size() > 0) { throw new ConfigTimeoutException(request, toTrigger); } return Boolean.TRUE; } }); }
protected ConfigUpdate getEvent(ConfigUpdateRequest request, List<ConfigUpdateItem> items) { Client client = request.getClient(); String url = ServerContext.getHostApiBaseUrl(BaseProtocol.HTTP); if (items.size() == 0) { return new ConfigUpdate(client.getEventName(), url, Collections.<ConfigUpdateItem> emptyList()); } ConfigUpdate event = new ConfigUpdate(client.getEventName(), url, items); event.withResourceType(objectManager.getType(client.getResourceType())).withResourceId(Long.toString(client.getResourceId())); return event; }
@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(); }
protected List<ConfigUpdateItem> getNeedsUpdating(ConfigUpdateRequest request, boolean checkVersions) { Client client = request.getClient(); Map<String, ConfigItemStatus> statuses = getStatus(request); List<ConfigUpdateItem> toTrigger = new ArrayList<ConfigUpdateItem>();