Azure / Azure/azure-documentdb-java

NullPointerException on readDocument()

Aperta
#112 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Java
Stelle
51
Fork
52
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

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);
}
```

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia da SessionContainer.java alle righe 72, 88, 167 e 194, quindi segui la gestione del session-token da DocumentClient.readDocument() attraverso le righe 3051-3155 di DocumentClient.java. Riproduci la lettura segnalata usando una partition key, strong consistency e la configurazione del client mostrata; il lavoro è completato quando la lettura non attiva più nessuno dei due percorsi di NullPointerException e il comportamento ha una copertura di regressione.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
azure, java
Ambito
databases
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
38/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.