mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-10-26 22:10:18 +00:00
Lock-free volume reads
- Structure volume caches read through concurrent maps and publish only current builds - Natural terrain receipts reuse a per-thread deflater with the platform gzip framing - Tests pin receipt and saved biome bytes across reused compressors
This commit is contained in:
1 parent
0fe2363feb
commit
04f2798c06
4 files changed
+142
-68
No files matched your search
@@ -60,6 +60,15 @@ public class NativeTerrainReceiptTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void repeatedEncodingOnOneThreadKeepsLegacyBytes() throws Exception {
|
||||
for (int round = 0; round < 6; round++) {
|
||||
SavedTerrainChunk chunk = chunk(round % 2 == 0);
|
||||
String epoch = "epoch-" + round;
|
||||
assertArrayEquals(legacyEncode(chunk, round, epoch), NativeTerrainReceipt.encode(chunk, round, epoch));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void saturatedStringCachesPreserveModifiedUtfBytes() throws Exception {
|
||||
for (int padding : new int[]{0, 300}) {
|
||||
|
||||
@@ -60,6 +60,16 @@ public class SavedBiomeStoreWriteTest {
|
||||
assertArrayEquals(expectedRegion(), Files.readAllBytes(regionPath(root)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void consecutiveRecordsKeepIndependentlyCompressedBytes() throws Exception {
|
||||
Path root = temporaryFolder.newFolder().toPath();
|
||||
SavedBiomeStore store = SavedBiomeStore.open(root);
|
||||
for (int x = 0; x < 4; x++) {
|
||||
store.claimAndPersist(chunk(x, 3L));
|
||||
}
|
||||
assertArrayEquals(expectedRegion(4), Files.readAllBytes(regionPath(root)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void relaxedDurabilityPreservesRecordsWithoutForcingEachAppend() throws Exception {
|
||||
String previousMode = System.getProperty(Durability.MODE_PROPERTY);
|
||||
@@ -379,6 +389,10 @@ public class SavedBiomeStoreWriteTest {
|
||||
}
|
||||
|
||||
private static byte[] expectedRegion() throws IOException {
|
||||
return expectedRegion(1);
|
||||
}
|
||||
|
||||
private static byte[] expectedRegion(int records) throws IOException {
|
||||
ByteArrayOutputStream raw = new ByteArrayOutputStream();
|
||||
DataOutputStream data = new DataOutputStream(raw);
|
||||
data.writeLong(3L);
|
||||
@@ -392,17 +406,6 @@ public class SavedBiomeStoreWriteTest {
|
||||
data.writeInt(1);
|
||||
data.write(new byte[]{0, 0, 1, (byte) 0x80, 3, 0});
|
||||
data.write(new byte[256]);
|
||||
ByteArrayOutputStream body = new ByteArrayOutputStream();
|
||||
DataOutputStream coordinates = new DataOutputStream(body);
|
||||
coordinates.writeInt(0);
|
||||
coordinates.writeInt(0);
|
||||
coordinates.writeInt(raw.size());
|
||||
Deflater deflater = new Deflater(Deflater.BEST_SPEED);
|
||||
try (DeflaterOutputStream compressed = new DeflaterOutputStream(coordinates, deflater)) {
|
||||
raw.writeTo(compressed);
|
||||
} finally {
|
||||
deflater.end();
|
||||
}
|
||||
ByteArrayOutputStream region = new ByteArrayOutputStream();
|
||||
DataOutputStream output = new DataOutputStream(region);
|
||||
output.writeInt(0x4942494F);
|
||||
@@ -410,9 +413,22 @@ public class SavedBiomeStoreWriteTest {
|
||||
output.writeInt(0);
|
||||
output.writeInt(0);
|
||||
output.writeInt(checksum(region.toByteArray()));
|
||||
output.writeInt(body.size());
|
||||
output.write(body.toByteArray());
|
||||
output.writeInt(checksum(body.toByteArray()));
|
||||
for (int x = 0; x < records; x++) {
|
||||
ByteArrayOutputStream body = new ByteArrayOutputStream();
|
||||
DataOutputStream coordinates = new DataOutputStream(body);
|
||||
coordinates.writeInt(x);
|
||||
coordinates.writeInt(0);
|
||||
coordinates.writeInt(raw.size());
|
||||
Deflater deflater = new Deflater(Deflater.BEST_SPEED);
|
||||
try (DeflaterOutputStream compressed = new DeflaterOutputStream(coordinates, deflater)) {
|
||||
raw.writeTo(compressed);
|
||||
} finally {
|
||||
deflater.end();
|
||||
}
|
||||
output.writeInt(body.size());
|
||||
output.write(body.toByteArray());
|
||||
output.writeInt(checksum(body.toByteArray()));
|
||||
}
|
||||
return region.toByteArray();
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user