This is an automated email from the ASF dual-hosted git repository. bchapuis pushed a commit to branch data-refactoring in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git
commit d58c212967a54c0f1fcab3b4efe19cfaeb0cc5fe Author: Bertil Chapuis <[email protected]> AuthorDate: Sat Apr 5 12:49:12 2025 +0200 Use the builder pattern for the MemoryAlignedDataList --- .../apache/baremaps/workflow/WorkflowContext.java | 15 +++++++++------ .../baremaps/data/collection/IndexedDataList.java | 4 +++- .../data/collection/MemoryAlignedDataList.java | 17 ++++------------- .../baremaps/data/collection/MonotonicDataMap.java | 20 +++++++++++++++----- .../data/collection/MonotonicFixedSizeDataMap.java | 17 +++++++++++++---- .../data/collection/MonotonicPairedDataMap.java | 5 ++++- .../java/org/apache/baremaps/data/DataListTest.java | 8 ++++++-- .../java/org/apache/baremaps/data/DataMapTest.java | 18 ++++++++++++------ .../apache/baremaps/data/sort/BinarySearchTest.java | 4 +++- .../baremaps/data/sort/ExternalMergeSortTest.java | 5 ++++- 10 files changed, 73 insertions(+), 40 deletions(-) diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/WorkflowContext.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/WorkflowContext.java index 6f10c1913..4f828d60f 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/WorkflowContext.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/WorkflowContext.java @@ -84,9 +84,11 @@ public class WorkflowContext { Path mapDir = Files.createDirectories(cacheDir.resolve(name)); Path keysDir = Files.createDirectories(mapDir.resolve("keys")); Path valuesDir = Files.createDirectories(mapDir.resolve("values")); - MemoryAlignedDataList<PairDataType.Pair<Long, Long>> keys = new MemoryAlignedDataList<>( - new PairDataType<>(new LongDataType(), new LongDataType()), - new MemoryMappedDirectory(keysDir)); + MemoryAlignedDataList<PairDataType.Pair<Long, Long>> keys = MemoryAlignedDataList + .<PairDataType.Pair<Long, Long>>builder() + .dataType(new PairDataType<>(new LongDataType(), new LongDataType())) + .memory(new MemoryMappedDirectory(keysDir)) + .build(); AppendOnlyLog<T> values = AppendOnlyLog.<T>builder() .dataType(dataType) .values(new MemoryMappedDirectory(valuesDir)) @@ -102,9 +104,10 @@ public class WorkflowContext { throws IOException { Path mapDir = Files.createDirectories(cacheDir.resolve(name)); return new MonotonicPairedDataMap<>( - new MemoryAlignedDataList<>( - new PairDataType<>(new LongDataType(), new LonLatDataType()), - new MemoryMappedDirectory(Files.createDirectories(mapDir)))); + MemoryAlignedDataList.<PairDataType.Pair<Long, Coordinate>>builder() + .dataType(new PairDataType<>(new LongDataType(), new LonLatDataType())) + .memory(new MemoryMappedDirectory(Files.createDirectories(mapDir))) + .build()); } public void cleanCache() throws IOException { diff --git a/baremaps-data/src/main/java/org/apache/baremaps/data/collection/IndexedDataList.java b/baremaps-data/src/main/java/org/apache/baremaps/data/collection/IndexedDataList.java index da973b83f..a383fa402 100644 --- a/baremaps-data/src/main/java/org/apache/baremaps/data/collection/IndexedDataList.java +++ b/baremaps-data/src/main/java/org/apache/baremaps/data/collection/IndexedDataList.java @@ -86,7 +86,9 @@ public class IndexedDataList<E> implements DataList<E> { } if (index == null) { - index = new MemoryAlignedDataList<>(new LongDataType()); + index = MemoryAlignedDataList.<Long>builder() + .dataType(new LongDataType()) + .build(); } return new IndexedDataList<>(index, values); diff --git a/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MemoryAlignedDataList.java b/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MemoryAlignedDataList.java index bc9d20784..34216e8fb 100644 --- a/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MemoryAlignedDataList.java +++ b/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MemoryAlignedDataList.java @@ -100,20 +100,11 @@ public class MemoryAlignedDataList<E> implements DataList<E> { } if (memory == null) { - return new MemoryAlignedDataList<>(dataType); - } else { - return new MemoryAlignedDataList<>(dataType, memory); + memory = new OffHeapMemory(); } - } - } - /** - * Constructs a {@link MemoryAlignedDataList}. - * - * @param dataType the data type - */ - public MemoryAlignedDataList(FixedSizeDataType<E> dataType) { - this(dataType, new OffHeapMemory()); + return new MemoryAlignedDataList<>(dataType, memory); + } } /** @@ -122,7 +113,7 @@ public class MemoryAlignedDataList<E> implements DataList<E> { * @param dataType the data type * @param memory the memory */ - public MemoryAlignedDataList(FixedSizeDataType<E> dataType, Memory<?> memory) { + private MemoryAlignedDataList(FixedSizeDataType<E> dataType, Memory<?> memory) { if (dataType.size() > memory.segmentSize()) { throw new DataCollectionException("The segment size is too small for the data type"); } diff --git a/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MonotonicDataMap.java b/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MonotonicDataMap.java index eb4308bef..4424a2b14 100644 --- a/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MonotonicDataMap.java +++ b/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MonotonicDataMap.java @@ -109,10 +109,14 @@ public class MonotonicDataMap<E> implements DataMap<Long, E> { if (offsets == null && keys == null) { return new MonotonicDataMap<>(values); } else if (keys == null) { - keys = new MemoryAlignedDataList<>(new PairDataType<>(new LongDataType(), new LongDataType())); + keys = MemoryAlignedDataList.<Pair<Long, Long>>builder() + .dataType(new PairDataType<>(new LongDataType(), new LongDataType())) + .build(); return new MonotonicDataMap<>(offsets, keys, values); } else if (offsets == null) { - offsets = new MemoryAlignedDataList<>(new LongDataType()); + offsets = MemoryAlignedDataList.<Long>builder() + .dataType(new LongDataType()) + .build(); return new MonotonicDataMap<>(offsets, keys, values); } else { return new MonotonicDataMap<>(offsets, keys, values); @@ -127,8 +131,12 @@ public class MonotonicDataMap<E> implements DataMap<Long, E> { */ public MonotonicDataMap(AppendOnlyLog<E> values) { this( - new MemoryAlignedDataList<>(new LongDataType()), - new MemoryAlignedDataList<>(new PairDataType<>(new LongDataType(), new LongDataType())), + MemoryAlignedDataList.<Long>builder() + .dataType(new LongDataType()) + .build(), + MemoryAlignedDataList.<Pair<Long, Long>>builder() + .dataType(new PairDataType<>(new LongDataType(), new LongDataType())) + .build(), values); } @@ -140,7 +148,9 @@ public class MonotonicDataMap<E> implements DataMap<Long, E> { */ public MonotonicDataMap(DataList<Pair<Long, Long>> keys, AppendOnlyLog<E> values) { this( - new MemoryAlignedDataList<>(new LongDataType()), + MemoryAlignedDataList.<Long>builder() + .dataType(new LongDataType()) + .build(), keys, values); } diff --git a/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MonotonicFixedSizeDataMap.java b/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MonotonicFixedSizeDataMap.java index d9809250d..ad0bc195f 100644 --- a/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MonotonicFixedSizeDataMap.java +++ b/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MonotonicFixedSizeDataMap.java @@ -107,10 +107,14 @@ public class MonotonicFixedSizeDataMap<E> implements DataMap<Long, E> { if (offsets == null && keys == null) { return new MonotonicFixedSizeDataMap<>(values); } else if (offsets == null) { - offsets = new MemoryAlignedDataList<>(new LongDataType()); + offsets = MemoryAlignedDataList.<Long>builder() + .dataType(new LongDataType()) + .build(); return new MonotonicFixedSizeDataMap<>(offsets, keys, values); } else if (keys == null) { - keys = new MemoryAlignedDataList<>(new LongDataType()); + keys = MemoryAlignedDataList.<Long>builder() + .dataType(new LongDataType()) + .build(); return new MonotonicFixedSizeDataMap<>(offsets, keys, values); } else { return new MonotonicFixedSizeDataMap<>(offsets, keys, values); @@ -124,8 +128,13 @@ public class MonotonicFixedSizeDataMap<E> implements DataMap<Long, E> { * @param values the list of values */ public MonotonicFixedSizeDataMap(DataList<E> values) { - this(new MemoryAlignedDataList<>(new LongDataType()), - new MemoryAlignedDataList<>(new LongDataType()), values); + this(MemoryAlignedDataList.<Long>builder() + .dataType(new LongDataType()) + .build(), + MemoryAlignedDataList.<Long>builder() + .dataType(new LongDataType()) + .build(), + values); } /** diff --git a/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MonotonicPairedDataMap.java b/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MonotonicPairedDataMap.java index 781d8bb02..882c49903 100644 --- a/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MonotonicPairedDataMap.java +++ b/baremaps-data/src/main/java/org/apache/baremaps/data/collection/MonotonicPairedDataMap.java @@ -107,7 +107,10 @@ public class MonotonicPairedDataMap<E> implements DataMap<Long, E> { * Constructs a {@link MonotonicPairedDataMap}. */ public MonotonicPairedDataMap(MemoryAlignedDataList<Pair<Long, E>> values) { - this(new MemoryAlignedDataList<>(new LongDataType()), values); + this(MemoryAlignedDataList.<Long>builder() + .dataType(new LongDataType()) + .build(), + values); } /** diff --git a/baremaps-data/src/test/java/org/apache/baremaps/data/DataListTest.java b/baremaps-data/src/test/java/org/apache/baremaps/data/DataListTest.java index 6b1a1db76..f242356af 100644 --- a/baremaps-data/src/test/java/org/apache/baremaps/data/DataListTest.java +++ b/baremaps-data/src/test/java/org/apache/baremaps/data/DataListTest.java @@ -79,11 +79,15 @@ class DataListTest { .dataType(new LongDataType()) .build()), Arguments.of(IndexedDataList.<Long>builder() - .index(new MemoryAlignedDataList<>(new LongDataType())) + .index(MemoryAlignedDataList.<Long>builder() + .dataType(new LongDataType()) + .build()) .values(AppendOnlyLog.<Long>builder() .dataType(new LongDataType()) .build()) .build()), - Arguments.of(new MemoryAlignedDataList<>(new LongDataType()))); + Arguments.of(MemoryAlignedDataList.<Long>builder() + .dataType(new LongDataType()) + .build())); } } diff --git a/baremaps-data/src/test/java/org/apache/baremaps/data/DataMapTest.java b/baremaps-data/src/test/java/org/apache/baremaps/data/DataMapTest.java index 9529af8e7..70b8462be 100644 --- a/baremaps-data/src/test/java/org/apache/baremaps/data/DataMapTest.java +++ b/baremaps-data/src/test/java/org/apache/baremaps/data/DataMapTest.java @@ -172,17 +172,23 @@ class DataMapTest { .build()) .build()), Arguments.of(new MonotonicFixedSizeDataMap<>( - new MemoryAlignedDataList<>(new LongDataType(), new OffHeapMemory()))), + MemoryAlignedDataList.<Long>builder() + .dataType(new LongDataType()) + .memory(new OffHeapMemory()) + .build())), Arguments.of(new MonotonicDataMap<>( - new MemoryAlignedDataList<>( - new PairDataType<>(new LongDataType(), new LongDataType()), - new OffHeapMemory()), + MemoryAlignedDataList.<PairDataType.Pair<Long, Long>>builder() + .dataType(new PairDataType<>(new LongDataType(), new LongDataType())) + .memory(new OffHeapMemory()) + .build(), AppendOnlyLog.<Long>builder() .dataType(new LongDataType()) .memory(new OffHeapMemory()) .build())), - Arguments.of(new MonotonicPairedDataMap<>(new MemoryAlignedDataList<>( - new PairDataType<>(new LongDataType(), new LongDataType())))), + Arguments.of(new MonotonicPairedDataMap<>( + MemoryAlignedDataList.<PairDataType.Pair<Long, Long>>builder() + .dataType(new PairDataType<>(new LongDataType(), new LongDataType())) + .build())), Arguments.of(DirectHashDataMap.<Long>builder() .keyType(new LongDataType()) .dataType(new LongDataType()) diff --git a/baremaps-data/src/test/java/org/apache/baremaps/data/sort/BinarySearchTest.java b/baremaps-data/src/test/java/org/apache/baremaps/data/sort/BinarySearchTest.java index 3182d5b36..4d0f0af54 100644 --- a/baremaps-data/src/test/java/org/apache/baremaps/data/sort/BinarySearchTest.java +++ b/baremaps-data/src/test/java/org/apache/baremaps/data/sort/BinarySearchTest.java @@ -28,7 +28,9 @@ class BinarySearchTest { @Test void binarySearch() { - var list = new MemoryAlignedDataList<>(new LongDataType()); + var list = MemoryAlignedDataList.<Long>builder() + .dataType(new LongDataType()) + .build(); for (long i = 0; i < 1000; i++) { list.add(i); } diff --git a/baremaps-data/src/test/java/org/apache/baremaps/data/sort/ExternalMergeSortTest.java b/baremaps-data/src/test/java/org/apache/baremaps/data/sort/ExternalMergeSortTest.java index c4c51f0cf..0bb72050b 100644 --- a/baremaps-data/src/test/java/org/apache/baremaps/data/sort/ExternalMergeSortTest.java +++ b/baremaps-data/src/test/java/org/apache/baremaps/data/sort/ExternalMergeSortTest.java @@ -54,7 +54,10 @@ class ExternalMergeSortTest { stringsDsc = strings.stream().sorted(Comparator.reverseOrder()).toList(); stringsDistinct = stringsAsc.stream().distinct().toList(); supplier = () -> IndexedDataList.<String>builder() - .index(new MemoryAlignedDataList<>(new LongDataType(), new OnHeapMemory())) + .index(MemoryAlignedDataList.<Long>builder() + .dataType(new LongDataType()) + .memory(new OnHeapMemory()) + .build()) .values(AppendOnlyLog.<String>builder() .dataType(new StringDataType()) .memory(new OnHeapMemory())
