Как исправить спорадическое время ожидания чтения и ошибку недоступности службы в эмуляторе Azure Cosmos (Linux), работающем в docker?

#java #linux #azure #docker #azure-cosmosdb

Вопрос:

Я запускаю эмулятор Linux cosmos со следующими конфигурациями (в соответствии с официальной документацией Microsoft) на Ubuntu 20.04.3 ( я также пробовал 18.04)

 ipaddr="`ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}' | head -n 1`"
sudo docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
sudo docker run -d -p 8081:8081 -p 10251:10251 -p 10252:10252 -p 10253:10253 -p 10254:10254  -m 4g --cpus=2.0 --name=test-linux-emulator -e AZURE_COSMOS_EMULATOR_PARTITION_COUNT=10 -e AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=true -e AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE=$ipaddr mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
 

Также добавление сертификата в хранилище ключей Java в соответствии с официальным документом.

что я делаю? Я запускаю модульное тестирование, подключаясь к эмулятору простой работы с CRUD с помощью 1 или 2 элементов atmost. Каждый тест создаст контейнер и удалит его. Конфигурация моей машины-4 ядра и 16 ГБ памяти. Я запускаю Junit в весенней загрузке.

Что происходит? Спорадически случаи модульного тестирования завершаются сбоем с таймаутом чтения или ошибкой недоступности службы. Я заметил в пользовательском интерфейсе эмулятора, что базы данных иногда исчезают, но эмулятор всегда работает и работает.

Примечание: То же самое работает нормально, когда я запускаю эмулятор cosmos DB в Windows 10 (как exe, так и в качестве контейнера docker).

введите описание изображения здесь

Вопросы:

  1. В чем может быть проблема при работе с Linux ?
  2. Можно ли удалить контейнер cosmos(таблицу) и создать заново для каждого тестового случая?

Мы высоко ценим любое предложение по этому вопросу.

Ответ №1:

  1. В чем может быть проблема при работе с Linux?

Ответ: Не должно быть никаких проблем с запуском эмулятора Cosmos (Linux) в Linux. Заразить это может быть очень удобно, так как оба они относятся к одной и той же ОС.

  1. Можно ли удалить контейнер и создать его заново для каждого тестового случая?

Ответ: Похоже, это не подходит для удаления и создания контейнера для каждого тестового случая.

Я бы посоветовал вам использовать один и тот же контейнер для всего модульного тестирования, если вы все еще хотите выполнить то же самое, обязательно остановите контейнер перед его удалением, потому что прямое удаление контейнера может привести к тому, что демон docker выдаст ошибку. Сначала мы должны остановить контейнер и удалить его.

Ссылка: https://k21academy.com/docker-kubernetes/docker-container-lifecycle-management/

Комментарии:

1. Вы имеете в виду контейнер cosmos DB (таблицы) ? Для ясности я обновил контейнер cosmos DB в вопросе.

2. приведенный выше ответ является общим и для всех типов контейнеров.

3. Извините, я думаю, небольшое недоразумение.. в cosmos DB таблицы называются контейнерами для sql. Поэтому я имею в виду таблицы (контейнеры) внутри Cosmos DB.

4. Могу я узнать, какова конфигурация вашей оконной машины, на которой она работает нормально ?

5. Конфигурация машины с Windows такая же.. 4 ядра и 16 ГБ памяти