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:11 UTC
[cassandra-in-jvm-dtest-api] 04/04: Make shared class filter for
InstanceClassLoader pluggable
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