You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by dc...@apache.org on 2021/08/19 22:18:24 UTC

svn commit: r49567 [13/14] - in /dev/datasketches/memory/2.0.0-RC1: ./ apache-datasketches-memory-2.0.0-src/ apache-datasketches-memory-2.0.0-src/datasketches-memory-java11/ apache-datasketches-memory-2.0.0-src/datasketches-memory-java11/src/ apache-da...

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory-java9/src/main/java/org/apache/datasketches/memory/internal/VirtualMachineMemory.java
==============================================================================
--- dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory-java9/src/main/java/org/apache/datasketches/memory/internal/VirtualMachineMemory.java (added)
+++ dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory-java9/src/main/java/org/apache/datasketches/memory/internal/VirtualMachineMemory.java Thu Aug 19 22:18:24 2021
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.datasketches.memory.internal;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * Extracts a version-dependent reference to the `jdk.internal.misc.VM` into
+ * a standalone class. The package name for VM has changed in
+ * later versions. The appropriate class will be loaded by the class loader
+ * depending on the Java version that is used.
+ * For more information, see: https://openjdk.java.net/jeps/238
+ */
+public final class VirtualMachineMemory {
+
+    private static final Class<?> VM_CLASS;
+    private static final Method VM_MAX_DIRECT_MEMORY_METHOD;
+    private static final Method VM_IS_DIRECT_MEMORY_PAGE_ALIGNED_METHOD;
+    private static final long maxDBBMemory;
+    private static final boolean isPageAligned;
+
+    static {
+        try {
+            VM_CLASS = Class.forName("jdk.internal.misc.VM");
+            VM_MAX_DIRECT_MEMORY_METHOD = VM_CLASS.getDeclaredMethod("maxDirectMemory");
+            VM_MAX_DIRECT_MEMORY_METHOD.setAccessible(true);
+            maxDBBMemory = (long) VM_MAX_DIRECT_MEMORY_METHOD.invoke(null); //static method
+
+            VM_IS_DIRECT_MEMORY_PAGE_ALIGNED_METHOD =
+                    VM_CLASS.getDeclaredMethod("isDirectMemoryPageAligned");
+            VM_IS_DIRECT_MEMORY_PAGE_ALIGNED_METHOD.setAccessible(true);
+            isPageAligned = (boolean) VM_IS_DIRECT_MEMORY_PAGE_ALIGNED_METHOD
+                    .invoke(null); //static method
+        } catch (final ClassNotFoundException | NoSuchMethodException |  IllegalAccessException
+                | IllegalArgumentException | InvocationTargetException | SecurityException e) {
+            throw new RuntimeException("Could not acquire jdk.internal.misc.VM: " + e.getClass());
+        }
+    }
+
+    /**
+     * Returns the maximum amount of allocatable direct buffer memory.
+     * The directMemory variable is initialized during system initialization.
+     * @return the maximum amount of allocatable direct buffer memory.
+     */
+    public static long getMaxDBBMemory() {
+        return maxDBBMemory;
+    }
+
+    /**
+     * Returns true if the direct buffers should be page aligned.
+     * @return flag that determines whether direct buffers should be page aligned.
+     */
+    public static boolean getIsPageAligned() {
+        return isPageAligned;
+    }
+}

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory-java9/src/main/java/org/apache/datasketches/memory/internal/package-info.java
==============================================================================
--- dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory-java9/src/main/java/org/apache/datasketches/memory/internal/package-info.java (added)
+++ dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory-java9/src/main/java/org/apache/datasketches/memory/internal/package-info.java Thu Aug 19 22:18:24 2021
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.datasketches.memory.internal;
\ No newline at end of file

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory-java9/src/main/java/org/apache/datasketches/memory/package-info.java
==============================================================================
--- dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory-java9/src/main/java/org/apache/datasketches/memory/package-info.java (added)
+++ dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory-java9/src/main/java/org/apache/datasketches/memory/package-info.java Thu Aug 19 22:18:24 2021
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.datasketches.memory;
\ No newline at end of file

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory-resources/pom.xml
==============================================================================
--- dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory-resources/pom.xml (added)
+++ dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory-resources/pom.xml Thu Aug 19 22:18:24 2021
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.datasketches</groupId>
+    <artifactId>datasketches-memory-root</artifactId>
+    <version>2.0.0</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.datasketches</groupId>
+      <artifactId>datasketches-memory</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.testng</groupId>
+      <artifactId>testng</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <!-- Used for UTF8 testing -->
+      <groupId>com.google.protobuf</groupId>
+      <artifactId>protobuf-java</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <!-- Used for xxHash testing -->
+      <groupId>net.openhft</groupId>
+      <artifactId>zero-allocation-hashing</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <artifactId>datasketches-memory-resources</artifactId>
+  <name>${project.artifactId}</name>
+
+  <!-- The tests in the following profiles run against the assembled MR-JAR.  Hence, they
+       only run during the Maven package phase. Different profiles are selected based on
+       the environment-specific version of Java that was used to run `mvn package`.  This
+       is because the new JPMS runtime arguments result in a catastrophic system error whilst
+       using Java 8. Tests are scanned from dependency JARs using `dependenciesToScan`. -->
+  <profiles>
+    <profile>
+      <id>java8</id>
+      <activation>
+        <jdk>[1.8,1.9),8</jdk>
+        <property>
+          <name>environment</name>
+          <value>ci</value>
+        </property>
+      </activation>
+
+      <properties>
+        <jdk-toolchain.version>1.8</jdk-toolchain.version>
+        <java.version>8</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+      </properties>
+
+      <dependencies>
+        <dependency>
+          <groupId>org.apache.datasketches</groupId>
+          <artifactId>datasketches-memory-java8-tests</artifactId>
+          <version>${project.version}</version>
+          <classifier>tests</classifier>
+          <scope>test</scope>
+        </dependency>
+      </dependencies>
+
+      <build>
+          <plugins>
+
+            <plugin>
+              <!-- Apache Parent pom, pluginManagement-->
+              <groupId>org.apache.maven.plugins</groupId>
+              <artifactId>maven-surefire-plugin</artifactId>
+              <version>${maven-surefire-plugin.version}</version>
+              <executions>
+                <execution>
+                  <id>package-test</id>
+                  <phase>package</phase>
+                  <goals>
+                    <goal>test</goal>
+                  </goals>
+                  <!-- does not provide JPMS runtime arguments -->
+                  <configuration>
+                    <skip>false</skip>
+                    <dependenciesToScan>
+                      <dependency>org.apache.datasketches:datasketches-memory-java8-tests</dependency>
+                    </dependenciesToScan>
+                    <argLine />
+                  </configuration>
+                </execution>
+              </executions>
+            </plugin>
+
+          </plugins>
+      </build>
+    </profile>
+
+    <profile>
+      <id>java9to13</id>
+      <activation>
+        <jdk>[9,14)</jdk>
+        <property>
+          <name>environment</name>
+          <value>ci</value>
+        </property>
+      </activation>
+
+      <properties>
+        <!--suppress UnresolvedMavenProperty -->
+        <jdk-toolchain.version>${matrix.jdk.version}</jdk-toolchain.version>
+        <!--suppress UnresolvedMavenProperty -->
+        <java.version>${matrix.jdk.version}</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+      </properties>
+
+      <dependencies>
+        <dependency>
+          <groupId>org.apache.datasketches</groupId>
+          <artifactId>datasketches-memory-java8-tests</artifactId>
+          <version>${project.version}</version>
+          <classifier>tests</classifier>
+          <scope>test</scope>
+        </dependency>
+      </dependencies>
+
+      <build>
+        <plugins>
+
+          <plugin>
+            <!-- Apache Parent pom, pluginManagement-->
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <version>${maven-surefire-plugin.version}</version>
+            <executions>
+              <execution>
+                <id>package-test</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>test</goal>
+                </goals>
+                <configuration>
+                  <skip>false</skip>
+                  <argLine>
+                    --add-exports java.base/jdk.internal.misc=ALL-UNNAMED
+                    --add-exports java.base/jdk.internal.ref=ALL-UNNAMED
+                    --add-opens java.base/java.nio=ALL-UNNAMED
+                    --add-opens java.base/sun.nio.ch=ALL-UNNAMED
+                  </argLine>
+                  <dependenciesToScan>
+                    <dependency>org.apache.datasketches:datasketches-memory-java8-tests</dependency>
+                  </dependenciesToScan>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+
+        </plugins>
+      </build>
+    </profile>
+
+  </profiles>
+</project>

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory-resources/src/test/resources/GettysburgAddress.txt
==============================================================================
--- dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory-resources/src/test/resources/GettysburgAddress.txt (added)
+++ dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory-resources/src/test/resources/GettysburgAddress.txt Thu Aug 19 22:18:24 2021
@@ -0,0 +1,7 @@
+Abraham Lincoln's Gettysburg Address:
+
+    Four score and seven years ago our fathers brought forth on this continent, a new nation, conceived in Liberty, and dedicated to the proposition that all men are created equal.
+
+    Now we are engaged in a great civil war, testing whether that nation, or any nation so conceived and so dedicated, can long endure. We are met on a great battle-field of that war. We have come to dedicate a portion of that field, as a final resting place for those who here gave their lives that that nation might live. It is altogether fitting and proper that we should do this.
+
+    But, in a larger sense, we can not dedicate —- we can not consecrate —- we can not hallow —- this ground. The brave men, living and dead, who struggled here, have consecrated it, far above our poor power to add or detract. The world will little note, nor long remember what we say here, but it can never forget what they did here. It is for us the living, rather, to be dedicated here to the unfinished work which they who fought here have thus far so nobly advanced. It is rather for us to be here dedicated to the great task remaining before us -— that from these honored dead we take increased devotion to that cause for which they gave the last full measure of devotion -— that we here highly resolve that these dead shall not have died in vain -— that this nation, under God, shall have a new birth of freedom -— and that government of the people, by the people, for the people, shall not perish from the earth.

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/pom.xml
==============================================================================
--- dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/pom.xml (added)
+++ dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/pom.xml Thu Aug 19 22:18:24 2021
@@ -0,0 +1,479 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache</groupId>
+    <artifactId>apache</artifactId>
+    <version>23</version>
+    <!-- Bypass resolution within source directory and resolve parent from remote repository instead -->
+    <relativePath />
+  </parent>
+
+  <!-- datasketches-memory assembly module
+
+       NOTE:
+       This uses the Maven project-aggregation feature and does not inherit from the parent
+       so that there is no runtime dependency on the parent project (root module).
+       As a result, some properties from the root POM are duplicated here for inclusion in
+       the assembled artifacts.  For more information, see:
+       https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Aggregation -->
+
+  <groupId>org.apache.datasketches</groupId>
+  <artifactId>datasketches-memory</artifactId>
+  <version>2.0.0</version>
+
+  <name>${project.artifactId}</name>
+  <description>High-performance native memory access.</description>
+  <url>https://datasketches.apache.org/</url>
+  <inceptionYear>2015</inceptionYear>
+
+  <mailingLists>
+    <mailingList>
+      <name>DataSketches Developers</name>
+      <subscribe>dev-subscribe@datasketches.apache.org</subscribe>
+      <unsubscribe>dev-unsubscribe@datasketches.apache.org</unsubscribe>
+      <post>dev@datasketches.apache.org</post>
+      <archive>https://mail-archives.apache.org/mod_mbox/datasketches-dev</archive>
+    </mailingList>
+    <mailingList>
+      <name>sketches-user</name>
+      <archive>https://groups.google.com/forum/#!forum/sketches-user</archive>
+      <subscribe>mailto:sketches-user%2Bsubscribe@googlegroups.com</subscribe>
+      <unsubscribe>mailto:sketches-user%2Bunsubscribe@googlegroups.com</unsubscribe>
+      <post>mailto:sketches-user@googlegroups.com</post>
+    </mailingList>
+  </mailingLists>
+
+  <scm>
+    <connection>scm:git:ssh://git@github.com/apache/${project.artifactId}.git</connection>
+    <developerConnection>scm:git:ssh://git@github.com/apache/${project.artifactId}.git</developerConnection>
+    <url>https://github.com/apache/${project.artifactId}</url>
+    <tag>HEAD</tag>
+  </scm>
+
+  <issueManagement>
+    <!-- <system>jira</system>
+      <url>https://issues.apache.org/jira/browse/DATASKETCHES</url> -->
+    <system>GitHub</system>
+    <url>https://github.com/apache/${project.artifactId}/issues</url>
+  </issueManagement>
+
+  <developers>
+    <developer>
+      <name>The Apache DataSketches Team</name>
+      <email>dev@datasketches.apache.org</email>
+      <url>https://datasketches.apache.org</url>
+      <organization>Apache Software Foundation</organization>
+      <organizationUrl>http://www.apache.org</organizationUrl>
+    </developer>
+  </developers>
+
+  <properties>
+    <!-- UNIQUE FOR THIS JAVA COMPONENT -->
+    <protobuf-java.version>4.0.0-rc-2</protobuf-java.version>
+    <!-- Used for UTF8 testing -->
+    <zero-allocation-hashing.version>0.15</zero-allocation-hashing.version>
+    <!-- END:UNIQUE FOR THIS JAVA COMPONENT -->
+
+    <!-- Test -->
+    <!-- Version 7.4.0 fails to locate jquery.min.js for reporting on debian systems -->
+    <testng.version>7.1.0</testng.version>
+
+    <!-- System-wide properties -->
+    <maven.version>3.5.0</maven.version>
+    <java.version>1.8</java.version>
+    <maven.source.skip>true</maven.source.skip>
+    <maven.compiler.source>${java.version}</maven.compiler.source>
+    <maven.compiler.target>${java.version}</maven.compiler.target>
+    <!-- deploy artifacts to nexus from this module only -->
+    <maven.deploy.skip>false</maven.deploy.skip>
+    <maven.install.skip>false</maven.install.skip>
+    <maven.javadoc.skip>true</maven.javadoc.skip>
+
+    <!--  Maven Plugins -->
+    <maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version> <!-- overrides parent -->
+    <maven-enforcer-plugin.version>3.0.0-M3</maven-enforcer-plugin.version> <!-- overrides parent -->
+    <maven-gpg-plugin.version>1.6</maven-gpg-plugin.version> <!-- overrides parent -->
+    <maven-jar-plugin.version>3.2.0</maven-jar-plugin.version> <!-- overrides parent -->
+    <maven-remote-resources-plugin.version>1.7.0</maven-remote-resources-plugin.version> <!-- overrides parent -->
+    <!-- org.jacoco Maven Plugins -->
+    <jacoco-maven-plugin.version>0.8.6</jacoco-maven-plugin.version>
+    <!-- git plugin -->
+    <git-commit-id-plugin.version>4.0.4</git-commit-id-plugin.version>
+  </properties>
+
+  <dependencies>
+    <!-- These dependencies are required during assembly but not runtime -->
+    <dependency>
+      <groupId>org.apache.datasketches</groupId>
+      <artifactId>datasketches-memory-java8</artifactId>
+      <version>${project.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.datasketches</groupId>
+      <artifactId>datasketches-memory-java9</artifactId>
+      <version>${project.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.datasketches</groupId>
+      <artifactId>datasketches-memory-java11</artifactId>
+      <version>${project.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <!-- Test Scope -->
+    <dependency>
+      <groupId>org.apache.datasketches</groupId>
+      <artifactId>datasketches-memory-java8-tests</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <!-- Used for UTF8 testing -->
+      <groupId>com.google.protobuf</groupId>
+      <artifactId>protobuf-java</artifactId>
+      <version>${protobuf-java.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <!-- Used for xxHash testing -->
+      <groupId>net.openhft</groupId>
+      <artifactId>zero-allocation-hashing</artifactId>
+      <version>${zero-allocation-hashing.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <!-- END: UNIQUE FOR THIS JAVA COMPONENT -->
+
+  </dependencies>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+
+        <!-- The assembly plugin builds all artifacts for this project from the other modules
+             within the project.  These modules are complementary and not standalone.  Therefore,
+             they are not installed and downloaded independently by the end user.
+             Instead, the maven-assembly plugin builds all jars, and hides the multi-module
+             configuration from the end user. -->
+        <plugin>
+          <artifactId>maven-assembly-plugin</artifactId>
+          <version>${maven-assembly-plugin.version}</version>
+          <!--suppress MavenModelInspection -->
+          <configuration>
+            <archive>
+              <manifest>
+                <addDefaultEntries>false</addDefaultEntries>
+                <addDefaultSpecificationEntries>false</addDefaultSpecificationEntries>
+                <addDefaultImplementationEntries>false</addDefaultImplementationEntries>
+              </manifest>
+              <manifestEntries>
+                <Build-Jdk>${java.version} (${java.vendor} ${java.vm.version})</Build-Jdk>
+                <Build-OS>${os.name} ${os.arch} ${os.version}</Build-OS>
+                <Implementation-Vendor>The Apache Software Foundation</Implementation-Vendor>
+                <GroupId-ArtifactId>${project.groupId}:${project.artifactId}</GroupId-ArtifactId>
+                <!-- these properties are generated by the git-commit-id-plugin during initialize -->
+                <!--suppress UnresolvedMavenProperty -->
+                <git-branch>${git.branch}</git-branch>
+                <!--suppress UnresolvedMavenProperty -->
+                <git-commit-id>${git.commit.id.full}</git-commit-id>
+                <!--suppress UnresolvedMavenProperty -->
+                <git-commit-time>${git.commit.time}</git-commit-time>
+                <!--suppress UnresolvedMavenProperty -->
+                <git-commit-user-email>${git.commit.user.email}</git-commit-user-email>
+                <!--suppress UnresolvedMavenProperty -->
+                <git-commit-tag>${git.tags}</git-commit-tag>
+              </manifestEntries>
+            </archive>
+          </configuration>
+          <executions>
+
+            <!-- multi-release (MR) jar -->
+            <execution>
+              <id>assemble-jar</id>
+              <phase>package</phase>
+              <goals>
+                <goal>single</goal>
+              </goals>
+              <configuration>
+                <appendAssemblyId>false</appendAssemblyId>
+                <attach>true</attach>
+                <descriptors>
+                  <descriptor>src/assembly/assemble-mr-jar.xml</descriptor>
+                </descriptors>
+                <!-- The class loader requires this to be set in a multi-release JAR's manifest -->
+                <archive>
+                  <manifestEntries>
+                    <Multi-Release>true</Multi-Release>
+                  </manifestEntries>
+                </archive>
+              </configuration>
+            </execution>
+
+            <!-- sources, tests and javadocs jars -->
+            <execution>
+              <id>assemble-sources-tests-javadocs</id>
+              <phase>package</phase>
+              <goals>
+                <goal>single</goal>
+              </goals>
+              <configuration>
+                <appendAssemblyId>true</appendAssemblyId>
+                <attach>true</attach>
+                <descriptors>
+                  <!-- tests jar -->
+                  <descriptor>src/assembly/assemble-test-jar.xml</descriptor>
+                  <!-- sources.jar -->
+                  <descriptor>src/assembly/assemble-sources.xml</descriptor>
+                  <!-- test-sources.jar -->
+                  <descriptor>src/assembly/assemble-test-sources.xml</descriptor>
+                  <!-- javadoc jar -->
+                  <descriptor>src/assembly/assemble-javadoc.xml</descriptor>
+                </descriptors>
+              </configuration>
+            </execution>
+
+          </executions>
+        </plugin>
+
+        <plugin>
+          <!-- Generates aggregate code coverage report from website.
+               This applies across all Maven submodules. -->
+          <groupId>org.jacoco</groupId>
+          <artifactId>jacoco-maven-plugin</artifactId>
+          <version>${jacoco-maven-plugin.version}</version>
+          <executions>
+            <execution>
+              <id>default-report</id>
+              <phase>verify</phase>
+              <goals>
+                <goal>report-aggregate</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+
+
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-enforcer-plugin</artifactId>
+          <version>${maven-enforcer-plugin.version}</version>
+          <executions>
+            <execution>
+              <id>enforce-banned-dependencies</id>
+              <goals>
+                <goal>enforce</goal>
+              </goals>
+              <configuration>
+                <rules>
+                  <requireJavaVersion>
+                    <version>[1.8,1.9),[8,14)</version>
+                  </requireJavaVersion>
+                  <requireMavenVersion>
+                    <version>[${maven.version},)</version>
+                  </requireMavenVersion>
+                  <bannedDependencies>
+                    <excludes>
+                      <!--LGPL licensed library-->
+                      <exclude>com.google.code.findbugs:annotations</exclude>
+                    </excludes>
+                  </bannedDependencies>
+                </rules>
+                <fail>true</fail>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>
+
+        <plugin>
+          <groupId>pl.project13.maven</groupId>
+          <artifactId>git-commit-id-plugin</artifactId>
+          <version>${git-commit-id-plugin.version}</version>
+        </plugin>
+
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>${maven-jar-plugin.version}</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.jacoco</groupId>
+        <artifactId>jacoco-maven-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>pl.project13.maven</groupId>
+        <artifactId>git-commit-id-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </build>
+
+  <profiles>
+
+    <!--  This profile is used to release signed jars to the Apache Nexus repository.
+         This must be executed from a git repository set at the proper Release branch (e.g., 1.1.X)
+         and at a Release Candidate tag (e.g., 1.1.0-RC1).
+         The pom version in the release branch must be properly set to something like: "1.1.0".
+         The pom version in the master would be set to something like: "1.2.0-SNAPSHOT".
+         Test Command: mvn clean verify -Pnexus-jars -DskipTests=true
+         Command: mvn clean deploy -Dnexus-jars
+         Verify Command (from terminal): gpg -v &#45;&#45;verify $ASC $FILE # dashdashverify
+   -->
+    <profile>
+      <id>nexus-jars</id>
+      <build>
+        <pluginManagement>
+          <plugins>
+            <plugin>
+              <groupId>pl.project13.maven</groupId>
+              <artifactId>git-commit-id-plugin</artifactId>
+              <version>${git-commit-id-plugin.version}</version>
+              <executions>
+                <execution>
+                  <goals>
+                    <goal>revision</goal>
+                  </goals>
+                  <phase>initialize</phase>
+                </execution>
+              </executions>
+              <configuration>
+                <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
+                <dateFormatTimeZone>UTC</dateFormatTimeZone>
+                <verbose>false</verbose>
+                <skipPoms>false</skipPoms>
+                <format>json</format>
+                <generateGitPropertiesFile>true</generateGitPropertiesFile>
+                <generateGitPropertiesFilename>${project.build.directory}/git.properties</generateGitPropertiesFilename>
+                <failOnNoGitDirectory>true</failOnNoGitDirectory>
+                <failOnUnableToExtractRepoInfo>true</failOnUnableToExtractRepoInfo>
+                <commitIdGenerationMode>full</commitIdGenerationMode>
+                <includeOnlyProperties>
+                  <includeProperty>git.branch</includeProperty>
+                  <includeProperty>git.commit.id.full</includeProperty>
+                  <includeProperty>git.commit.time</includeProperty>
+                  <includeProperty>git.commit.user.email</includeProperty>
+                  <includeProperty>git.tags</includeProperty>
+                </includeOnlyProperties>
+                <gitDescribe>
+                  <skip>false</skip>
+                  <always>true</always>
+                  <abbrev>7</abbrev>
+                  <dirty>-dirty</dirty>
+                  <tags>true</tags>
+                  <forceLongFormat>true</forceLongFormat>
+                </gitDescribe>
+              </configuration>
+            </plugin>
+
+            <!-- We want to sign the artifacts, POM, and all attached artifacts -->
+            <plugin>
+              <groupId>org.apache.maven.plugins</groupId>
+              <artifactId>maven-gpg-plugin</artifactId>
+              <version>${maven-gpg-plugin.version}</version>
+              <executions>
+                <execution>
+                  <id>sign-artifacts</id>
+                  <phase>verify</phase>
+                  <goals>
+                    <goal>sign</goal>
+                  </goals>
+                </execution>
+              </executions>
+              <configuration>
+                <gpgArguments>
+                  <arg>--verbose</arg>
+                  <!-- prints the algorithm used -->
+                  <arg>--personal-digest-preferences=SHA512</arg>
+                </gpgArguments>
+              </configuration>
+            </plugin>
+          </plugins>
+        </pluginManagement>
+
+        <plugins>
+          <plugin>
+            <groupId>pl.project13.maven</groupId>
+            <artifactId>git-commit-id-plugin</artifactId>
+          </plugin>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-gpg-plugin</artifactId>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+
+    <profile>
+      <id>only-eclipse</id>
+      <activation>
+        <property>
+          <name>m2e.version</name>
+        </property>
+      </activation>
+      <build>
+        <pluginManagement>
+          <plugins>
+            <plugin>
+              <groupId>org.apache.maven.plugins</groupId>
+              <artifactId>maven-remote-resources-plugin</artifactId>
+              <version>${maven-remote-resources-plugin.version}</version>
+              <executions>
+                <execution>
+                  <id>process-resource-bundles</id>
+                  <phase>none</phase>
+                </execution>
+              </executions>
+            </plugin>
+          </plugins>
+        </pluginManagement>
+
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-remote-resources-plugin</artifactId>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+
+  </profiles>
+
+</project>

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/src/assembly/assemble-javadoc.xml
==============================================================================
--- dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/src/assembly/assemble-javadoc.xml (added)
+++ dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/src/assembly/assemble-javadoc.xml Thu Aug 19 22:18:24 2021
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
+  <id>javadoc</id>
+  <formats>
+    <format>jar</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+
+  <!-- Java apidocs html and stylesheets -->
+  <moduleSets>
+    <moduleSet>
+      <useAllReactorProjects>true</useAllReactorProjects>
+      <includes>
+        <include>org.apache.datasketches:datasketches-memory-java8</include>
+      </includes>
+      <sources>
+        <includeModuleDirectory>false</includeModuleDirectory>
+        <fileSets>
+          <fileSet>
+            <directory>${project.build.directory}/apidocs</directory>
+            <outputDirectory>/</outputDirectory>
+          </fileSet>
+        </fileSets>
+      </sources>
+    </moduleSet>
+  </moduleSets>
+
+  <files>
+    <!-- DEPENDENCIES, LICENSE and NOTICE -->
+    <file>
+      <source>${project.build.outputDirectory}/META-INF/DEPENDENCIES</source>
+      <outputDirectory>META-INF</outputDirectory>
+    </file>
+    <file>
+      <source>${maven.multiModuleProjectDirectory}/LICENSE</source>
+      <outputDirectory>META-INF</outputDirectory>
+    </file>
+    <file>
+      <source>${maven.multiModuleProjectDirectory}/NOTICE</source>
+      <outputDirectory>META-INF</outputDirectory>
+    </file>
+    <!-- pom.properties -->
+    <file>
+      <source>${project.build.directory}/maven-archiver/pom.properties</source>
+      <outputDirectory>META-INF/maven/org.apache.datasketches/datasketches-memory</outputDirectory>
+    </file>
+    <!-- pom.xml -->
+    <file>
+      <source>${project.basedir}/pom.xml</source>
+      <outputDirectory>META-INF/maven/org.apache.datasketches/datasketches-memory</outputDirectory>
+    </file>
+  </files>
+
+</assembly>

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/src/assembly/assemble-mr-jar.xml
==============================================================================
--- dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/src/assembly/assemble-mr-jar.xml (added)
+++ dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/src/assembly/assemble-mr-jar.xml Thu Aug 19 22:18:24 2021
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
+  <id>assemble-jar</id>
+  <formats>
+    <format>jar</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+
+  <!-- Compiled java classes from dependency modules -->
+  <moduleSets>
+    <!-- java8 -->
+    <moduleSet>
+      <useAllReactorProjects>true</useAllReactorProjects>
+      <includes>
+        <include>org.apache.datasketches:datasketches-memory-java8</include>
+      </includes>
+      <sources>
+        <includeModuleDirectory>false</includeModuleDirectory>
+        <fileSets>
+          <fileSet>
+            <directory>${project.build.outputDirectory}</directory>
+            <outputDirectory>/</outputDirectory>
+          </fileSet>
+        </fileSets>
+      </sources>
+    </moduleSet>
+    <!-- java9 -->
+    <moduleSet>
+      <useAllReactorProjects>true</useAllReactorProjects>
+      <includes>
+        <include>org.apache.datasketches:datasketches-memory-java9</include>
+      </includes>
+      <binaries>
+        <outputDirectory>META-INF/versions/9</outputDirectory>
+        <unpack>true</unpack>
+        <includeDependencies>false</includeDependencies>
+        <unpackOptions>
+          <excludes>
+            <exclude>/META-INF/**</exclude>
+          </excludes>
+        </unpackOptions>
+      </binaries>
+    </moduleSet>
+    <!-- java11 -->
+    <moduleSet>
+      <useAllReactorProjects>true</useAllReactorProjects>
+      <includes>
+        <include>org.apache.datasketches:datasketches-memory-java11</include>
+      </includes>
+      <binaries>
+        <outputDirectory>META-INF/versions/11</outputDirectory>
+        <unpack>true</unpack>
+        <includeDependencies>false</includeDependencies>
+        <unpackOptions>
+          <excludes>
+            <exclude>/META-INF/**</exclude>
+          </excludes>
+        </unpackOptions>
+      </binaries>
+    </moduleSet>
+  </moduleSets>
+
+  <files>
+    <!-- DEPENDENCIES, LICENSE and NOTICE -->
+    <file>
+      <source>${project.build.outputDirectory}/META-INF/DEPENDENCIES</source>
+      <outputDirectory>META-INF</outputDirectory>
+    </file>
+    <file>
+      <source>${maven.multiModuleProjectDirectory}/LICENSE</source>
+      <outputDirectory>META-INF</outputDirectory>
+    </file>
+    <file>
+      <source>${maven.multiModuleProjectDirectory}/NOTICE</source>
+      <outputDirectory>META-INF</outputDirectory>
+    </file>
+    <!-- pom.properties -->
+    <file>
+      <source>${project.build.directory}/maven-archiver/pom.properties</source>
+      <outputDirectory>META-INF/maven/org.apache.datasketches/datasketches-memory</outputDirectory>
+    </file>
+    <!-- pom.xml -->
+    <file>
+      <source>${project.basedir}/pom.xml</source>
+      <outputDirectory>META-INF/maven/org.apache.datasketches/datasketches-memory</outputDirectory>
+    </file>
+  </files>
+
+</assembly>

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/src/assembly/assemble-sources.xml
==============================================================================
--- dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/src/assembly/assemble-sources.xml (added)
+++ dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/src/assembly/assemble-sources.xml Thu Aug 19 22:18:24 2021
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
+  <id>sources</id>
+  <formats>
+    <format>jar</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+
+  <!-- Java sources -->
+  <moduleSets>
+    <moduleSet>
+      <useAllReactorProjects>true</useAllReactorProjects>
+      <includes>
+        <include>org.apache.datasketches:datasketches-memory-java8</include>
+      </includes>
+      <sources>
+        <includeModuleDirectory>false</includeModuleDirectory>
+        <fileSets>
+          <fileSet>
+            <directory>${project.build.sourceDirectory}</directory>
+            <outputDirectory>/</outputDirectory>
+          </fileSet>
+        </fileSets>
+      </sources>
+    </moduleSet>
+  </moduleSets>
+
+  <files>
+    <!-- DEPENDENCIES, LICENSE and NOTICE -->
+    <file>
+      <source>${project.build.outputDirectory}/META-INF/DEPENDENCIES</source>
+      <outputDirectory>META-INF</outputDirectory>
+    </file>
+    <file>
+      <source>${maven.multiModuleProjectDirectory}/LICENSE</source>
+      <outputDirectory>META-INF</outputDirectory>
+    </file>
+    <file>
+      <source>${maven.multiModuleProjectDirectory}/NOTICE</source>
+      <outputDirectory>META-INF</outputDirectory>
+    </file>
+    <!-- pom.properties -->
+    <file>
+      <source>${project.build.directory}/maven-archiver/pom.properties</source>
+      <outputDirectory>META-INF/maven/org.apache.datasketches/datasketches-memory</outputDirectory>
+    </file>
+    <!-- pom.xml -->
+    <file>
+      <source>${project.basedir}/pom.xml</source>
+      <outputDirectory>META-INF/maven/org.apache.datasketches/datasketches-memory</outputDirectory>
+    </file>
+  </files>
+
+</assembly>

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/src/assembly/assemble-test-jar.xml
==============================================================================
--- dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/src/assembly/assemble-test-jar.xml (added)
+++ dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/src/assembly/assemble-test-jar.xml Thu Aug 19 22:18:24 2021
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
+  <id>tests</id>
+  <formats>
+    <format>jar</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+
+  <!-- Compiled java classes from dependency test modules -->
+  <moduleSets>
+    <moduleSet>
+      <useAllReactorProjects>true</useAllReactorProjects>
+      <includes>
+        <include>org.apache.datasketches:datasketches-memory-java8-tests</include>
+      </includes>
+      <sources>
+        <includeModuleDirectory>false</includeModuleDirectory>
+        <fileSets>
+          <fileSet>
+            <directory>${project.build.testOutputDirectory}</directory>
+            <outputDirectory>/</outputDirectory>
+          </fileSet>
+        </fileSets>
+      </sources>
+    </moduleSet>
+  </moduleSets>
+
+  <files>
+    <!-- DEPENDENCIES, LICENSE and NOTICE -->
+    <file>
+      <source>${project.build.outputDirectory}/META-INF/DEPENDENCIES</source>
+      <outputDirectory>META-INF</outputDirectory>
+    </file>
+    <file>
+      <source>${maven.multiModuleProjectDirectory}/LICENSE</source>
+      <outputDirectory>META-INF</outputDirectory>
+    </file>
+    <file>
+      <source>${maven.multiModuleProjectDirectory}/NOTICE</source>
+      <outputDirectory>META-INF</outputDirectory>
+    </file>
+    <!-- pom.properties -->
+    <file>
+      <source>${project.build.directory}/maven-archiver/pom.properties</source>
+      <outputDirectory>META-INF/maven/org.apache.datasketches/datasketches-memory</outputDirectory>
+    </file>
+    <!-- pom.xml -->
+    <file>
+      <source>${project.basedir}/pom.xml</source>
+      <outputDirectory>META-INF/maven/org.apache.datasketches/datasketches-memory</outputDirectory>
+    </file>
+  </files>
+
+</assembly>

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/src/assembly/assemble-test-sources.xml
==============================================================================
--- dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/src/assembly/assemble-test-sources.xml (added)
+++ dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/datasketches-memory/src/assembly/assemble-test-sources.xml Thu Aug 19 22:18:24 2021
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
+  <id>test-sources</id>
+  <formats>
+    <format>jar</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+
+  <!-- Java test sources -->
+  <moduleSets>
+    <moduleSet>
+      <useAllReactorProjects>true</useAllReactorProjects>
+      <includes>
+        <include>org.apache.datasketches:datasketches-memory-java8-tests</include>
+      </includes>
+      <sources>
+        <includeModuleDirectory>false</includeModuleDirectory>
+        <fileSets>
+          <fileSet>
+            <directory>${project.build.testSourceDirectory}</directory>
+            <outputDirectory>/</outputDirectory>
+          </fileSet>
+        </fileSets>
+      </sources>
+    </moduleSet>
+  </moduleSets>
+
+  <files>
+    <!-- DEPENDENCIES, LICENSE and NOTICE -->
+    <file>
+      <source>${project.build.outputDirectory}/META-INF/DEPENDENCIES</source>
+      <outputDirectory>META-INF</outputDirectory>
+    </file>
+    <file>
+      <source>${maven.multiModuleProjectDirectory}/LICENSE</source>
+      <outputDirectory>META-INF</outputDirectory>
+    </file>
+    <file>
+      <source>${maven.multiModuleProjectDirectory}/NOTICE</source>
+      <outputDirectory>META-INF</outputDirectory>
+    </file>
+    <!-- pom.properties -->
+    <file>
+      <source>${project.build.directory}/maven-archiver/pom.properties</source>
+      <outputDirectory>META-INF/maven/org.apache.datasketches/datasketches-memory</outputDirectory>
+    </file>
+    <!-- pom.xml -->
+    <file>
+      <source>${project.basedir}/pom.xml</source>
+      <outputDirectory>META-INF/maven/org.apache.datasketches/datasketches-memory</outputDirectory>
+    </file>
+  </files>
+
+</assembly>

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/eclipse.md
==============================================================================
--- dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/eclipse.md (added)
+++ dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/eclipse.md Thu Aug 19 22:18:24 2021
@@ -0,0 +1,160 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
+
+# Eclipse IDE Setup
+
+The use of Maven submodules to build a Multi Release JAR was motivated by its compatibility with 
+popular IDEs. There are two configuration properties to be aware of when configuring your local 
+development environment:
+
+1) Java compiler versions
+2) Compiler arguments for JPMS
+
+### Java compiler versions
+
+Settings are usually synchronised with Maven Toolchain configuration, otherwise the Java version 
+for a Maven module should be set as follows:
+
+| Maven submodule                   | JDK |
+| --------------------------------- | --- |
+| datasketches-memory-root          |  8  |
+| datasketches-memory               |  8  |
+| datasketches-memory-java8         |  8  |
+| datasketches-memory-java8-tests   |  8  |
+| datasketches-memory-java9         |  9  |
+| datasketches-memory-java11        |  11 |
+| datasketches-memory-resources     |  8  |
+
+### Compiler arguments for JPMS
+
+In order to compile Maven modules in Java versions 9 and above, it is necessary to provide the 
+following arguments to the compiler.  These are usually synchronised with the `pom.xml` 
+configuration:
+
+```xml
+    <compilerArgs>
+        <arg>--add-exports</arg>
+        <arg>java.base/jdk.internal.ref=org.apache.datasketches.memory</arg>
+    </compilerArgs>
+```
+
+---
+
+## Running Datasketches-Memory in Eclipse
+
+Note that the following configuration was verified using Eclipse Version: 2020-12 (4.18.0)
+
+### The eclipse maven plugin
+
+The [Eclipse Maven plugin](https://maven.apache.org/plugins/maven-eclipse-plugin/) is used to 
+generate Eclipse IDE files.  In order to run the eclipse plugin use:
+
+    $ mvn clean process-classes eclipse:eclipse -DskipTests=true
+
+More information about using the eclipse plugin with multi-module Maven builds can be found
+in the Maven 
+[Multiple Module Projects](https://maven.apache.org/plugins/maven-eclipse-plugin/reactor.html)
+document.
+
+Please note that this plugin is retired and no longer maintained!
+
+---
+
+### Importing the project into eclipse
+
+From the **Package Explorer** View:
+
+- Right-click on a blank space in the view
+- Select **Import/Maven/Existing Maven Projects**
+- Select **Next**, and browse to the project directory
+- Click **Open**
+
+---
+
+### Setting compiler arguments for JPMS
+
+Although these should be set automatically, the Eclipse IDE does not currently configure these 
+settings according to the `pom.xml` - see this 
+[Eclipse Bug](https://github.com/eclipse-m2e/m2e-core/issues/129).
+Ensure that the required JPMS arguments are set for the compiler (Java 9 only).
+
+- First, right-click on the `datasketches-memory-java9` project, and select 
+**Properties/Java Build Path**. 
+- Next, open the **Module Dependencies** tab and select the `java.base` package.
+- Click on **Configured details**, followed by **Expose package**.
+- In the dialog box, enter package: ```jdk.internal.ref```, and 
+`org.apache.datasketches.memory` as the target module.
+- Ensure that the **exports** checkbox is selected.
+
+![Eclipse java compiler arguments](img/eclipse-java-compiler-arguments-1.png "Eclipse project compiler arguments")
+
+- Finally, click **Apply and Close**:
+
+![Eclipse java compiler arguments](img/eclipse-java-compiler-arguments-2.png "Eclipse project compiler arguments")
+
+Note: These arguments need only be supplied for `datasketches-memory-java9`.
+
+---
+
+### Setting Java compiler settings
+
+This should be set automatically by the IDE.  However, you may ensure that the correct Java 
+compliance level is set for each module by using the Eclipse `Java Compiler` dialog.
+
+- Open the **Java Compiler** dialog, and ensure **Enable project specific settings** is checked:
+
+![Eclipse compiler level](img/eclipse-compiler-level.png "Eclipse Java Compiler Settings")
+
+You might need to verify this for each module, making sure the correct compliance level is used:
+
+- `datasketches-memory-java9` should use level 9 compliance.
+- `datasketches-memory-java11` should use level 11 compliance.
+- all other modules should use level 1.8 compliance.
+
+---
+
+### Setting JRE library versions
+
+This should be set automatically by the IDE.  However, you may ensure that the correct JRE is 
+used for each module by using the Eclipse **Java Build Path** dialog.
+
+- First, open the project properties dialog for the `datasketches-memory-java9` project, and 
+click on **Java Build Path**. 
+- Next, open the **Libraries** tab and select the **JRE System Library** under **Modulepath**.
+- Click **Edit** and ensure that the **Execution Environment** is selected and set to Java 9:
+
+![Eclipse build path](img/eclipse-build-path-1.png "Java 9 Eclipse project build path")
+
+- Follow a similar process for `datasketches-memory-java11`, and verify that 
+**Execution Environment** is selected and set to Java 11:
+
+![Eclipse build path](img/eclipse-build-path-2.png "Java 11 Eclipse project build path")
+
+- Lastly, for all other modules, verify that the **Execution Environment** is selected and set 
+to the Java 8 JRE:
+
+![Eclipse build path](img/eclipse-build-path-3.png "Java 8 Eclipse project build path")
+
+### Running unit tests
+
+- Under the `datasketches-memory-java-8-tests` module, right-click on the `src/test/java` 
+directory.
+- Select **Run-As** / **TestNG Test**
+- It should open a new window and run over 400 tests without error.

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/eclipse-build-path-1.png
==============================================================================
Binary file - no diff available.

Propchange: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/eclipse-build-path-1.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/eclipse-build-path-2.png
==============================================================================
Binary file - no diff available.

Propchange: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/eclipse-build-path-2.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/eclipse-build-path-3.png
==============================================================================
Binary file - no diff available.

Propchange: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/eclipse-build-path-3.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/eclipse-compiler-level.png
==============================================================================
Binary file - no diff available.

Propchange: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/eclipse-compiler-level.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/eclipse-java-compiler-arguments-1.png
==============================================================================
Binary file - no diff available.

Propchange: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/eclipse-java-compiler-arguments-1.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/eclipse-java-compiler-arguments-2.png
==============================================================================
Binary file - no diff available.

Propchange: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/eclipse-java-compiler-arguments-2.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/eclipse-project-structure.png
==============================================================================
Binary file - no diff available.

Propchange: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/eclipse-project-structure.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/intellij-java-compiler-arguments.png
==============================================================================
Binary file - no diff available.

Propchange: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/intellij-java-compiler-arguments.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/intellij-project-structure.png
==============================================================================
Binary file - no diff available.

Propchange: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/intellij-project-structure.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/mr-jar-manifest.png
==============================================================================
Binary file - no diff available.

Propchange: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/mr-jar-manifest.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/mr-jar-sources.png
==============================================================================
Binary file - no diff available.

Propchange: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/img/mr-jar-sources.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/intellij.md
==============================================================================
--- dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/intellij.md (added)
+++ dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/intellij.md Thu Aug 19 22:18:24 2021
@@ -0,0 +1,79 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
+# IntelliJ IDE Setup
+
+The use of Maven submodules to build a Multi Release JAR was motivated by its compatibility with 
+popular IDEs.
+
+There are two configuration properties to be aware of when configuring your local development 
+environment:
+
+1) Java compiler versions
+2) Compiler arguments for JPMS
+
+#### Java compiler versions
+
+Settings are usually synchronised with maven toolchain configuration, otherwise the Java version 
+for a maven module should be set as follows:
+
+| Maven submodule                   | JDK |
+| --------------------------------- | --- |
+| datasketches-memory-root          |  8  |
+| datasketches-memory               |  8  |
+| datasketches-memory-java8         |  8  |
+| datasketches-memory-java8-tests   |  8  |
+| datasketches-memory-java9         |  9  |
+| datasketches-memory-java11        |  11 |
+| datasketches-memory-resources     |  8  |
+
+#### Compiler arguments for JPMS
+
+In order to compile Maven modules in Java versions 9 and above, it is necessary to provide the 
+following arguments to the compiler.  These are usually synchronised with the `pom.xml` 
+configuration:
+
+```xml
+    <compilerArgs>
+        <arg>--add-exports</arg>
+        <arg>java.base/jdk.internal.ref=org.apache.datasketches.memory</arg>
+    </compilerArgs>
+```
+
+---
+
+## Running Datasketches-Memory in IntelljJ-IDEA
+
+Note that the following configuration was verified using IntelliJ IDEA 2021.1.2 
+(Community Edition).
+
+### Java compiler versions
+
+Ensure that the correct SDK is used for each module using the IntelliJ project structure dialog:
+
+![IntelliJ project structure dialog](img/intellij-project-structure.png "Intellij project structure dialogue")
+
+---
+
+### Compiler arguments for JPMS
+
+Ensure that the required JPMS arguments are set for the compiler (Java 9 only).  
+These should be detected and set automatically based on the `pom.xml` configuration.
+
+![IntelliJ java compiler arguments](img/intellij-java-compiler-arguments.png "Intellij project compiler arguments")

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/maven-toolchains.md
==============================================================================
--- dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/maven-toolchains.md (added)
+++ dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/maven-toolchains.md Thu Aug 19 22:18:24 2021
@@ -0,0 +1,87 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
+# Maven Toolchains Configuration
+
+From the [maven-toolchain-plugin documentation](https://maven.apache.org/plugins/maven-toolchains-plugin/usage.html):
+
+> A Toolchain is an object that Maven plugins can use to retrieve preconfigured tools 
+> (including location and other information).
+> With the jdk toolchain, for example, instead of being stuck with the JDK used to run Maven,
+> all plugins can use the same or other JDK instances without hardcoding absolute paths 
+> into the pom.xml and without configuring every plugin that require a path to JDK tools.  
+
+
+### Motivation
+
+Toolchains are used in different maven modules to ensure that the correct Java compiler version 
+is used when compiling source files.  This is because Datasketches Memory uses some JDK 
+version-specific APIs, which require different JDKs to compile correctly.
+
+### Toolchains template
+
+Your local environment requires toolchain entries for Java 8, 9 and 11 to build this project.  
+These can be found in a reference `toolchains.xml` template in the `tools` directory.
+Any maven commands used during development can be supplemented with: 
+`--toolchains tools/toolchains.xml`, without permanently modifying the local 
+`~/.m2/toolchains.xml` file.
+
+Alternatively, to avoid having to add this extra argument to every Maven command, 
+the toolchain template can be copied to your local maven `toolchains.xml`, 
+e.g. `~/.m2/toolchains.xml`.  If there is already a locally configured `toolchains.xml` file, 
+the requisite entries should be merged into the existing file if they do not already exist.
+
+### Environment variables
+
+The DataSketches Memory component is pure Java and requires the following JDKs to compile:
+
+- JDK8/Hotspot
+- JDK9/Hotspot
+- JDK11/Hotspot
+
+The following environment variables should be set as follows:
+
+| Environment variable              | Value                                 |
+| --------------------------------- | ------------------------------------- |
+| JAVA8_HOME                        |  Home directory for Java 8 (openJDK)  |
+| JAVA9_HOME                        |  Home directory for Java 9 (openJDK)  |
+| JAVA11_HOME                       |  Home directory for Java 11 (openJDK) |
+
+For example, if you are using [SDKMAN!](https://sdkman.io/), your environment 
+might be configured as follows:
+
+- JAVA8_HOME: `/Users/me/.sdkman/candidates/java/8.0.282.hs-adpt`
+- JAVA9_HOME: `/Users/me/.sdkman/candidates/java/9.0.4-open`
+- JAVA11_HOME: `/Users/me/.sdkman/candidates/java/11.0.10.hs-adpt`
+
+#### For MacOS or Linux variants
+Users can discover what JDKs have been loaded into their environment by using the following 
+command:
+
+    /usr/libexec/java_home -V
+
+### Eclipse configuration
+
+If you are an Eclipse user, you may need further configuration for your IDE to use the 
+appropriate JDK for each module - see the [Eclipse IDE Setup](eclipse.md).
+
+### IntelliJ configuration
+
+Similarly, if you are an IntelliJ user, you may need further configuration for your IDE to use the 
+appropriate JDK for each module - see the [IntelliJ IDE Setup](intellij.md).

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/maven.md
==============================================================================
--- dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/maven.md (added)
+++ dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/maven.md Thu Aug 19 22:18:24 2021
@@ -0,0 +1,59 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
+# Maven Configuration: Multi-Module Project
+
+This project is a multi-module Maven project. A multi-module Maven project consists of an 
+aggregator project (the `datasketches-memory-root` project), together with a set of submodules. 
+The aggregator's configuration is inherited by each submodule, thus reducing duplication.
+
+Datasketches Memory makes use of some features of the Java platform, for example, `Unsafe`, 
+which have evolved in Java versions 9 and above.   Therefore, a multi-module project allows us to 
+add support for later versions of Java by using independent Maven modules to target 
+platform-specific APIs.  For example, to deallocate references a `sun.misc.Cleaner` will be used 
+in Java8, but the `jdk.internal.ref.Cleaner` is used in Java 9.
+
+This project has been divided into the following submodules:
+
+* datasketches-memory-java8 (base version of the JVM that is currently supported)
+* datasketches-memory-java8-tests
+* datasketches-memory-java9 (Java9 equivalent of some platform specific classes in 
+datasketches-memory-java8)
+* datasketches-memory-java11 (Java11 equivalent of some platform specific classes in 
+datasketches-memory-java8)
+* datasketches-memory (JAR assembly, does not contain source files)
+* datasketches-memory-resources (Runs test suite against assembled JAR)
+
+### Artifact assembly
+
+The [Maven assembly plugin](https://maven.apache.org/plugins/maven-assembly-plugin/) builds all 
+artifacts for this project from the other modules within the project.  
+These modules are complementary and not standalone. 
+Therefore, they are not installed and downloaded independently by the end user.
+
+Instead, the Maven assembly plugin builds all jars, and hides the multi-module configuration 
+from the end user.
+
+The following jars are assembled by the `datasketches-memory` module:
+
+* datasketches-memory-X.Y.Z.jar The compiled main class files.
+* datasketches-memory-X.Y.Z-tests.jar The compiled test class files.
+* datasketches-memory-X.Y.Z-sources.jar The main source files.
+* datasketches-memory-X.Y.Z-test-sources.jar The test source files
+* datasketches-memory-X.Y.Z-javadoc.jar  The compressed Javadocs.

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/module-system.md
==============================================================================
--- dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/module-system.md (added)
+++ dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/module-system.md Thu Aug 19 22:18:24 2021
@@ -0,0 +1,106 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
+# Java Platform Module System (JPMS) For JDK 9+
+
+The [Java Platform Module System](https://openjdk.java.net/projects/jigsaw/spec/) defines a module 
+system for the Java Platform. For more documentation on the implementation, see 
+[JEP-261](https://openjdk.java.net/jeps/261).
+
+#### Reliable configuration 
+
+> Reliable configuration, to replace the brittle, error-prone class-path mechanism with a means 
+for program components 
+> to declare explicit dependences upon one another;
+
+This prevents ClassLoader errors such as `NoClassDefFoundError` that typically occur at runtime 
+and make applications less reliable.
+
+#### Strong encapsulation
+
+> Strong encapsulation, to allow a component to declare which of its APIs are accessible by other 
+components, and which are not;
+
+JDK internals are now strongly encapsulated, except for critical internal APIs such as 
+`sun.misc.Unsafe` (see [JEP-396](https://openjdk.java.net/jeps/396) and 
+[JEP-403](https://openjdk.java.net/jeps/403)).
+Datasketches Memory can no longer access these APIs by default, and requires explicit access.
+
+### Module declarations
+
+A module declaration is a java file (typically `module-info.java`) that explicitly defines a 
+dependency graph.
+
+#### org.apache.datasketches.memory
+
+In the `datasketches-memory-java9` maven submodule root, the following module declaration has 
+been added:
+
+```java
+module org.apache.datasketches.memory {
+    requires java.base;
+    requires java.logging;
+    requires jdk.unsupported;
+
+    exports org.apache.datasketches.memory;
+}
+```
+
+This declaration explicitly defines the dependencies for the `org.apache.datasketches.memory` module, as well as the 
+external API. The `org.apache.datasketches.memory.internal` package is now inaccessible to the end user, 
+providing better encapsulation. 
+
+### Compiler arguments
+
+Some dependencies are encapsulated by default, and this causes compilation to fail for 
+Java versions 9 and above.
+These dependencies can be made accessible at compile time through the use of the 
+`add-exports` compiler argument.
+This argument allows one module to access some of the unexported types of another module.  
+Datasketches Memory depends on several internal APIs and therefore requires special 
+exposition.
+
+For example, in order to compile the `datasketches-memory-java9` submodule, the following compiler 
+arguments are added to the Maven compiler plugin in the module's pom.xml file:
+
+```xml
+    <compilerArgs>
+        <arg>--add-exports</arg>
+        <arg>java.base/jdk.internal.ref=org.apache.datasketches.memory</arg>
+    </compilerArgs>
+```
+
+### Runtime arguments (only when allocating off-heap memory)
+
+When allocating off-heap memory using `WritableMemory.allocateDirect(...)`, 
+reflection is used by the datasketches memory component to access JVM internal class 
+fields and methods that do not have `public` visibility.  For JDK 9+, the JPMS
+requires that the user add additional JVM run-time arguments (`add-opens...`, which permit this reflection.
+
+Note that if the user has allocated off-heap memory using ByteBuffer.allocateDirect(...),
+the DataSketches memory component can still read and write to this memory without these `add-opens...` arguments.
+
+See the [usage instructions](usage-instructions.md) for more details.
+
+### JPMS and Java 8
+
+Java 8 does not support module declarations and the JPMS module system, and no additional
+runtime arguments are necessary.
+However, support is retained for Java 8 users by only including the compiled declaration 
+(`module-info.class`) in the `datasketches-memory` multi-release JAR for Java9 and above.

Added: dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/multi-release-jar.md
==============================================================================
--- dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/multi-release-jar.md (added)
+++ dev/datasketches/memory/2.0.0-RC1/apache-datasketches-memory-2.0.0-src/docs/multi-release-jar.md Thu Aug 19 22:18:24 2021
@@ -0,0 +1,53 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
+# Multi-Release JAR
+
+The `datasketches-memory` module assembles a multi-release (MR) JAR for release that consists of
+multiple Java-release-specific versions of compiled class files.
+
+From [JEP-238](https://openjdk.java.net/jeps/238):
+
+> Third party libraries and frameworks typically support a range of Java platform versions, 
+generally going several versions back. As a consequence they often do not take advantage of 
+language or API features available in newer releases since it is difficult to express conditional 
+platform dependencies, which generally involves reflection, or to distribute different library 
+artifacts for different platform versions.
+
+The next case describes the challenge in supporting newer versions of Java for libraries
+such as DataSketches Memory:
+
+> Some libraries and frameworks, furthermore, use internal APIs of the JDK that will be made 
+inaccessible in Java 9 when module boundaries are strictly enforced. This also creates a 
+disincentive to support new platform versions when there are public, supported API 
+replacements for such internal APIs.
+
+### Assembly
+
+The Maven assembly plugin uses the Maven submodules during the `package` phase.  
+The following maven submodules to source the compiled class files for the MR-JAR:
+
+![MR-JAR maven module mapping](img/mr-jar-sources.png "MR-JAR maven module mapping")
+
+### Manifest
+
+The Maven assembly plugin copies version specific class files into JAR manifest META-INF 
+directory, as shown in the diagram below:
+
+![MR-JAR manifest file contents](img/mr-jar-manifest.png "MR-JAR manifest file contents")



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org