fix(events): avoid transient pending files in JSONL tests
Release / release (push) Failing after 10m47s
Release / release (push) Failing after 10m47s
This commit is contained in:
1 parent
43734d2634
commit
9ed5dea830
1 file changed
+31
-4
@@ -701,12 +701,39 @@ class FantasyStickLifecycleNativeTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test void nativeJsonlReaderSeesExportedUtcSegmentsButNotTransientPendingArea() throws Exception {
|
||||
var root=data.resolve("events");
|
||||
var first=java.nio.file.Files.createDirectories(root.resolve("2026-09-27"));
|
||||
var second=java.nio.file.Files.createDirectories(root.resolve("2026-09-28"));
|
||||
var pending=java.nio.file.Files.createDirectories(root.resolve("pending"));
|
||||
java.nio.file.Files.writeString(first.resolve("events-first-0.jsonl"),"{\"id\":\"first\"}\n");
|
||||
java.nio.file.Files.writeString(second.resolve("events-second-0.jsonl"),"{\"id\":\"second\"}\n");
|
||||
// This is never an exported segment, even if a transient file resembles one.
|
||||
java.nio.file.Files.writeString(pending.resolve("decoy.jsonl"),"{\"id\":\"pending\"}\n");
|
||||
java.nio.file.Files.writeString(pending.resolve("in-flight.pending"),"uncommitted");
|
||||
assertEquals(List.of("first","second"),localRecords(data).stream()
|
||||
.map(record->record.get("id").getAsString()).sorted().toList());
|
||||
java.nio.file.Files.writeString(second.resolve("events-second-0.jsonl"),"{\"broken\":\n");
|
||||
assertThrows(com.google.gson.JsonParseException.class,()->localRecords(data),
|
||||
"a malformed exported record must not be hidden by excluding pending files");
|
||||
}
|
||||
|
||||
private static java.util.List<com.google.gson.JsonObject> localRecords(Path directory) throws IOException {
|
||||
var events = new java.util.ArrayList<com.google.gson.JsonObject>();
|
||||
try (var files = java.nio.file.Files.walk(directory.resolve("events"))) {
|
||||
for (var path : files.filter(p -> p.getFileName().toString().endsWith(".jsonl")).toList())
|
||||
for (var line : java.nio.file.Files.readAllLines(path))
|
||||
if (!line.isBlank()) events.add(com.google.gson.JsonParser.parseString(line).getAsJsonObject());
|
||||
// Exported segments live directly under UTC-date directories. Never traverse
|
||||
// pending/: its files can disappear while the asynchronous writer exports them.
|
||||
try (var dates = java.nio.file.Files.list(directory.resolve("events"))) {
|
||||
for (var date : dates.filter(java.nio.file.Files::isDirectory)
|
||||
.filter(p -> p.getFileName().toString().matches("\\d{4}-\\d{2}-\\d{2}"))
|
||||
.toList()) {
|
||||
try (var segments = java.nio.file.Files.list(date)) {
|
||||
for (var path : segments.filter(java.nio.file.Files::isRegularFile)
|
||||
.filter(p -> p.getFileName().toString().startsWith("events-")
|
||||
&& p.getFileName().toString().endsWith(".jsonl")).toList())
|
||||
for (var line : java.nio.file.Files.readAllLines(path))
|
||||
if (!line.isBlank()) events.add(com.google.gson.JsonParser.parseString(line).getAsJsonObject());
|
||||
}
|
||||
}
|
||||
}
|
||||
return events;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user