diff --git a/README.md b/README.md index 7d10b81c6e4f..e46a87d78638 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,74 @@ under the License. --> +# Siren fork of Arrow + +- The properties `drill.enable_unsafe_memory_access` and + `arrow.enable_unsafe_memory_access` are prefixed with `siren` and their + default value is set to `true`. The first property is deprecated. + +- In order to avoid conflict with a version of `netty` used in Elasticsearch, we + relocate the netty custom package and dependency in `memory` into a package + named `siren`. The relocation is achieved thanks to the maven shade plugin. + +- The Siren's fork of `netty` is used in `vector`. This means that `netty` + imports in that module need to be prefixed with `siren`. + +## Check that Siren version of Netty is used +- In order to check that Siren version of Netty is being used, + run the unit test `CheckAccessibleTest` in + `https://github.com/sirensolutions/siren-platform/blob/master/core/src/test/java/io/siren/federate/core/common/CheckAccessibleTest.java`. +- Note: the unit test `CheckAccessibleTest` is currently ignored, please set it again to ignore after running the test. + The unit test is ignored because the setting in `CheckAccessibleTest` is not taken into account when the whole unit test suite is run, therefore it fails. + This could be because when the class is loaded, the default settings are used (which is a static block) and the new settings in the `CheckAccessibleTest` are + then not applied when the test suit is run. + +## Build + +To build the `memory`, `format` and `vector` modules: + +```sh +$ cd java +$ mvn clean package +``` + +Because of the default value change of `unsafe_memory_access` property, some +tests in `vector` fail. + +```sh +mvn -pl memory,memory/memory-core,memory/memory-netty,memory/memory-unsafe,format,vector install -Dsiren.arrow.enable_unsafe_memory_access=false -Dsiren.drill.enable_unsafe_memory_access=false +``` + +## Make a new release of Siren's Apache Arrow + +- Tests should pass. + +- Make a new version: + +```sh +mvn versions:set -DnewVersion=siren-0.14.1-2 +``` + +- tag the commit for the release + +```sh +git tag --sign siren-0.14.1-2 +```` + +- Deploy to Siren's artifactory + +```sh +$ mvn deploy -DskipTests=true -P artifactory -Dartifactory_username= -Dartifactory_password= +``` + +## Update to a new version of Siren's Apache Arrow +Developer tips on updating to a new version of Netty can be found here: https://sirensolutions.atlassian.net/wiki/spaces/EN/pages/3108864001/Upgrading+Federate+Apache+Arrow+Version . + +- add `git@github.com:apache/arrow.git` as the `upstream` remote. +- execute `git fetch --all --tags` +- create a temporary branch from `siren-changes` +- rebase against the new tag. + # Apache Arrow [![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/arrow.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:arrow) diff --git a/java/adapter/orc/pom.xml b/java/adapter/orc/pom.xml index b4421b7ae6e9..402c098ee872 100644 --- a/java/adapter/orc/pom.xml +++ b/java/adapter/orc/pom.xml @@ -104,7 +104,7 @@ org.apache.arrow arrow-java-root - 9.0.0 + siren-9.0.0-2-SNAPSHOT ../../pom.xml diff --git a/java/format/pom.xml b/java/format/pom.xml index 1bb562ee1601..6da1fcb97683 100644 --- a/java/format/pom.xml +++ b/java/format/pom.xml @@ -15,7 +15,7 @@ arrow-java-root org.apache.arrow - 9.0.0 + siren-9.0.0-2-SNAPSHOT arrow-format diff --git a/java/gandiva/pom.xml b/java/gandiva/pom.xml index bc94346ec830..6f925d67854d 100644 --- a/java/gandiva/pom.xml +++ b/java/gandiva/pom.xml @@ -14,7 +14,7 @@ org.apache.arrow arrow-java-root - 9.0.0 + siren-9.0.0-2-SNAPSHOT org.apache.arrow.gandiva diff --git a/java/memory/memory-core/pom.xml b/java/memory/memory-core/pom.xml index 1cd52ed998d1..ed024bb1d4aa 100644 --- a/java/memory/memory-core/pom.xml +++ b/java/memory/memory-core/pom.xml @@ -13,7 +13,7 @@ arrow-memory org.apache.arrow - 9.0.0 + siren-9.0.0-2-SNAPSHOT 4.0.0 diff --git a/java/memory/memory-core/src/main/java/org/apache/arrow/memory/BoundsChecking.java b/java/memory/memory-core/src/main/java/org/apache/arrow/memory/BoundsChecking.java index bbf7ff34dc96..a6d798bd093e 100644 --- a/java/memory/memory-core/src/main/java/org/apache/arrow/memory/BoundsChecking.java +++ b/java/memory/memory-core/src/main/java/org/apache/arrow/memory/BoundsChecking.java @@ -34,14 +34,15 @@ public class BoundsChecking { static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(BoundsChecking.class); static { - String envProperty = System.getenv("ARROW_ENABLE_UNSAFE_MEMORY_ACCESS"); - String oldProperty = System.getProperty("drill.enable_unsafe_memory_access"); + String envProperty = System.getenv().getOrDefault("SIREN_ARROW_ENABLE_UNSAFE_MEMORY_ACCESS", "true"); + String oldProperty = System.getProperty("siren.drill.enable_unsafe_memory_access", "true"); if (oldProperty != null) { - logger.warn("\"drill.enable_unsafe_memory_access\" has been renamed to \"arrow.enable_unsafe_memory_access\""); - logger.warn("\"arrow.enable_unsafe_memory_access\" can be set to: " + - " true (to not check) or false (to check, default)"); + logger.warn("\"siren.drill.enable_unsafe_memory_access\" has been renamed to " + + "\"siren.arrow.enable_unsafe_memory_access\""); + logger.warn("\"siren.arrow.enable_unsafe_memory_access\" can be set to: " + + " true (to not check, default) or false (to check)"); } - String newProperty = System.getProperty("arrow.enable_unsafe_memory_access"); + String newProperty = System.getProperty("siren.arrow.enable_unsafe_memory_access", "true"); // The priority of determining the unsafe flag: // 1. The system properties take precedence over the environmental variable. diff --git a/java/memory/memory-core/src/main/java/org/apache/arrow/memory/util/MemoryUtil.java b/java/memory/memory-core/src/main/java/org/apache/arrow/memory/util/MemoryUtil.java index 16ef39702ca3..ce7a4bd5e210 100644 --- a/java/memory/memory-core/src/main/java/org/apache/arrow/memory/util/MemoryUtil.java +++ b/java/memory/memory-core/src/main/java/org/apache/arrow/memory/util/MemoryUtil.java @@ -81,7 +81,6 @@ public Object run() { // get the offset of the address field in a java.nio.Buffer object Field addressField = java.nio.Buffer.class.getDeclaredField("address"); - addressField.setAccessible(true); BYTE_BUFFER_ADDRESS_OFFSET = UNSAFE.objectFieldOffset(addressField); Constructor directBufferConstructor; @@ -99,10 +98,7 @@ public Object run() { constructor.setAccessible(true); logger.debug("Constructor for direct buffer found and made accessible"); return constructor; - } catch (NoSuchMethodException e) { - logger.debug("Cannot get constructor for direct buffer allocation", e); - return e; - } catch (SecurityException e) { + } catch (Exception e) { logger.debug("Cannot get constructor for direct buffer allocation", e); return e; } diff --git a/java/memory/memory-core/src/test/java/org/apache/arrow/memory/TestBoundaryChecking.java b/java/memory/memory-core/src/test/java/org/apache/arrow/memory/TestBoundaryChecking.java index 5b86bed406b3..5809add14e7e 100644 --- a/java/memory/memory-core/src/test/java/org/apache/arrow/memory/TestBoundaryChecking.java +++ b/java/memory/memory-core/src/test/java/org/apache/arrow/memory/TestBoundaryChecking.java @@ -55,15 +55,15 @@ private boolean getFlagValue(ClassLoader classLoader) throws Exception { } /** - * Ensure the flag for bounds checking is enabled by default. - * This will protect users from JVM crashes. + * Siren: Ensure the flag for bounds checking is disabled by default. + * Enabling it will protect users from JVM crashes. */ @Test public void testDefaultValue() throws Exception { ClassLoader classLoader = copyClassLoader(); if (classLoader != null) { boolean boundsCheckingEnabled = getFlagValue(classLoader); - Assert.assertTrue(boundsCheckingEnabled); + Assert.assertFalse(boundsCheckingEnabled); } } diff --git a/java/memory/memory-netty/pom.xml b/java/memory/memory-netty/pom.xml index 9fcf713c81e0..94071adce3bd 100644 --- a/java/memory/memory-netty/pom.xml +++ b/java/memory/memory-netty/pom.xml @@ -13,7 +13,7 @@ arrow-memory org.apache.arrow - 9.0.0 + siren-9.0.0-2-SNAPSHOT 4.0.0 @@ -35,9 +35,11 @@ io.netty netty-common + org.slf4j slf4j-api + provided org.immutables @@ -45,6 +47,55 @@ + + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + package + + shade + + + false + ${project.build.directory}/dependency-reduced-pom.xml + + + + + + io.netty + siren.io.netty + + + + + org.slf4j + com.google.code.findbugs + com.google.guava + + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + + + + + + + + + + + @@ -887,6 +887,24 @@ + + + artifactory + + + + artifactory-releases + artifactory-releases + ${artifactory.url}/libs-release-local + + + artifactory-snapshots + artifactory-snapshots + ${artifactory.url}/libs-snapshot-local + + + + diff --git a/java/vector/pom.xml b/java/vector/pom.xml index 4421d559dace..db51e380e21b 100644 --- a/java/vector/pom.xml +++ b/java/vector/pom.xml @@ -14,7 +14,7 @@ org.apache.arrow arrow-java-root - 9.0.0 + siren-9.0.0-2-SNAPSHOT arrow-vector Arrow Vectors @@ -57,7 +57,6 @@ org.apache.arrow arrow-memory-netty ${project.version} - test org.apache.arrow @@ -125,12 +124,6 @@ test - - - org.apache.arrow:arrow-memory-netty - - netty - @@ -177,7 +170,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.1.1 + 3.3.0 package @@ -187,14 +180,16 @@ + org.apache.arrow:arrow-memory-core + org.apache.arrow:arrow-memory-netty org.apache.arrow:arrow-format com.google.flatbuffers:* true - shade-format-flatbuffers - true - true + shade + true + true com.google.flatbuffers diff --git a/java/vector/src/main/codegen/includes/vv_imports.ftl b/java/vector/src/main/codegen/includes/vv_imports.ftl index c9a8820b258b..cd0e2d7e2a4c 100644 --- a/java/vector/src/main/codegen/includes/vv_imports.ftl +++ b/java/vector/src/main/codegen/includes/vv_imports.ftl @@ -20,6 +20,8 @@ import static org.apache.arrow.util.Preconditions.checkState; import com.google.flatbuffers.FlatBufferBuilder; +import siren.io.netty.buffer.*; + import org.apache.arrow.memory.*; import org.apache.arrow.util.Preconditions; import org.apache.arrow.vector.types.Types; diff --git a/java/vector/src/main/java/org/apache/arrow/vector/BaseFixedWidthVector.java b/java/vector/src/main/java/org/apache/arrow/vector/BaseFixedWidthVector.java index ded58b22b00c..70b7c0d7a432 100644 --- a/java/vector/src/main/java/org/apache/arrow/vector/BaseFixedWidthVector.java +++ b/java/vector/src/main/java/org/apache/arrow/vector/BaseFixedWidthVector.java @@ -37,7 +37,7 @@ import org.apache.arrow.vector.util.OversizedAllocationException; import org.apache.arrow.vector.util.TransferPair; -import io.netty.util.internal.PlatformDependent; +import siren.io.netty.util.internal.PlatformDependent; /** * BaseFixedWidthVector provides an abstract interface for diff --git a/java/vector/src/main/java/org/apache/arrow/vector/BitVector.java b/java/vector/src/main/java/org/apache/arrow/vector/BitVector.java index 3bcfd983e641..1935b45f7bd9 100644 --- a/java/vector/src/main/java/org/apache/arrow/vector/BitVector.java +++ b/java/vector/src/main/java/org/apache/arrow/vector/BitVector.java @@ -119,6 +119,11 @@ public void setInitialCapacity(int valueCount) { lastValueCapacity = valueCount; } + /** + * Get the current value capacity for the vector. + * + * @return number of elements that vector can hold. + */ @Override protected int getValueBufferValueCapacity() { return capAtMaxInt(valueBuffer.capacity() * 8); diff --git a/java/vector/src/main/java/org/apache/arrow/vector/BitVectorHelper.java b/java/vector/src/main/java/org/apache/arrow/vector/BitVectorHelper.java index c2c88f2ba378..53f84a884277 100644 --- a/java/vector/src/main/java/org/apache/arrow/vector/BitVectorHelper.java +++ b/java/vector/src/main/java/org/apache/arrow/vector/BitVectorHelper.java @@ -17,10 +17,10 @@ package org.apache.arrow.vector; -import static io.netty.util.internal.PlatformDependent.getByte; -import static io.netty.util.internal.PlatformDependent.getInt; -import static io.netty.util.internal.PlatformDependent.getLong; import static org.apache.arrow.memory.util.LargeMemoryUtil.checkedCastToInt; +import static siren.io.netty.util.internal.PlatformDependent.getByte; +import static siren.io.netty.util.internal.PlatformDependent.getInt; +import static siren.io.netty.util.internal.PlatformDependent.getLong; import org.apache.arrow.memory.ArrowBuf; import org.apache.arrow.memory.BoundsChecking; @@ -28,7 +28,7 @@ import org.apache.arrow.vector.ipc.message.ArrowFieldNode; import org.apache.arrow.vector.util.DataSizeRoundingUtil; -import io.netty.util.internal.PlatformDependent; +import siren.io.netty.util.internal.PlatformDependent; /** * Helper class for performing generic operations on a bit vector buffer. diff --git a/java/vector/src/main/java/org/apache/arrow/vector/Decimal256Vector.java b/java/vector/src/main/java/org/apache/arrow/vector/Decimal256Vector.java index 4341e4175a59..6c2dc76f4ebe 100644 --- a/java/vector/src/main/java/org/apache/arrow/vector/Decimal256Vector.java +++ b/java/vector/src/main/java/org/apache/arrow/vector/Decimal256Vector.java @@ -35,7 +35,7 @@ import org.apache.arrow.vector.util.DecimalUtility; import org.apache.arrow.vector.util.TransferPair; -import io.netty.util.internal.PlatformDependent; +import siren.io.netty.util.internal.PlatformDependent; /** * Decimal256Vector implements a fixed width vector (32 bytes) of diff --git a/java/vector/src/main/java/org/apache/arrow/vector/DecimalVector.java b/java/vector/src/main/java/org/apache/arrow/vector/DecimalVector.java index 3768c65249b6..1fde4526e38a 100644 --- a/java/vector/src/main/java/org/apache/arrow/vector/DecimalVector.java +++ b/java/vector/src/main/java/org/apache/arrow/vector/DecimalVector.java @@ -35,7 +35,7 @@ import org.apache.arrow.vector.util.DecimalUtility; import org.apache.arrow.vector.util.TransferPair; -import io.netty.util.internal.PlatformDependent; +import siren.io.netty.util.internal.PlatformDependent; /** * DecimalVector implements a fixed width vector (16 bytes) of diff --git a/java/vector/src/main/java/org/apache/arrow/vector/util/DecimalUtility.java b/java/vector/src/main/java/org/apache/arrow/vector/util/DecimalUtility.java index f778bcb209fa..692714487fbf 100644 --- a/java/vector/src/main/java/org/apache/arrow/vector/util/DecimalUtility.java +++ b/java/vector/src/main/java/org/apache/arrow/vector/util/DecimalUtility.java @@ -24,7 +24,7 @@ import org.apache.arrow.memory.ArrowBuf; -import io.netty.util.internal.PlatformDependent; +import siren.io.netty.util.internal.PlatformDependent; /** * Utility methods for configurable precision Decimal values (e.g. {@link BigDecimal}). diff --git a/java/vector/src/main/java/org/apache/arrow/vector/util/VectorAppender.java b/java/vector/src/main/java/org/apache/arrow/vector/util/VectorAppender.java index ea78917c3ddb..003a8c97b611 100644 --- a/java/vector/src/main/java/org/apache/arrow/vector/util/VectorAppender.java +++ b/java/vector/src/main/java/org/apache/arrow/vector/util/VectorAppender.java @@ -39,7 +39,7 @@ import org.apache.arrow.vector.complex.NonNullableStructVector; import org.apache.arrow.vector.complex.UnionVector; -import io.netty.util.internal.PlatformDependent; +import siren.io.netty.util.internal.PlatformDependent; /** * Utility to append two vectors together. diff --git a/java/vector/src/test/java/org/apache/arrow/vector/TestBitVectorHelper.java b/java/vector/src/test/java/org/apache/arrow/vector/TestBitVectorHelper.java index 4563577202bb..57f64bbde58e 100644 --- a/java/vector/src/test/java/org/apache/arrow/vector/TestBitVectorHelper.java +++ b/java/vector/src/test/java/org/apache/arrow/vector/TestBitVectorHelper.java @@ -27,7 +27,7 @@ import org.apache.arrow.vector.ipc.message.ArrowFieldNode; import org.junit.Test; -import io.netty.util.internal.PlatformDependent; +import siren.io.netty.util.internal.PlatformDependent; public class TestBitVectorHelper { @Test diff --git a/java/vector/src/test/java/org/apache/arrow/vector/TestValueVector.java b/java/vector/src/test/java/org/apache/arrow/vector/TestValueVector.java index 516daa236228..f32d4d5a8913 100644 --- a/java/vector/src/test/java/org/apache/arrow/vector/TestValueVector.java +++ b/java/vector/src/test/java/org/apache/arrow/vector/TestValueVector.java @@ -1846,7 +1846,7 @@ public void testSetLastSetUsage() { assertEquals(40, vector.offsetBuffer.getInt(17 * BaseVariableWidthVector.OFFSET_WIDTH)); assertEquals(40, vector.offsetBuffer.getInt(18 * BaseVariableWidthVector.OFFSET_WIDTH)); assertEquals(40, vector.offsetBuffer.getInt(19 * BaseVariableWidthVector.OFFSET_WIDTH)); - + vector.set(19, STR6); assertArrayEquals(STR6, vector.get(19)); assertEquals(40, vector.offsetBuffer.getInt(19 * BaseVariableWidthVector.OFFSET_WIDTH));