From b2ec7b7a6d96ed88b6bff8985c46d82b61c14901 Mon Sep 17 00:00:00 2001 From: Przemyslaw Gomulka Date: Thu, 24 Mar 2022 09:36:48 +0100 Subject: [PATCH 1/3] Removes the hppc ObjectArrayList from CollectionUtils.sortAndDedup The objectArrayList can be replaced with java.util.ArrayList to achieve in place sorting and deduplication. relates #84735 --- .../org/elasticsearch/common/util/CollectionUtils.java | 8 ++++---- .../org/elasticsearch/index/mapper/BinaryFieldMapper.java | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/common/util/CollectionUtils.java b/server/src/main/java/org/elasticsearch/common/util/CollectionUtils.java index 169ff3349aadf..88ac011e1f4ad 100644 --- a/server/src/main/java/org/elasticsearch/common/util/CollectionUtils.java +++ b/server/src/main/java/org/elasticsearch/common/util/CollectionUtils.java @@ -8,7 +8,6 @@ package org.elasticsearch.common.util; -import com.carrotsearch.hppc.ObjectArrayList; import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.BytesRefArray; @@ -67,7 +66,8 @@ public static List rotate(final List list, int distance) { return new RotatedList<>(list, d); } - public static void sortAndDedup(final ObjectArrayList array) { + // this method is meant to be sort and deduplicate "in situ" (no additional memory) + public static void sortAndDedup(final ArrayList array) { int len = array.size(); if (len > 1) { sort(array); @@ -77,11 +77,11 @@ public static void sortAndDedup(final ObjectArrayList array) { array.set(uniqueCount++, array.get(i)); } } - array.elementsCount = uniqueCount; + array.subList(uniqueCount, array.size()).clear(); } } - public static void sort(final ObjectArrayList array) { + public static void sort(final List array) { new IntroSorter() { byte[] pivot; diff --git a/server/src/main/java/org/elasticsearch/index/mapper/BinaryFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/BinaryFieldMapper.java index fbc6d630f56ec..fc8dcda9f1306 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/BinaryFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/BinaryFieldMapper.java @@ -8,7 +8,6 @@ package org.elasticsearch.index.mapper; -import com.carrotsearch.hppc.ObjectArrayList; import org.apache.lucene.document.StoredField; import org.apache.lucene.search.Query; @@ -28,6 +27,7 @@ import java.io.IOException; import java.time.ZoneId; +import java.util.ArrayList; import java.util.Base64; import java.util.Collections; import java.util.List; @@ -194,13 +194,13 @@ protected String contentType() { public static class CustomBinaryDocValuesField extends CustomDocValuesField { - private final ObjectArrayList bytesList; + private final ArrayList bytesList; private int totalSize = 0; public CustomBinaryDocValuesField(String name, byte[] bytes) { super(name); - bytesList = new ObjectArrayList<>(); + bytesList = new ArrayList<>(); add(bytes); } From 216d1977552ee632157b87c4bfffc0c53c326e7c Mon Sep 17 00:00:00 2001 From: Przemyslaw Gomulka Date: Thu, 24 Mar 2022 09:41:49 +0100 Subject: [PATCH 2/3] sort should use arraylist instead of list --- .../java/org/elasticsearch/common/util/CollectionUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/org/elasticsearch/common/util/CollectionUtils.java b/server/src/main/java/org/elasticsearch/common/util/CollectionUtils.java index 88ac011e1f4ad..579d433bc9323 100644 --- a/server/src/main/java/org/elasticsearch/common/util/CollectionUtils.java +++ b/server/src/main/java/org/elasticsearch/common/util/CollectionUtils.java @@ -81,7 +81,7 @@ public static void sortAndDedup(final ArrayList array) { } } - public static void sort(final List array) { + public static void sort(final ArrayList array) { new IntroSorter() { byte[] pivot; From 3d7ead532942f1a4473028f523630cbfd38bc81f Mon Sep 17 00:00:00 2001 From: Przemyslaw Gomulka Date: Thu, 24 Mar 2022 10:42:19 +0100 Subject: [PATCH 3/3] precommit --- .../main/java/org/elasticsearch/common/util/CollectionUtils.java | 1 - .../java/org/elasticsearch/index/mapper/BinaryFieldMapper.java | 1 - 2 files changed, 2 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/common/util/CollectionUtils.java b/server/src/main/java/org/elasticsearch/common/util/CollectionUtils.java index 579d433bc9323..ac0e43e03e36e 100644 --- a/server/src/main/java/org/elasticsearch/common/util/CollectionUtils.java +++ b/server/src/main/java/org/elasticsearch/common/util/CollectionUtils.java @@ -8,7 +8,6 @@ package org.elasticsearch.common.util; - import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.BytesRefArray; import org.apache.lucene.util.BytesRefBuilder; diff --git a/server/src/main/java/org/elasticsearch/index/mapper/BinaryFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/BinaryFieldMapper.java index fc8dcda9f1306..d624f42ed78a3 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/BinaryFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/BinaryFieldMapper.java @@ -8,7 +8,6 @@ package org.elasticsearch.index.mapper; - import org.apache.lucene.document.StoredField; import org.apache.lucene.search.Query; import org.apache.lucene.util.BytesRef;