Обратите внимание:
- Я считаю, что этот вопрос отличается от того, который здесь говорит о том, почему токен продолжения равен нулю.Проблема, перечисленная здесь, связана с обсуждением этого неожиданного поведения и посмотреть, есть ли какое-либо решение для него.
- Я также сообщил об этом на cosmosdb github , потому что на этом этапе я думаю, что это можеточень хорошо быть ошибкой SDK или Cosmos API.
Вот так:
В принципе я не получаю результата с маркером продолжения в неожиданной ситуации.
Единственный подобный опыт (никакого результата, кроме токена продолжения), который у меня был с CosmosDb, был, когда RU недостаточно, и для запроса требуется больше RU, чтобы завершить свою работу.Например, при подсчете всех документов и вам нужно продолжить пару раз.
Как воспроизвести проблему?
Это очень трудно воспроизвести, как это делает потребительне контролирует распределение шардов (физических разделов).Но вам нужен comosdb, который имеет несколько логических разделов и как минимум два сегмента, и ваш запрос должен быть сформирован с целью получения данных во втором общем доступе.Не указывайте ключ разделения и не делайте запрос перекрестным.
Ожидаемое поведение
Когда:
- запрос является перекрестным разделом
- достаточно RU
- запрос стоит очень маленького RU
Я ожидаю получить результат при первом вызове.
Фактическое поведение
Результат запроса пуст. Ответ имеет необычный токен продолжения. Маркер выглядит следующим образом:
{"token": null, "range ": {" min ":" 05C1DFFFFFFFFC "," max ":" FF "}}
Ниже приведен пример кода, который я могу воспроизводить каждый раз.В этом случае у меня есть документ, расположенный в разделе 2 (индекс 1), который я предполагаю, что это второй осколок.
var client = new DocumentClient(ServiceEndpoint, AuthKey);
const string query = "select * from c where c.title='JACK CALLAGHAN'";
var collection = UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId);
var cQuery = client.CreateDocumentQuery<dynamic>(collection, query, new FeedOptions
{
EnableCrossPartitionQuery = true,
PopulateQueryMetrics = true
}).AsDocumentQuery();
var response = cQuery.ExecuteNextAsync().GetAwaiter().GetResult();
Console.WriteLine($"response.AsEnumerable().Count()= {response.AsEnumerable().Count()}");
foreach (string headerKey in response.ResponseHeaders.Keys)
{
Console.WriteLine($"{headerKey}");
var keyValues = response.ResponseHeaders[headerKey].Split(";");
foreach (var keyValue in keyValues)
{
Console.WriteLine($"{keyValue}");
}
Console.WriteLine();
}
И вывод, включая все заголовки:
response.AsEnumerable().Count()= 0
Cache-Control
no-store, no-cache
Pragma
no-cache
Transfer-Encoding
chunked
Server
Microsoft-HTTPAPI/2.0
Strict-Transport-Security
max-age=31536000
x-ms-last-state-change-utc
Wed, 03 Apr 2019 00:50:35.469 GMT
x-ms-resource-quota
documentSize=51200
documentsSize=52428800
documentsCount=-1
collectionSize=52428800
x-ms-resource-usage
documentSize=184
documentsSize=164076
documentsCount=94186
collectionSize=188910
lsn
118852
x-ms-item-count
0
x-ms-schemaversion
1.7
x-ms-alt-content-path
dbs/bettingedge/colls/fixtures
x-ms-content-path
S8sXAPPiCdc=
x-ms-xp-role
1
x-ms-documentdb-query-metrics
totalExecutionTimeInMs=0.27
queryCompileTimeInMs=0.04
queryLogicalPlanBuildTimeInMs=0.02
queryPhysicalPlanBuildTimeInMs=0.03
queryOptimizationTimeInMs=0.00
VMExecutionTimeInMs=0.06
indexLookupTimeInMs=0.05
documentLoadTimeInMs=0.00
systemFunctionExecuteTimeInMs=0.00
userFunctionExecuteTimeInMs=0.00
retrievedDocumentCount=0
retrievedDocumentSize=0
outputDocumentCount=0
outputDocumentSize=49
writeOutputTimeInMs=0.00
indexUtilizationRatio=0.00
x-ms-global-Committed-lsn
118851
x-ms-number-of-read-regions
0
x-ms-transport-request-id
12
x-ms-cosmos-llsn
118852
x-ms-session-token
0:-1#118852
x-ms-request-charge
2.86
x-ms-serviceversion
version=2.2.0.0
x-ms-activity-id
c4bc4b76-47c2-42e9-868a-9ecfe0936b1e
x-ms-continuation
{"token":null,"range":{"min":"05C1DFFFFFFFFC","max":"FF"}}
x-ms-gatewayversion
version=2.2.0.0
Date
Fri, 05 Apr 2019 05:40:21 GMT
Content-Type
application/json
Еслимы продолжим запрос с помощью составного токена продолжения, чтобы увидеть результат.
Это нормальное поведение или ошибка?