openstack swift: сервер слишком долго ждал отправки запроса клиентом

Мы получаем несколько таких сейчас и потом:

Caused by: javax.ejb.EJBException: org.jclouds.http.HttpResponseException: 
command: PUT {{PUT_URL}} 
HTTP/1.1 failed with response: HTTP/1.1 408 Request Timeout; 
content: [<html><h1>Request Timeout</h1><p>The server has waited too long for the request to be sent by the client.</p></html>]

повторная попытка позже обычно работает. что вызывает это исключение? Есть ли способ увеличить время ожидания на Swift?

2 ответа

Решение

jclouds 1.7.2 включает исправление для этой проблемы:

https://issues.apache.org/jira/browse/JCLOUDS-342

Ваш вопрос не имеет правильной информации в деталях.

если вы разработчик, вы можете использовать что-то вроде:

import static org.jclouds.Constants.*;


  Properties overrides = new Properties();
  overrides.setProperty(PROPERTY_MAX_CONNECTIONS_PER_CONTEXT, 20 + "");
  overrides.setProperty(PROPERTY_MAX_CONNECTIONS_PER_HOST, 0 + "");
  overrides.setProperty(PROPERTY_CONNECTION_TIMEOUT, 5000 + "");
  overrides.setProperty(PROPERTY_SO_TIMEOUT, 5000 + "");
  overrides.setProperty(PROPERTY_IO_WORKER_THREADS, 20 + "");
  // unlimited user threads
  overrides.setProperty(PROPERTY_USER_THREADS, 0 + "");


  Set<Module> wiring =  ImmutableSet.of(new EnterpriseConfigurationModule(), new Log4JLoggingModule());

  // same properties and wiring can be used for many services, although the limits are per context
  blobStoreContext = ContextBuilder.newBuilder("s3")
                      .credentials(account, key)
                      .modules(wiring)
                      .overrides(overrides)
                      .buildView(BlobStoreContext.class);
  computeContext = ContextBuilder.newBuilder("ec2")
                      .credentials(account, key)
                      .modules(wiring)
                      .overrides(overrides)
                      .buildView(ComputeServiceContext.class);

Ниже приводится цитата из документации по конфигурации JClouds:

Тайм-аут: агрегирование команд займет столько времени, сколько необходимо для выполнения, что контролируется FutureIterables.awaitCompletion. Если вам нужно увеличить или уменьшить это значение, вам нужно настроить свойство jclouds.request-timeout или Constants.PROPERTY_REQUEST_TIMEOUT. Это описано в разделе "Расширенная настройка".

Если вы имеете дело со своим собственным кластером, то вы можете использовать некоторые возможные параметры конфигурации, присутствующие в быстрой конфигурации прокси-сервера.

Другие вопросы по тегам