This is an automated email from the ASF dual-hosted git repository.

asdf2014 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git


The following commit(s) were added to refs/heads/master by this push:
     new d525e5b  Fix travis timeout in BufferHashGrouperTest (#6713)
d525e5b is described below

commit d525e5b18e800d9fa59d8b80dc6487142f32ad75
Author: Jihoon Son <[email protected]>
AuthorDate: Thu Dec 6 20:05:27 2018 -0800

    Fix travis timeout in BufferHashGrouperTest (#6713)
    
    * Fix travis timeout in BufferHashGrouperTest
    
    * adjust buffer size
    
    * adjust bufferSize and loadFactor
    
    * increase memory
    
    * add debug code
    
    * cat error
    
    * after script
    
    * print logs
    
    * print per 2 min
    
    * use direct mem
    
    * clean up
---
 processing/pom.xml                                 |  2 +-
 .../epinephelinae/BufferHashGrouperTest.java       | 68 +++++++---------------
 2 files changed, 21 insertions(+), 49 deletions(-)

diff --git a/processing/pom.xml b/processing/pom.xml
index 4963e32..35f6dd0 100644
--- a/processing/pom.xml
+++ b/processing/pom.xml
@@ -195,7 +195,7 @@
                     <!-- set default options -->
                     <argLine>
                         -Xmx512m
-                        -XX:MaxDirectMemorySize=1500m
+                        -XX:MaxDirectMemorySize=2500m
                         -Duser.language=en
                         -Duser.GroupByQueryRunnerTest.javacountry=US
                         -Dfile.encoding=UTF-8
diff --git 
a/processing/src/test/java/org/apache/druid/query/groupby/epinephelinae/BufferHashGrouperTest.java
 
b/processing/src/test/java/org/apache/druid/query/groupby/epinephelinae/BufferHashGrouperTest.java
index c28657a..64b270d 100644
--- 
a/processing/src/test/java/org/apache/druid/query/groupby/epinephelinae/BufferHashGrouperTest.java
+++ 
b/processing/src/test/java/org/apache/druid/query/groupby/epinephelinae/BufferHashGrouperTest.java
@@ -20,16 +20,13 @@
 package org.apache.druid.query.groupby.epinephelinae;
 
 import com.google.common.base.Suppliers;
-import com.google.common.base.Throwables;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Ordering;
-import com.google.common.io.Files;
 import com.google.common.primitives.Ints;
 import org.apache.druid.common.config.NullHandling;
 import org.apache.druid.data.input.MapBasedRow;
-import org.apache.druid.java.util.common.ByteBufferUtils;
 import org.apache.druid.query.aggregation.AggregatorFactory;
 import org.apache.druid.query.aggregation.CountAggregatorFactory;
 import org.apache.druid.query.aggregation.LongSumAggregatorFactory;
@@ -39,12 +36,7 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.nio.MappedByteBuffer;
-import java.nio.channels.FileChannel;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
@@ -112,7 +104,7 @@ public class BufferHashGrouperTest
   public void testGrowing()
   {
     final TestColumnSelectorFactory columnSelectorFactory = 
GrouperTestUtil.newColumnSelectorFactory();
-    final Grouper<Integer> grouper = makeGrouper(columnSelectorFactory, 10000, 
2);
+    final Grouper<Integer> grouper = makeGrouper(columnSelectorFactory, 10000, 
2, 0.75f);
     final int expectedMaxSize = NullHandling.replaceWithDefault() ? 219 : 210;
 
     columnSelectorFactory.setRow(new MapBasedRow(0, ImmutableMap.of("value", 
10L)));
@@ -137,38 +129,29 @@ public class BufferHashGrouperTest
   }
 
   @Test
-  public void testGrowing2()
+  public void testGrowingOverflowingInteger()
   {
-    final TestColumnSelectorFactory columnSelectorFactory = 
GrouperTestUtil.newColumnSelectorFactory();
-    final Grouper<Integer> grouper = makeGrouper(columnSelectorFactory, 
2_000_000_000, 2);
-    final int expectedMaxSize = NullHandling.replaceWithDefault() ? 40988516 : 
39141224;
-
-    columnSelectorFactory.setRow(new MapBasedRow(0, ImmutableMap.of("value", 
10L)));
-    for (int i = 0; i < expectedMaxSize; i++) {
-      Assert.assertTrue(String.valueOf(i), grouper.aggregate(i).isOk());
-    }
-    Assert.assertFalse(grouper.aggregate(expectedMaxSize).isOk());
-  }
-
-  @Test
-  public void testGrowing3()
-  {
-    final TestColumnSelectorFactory columnSelectorFactory = 
GrouperTestUtil.newColumnSelectorFactory();
-    final Grouper<Integer> grouper = makeGrouper(columnSelectorFactory, 
Integer.MAX_VALUE, 2);
-    final int expectedMaxSize = NullHandling.replaceWithDefault() ? 44938972 : 
42955456;
-
-    columnSelectorFactory.setRow(new MapBasedRow(0, ImmutableMap.of("value", 
10L)));
-    for (int i = 0; i < expectedMaxSize; i++) {
-      Assert.assertTrue(String.valueOf(i), grouper.aggregate(i).isOk());
+    // This test checks the bug reported in 
https://github.com/apache/incubator-druid/pull/4333 only when
+    // NullHandling.replaceWithDefault() is true
+    if (NullHandling.replaceWithDefault()) {
+      final TestColumnSelectorFactory columnSelectorFactory = 
GrouperTestUtil.newColumnSelectorFactory();
+      // the buffer size below is chosen to test integer overflow in 
ByteBufferHashTable.adjustTableWhenFull().
+      final Grouper<Integer> grouper = makeGrouper(columnSelectorFactory, 
1_900_000_000, 2, 0.3f);
+      final int expectedMaxSize = 15323979;
+
+      columnSelectorFactory.setRow(new MapBasedRow(0, ImmutableMap.of("value", 
10L)));
+      for (int i = 0; i < expectedMaxSize; i++) {
+        Assert.assertTrue(String.valueOf(i), grouper.aggregate(i).isOk());
+      }
+      Assert.assertFalse(grouper.aggregate(expectedMaxSize).isOk());
     }
-    Assert.assertFalse(grouper.aggregate(expectedMaxSize).isOk());
   }
 
   @Test
   public void testNoGrowing()
   {
     final TestColumnSelectorFactory columnSelectorFactory = 
GrouperTestUtil.newColumnSelectorFactory();
-    final Grouper<Integer> grouper = makeGrouper(columnSelectorFactory, 10000, 
Integer.MAX_VALUE);
+    final Grouper<Integer> grouper = makeGrouper(columnSelectorFactory, 10000, 
Integer.MAX_VALUE, 0.75f);
     final int expectedMaxSize = NullHandling.replaceWithDefault() ? 267 : 258;
 
     columnSelectorFactory.setRow(new MapBasedRow(0, ImmutableMap.of("value", 
10L)));
@@ -195,22 +178,11 @@ public class BufferHashGrouperTest
   private BufferHashGrouper<Integer> makeGrouper(
       TestColumnSelectorFactory columnSelectorFactory,
       int bufferSize,
-      int initialBuckets
+      int initialBuckets,
+      float maxLoadFactor
   )
   {
-    final MappedByteBuffer buffer;
-
-    try {
-      final File file = temporaryFolder.newFile();
-      try (final FileChannel channel = new 
FileOutputStream(file).getChannel()) {
-        channel.truncate(bufferSize);
-      }
-      buffer = Files.map(file, FileChannel.MapMode.READ_WRITE, bufferSize);
-      closerRule.closeLater(() -> ByteBufferUtils.unmap(buffer));
-    }
-    catch (IOException e) {
-      throw Throwables.propagate(e);
-    }
+    final ByteBuffer buffer = ByteBuffer.allocateDirect(bufferSize);
 
     final BufferHashGrouper<Integer> grouper = new BufferHashGrouper<>(
         Suppliers.ofInstance(buffer),
@@ -221,7 +193,7 @@ public class BufferHashGrouperTest
             new CountAggregatorFactory("count")
         },
         Integer.MAX_VALUE,
-        0.75f,
+        maxLoadFactor,
         initialBuckets,
         true
     );


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to