properly close the getAllTiles iterator

pull/772/head
bbilger 2024-01-06 22:16:59 +01:00
rodzic 264b3515c4
commit 19c834fb5d
6 zmienionych plików z 39 dodań i 12 usunięć

Wyświetl plik

@ -26,7 +26,9 @@ abstract class ReadableStreamArchive<E> implements ReadableTileArchive {
@Override
public final byte[] getTile(TileCoord coord) {
return getAllTiles().stream().filter(c -> c.coord().equals(coord)).map(Tile::bytes).findFirst().orElse(null);
try (var tiles = getAllTiles(); var s = tiles.stream()) {
return s.filter(c -> c.coord().equals(coord)).map(Tile::bytes).findFirst().orElse(null);
}
}
@Override
@ -34,11 +36,17 @@ abstract class ReadableStreamArchive<E> implements ReadableTileArchive {
return getTile(TileCoord.ofXYZ(x, y, z));
}
/**
* Callers MUST make sure to close the iterator/derived stream!
*/
@Override
public final CloseableIterator<TileCoord> getAllTileCoords() {
return getAllTiles().map(Tile::coord);
}
/**
* Callers MUST make sure to close the iterator/derived stream!
*/
@Override
public final CloseableIterator<Tile> getAllTiles() {
return createIterator()
@ -53,8 +61,8 @@ abstract class ReadableStreamArchive<E> implements ReadableTileArchive {
}
private TileArchiveMetadata loadMetadata() {
try (var it = createIterator()) {
return it.stream().map(this::mapEntryToMetadata).flatMap(Optional::stream).findFirst().orElse(null);
try (var i = createIterator(); var s = i.stream()) {
return s.map(this::mapEntryToMetadata).flatMap(Optional::stream).findFirst().orElse(null);
}
}

Wyświetl plik

@ -294,7 +294,9 @@ public class TestUtils {
}
public static Set<Tile> getTiles(ReadableTileArchive db) {
return db.getAllTiles().stream().collect(Collectors.toSet());
try (var t = db.getAllTiles(); var s = t.stream()) {
return s.collect(Collectors.toUnmodifiableSet());
}
}
public static int getTilesDataCount(Mbtiles db) throws SQLException {

Wyświetl plik

@ -49,8 +49,12 @@ class ReadableFilesArchiveTest {
Files.write(files.get(i), new byte[]{(byte) i});
}
try (var reader = ReadableFilesArchive.newReader(tilesDir, Arguments.of())) {
final List<Tile> tiles = reader.getAllTiles().stream().sorted().toList();
try (
var reader = ReadableFilesArchive.newReader(tilesDir, Arguments.of());
var t = reader.getAllTiles();
var s = t.stream()
) {
final List<Tile> tiles = s.sorted().toList();
assertEquals(
List.of(
new Tile(TileCoord.ofXYZ(0, 0, 0), new byte[]{0}),

Wyświetl plik

@ -63,8 +63,12 @@ class ReadableCsvStreamArchiveTest {
);
try (var reader = ReadableCsvArchive.newReader(TileArchiveConfig.Format.CSV, csvFile, config)) {
assertEquals(expectedTiles, reader.getAllTiles().stream().toList());
assertEquals(expectedTiles, reader.getAllTiles().stream().toList());
try (var s = reader.getAllTiles().stream()) {
assertEquals(expectedTiles, s.toList());
}
try (var s = reader.getAllTiles().stream()) {
assertEquals(expectedTiles, s.toList());
}
assertNull(reader.metadata());
assertNull(reader.metadata());
assertArrayEquals(expectedTiles.get(1).bytes(), reader.getTile(TileCoord.ofXYZ(1, 2, 3)));

Wyświetl plik

@ -36,8 +36,12 @@ class ReadableJsonStreamArchiveTest {
new Tile(TileCoord.ofXYZ(1, 2, 3), new byte[]{1})
);
try (var reader = ReadableJsonStreamArchive.newReader(jsonFile, config)) {
assertEquals(expectedTiles, reader.getAllTiles().stream().toList());
assertEquals(expectedTiles, reader.getAllTiles().stream().toList());
try (var s = reader.getAllTiles().stream()) {
assertEquals(expectedTiles, s.toList());
}
try (var s = reader.getAllTiles().stream()) {
assertEquals(expectedTiles, s.toList());
}
assertEquals(TestUtils.MAX_METADATA_DESERIALIZED, reader.metadata());
assertEquals(TestUtils.MAX_METADATA_DESERIALIZED, reader.metadata());
assertArrayEquals(expectedTiles.get(1).bytes(), reader.getTile(TileCoord.ofXYZ(1, 2, 3)));

Wyświetl plik

@ -52,8 +52,13 @@ class ReadableProtoStreamArchiveTest {
new Tile(TileCoord.ofXYZ(1, 2, 3), new byte[]{1})
);
try (var reader = ReadableProtoStreamArchive.newReader(p, new StreamArchiveConfig(false, Arguments.of()))) {
assertEquals(expectedTiles, reader.getAllTiles().stream().toList());
assertEquals(expectedTiles, reader.getAllTiles().stream().toList());
try (var s = reader.getAllTiles().stream()) {
assertEquals(expectedTiles, s.toList());
}
try (var s = reader.getAllTiles().stream()) {
assertEquals(expectedTiles, s.toList());
}
assertEquals(metadataDeserialized, reader.metadata());
assertEquals(metadataDeserialized, reader.metadata());
}
}