You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by if...@apache.org on 2020/04/16 11:10:07 UTC

[cassandra-in-jvm-dtest-api] branch master updated (e620eb3 -> d59833f)

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

ifesdjeen pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/cassandra-in-jvm-dtest-api.git.


    from e620eb3  Reformat code according to Apache Cassandra styleguide
     new b4482d8  Add information about release process
     new ced1ff7  NodeToolResult was modified on trunk to produce better errors and to allow Any style message checks for errors, add them here.
     new 29d055b  Add information about publishing snapshots
     new d59833f  Make shared class filter for InstanceClassLoader pluggable

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGELOG.txt                                      |  4 ++
 README.md                                          | 53 ++++++++++++++++++++
 .../cassandra/distributed/api/NodeToolResult.java  | 58 ++++++++++++++++++++--
 .../distributed/shared/InstanceClassLoader.java    | 41 +++++++++------
 4 files changed, 137 insertions(+), 19 deletions(-)
 create mode 100644 CHANGELOG.txt


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


[cassandra-in-jvm-dtest-api] 04/04: Make shared class filter for InstanceClassLoader pluggable

Posted by if...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ifesdjeen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cassandra-in-jvm-dtest-api.git

commit d59833f2223a85a4dc3f4ea597384588d5d008df
Author: David Capwell <dc...@gmail.com>
AuthorDate: Fri Apr 10 15:27:56 2020 -0700

    Make shared class filter for InstanceClassLoader pluggable
    
    Patch by David Capwell; reviewed by Jon Meredith and Alex Petrov for CASSANDRA-15713.
---
 CHANGELOG.txt                                      |  3 +-
 .../distributed/shared/InstanceClassLoader.java    | 41 ++++++++++++++--------
 2 files changed, 29 insertions(+), 15 deletions(-)

diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index bb3d907..86a9490 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,3 +1,4 @@
 # 0.0.2
 
