uploadcare / uploadcare-java

Java API client that handles uploads and further operations with files by wrapping Uploadcare Upload and REST APIs.
https://uploadcare.com
Apache License 2.0
6 stars 13 forks source link

Threading problem #1

Closed valyagolev closed 8 years ago

valyagolev commented 11 years ago

PoolingClientConnectionManager's default setting is 2 concurrent connections. Connections are not being released by Client and that is why only first two request succeed.

From user's viewpoint everything just hangs forever.

В целях оптимизации я использую созданный единожды Client, с которого получаю файлы и формирую линки на них для отображения в интерфейсе пользователя. Этот подход хорошо работает для read-only режима - client отлично отрабатывает много раз подряд, без каких либо проблем. Когда же использовать этот client в write или read-write режиме, наблюдаю следующую картину:

  1. Выполнил какую-то write операцию (загрузил файл с помощью Uploader, либо удалил файл через client.getFile().delete())
  2. Операция успешно выполнилась 3а. Выполняю вторую write операцию 3б. Выполняю read оперцию
  3. Клиент зависает, в тред дампах висит ожидание какого-то объекта внутри кода HttpClient. Как WA я использовал кешированый client для чтения и создание нового для каждой операции на запись.
valyagolev commented 11 years ago

подписываю @GarretPI

dmitry-mukhin commented 9 years ago

as a workaround one can just recreate Client for every request. e.g.:

        while(true) {
            Client client = new Client(PUBLIC_KEY, SECRET_KEY);
            Iterator<File> iterator = client.getFiles().asIterable().iterator();
            if (!iterator.hasNext())
                break;
            file = iterator.next(); 
            file.delete();
        }