From f74b9df0a7082d782df7b6e3d165cab73d588461 Mon Sep 17 00:00:00 2001 From: Viktor Lofgren Date: Thu, 31 Aug 2023 20:15:10 +0200 Subject: [PATCH] (array) Don't use paging arrays when mapping small files for writing --- .../java/nu/marginalia/array/LongArray.java | 11 ++++++++++- .../array/page/PagingLongArray.java | 19 ------------------- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/code/libraries/array/src/main/java/nu/marginalia/array/LongArray.java b/code/libraries/array/src/main/java/nu/marginalia/array/LongArray.java index 7902e05a..05317a05 100644 --- a/code/libraries/array/src/main/java/nu/marginalia/array/LongArray.java +++ b/code/libraries/array/src/main/java/nu/marginalia/array/LongArray.java @@ -43,10 +43,19 @@ public interface LongArray extends LongArrayBase, LongArrayTransformations, Long /** Map an existing file for writing */ static LongArray mmapForModifying(Path path) throws IOException { - return PagingLongArray.mapFileReadWrite(DEFAULT_PARTITIONING_SCHEME, path); + long sizeBytes = Files.size(path); + assert sizeBytes % WORD_SIZE == 0; + + long size = sizeBytes / WORD_SIZE; + + return mmapForWriting(path, size); } static LongArray mmapForWriting(Path path, long size) throws IOException { + if (size < MAX_CONTINUOUS_SIZE) { + return LongArrayPage.fromMmapReadWrite(path, 0, (int) size); + } + return PagingLongArray.mapFileReadWrite(DEFAULT_PARTITIONING_SCHEME, path, size); } diff --git a/code/libraries/array/src/main/java/nu/marginalia/array/page/PagingLongArray.java b/code/libraries/array/src/main/java/nu/marginalia/array/page/PagingLongArray.java index 57961273..c26bafe4 100644 --- a/code/libraries/array/src/main/java/nu/marginalia/array/page/PagingLongArray.java +++ b/code/libraries/array/src/main/java/nu/marginalia/array/page/PagingLongArray.java @@ -62,25 +62,6 @@ public class PagingLongArray extends AbstractPagingArray