-CASSANDRA-15684: improve error codes in NodeToolResult to produce better errors and to allow Any style message checks
+CASSANDRA-15684: Improve error codes in NodeToolResult to produce better errors and to allow Any style message checks
+CASSANDRA-15713: Make shared class filter for InstanceClassLoader pluggable
diff --git a/src/main/java/org/apache/cassandra/distributed/shared/InstanceClassLoader.java b/src/main/java/org/apache/cassandra/distributed/shared/InstanceClassLoader.java
index 4f2fc8a..51cd14a 100644
--- a/src/main/java/org/apache/cassandra/distributed/shared/InstanceClassLoader.java
+++ b/src/main/java/org/apache/cassandra/distributed/shared/InstanceClassLoader.java
@@ -26,33 +26,46 @@ import java.util.function.Predicate;
 
 public class InstanceClassLoader extends URLClassLoader
 {
-    private static final Predicate<String> sharePackage = name ->
-                                                          name.startsWith("org.apache.cassandra.distributed.api.")
-                                                          || name.startsWith("org.apache.cassandra.distributed.shared.")
-                                                          || name.startsWith("sun.")
-                                                          || name.startsWith("oracle.")
-                                                          || name.startsWith("com.intellij.")
-                                                          || name.startsWith("com.sun.")
-                                                          || name.startsWith("com.oracle.")
-                                                          || name.startsWith("java.")
-                                                          || name.startsWith("javax.")
-                                                          || name.startsWith("jdk.")
-                                                          || name.startsWith("netscape.")
-                                                          || name.startsWith("org.xml.sax.");
+    private static final Predicate<String> DEFAULT_SHARED_PACKAGES =
+              name ->
+              name.startsWith("org.apache.cassandra.distributed.api.")
+              || name.startsWith("org.apache.cassandra.distributed.shared.")
+              || name.startsWith("sun.")
+              || name.startsWith("oracle.")
+              || name.startsWith("com.intellij.")
+              || name.startsWith("com.sun.")
+              || name.startsWith("com.oracle.")
+              || name.startsWith("java.")
+              || name.startsWith("javax.")
+              || name.startsWith("jdk.")
+              || name.startsWith("netscape.")
+              || name.startsWith("org.xml.sax.");
 
     private volatile boolean isClosed = false;
     private final URL[] urls;
     private final int generation; // used to help debug class loader leaks, by helping determine which classloaders should have been collected
     private final int id;
     private final ClassLoader sharedClassLoader;
+    private final Predicate<String> loadShared;
 
     public InstanceClassLoader(int generation, int id, URL[] urls, ClassLoader sharedClassLoader)
     {
+        this(generation, id, urls, sharedClassLoader, DEFAULT_SHARED_PACKAGES);
+    }
+
+    public InstanceClassLoader(int generation, int id, URL[] urls, ClassLoader sharedClassLoader, Predicate<String> loadShared)
+    {
         super(urls, null);
         this.urls = urls;
         this.sharedClassLoader = sharedClassLoader;
         this.generation = generation;
         this.id = id;
+        this.loadShared = loadShared == null ? DEFAULT_SHARED_PACKAGES : loadShared;
+    }
+
+    public static Predicate<String> getDefaultLoadSharedFilter()
+    {
+        return DEFAULT_SHARED_PACKAGES;
     }
 
     public int getClusterGeneration()
@@ -68,7 +81,7 @@ public class InstanceClassLoader extends URLClassLoader
     @Override
     public Class<?> loadClass(String name) throws ClassNotFoundException
     {
-        if (sharePackage.test(name))
+        if (loadShared.test(name))
             return sharedClassLoader.loadClass(name);
 
         return loadClassInternal(name);


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


[cassandra-in-jvm-dtest-api] 03/04: Add information about publishing snapshots

Posted by if...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ifesdjeen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cassandra-in-jvm-dtest-api.git

commit 29d055b7cffc66a852505660930c980c185138a1
Author: Alex Petrov <ol...@gmail.com>
AuthorDate: Thu Apr 16 12:51:19 2020 +0200

    Add information about publishing snapshots
---
 README.md | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/README.md b/README.md
index 665d904..20e24ee 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,13 @@
 
 Shared API package for in-JVM distributed tests.
 
+# Publishing snapshot
+
+```
+mvn versions:set -DnewVersion=0.0.2-`git rev-parse --short HEAD`-SNAPSHOT
+mvn deploy
+```
+
 # Releasing
 
 1. Prepare the release:


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


[cassandra-in-jvm-dtest-api] 01/04: Add information about release process

Posted by if...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ifesdjeen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cassandra-in-jvm-dtest-api.git

commit b4482d8f657d6fb70fbc407ef2542d10b9772fc6
Author: Alex Petrov <ol...@gmail.com>
AuthorDate: Thu Apr 16 12:26:34 2020 +0200

    Add information about release process
---
 README.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/README.md b/README.md
index 909fd40..665d904 100644
--- a/README.md
+++ b/README.md
@@ -2,3 +2,49 @@
 
 Shared API package for in-JVM distributed tests.
 
+# Releasing
+
+1. Prepare the release:
+
+```
+mvn release:clean
+mvn release:prepare
+mvn release:perform
+```
+
+2. Close staging repository: https://repository.apache.org/#stagingRepositories
+
+3. Issue a vote on developers mailing list. Add your GPG key signature, release SHA, and staged artifacts to release information.
+
+## Additional resources:
+
+Parent pom location: https://maven.apache.org/pom/asf/
+Maven distribution docs: http://www.apache.org/dev/publishing-maven-artifacts.html
+Creating a new reposotory: https://selfserve.apache.org/
+
+## GPG Key
+
+To generate key, run:
+
+```
+gpg --full-gen-key
+```
+
+To be able to sign releases with this key, make sure your key is:
+
+  * pushed to http://pool.sks-keyservers.net/
+
+```
+gpg --list-sigs "<YOUR_NAME>"
+gpg --verbose --send-keys --keyserver hkps://hkps.pool.sks-keyservers.net <YOUR_KEY_IDENTIFIER_HERE>
+# to test if it has worked:
+gpg --verbose --recv-keys --keyserver hkps://hkps.pool.sks-keyservers.net <YOUR_KEY_IDENTIFIER_HERE>
+```
+
+  * added to KEYS file
+
+```
+svn co --depth files https://dist.apache.org/repos/dist/release/cassandra/ release
+(gpg --list-sigs "<YOUR_NAME>" && gpg --armor --export "<YOUR_NAME>") >> KEYS
+svn commit KEYS -m "Add <YOUR NAME>'s key for releases" # or ask some PMC to do this for you by opening CASSANDRA jira, like this one: https://issues.apache.org/jira/browse/CASSANDRA-15534
+```
\ No newline at end of file


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


[cassandra-in-jvm-dtest-api] 02/04: NodeToolResult was modified on trunk to produce better errors and to allow Any style message checks for errors, add them here.

Posted by if...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ifesdjeen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cassandra-in-jvm-dtest-api.git

commit ced1ff77e6353d9d08f3e3d209a54d66899e3696
Author: David Capwell <dc...@gmail.com>
AuthorDate: Thu Apr 2 11:51:39 2020 -0700

    NodeToolResult was modified on trunk to produce better errors and to allow Any style message checks for errors, add them here.
    
    Patch by David Capwell; reviewed by Benjamin Lerer and Alex Petrov for CASSANDRA-15684.
---
 CHANGELOG.txt                                      |  3 ++
 .../cassandra/distributed/api/NodeToolResult.java  | 58 ++++++++++++++++++++--
 2 files changed, 56 insertions(+), 5 deletions(-)

diff --git a/CHANGELOG.txt b/CHANGELOG.txt
new file mode 100644
index 0000000..bb3d907
--- /dev/null
+++ b/CHANGELOG.txt
@@ -0,0 +1,3 @@
+# 0.0.2
+
+CASSANDRA-15684: improve error codes in NodeToolResult to produce better errors and to allow Any style message checks
diff --git a/src/main/java/org/apache/cassandra/distributed/api/NodeToolResult.java b/src/main/java/org/apache/cassandra/distributed/api/NodeToolResult.java
index 8b17c3a..2e5c5f0 100644
--- a/src/main/java/org/apache/cassandra/distributed/api/NodeToolResult.java
+++ b/src/main/java/org/apache/cassandra/distributed/api/NodeToolResult.java
@@ -18,10 +18,14 @@
 
 package org.apache.cassandra.distributed.api;
 
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 import javax.management.Notification;
 
 import org.apache.cassandra.distributed.shared.AssertUtils;
@@ -70,20 +74,29 @@ public class NodeToolResult
     {
         public Asserts success()
         {
-            AssertUtils.assertEquals("nodetool command " + commandAndArgs[0] + " was not successful", 0, rc);
+            if (rc != 0)
+                fail("was not successful");
             return this;
         }
 
         public Asserts failure()
         {
-            AssertUtils.assertNotEquals("nodetool command " + commandAndArgs[0] + " was successful but not expected to be", 0, rc);
+            if (rc == 0)
+                fail("was successful but not expected to be");
             return this;
         }
 
         public Asserts errorContains(String msg)
         {
+            return errorContainsAny(msg);
+        }
+
+        public Asserts errorContainsAny(String... messages)
+        {
+            AssertUtils.assertNotEquals("no error messages defined to check against", 0, messages.length);
             AssertUtils.assertNotNull("No exception was found but expected one", error);
-            AssertUtils.assertTrue("Error message '" + error.getMessage() + "' does not contain '" + msg + "'", error.getMessage().contains(msg));
+            if (!Stream.of(messages).anyMatch(msg -> error.getMessage().contains(msg)))
+                fail("Error message '" + error.getMessage() + "' does not contain any of " + Arrays.toString(messages));
             return this;
         }
 
@@ -98,7 +111,7 @@ public class NodeToolResult
                     return this;
                 }
             }
-            AssertUtils.fail("Unable to locate message " + msg + " in notifications: " + notifications);
+            fail("Unable to locate message " + msg + " in notifications: " + NodeToolResult.toString(notifications));
             return this; // unreachable
         }
 
