This is an automated email from the ASF dual-hosted git repository.
sijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new 90a7448 better way to estimate object size for sql (#2528)
90a7448 is described below
commit 90a7448041aca5d5189b6a0b641453a50369faad
Author: Boyang Jerry Peng <[email protected]>
AuthorDate: Thu Sep 6 01:00:12 2018 -0700
better way to estimate object size for sql (#2528)
Since we mocked ClassLayout.parseClass() because we need to exclude
org.openjdk.jol for license issues. Lets come up with another way to estimate
class size
---
pulsar-sql/presto-distribution/LICENSE | 3 +++
pulsar-sql/presto-distribution/pom.xml | 14 ++++++++++++
.../java/org/openjdk/jol/info/ClassLayout.java | 26 ++++++++++++++++++----
3 files changed, 39 insertions(+), 4 deletions(-)
diff --git a/pulsar-sql/presto-distribution/LICENSE
b/pulsar-sql/presto-distribution/LICENSE
index 51d4923..d7f2fc8 100644
--- a/pulsar-sql/presto-distribution/LICENSE
+++ b/pulsar-sql/presto-distribution/LICENSE
@@ -359,6 +359,7 @@ The Apache Software License, Version 2.0
- jsr305-3.0.2.jar
* Objenesis
- objenesis-2.1.jar
+ - objenesis-2.6.jar
* Okio
- okio-1.13.0.jar
* Presto
@@ -379,6 +380,8 @@ The Apache Software License, Version 2.0
- snappy-java-1.1.1.3.jar
* Bean Validation API
- validation-api-1.1.0.Final.jar
+ * Objectsize
+ - objectsize-0.0.12.jar
Protocol Buffers License
* Protocol Buffers
diff --git a/pulsar-sql/presto-distribution/pom.xml
b/pulsar-sql/presto-distribution/pom.xml
index ab55b3d..a355777 100644
--- a/pulsar-sql/presto-distribution/pom.xml
+++ b/pulsar-sql/presto-distribution/pom.xml
@@ -30,6 +30,8 @@
<properties>
<presto.version>0.206</presto.version>
<airlift.version>0.170</airlift.version>
+ <objenesis.version>2.6</objenesis.version>
+ <objectsize.version>0.0.12</objectsize.version>
<!-- Launcher properties -->
<main-class>com.facebook.presto.server.PrestoServer</main-class>
<process-name>${project.artifactId}</process-name>
@@ -80,6 +82,18 @@
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.objenesis</groupId>
+ <artifactId>objenesis</artifactId>
+ <version>${objenesis.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>com.twitter.common</groupId>
+ <artifactId>objectsize</artifactId>
+ <version>${objectsize.version}</version>
+ </dependency>
+
</dependencies>
<build>
diff --git
a/pulsar-sql/presto-distribution/src/main/java/org/openjdk/jol/info/ClassLayout.java
b/pulsar-sql/presto-distribution/src/main/java/org/openjdk/jol/info/ClassLayout.java
index 16feb29..2a8bfa3 100644
---
a/pulsar-sql/presto-distribution/src/main/java/org/openjdk/jol/info/ClassLayout.java
+++
b/pulsar-sql/presto-distribution/src/main/java/org/openjdk/jol/info/ClassLayout.java
@@ -18,18 +18,36 @@
*/
package org.openjdk.jol.info;
+import com.twitter.common.objectsize.ObjectSizeCalculator;
+import io.airlift.log.Logger;
+import org.objenesis.ObjenesisStd;
+
/**
* Mock class avoid a dependency on OpenJDK JOL,
* which is incompatible with the Apache License.
*/
public class ClassLayout {
- public static ClassLayout parseClass(Class<?> ignored) {
- return new ClassLayout();
+ private static final Logger log = Logger.get(ClassLayout.class);
+
+ private int size;
+ private static final int DEFAULT_SIZE = 64;
+
+ private ClassLayout(int size) {
+ this.size = size;
+ }
+
+ public static ClassLayout parseClass(Class<?> clazz) {
+ long size = DEFAULT_SIZE;
+ try {
+ size = ObjectSizeCalculator.getObjectSize(new
ObjenesisStd().newInstance(clazz));
+ } catch (Throwable th) {
+ log.info("Error estimating size of class %s",clazz, th);
+ }
+ return new ClassLayout(Math.toIntExact(size));
}
- // TODO find a better estimate of class size
public int instanceSize() {
- return 64; // random, means nothing
+ return size;
}
}
\ No newline at end of file