Определите, не обнаружена ли база данных Cosmos из-за отсутствия коллекции или документа - PullRequest
0 голосов
/ 30 августа 2018

Есть ли способ программно определить из DocumentClientException, где StatusCode == HttpStatusCode.NotFound, был ли документ, коллекция или база данных, которые не были найдены?

Я пытаюсь выяснить, могу ли я реализовать инициализацию сбора по требованию и звонить DocumentClient.CreateDocumentCollectionIfNotExistsAsync только тогда, когда мне это нужно. Я стараюсь не вызывать его перед выполнением каждого запроса (возможно, это добавляет дополнительный сетевой обход к каждому запросу). Точно так же я стараюсь не вызывать его при восстановлении после ошибок, когда знаю, что это не поможет.

Из экспериментов с локальным эмулятором, единственное поле, которое я вижу, меняясь в этих трех случаях, это DocumentClientException.Error.Message, и только когда база данных не может быть найдена. Обычно я стараюсь избегать отправки исключений на основе читаемых человеком сообщений.

Неверное имя базы данных:

  • StatusCode: HttpStatusCode.NotFound
  • Error.Message: {\"Errors\":[\"Owner resource does not exist\"]}...

Правильное имя базы данных, неправильное имя коллекции:

  • StatusCode: HttpStatusCode.NotFound
  • Error.Message: {\"Errors\":[\"Resource Not Found\"]}...

Правильное имя базы данных, правильное имя коллекции, неверный идентификатор документа:

  • StatusCode: HttpStatusCode.NotFound
  • Error.Message: {\"Errors\":[\"Resource Not Found\"]}...

Я планирую использовать базу данных со своим предложением. Поскольку коллекции в базе данных с собственным предложением дешевы, я пытаюсь выяснить, могу ли я выделить каждого арендатора в своем мультитенантном приложении в его собственную коллекцию . Каждый арендатор имеет свою собственную политику индексации и TTL по умолчанию. Набор коллекций не является фиксированным и динамически изменяется во время выполнения по мере регистрации новых арендаторов. Я не могу предсказать, когда мне нужно будет добавить новую коллекцию. Нет нового уведомления арендатора: я просто получаю запрос, который мне нужно обработать, создав документ в возможно несуществующей коллекции. Есть процесс для сбора мусора неиспользуемых коллекций.

Я использую пакет NuGet Microsoft.Azure.DocumentDB.Core версии 1.9.1 в приложении .NET Core 2.1 для экземпляра SQL API Cosmos DB.

1 Ответ

0 голосов
/ 02 марта 2019

Если вы подробно изучите свойство Message, вы должны увидеть следующие строки, в которых указано, был ли создан ответ 404 Not Found из-за Document vs Collection.

  • ResourceType: Document
  • ResourceType: Collection

Это не идеально, но вы можете попытаться откорректировать эту информацию из сообщения об ошибке.

...