You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bs...@apache.org on 2020/01/23 23:03:18 UTC

[geode] branch feature/GEODE-7656 created (now be3c3cd)

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

bschuchardt pushed a change to branch feature/GEODE-7656
in repository https://gitbox.apache.org/repos/asf/geode.git.


      at be3c3cd  GEODE-7656: OOME in CoreOnlyUsesMembershipAPIArchUnitTest > cacheClassesDoNotUseMembershipInternals

This branch includes the following new commits:

     new be3c3cd  GEODE-7656: OOME in CoreOnlyUsesMembershipAPIArchUnitTest > cacheClassesDoNotUseMembershipInternals

The 1 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.



[geode] 01/01: GEODE-7656: OOME in CoreOnlyUsesMembershipAPIArchUnitTest > cacheClassesDoNotUseMembershipInternals

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

bschuchardt pushed a commit to branch feature/GEODE-7656
in repository https://gitbox.apache.org/repos/asf/geode.git

commit be3c3cdaa66727a6a1cccab687f908d2f842ccef
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Thu Jan 23 15:01:51 2020 -0800

    GEODE-7656: OOME in CoreOnlyUsesMembershipAPIArchUnitTest > cacheClassesDoNotUseMembershipInternals
    
    The ArchUnit class file importer's javadocs don't mention it but you
    can't examine just a single package using a ClassFileImporter.  It
    always walks the subpackages of any package you give it and includes all
    of the classes found there.
    
    I've split off the "org.apache.geode" check into its own method and have
    added a custom ImportOption that uses a Pattern to reject anything in a
    sub-package of org.apache.geode or in the membership package (which is
    needed for the API check).  That reduced the number of classes being
    examined from over 7700 to less than 300.
---
 .../api/CoreOnlyUsesMembershipAPIArchUnitTest.java | 49 ++++++++++++++++++----
 1 file changed, 41 insertions(+), 8 deletions(-)

diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/api/CoreOnlyUsesMembershipAPIArchUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/api/CoreOnlyUsesMembershipAPIArchUnitTest.java
index 6744752..d79714e 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/api/CoreOnlyUsesMembershipAPIArchUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/api/CoreOnlyUsesMembershipAPIArchUnitTest.java
@@ -17,8 +17,13 @@ package org.apache.geode.distributed.internal.membership.api;
 import static com.tngtech.archunit.core.domain.JavaClass.Predicates.resideInAPackage;
 import static com.tngtech.archunit.library.Architectures.layeredArchitecture;
 
+import java.util.regex.Pattern;
+
 import com.tngtech.archunit.core.domain.JavaClasses;
 import com.tngtech.archunit.core.importer.ClassFileImporter;
+import com.tngtech.archunit.core.importer.ImportOption;
+import com.tngtech.archunit.core.importer.ImportOptions;
+import com.tngtech.archunit.core.importer.Location;
 import com.tngtech.archunit.lang.ArchRule;
 import org.junit.Test;
 
@@ -33,7 +38,7 @@ public class CoreOnlyUsesMembershipAPIArchUnitTest {
 
   @Test
   public void distributedAndInternalClassesDoNotUseMembershipInternals() {
-    JavaClasses importedClasses = new ClassFileImporter().importPackages(
+    JavaClasses importedClasses = getClassFileImporter().importPackages(
         "org.apache.geode.distributed..",
         "org.apache.geode.internal..");
 
@@ -41,9 +46,30 @@ public class CoreOnlyUsesMembershipAPIArchUnitTest {
   }
 
   @Test
-  public void cacheClassesDoNotUseMembershipInternals() {
-    JavaClasses importedClasses = new ClassFileImporter().importPackages(
+  public void geodeClassesDoNotUseMembershipInternals() {
+    ClassFileImporter classFileImporter = getClassFileImporter();
+    // create an ImportOption that only allows org.apache.geode classes and
+    // membership classes. Prepackaged ImportOptions always cause a package's
+    // subpackages to be walked with walkFileTree so you can't examine a single
+    // high-level pachage like org.apache.geode without examining its subpackages.
+    classFileImporter = classFileImporter.withImportOption(new ImportOption() {
+      final Pattern matcher = Pattern.compile(".*/org/apache/geode/[a-zA-z0-9]+/.*");
+
+      @Override
+      public boolean includes(Location location) {
+        return location.contains("org/apache/geode/distributed/internal/membership")
+            || !location.matches(matcher);
+      }
+    });
+    JavaClasses importedClasses = classFileImporter.importPackages(
         "org.apache.geode",
+        "org.apache.geode.distributed.internal.membership..");
+    checkMembershipAPIUse(importedClasses);
+  }
+
+  @Test
+  public void cacheClassesDoNotUseMembershipInternals() {
+    JavaClasses importedClasses = getClassFileImporter().importPackages(
         "org.apache.geode.cache..",
         "org.apache.geode.distributed.internal.membership..");
 
@@ -52,7 +78,7 @@ public class CoreOnlyUsesMembershipAPIArchUnitTest {
 
   @Test
   public void managementClassesDoNotUseMembershipInternals() {
-    JavaClasses importedClasses = new ClassFileImporter().importPackages(
+    JavaClasses importedClasses = getClassFileImporter().importPackages(
         "org.apache.geode.management..",
         "org.apache.geode.admin..",
         "org.apache.geode.distributed.internal.membership..");
@@ -62,7 +88,7 @@ public class CoreOnlyUsesMembershipAPIArchUnitTest {
 
   @Test
   public void securityClassesDoNotUseMembershipInternals() {
-    JavaClasses importedClasses = new ClassFileImporter().importPackages(
+    JavaClasses importedClasses = getClassFileImporter().importPackages(
         "org.apache.geode.security..",
         "org.apache.geode.distributed.internal.membership..");
 
@@ -71,7 +97,7 @@ public class CoreOnlyUsesMembershipAPIArchUnitTest {
 
   @Test
   public void pdxClassesDoNotUseMembershipInternals() {
-    JavaClasses importedClasses = new ClassFileImporter().importPackages(
+    JavaClasses importedClasses = getClassFileImporter().importPackages(
         "org.apache.geode.pdx..",
         "org.apache.geode.distributed.internal.membership..");
 
@@ -80,7 +106,7 @@ public class CoreOnlyUsesMembershipAPIArchUnitTest {
 
   @Test
   public void exampleClassesDoNotUseMembershipInternals() {
-    JavaClasses importedClasses = new ClassFileImporter().importPackages(
+    JavaClasses importedClasses = getClassFileImporter().importPackages(
         "org.apache.geode.examples..",
         "org.apache.geode.distributed.internal.membership..");
 
@@ -89,7 +115,7 @@ public class CoreOnlyUsesMembershipAPIArchUnitTest {
 
   @Test
   public void miscCoreClassesDoNotUseMembershipInternals() {
-    JavaClasses importedClasses = new ClassFileImporter().importPackages(
+    JavaClasses importedClasses = getClassFileImporter().importPackages(
         "org.apache.geode.alerting..",
         "org.apache.geode.compression..",
         "org.apache.geode.datasource..",
@@ -112,4 +138,11 @@ public class CoreOnlyUsesMembershipAPIArchUnitTest {
 
     myRule.check(importedClasses);
   }
+
+  private ClassFileImporter getClassFileImporter() {
+    return new ClassFileImporter(
+        new ImportOptions().with(ImportOption.Predefined.DO_NOT_INCLUDE_ARCHIVES));
+  }
+
+
 }