com.arakelian.elastic.utils.ElasticClientUtils Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.arakelian.elastic.utils;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.net.SocketTimeoutException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.arakelian.elastic.ElasticClient;
import com.arakelian.elastic.ElasticHttpException;
import com.arakelian.elastic.ElasticResponse;
import com.arakelian.elastic.Views.Elastic.Version5;
import com.arakelian.elastic.Views.Elastic.Version5.Version52;
import com.arakelian.elastic.Views.Elastic.Version5.Version53;
import com.arakelian.elastic.Views.Elastic.Version5.Version54;
import com.arakelian.elastic.Views.Elastic.Version5.Version55;
import com.arakelian.elastic.Views.Elastic.Version5.Version56;
import com.arakelian.elastic.Views.Elastic.Version6;
import com.arakelian.elastic.Views.Elastic.Version6.Version61;
import com.arakelian.elastic.Views.Elastic.Version6.Version62;
import com.arakelian.elastic.Views.Elastic.Version6.Version63;
import com.arakelian.elastic.Views.Elastic.Version6.Version64;
import com.arakelian.elastic.Views.Elastic.Version6.Version65;
import com.arakelian.elastic.Views.Elastic.Version6.Version66;
import com.arakelian.elastic.Views.Elastic.Version6.Version67;
import com.arakelian.elastic.Views.Elastic.Version6.Version68;
import com.arakelian.elastic.Views.Elastic.Version7;
import com.arakelian.elastic.Views.Elastic.Version7.Version71;
import com.arakelian.elastic.Views.Elastic.Version7.Version72;
import com.arakelian.elastic.Views.Elastic.Version7.Version73;
import com.arakelian.elastic.Views.Elastic.Version8;
import com.arakelian.elastic.model.About;
import com.arakelian.elastic.model.ImmutableIndex;
import com.arakelian.elastic.model.Index;
import com.arakelian.elastic.model.Index.WithoutNameSerializer;
import com.arakelian.elastic.model.VersionComponents;
import com.arakelian.jackson.utils.JacksonUtils;
import com.arakelian.retry.RetryException;
import com.arakelian.retry.Retryer;
import com.arakelian.retry.RetryerBuilder;
import com.arakelian.retry.StopStrategies;
import com.arakelian.retry.StopStrategy;
import com.arakelian.retry.WaitStrategies;
import com.arakelian.retry.WaitStrategy;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
public class ElasticClientUtils {
/**
* Determines if an {@link IOException} is suitable for retry. Adapted from Apache Commons IO's
* DefaultHttpMethodRetryHandler.
*/
public static class RetryIoException implements Predicate {
@Override
public boolean apply(final Throwable exception) {
if (findCause(exception, SocketTimeoutException.class) != null) {
// Retry if the server dropped connection on us
return true;
}
final ElasticHttpException cause = findCause(exception, ElasticHttpException.class);
if (cause != null) {
return retryIfResponse(cause.getStatusCode());
}
// otherwise do not retry
return false;
}
private T findCause(final Throwable exception, final Class type) {
if (exception == null) {
return null;
}
if (type.isInstance(exception)) {
return type.cast(exception);
}
return findCause(exception.getCause(), type);
}
}
private static final Logger LOGGER = LoggerFactory.getLogger(ElasticClientUtils.class);
public static final String DEFAULT_TIMEOUT = "30s";
public static void configure(final ObjectMapper mapper, final VersionComponents version) {
if (version != null && !version.isEmpty()) {
final Class> view = getJsonView(version);
JacksonUtils.withView(mapper, view);
}
}
public static void configureIndexSerialization(final ObjectMapper mapper) {
JsonSerializer © 2015 - 2025 Weber Informatics LLC | Privacy Policy