public ConsulResponse<ImmutableMap<K,V>> getMapWithMetadata() { return new ConsulResponse<>(lastResponse.get(), lastContact.get(), isKnownLeader.get(), latestIndex.get()); }
@VisibleForTesting static <T> ConsulResponse<T> consulResponse(Response<T> response) { Headers headers = response.headers(); String indexHeaderValue = headers.get("X-Consul-Index"); String lastContactHeaderValue = headers.get("X-Consul-Lastcontact"); String knownLeaderHeaderValue = headers.get("X-Consul-Knownleader"); BigInteger index = indexHeaderValue == null ? BigInteger.ZERO : new BigInteger(indexHeaderValue); long lastContact = lastContactHeaderValue == null ? 0 : Long.valueOf(lastContactHeaderValue); boolean knownLeader = knownLeaderHeaderValue == null ? false : Boolean.valueOf(knownLeaderHeaderValue); return new ConsulResponse<>(response.body(), lastContact, knownLeader, index); } }
@Override public void onComplete(ConsulResponse<List<Value>> consulResponse) { callback.onComplete( new ConsulResponse<>(getSingleValue(consulResponse.getResponse()), consulResponse.getLastContact(), consulResponse.isKnownLeader(), consulResponse.getIndex())); }
/** * Asynchronously retrieves a {@link com.orbitz.consul.model.kv.Value} for a specific key * from the key/value store. * * GET /v1/kv/{key} * * @param key The key to retrieve. * @param queryOptions The query options. * @param callback Callback implemented by callee to handle results. */ public void getValue(String key, QueryOptions queryOptions, final ConsulResponseCallback<Optional<Value>> callback) { ConsulResponseCallback<List<Value>> wrapper = new ConsulResponseCallback<List<Value>>() { @Override public void onComplete(ConsulResponse<List<Value>> consulResponse) { callback.onComplete( new ConsulResponse<>(getSingleValue(consulResponse.getResponse()), consulResponse.getLastContact(), consulResponse.isKnownLeader(), consulResponse.getIndex())); } @Override public void onFailure(Throwable throwable) { callback.onFailure(throwable); } }; http.extractConsulResponse(api.getValue(trimLeadingSlash(key), queryOptions.toQuery()), wrapper, NOT_FOUND_404); }
/** * Returns a {@link ConsulResponse<Value>} for a specific key from the kv store. * Contains the consul response headers along with the configuration value. * * GET /v1/kv/{key} * * @param key The key to retrieve. * @param queryOptions The query options. * @return An {@link Optional} containing the ConsulResponse or {@link Optional#empty()} */ public Optional<ConsulResponse<Value>> getConsulResponseWithValue(String key, QueryOptions queryOptions) { try { ConsulResponse<List<Value>> consulResponse = http.extractConsulResponse(api.getValue(trimLeadingSlash(key), queryOptions.toQuery()), NOT_FOUND_404); Optional<Value> consulValue = getSingleValue(consulResponse.getResponse()); if (consulValue.isPresent()) { ConsulResponse<Value> result = new ConsulResponse<>(consulValue.get(), consulResponse.getLastContact(), consulResponse.isKnownLeader(), consulResponse.getIndex()); return Optional.of(result); } } catch (ConsulException ignored) { if (ignored.getCode() != NOT_FOUND_404) { throw ignored; } } return Optional.empty(); }