Skip to content

Commit 74b0522

Browse files
committed
fix #185
1 parent 389b52b commit 74b0522

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

nitrite/src/main/java/org/dizitart/no2/internals/SearchService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ private Set<NitriteId> sortIdSet(Collection<NitriteId> nitriteIdSet, FindOptions
158158

159159
for (NitriteId id : nitriteIdSet) {
160160
Document document = underlyingMap.get(id);
161+
if (document == null) continue;
162+
161163
Object value = getFieldValue(document, sortField);
162164

163165
if (value != null) {

nitrite/src/test/java/org/dizitart/no2/NitriteTest.java

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@
1818

1919
package org.dizitart.no2;
2020

21+
import lombok.AllArgsConstructor;
22+
import lombok.Data;
23+
import lombok.NoArgsConstructor;
2124
import org.dizitart.no2.exceptions.NitriteIOException;
25+
import org.dizitart.no2.objects.Id;
2226
import org.dizitart.no2.objects.ObjectRepository;
2327
import org.junit.After;
2428
import org.junit.Before;
@@ -37,6 +41,8 @@
3741
import static org.dizitart.no2.DbTestOperations.getRandomTempDbFile;
3842
import static org.dizitart.no2.Document.createDocument;
3943
import static org.dizitart.no2.filters.Filters.ALL;
44+
import static org.dizitart.no2.objects.filters.ObjectFilters.eq;
45+
import static org.dizitart.no2.objects.filters.ObjectFilters.not;
4046
import static org.junit.Assert.*;
4147

4248
public class NitriteTest {
@@ -277,4 +283,53 @@ public void testIssue112() {
277283
Nitrite db = Nitrite.builder().filePath("/tmp").openOrCreate();
278284
assertNull(db);
279285
}
286+
287+
@Test
288+
public void testIssue185() {
289+
final ObjectRepository<Receipt> repository = db.getRepository(Receipt.class);
290+
final Receipt receipt = new Receipt();
291+
receipt.clientRef = "111-11111";
292+
receipt.status = Receipt.Status.PREPARING;
293+
294+
new Thread(new Runnable() {
295+
@Override
296+
public void run() {
297+
for (int i = 0; i < 1000; ++i) {
298+
repository.update(receipt, true);
299+
try {
300+
Thread.sleep(50);
301+
} catch (InterruptedException ignored) {
302+
}
303+
repository.remove(receipt);
304+
try {
305+
Thread.sleep(50);
306+
} catch (InterruptedException ignored) {
307+
}
308+
}
309+
}
310+
}).start();
311+
312+
for (int i = 0; i < 1000; ++i) {
313+
repository.find(not(eq("status", Receipt.Status.COMPLETED)), FindOptions.sort("createdTimestamp", SortOrder.Descending)).toList();
314+
try {
315+
Thread.sleep(50);
316+
} catch (InterruptedException ignored) {
317+
}
318+
}
319+
}
320+
321+
@Data
322+
@NoArgsConstructor
323+
@AllArgsConstructor
324+
public static class Receipt {
325+
public enum Status {
326+
COMPLETED,
327+
PREPARING,
328+
}
329+
330+
private Status status;
331+
@Id
332+
private String clientRef;
333+
private Long createdTimestamp = System.currentTimeMillis();
334+
}
280335
}

0 commit comments

Comments
 (0)