@@ -117,9 +130,44 @@ public class NodeToolResult
                     }
                 }
             }
-            AssertUtils.fail("Unable to locate message '" + msg + "' in notifications: " + notifications);
+            fail("Unable to locate message '" + msg + "' in notifications: " + NodeToolResult.toString(notifications));
             return this; // unreachable
         }
+
+        private void fail(String message)
+        {
+            StringBuilder sb = new StringBuilder();
+            sb.append("nodetool command ").append(Arrays.toString(commandAndArgs)).append(" ").append(message).append("\n");
+            sb.append("Notifications:\n");
+            for (Notification n : notifications)
+                sb.append(NodeToolResult.toString(n)).append("\n");
+            if (error != null)
+                sb.append("Error:\n").append(getStackTraceAsString(error)).append("\n");
+            throw new AssertionError(sb.toString());
+        }
+    }
+
+    private static String getStackTraceAsString(Throwable throwable) {
+        StringWriter stringWriter = new StringWriter();
+        throwable.printStackTrace(new PrintWriter(stringWriter));
+        return stringWriter.toString();
+    }
+
+    private static String toString(Collection<Notification> notifications)
+    {
+        return notifications.stream().map(NodeToolResult::toString).collect(Collectors.joining(", "));
+    }
+
+    private static String toString(Notification notification)
+    {
+        ProgressEventType type = ProgressEventType.values()[notificationType(notification)];
+        String msg = notification.getMessage();
+        Object src = notification.getSource();
+        return "Notification{" +
+               "type=" + type +
+               ", src=" + src +
+               ", message=" + msg +
+               "}";
     }
 
     private static int notificationType(Notification n)


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