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/09/01 15:48:18 UTC
[datasketches-memory] 09/10: Add checks to verify script packaged
JAR
This is an automated email from the ASF dual-hosted git repository.
dcromberge pushed a commit to branch single-build-script
in repository https://gitbox.apache.org/repos/asf/datasketches-memory.git
commit cbaff4525cf0d2dd0cb5dc3cfd3d3959d3fde768
Author: David Cromberge <dc...@apache.org>
AuthorDate: Wed Sep 1 15:37:33 2021 +0100
Add checks to verify script packaged JAR
---
.../memory/internal/NioBitsFields.java | 2 +-
tools/scripts/CheckMemoryJar.java | 99 ++++++++++++++++++++++
tools/scripts/compile-package-jar.sh | 46 +++++++---
3 files changed, 136 insertions(+), 11 deletions(-)
diff --git a/datasketches-memory-java9/src/main/java/org/apache/datasketches/memory/internal/NioBitsFields.java b/datasketches-memory-java9/src/main/java/org/apache/datasketches/memory/internal/NioBitsFields.java
index a2771bf..56f1e20 100644
--- a/datasketches-memory-java9/src/main/java/org/apache/datasketches/memory/internal/NioBitsFields.java
+++ b/datasketches-memory-java9/src/main/java/org/apache/datasketches/memory/internal/NioBitsFields.java
@@ -24,7 +24,7 @@ package org.apache.datasketches.memory.internal;
* Some field names in the VM internal class have 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
+ * For more information, see: https://openjdk.java.net/jeps/238
*/
class NioBitsFields {
static String COUNT_FIELD_NAME = "count";
diff --git a/tools/scripts/CheckMemoryJar.java b/tools/scripts/CheckMemoryJar.java
new file mode 100644
index 0000000..8504286
--- /dev/null
+++ b/tools/scripts/CheckMemoryJar.java
@@ -0,0 +1,99 @@
+/*
+ * 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.tools.scripts;
+
+import java.io.File;
+
+import org.apache.datasketches.memory.MapHandle;
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMemory;
+
+public class CheckMemoryJar {
+
+ public void checkHeapWritableMemory() {
+ try {
+ String str = "1 - Heap WritableMemory Successful";
+ WritableMemory mem = WritableMemory.allocate(2 * str.length());
+ writeReadAndPrintString(mem, str);
+ } catch (Exception ex) {
+ exitOnError("Heap Writable Memory", ex);
+ }
+ }
+
+ public void checkAllocateDirect() throws Exception {
+ try {
+ String str = "2 - Allocate Direct Successful";
+ WritableHandle wh = WritableMemory.allocateDirect(2 * str.length());
+ WritableMemory wmem = wh.getWritable();
+ writeReadAndPrintString(wmem, str);
+ wh.close();
+ } catch (Exception ex) {
+ exitOnError("Allocate Direct", ex);
+ }
+ }
+
+ public void checkMap(String mappedFilePath) throws Exception {
+ try {
+ String str = "3 - Memory Map Successful";
+ File file = new File(mappedFilePath);
+ MapHandle mh = Memory.map(file);
+ Memory mem = mh.get();
+ mh.close();
+ println(str);
+ } catch (Exception ex) {
+ exitOnError("Memory Map", ex);
+ }
+ }
+
+ /**********************/
+
+ private static void writeReadAndPrintString(WritableMemory wmem, String str) {
+ int len = str.length();
+ char[] cArr1 = str.toCharArray();
+ wmem.putCharArray(0, cArr1, 0, len);
+ char[] cArr2 = new char[len];
+ wmem.getCharArray(0, cArr2, 0, len);
+ String s2 = String.valueOf(cArr2);
+ println(s2);
+ }
+
+ private static void exitOnError(String checkName, Exception ex){
+ println(checkName + " check failed. Error: " + ex.toString());
+ System.exit(1);
+ }
+
+ public static void main(final String[] args) throws Exception {
+ if (args.length < 1) {
+ System.out.println("Please provide the full path to the memory mapped file!");
+ System.exit(1);
+ }
+
+ String mappedFilePath = args[0];
+ CheckMemoryJar check = new CheckMemoryJar();
+ check.checkHeapWritableMemory();
+ check.checkAllocateDirect();
+ check.checkMap(mappedFilePath);
+ println("");
+ println("All checks passed.");
+ }
+
+ static void println(Object obj) { System.out.println(obj.toString()); }
+}
diff --git a/tools/scripts/compile-package-jar.sh b/tools/scripts/compile-package-jar.sh
index 42163fb..a63d4be 100755
--- a/tools/scripts/compile-package-jar.sh
+++ b/tools/scripts/compile-package-jar.sh
@@ -38,14 +38,14 @@ if [ -z "$1" ]; then echo "Missing JDK home"; exit 1; fi
if [ -z "$2" ]; then echo "Missing Git Tag"; exit 1; fi
if [ -z "$3" ]; then echo "Missing project.basedir"; exit 1; fi
-#### Extract JDKHome and Version from input parameters ####
+#### Extract JDKHome, Version and ProjectBaseDir from input parameters ####
JDKHome=$1
GitTag=$2
+ProjectBaseDir=$3 #this must be an absolute path
#### Setup absolute directory references ####
-ProjectBaseDir=$3 #this must be an absolute path
-ScriptsDir=${ProjectBaseDir}/tools/scripts/
ProjectArtifactId="memory"
+ScriptsDir=${ProjectBaseDir}/tools/scripts/
#### Initialise path dependent variables ####
OutputDir=target
@@ -53,6 +53,7 @@ OutputJar=${OutputDir}/org.apache.datasketches.memory-${GitTag}.jar
PackageDir=${OutputDir}/package
PackageSrc=${PackageDir}/src
+PackageTests=${PackageDir}/test-classes
PackageContents=${PackageDir}/contents
PackageMeta=${PackageContents}/META-INF
PackageManifest=${PackageMeta}/MANIFEST.MF
@@ -97,8 +98,10 @@ fi
#### Cleanup and setup output directories ####
echo
echo "--- CLEAN & COMPILE ---"
-rm -r $OutputDir
+if [ -d "$OutputDir" ]; then rm -r $OutputDir; fi
+mkdir -p $OutputDir
mkdir -p $PackageSrc
+mkdir -p $PackageTests
mkdir -p $PackageContents
mkdir -p $PackageMeta
@@ -117,7 +120,7 @@ EOF
echo "$($ScriptsDir/getGitProperties.sh $ProjectBaseDir $ProjectArtifactId $GitTag)" >> $PackageManifest
#### Copy base tree to target/src
-rsync -a $MemoryJava8Src $PackageSrc
+rsync -a -I $MemoryJava8Src $PackageSrc
# version too low
if [[ $JavaVersion -lt 8 ]]; then
@@ -132,7 +135,7 @@ elif [[ $JavaVersion -lt 9 ]]; then
elif [[ $JavaVersion -lt 11 ]]; then
echo "Compiling with JDK version $JavaVersion..."
#### Copy java 9 src tree to target/src, overwriting replacements
- rsync -a $MemoryJava9Src $PackageSrc
+ rsync -a -I $MemoryJava9Src $PackageSrc
# Compile with JPMS exports
${Javac_} \
--add-exports java.base/jdk.internal.ref=org.apache.datasketches.memory \
@@ -143,9 +146,9 @@ elif [[ $JavaVersion -lt 11 ]]; then
elif [[ $JavaVersion -lt 14 ]]; then
echo "Compiling with JDK version $JavaVersion..."
#### Copy java 9 src tree to target/src, overwriting replacements
- rsync -a $MemoryJava9Src $PackageSrc
+ rsync -a -I $MemoryJava9Src $PackageSrc
#### Copy java 11 src tree to target/src, overwriting replacements
- rsync -a $MemoryJava11Src $PackageSrc
+ rsync -a -I $MemoryJava11Src $PackageSrc
# Compile with JPMS exports
${Javac_} \
--add-exports java.base/jdk.internal.ref=org.apache.datasketches.memory \
@@ -161,7 +164,30 @@ echo "--- JAR ---"
echo "Building JAR from ${PackageContents}..."
${Jar_} cf $OutputJar -C $PackageContents .
echo
-echo "--- JAR CONTENTS ---"
-${Jar_} tf ${OutputJar}
+# Uncomment for debugging purposes
+# echo "--- JAR CONTENTS ---"
+# ${Jar_} tf ${OutputJar}
+# echo
+echo "--- RUN JAR CHECKS ---"
+echo
+MemoryMapFile=$ScriptsDir/CheckMemoryJar.java # Memory map the textual source code for the JAR checks
+
+if [[ $JavaVersion -eq 8 ]]; then
+ ${Javac_} -cp $OutputJar -d $PackageTests $(find $ScriptsDir -name '*.java')
+
+ ${Java_} -cp $PackageTests:$OutputJar org.apache.datasketches.memory.tools.scripts.CheckMemoryJar $MemoryMapFile
+else
+ ${Javac_} \
+ --add-modules org.apache.datasketches.memory \
+ -p "$OutputJar" -d $PackageTests $(find $ScriptsDir -name '*.java')
+
+ ${Java_} \
+ --add-modules org.apache.datasketches.memory \
+ --add-exports java.base/jdk.internal.misc=org.apache.datasketches.memory \
+ --add-exports java.base/jdk.internal.ref=org.apache.datasketches.memory \
+ --add-opens java.base/java.nio=org.apache.datasketches.memory \
+ --add-opens java.base/sun.nio.ch=org.apache.datasketches.memory \
+ -p $OutputJar -cp $PackageTests org.apache.datasketches.memory.tools.scripts.CheckMemoryJar $MemoryMapFile
+fi
echo
echo "Successfully built ${OutputJar}"
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org