Azure / Azure/azure-documentdb-java

NullPointerException on readDocument()

Aberta
#112 2 comentários 0 reações 0 responsáveis Ver no GitHub
Linguagem predominante
Java
Estrelas
51
Forks
52
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

SDK Version: 1.16.0

We see following errors in logs:
```
java.lang.NullPointerException: null
at com.microsoft.azure.documentdb.internal.SessionContainer.compareAndSetToken(SessionContainer.java:194)
at com.microsoft.azure.documentdb.internal.SessionContainer.setSessionToken(SessionContainer.java:167)
at com.microsoft.azure.documentdb.internal.SessionContainer.setSessionToken(SessionContainer.java:156)
at com.microsoft.azure.documentdb.internal.SessionTokenHelper.captureSessionToken(SessionTokenHelper.java:138)
at com.microsoft.azure.documentdb.DocumentClient.captureSessionToken(DocumentClient.java:3155)
at com.microsoft.azure.documentdb.DocumentClient.doRead(DocumentClient.java:3054)
at com.microsoft.azure.documentdb.DocumentClient.readDocument(DocumentClient.java:1041)
at com.tomtom.lns.batch.dao.CosmosDBDao.getDocumentByBatchId(CosmosDBDao.java:358)
```
```
java.lang.NullPointerException: null
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936)
at com.microsoft.azure.documentdb.internal.SessionContainer.getPartitionKeyRangeIdToTokenMap(SessionContainer.java:72)
at com.microsoft.azure.documentdb.internal.SessionContainer.resolveGlobalSessionToken(SessionContainer.java:88)
at com.microsoft.azure.documentdb.internal.SessionContainer.resolveGlobalSessionToken(SessionContainer.java:84)
at com.microsoft.azure.documentdb.DocumentClient.applySessionToken(DocumentClient.java:3143)
at com.microsoft.azure.documentdb.DocumentClient.doRead(DocumentClient.java:3051)
at com.microsoft.azure.documentdb.DocumentClient.readDocument(DocumentClient.java:1041)
at com.tomtom.lns.batch.dao.CosmosDBDao.getDocumentByBatchId(CosmosDBDao.java:358)
```

Our retrieve method:
```java
private Document getDocumentByBatchId(final DocumentClient client, final BatchId batchId) {
try {
final RequestOptions requestOptions = new RequestOptions();
requestOptions.setPartitionKey(new PartitionKey(batchId.getUuid().toString()));
requestOptions.setConsistencyLevel(ConsistencyLevel.Strong);
return client.readDocument(getBatchDocumentLink(batchId), requestOptions).getResource();
} catch (DocumentClientException e) {
if (e.getStatusCode() == HttpStatus.NOT_FOUND.value()) {
throw new BatchNotFoundException(batchId);
}
throw new IllegalStateException("Cannot fetch Batch document: " + batchId, e);
}
}
```

And for clarity getBatchDocumentLink() method:
```java
private static final String BATCH_DOCUMENT_LINK_TEMPLATE = "/dbs/BatchDB/colls/batches/docs/%s"
...
private String getBatchDocumentLink(final BatchId batchId) {
return String.format(BATCH_DOCUMENT_LINK_TEMPLATE, batchId.getUuid().toString());
}
```

Our DocumentClient is created by:
```java
private DocumentClient createDocumentClient(final String url, final String masterKey,
final ImmutableList preferredLocations) {
final ConnectionPolicy connectionPolicy = new ConnectionPolicy();
connectionPolicy.setEnableEndpointDiscovery(true);
connectionPolicy.setConnectionMode(ConnectionMode.DirectHttps);
connectionPolicy.setMaxPoolSize(CONNECTION_POOL_SIZE);
connectionPolicy.setPreferredLocations(preferredLocations);
return new DocumentClient(url, masterKey, connectionPolicy, ConsistencyLevel.Session);
}
```

Guia de contribuição

Abrir o guia de contribuição

Direção de pesquisa

Comece por SessionContainer.java nas linhas 72, 88, 167 e 194 e, em seguida, rastreie o tratamento de session-token a partir de DocumentClient.readDocument() pelas linhas 3051-3155 de DocumentClient.java. Reproduza a leitura relatada usando uma partition key, strong consistency e a configuração de cliente mostrada; o trabalho estará concluído quando a leitura não acionar mais nenhum dos dois caminhos de NullPointerException e o comportamento tiver cobertura de regressão.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
azure, java
Domínio
databases
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
38/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.