diff --git a/.travis.yml b/.travis.yml index b0e5309d9d42..a82e6517fdda 100644 --- a/.travis.yml +++ b/.travis.yml @@ -303,6 +303,17 @@ jobs: after_success: - (cd web-console && travis_retry npm run codecov) # retry in case of network error + - name: "Build and test on ARM64 CPU architecture" + stage: Tests - phase 2 + arch: arm64-graviton2 + dist: focal + virt: vm + group: edge + jdk: openjdk11 + env: + - MAVEN_PROJECTS='core,indexing-hadoop,indexing-service,processing,server,services' + script: ${MVN} test -B -pl ${MAVEN_PROJECTS} -Ddruid.console.skip=true -DargLine=-Xmx3000m -T1C + - name: "web console end-to-end test" before_install: *setup_generate_license install: web-console/script/druid build diff --git a/core/src/test/java/org/apache/druid/java/util/metrics/MonitorsTest.java b/core/src/test/java/org/apache/druid/java/util/metrics/MonitorsTest.java index 872af3dca22a..6f58fa47d454 100644 --- a/core/src/test/java/org/apache/druid/java/util/metrics/MonitorsTest.java +++ b/core/src/test/java/org/apache/druid/java/util/metrics/MonitorsTest.java @@ -23,12 +23,22 @@ import org.apache.druid.java.util.common.StringUtils; import org.apache.druid.java.util.emitter.core.Event; import org.junit.Assert; +import org.junit.Assume; +import org.junit.Before; import org.junit.Test; import java.util.List; public class MonitorsTest { + private static final String CPU_ARCH = System.getProperty("os.arch"); + + @Before + public void before() + { + // Do not run the tests on ARM64. Sigar library has no binaries for ARM64 + Assume.assumeFalse("aarch64".equals(CPU_ARCH)); + } @Test public void testSetFeed() diff --git a/core/src/test/java/org/apache/druid/java/util/metrics/SigarLoadTest.java b/core/src/test/java/org/apache/druid/java/util/metrics/SigarLoadTest.java index 42e1003dd475..40d7dada3c82 100644 --- a/core/src/test/java/org/apache/druid/java/util/metrics/SigarLoadTest.java +++ b/core/src/test/java/org/apache/druid/java/util/metrics/SigarLoadTest.java @@ -19,12 +19,23 @@ package org.apache.druid.java.util.metrics; -import junit.framework.Assert; import org.hyperic.sigar.Sigar; +import org.junit.Assert; +import org.junit.Assume; +import org.junit.Before; import org.junit.Test; public class SigarLoadTest { + private static final String CPU_ARCH = System.getProperty("os.arch"); + + @Before + public void before() + { + // Do not run the tests on ARM64. Sigar library has no binaries for ARM64 + Assume.assumeFalse("aarch64".equals(CPU_ARCH)); + } + @Test public void testSigarLoad() { diff --git a/core/src/test/java/org/apache/druid/java/util/metrics/SigarPidDiscovererTest.java b/core/src/test/java/org/apache/druid/java/util/metrics/SigarPidDiscovererTest.java index 26357f8dc9a7..32711ec0294d 100644 --- a/core/src/test/java/org/apache/druid/java/util/metrics/SigarPidDiscovererTest.java +++ b/core/src/test/java/org/apache/druid/java/util/metrics/SigarPidDiscovererTest.java @@ -19,13 +19,19 @@ package org.apache.druid.java.util.metrics; +import org.junit.Assume; import org.junit.Test; public class SigarPidDiscovererTest { + private static final String CPU_ARCH = System.getProperty("os.arch"); + @Test public void simpleTest() { + // Do not run the tests on ARM64. Sigar library has no binaries for ARM64 + Assume.assumeFalse("aarch64".equals(CPU_ARCH)); + // Just make sure we don't crash SigarPidDiscoverer.instance().getPid(); } diff --git a/indexing-hadoop/src/test/java/org/apache/druid/indexer/hadoop/DatasourceIngestionSpecTest.java b/indexing-hadoop/src/test/java/org/apache/druid/indexer/hadoop/DatasourceIngestionSpecTest.java index 98da95fc77b0..f2f6131225d4 100644 --- a/indexing-hadoop/src/test/java/org/apache/druid/indexer/hadoop/DatasourceIngestionSpecTest.java +++ b/indexing-hadoop/src/test/java/org/apache/druid/indexer/hadoop/DatasourceIngestionSpecTest.java @@ -22,12 +22,14 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; +import org.apache.druid.common.config.NullHandling; import org.apache.druid.java.util.common.Intervals; import org.apache.druid.query.filter.SelectorDimFilter; import org.apache.druid.segment.TestHelper; import org.apache.druid.timeline.DataSegment; import org.joda.time.Interval; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import java.util.List; @@ -38,6 +40,12 @@ public class DatasourceIngestionSpecTest { private static final ObjectMapper MAPPER = TestHelper.makeJsonMapper(); + @Before + public void before() + { + NullHandling.initializeForTests(); + } + @Test public void testSingleIntervalSerde() throws Exception { diff --git a/processing/src/test/java/org/apache/druid/segment/virtual/ExpressionVectorSelectorsTest.java b/processing/src/test/java/org/apache/druid/segment/virtual/ExpressionVectorSelectorsTest.java index c53676bea3ae..446932cc340b 100644 --- a/processing/src/test/java/org/apache/druid/segment/virtual/ExpressionVectorSelectorsTest.java +++ b/processing/src/test/java/org/apache/druid/segment/virtual/ExpressionVectorSelectorsTest.java @@ -20,7 +20,6 @@ package org.apache.druid.segment.virtual; import com.google.common.collect.ImmutableList; -import org.apache.druid.java.util.common.StringUtils; import org.apache.druid.java.util.common.granularity.Granularities; import org.apache.druid.java.util.common.guava.Sequence; import org.apache.druid.java.util.common.io.Closer; @@ -48,6 +47,7 @@ import org.apache.druid.timeline.partition.LinearShardSpec; import org.junit.AfterClass; import org.junit.Assert; +import org.junit.Assume; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; @@ -96,25 +96,31 @@ public class ExpressionVectorSelectorsTest private static QueryableIndex INDEX; private static Closer CLOSER; + private static final String CPU_ARCH = System.getProperty("os.arch"); + @BeforeClass public static void setupClass() { CLOSER = Closer.create(); - final GeneratorSchemaInfo schemaInfo = GeneratorBasicSchemas.SCHEMA_MAP.get("expression-testbench"); + // Do not run the tests on ARM64. + // SegmentGenerator#generate() fails with OutOfMemoryError on TravisCI ARM64 + if (!"aarch64".equals(CPU_ARCH)) { + final GeneratorSchemaInfo schemaInfo = GeneratorBasicSchemas.SCHEMA_MAP.get("expression-testbench"); - final DataSegment dataSegment = DataSegment.builder() - .dataSource("foo") - .interval(schemaInfo.getDataInterval()) - .version("1") - .shardSpec(new LinearShardSpec(0)) - .size(0) - .build(); + final DataSegment dataSegment = DataSegment.builder() + .dataSource("foo") + .interval(schemaInfo.getDataInterval()) + .version("1") + .shardSpec(new LinearShardSpec(0)) + .size(0) + .build(); - final SegmentGenerator segmentGenerator = CLOSER.register(new SegmentGenerator()); - INDEX = CLOSER.register( - segmentGenerator.generate(dataSegment, schemaInfo, Granularities.HOUR, ROWS_PER_SEGMENT) - ); + final SegmentGenerator segmentGenerator = CLOSER.register(new SegmentGenerator()); + INDEX = CLOSER.register( + segmentGenerator.generate(dataSegment, schemaInfo, Granularities.HOUR, ROWS_PER_SEGMENT) + ); + } } @AfterClass @@ -140,6 +146,9 @@ public ExpressionVectorSelectorsTest(String expression) @Before public void setup() { + // Don't run the tests on ARM64. @BeforeClass fails with OutOfMemoryError on TravisCI + Assume.assumeFalse("aarch64".equals(CPU_ARCH)); + Expr parsed = Parser.parse(expression, ExprMacroTable.nil()); outputType = parsed.getOutputType( new ColumnInspector() @@ -269,7 +278,7 @@ public static void sanityTestVectorizedExpressionSelectors( int rows = 0; while (!nonVectorized.isDone()) { Assert.assertEquals( - StringUtils.format("Failed at row %s", rows), + "Failed at row " + rows, nonSelector.getObject(), results.get(rows) );