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

bschuchardt pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new 9f6eca3  GEODE-5183 require toData/fromData methods to correspond to a 
known version
9f6eca3 is described below

commit 9f6eca31659560a9b34f952b5465ee844c8a66a3
Author: Bruce Schuchardt <[email protected]>
AuthorDate: Thu May 10 08:54:07 2018 -0700

    GEODE-5183 require toData/fromData methods to correspond to a known version
    
    Methods beginning with toData or fromData in DataSerializable classes
    must now correspond to a valid Version or AnalyzeSerializablesJUnitTest
    will reject them.  I've renamed a few methods and adjusted
    sanctionedDataSerializables.txt to remove them (fromDataProblem,
    fromData662)
    
    This closes #1928
---
 .../geode/distributed/internal/StartupMessage.java |  6 ++--
 .../internal/StartupResponseMessage.java           |  9 ------
 .../geode/internal/InternalInstantiator.java       | 12 ++++---
 .../cache/persistence/DiskInitFileParser.java      |  2 +-
 .../cache/persistence/PersistentMemberID.java      |  2 +-
 .../geode/codeAnalysis/CompiledClassUtils.java     | 37 +++++++++++++++++++---
 .../codeAnalysis/sanctionedDataSerializables.txt   | 12 +++----
 7 files changed, 48 insertions(+), 32 deletions(-)

diff --git 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupMessage.java
 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupMessage.java
index 2d326e8..fca3f4e 100644
--- 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupMessage.java
+++ 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupMessage.java
@@ -364,7 +364,7 @@ public class StartupMessage extends 
HighPriorityDistributionMessage implements A
   /**
    * Notes a problem that occurs while invoking {@link #fromData}.
    */
-  private void fromDataProblem(String s) {
+  private void recordFromDataProblem(String s) {
     if (this.fromDataProblems == null) {
       this.fromDataProblems = new StringBuffer();
     }
@@ -392,7 +392,7 @@ public class StartupMessage extends 
HighPriorityDistributionMessage implements A
           InternalDataSerializer.register(cName, false, null, null, id);
         }
       } catch (IllegalArgumentException ex) {
-        fromDataProblem(
+        recordFromDataProblem(
             
LocalizedStrings.StartupMessage_ILLEGALARGUMENTEXCEPTION_WHILE_REGISTERING_A_DATASERIALIZER_0
                 .toLocalizedString(ex));
       }
@@ -409,7 +409,7 @@ public class StartupMessage extends 
HighPriorityDistributionMessage implements A
           InternalInstantiator.register(instantiatorClassName, 
instantiatedClassName, id, false);
         }
       } catch (IllegalArgumentException ex) {
-        fromDataProblem(
+        recordFromDataProblem(
             
LocalizedStrings.StartupMessage_ILLEGALARGUMENTEXCEPTION_WHILE_REGISTERING_AN_INSTANTIATOR_0
                 .toLocalizedString(ex));
       }
diff --git 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseMessage.java
 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseMessage.java
index bff2d5e..80df0f3 100644
--- 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseMessage.java
+++ 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseMessage.java
@@ -193,15 +193,6 @@ public class StartupResponseMessage extends 
HighPriorityDistributionMessage
     return STARTUP_RESPONSE_MESSAGE;
   }
 
-  private void fromDataProblem(String s) {
-    if (this.fromDataProblems == null) {
-      this.fromDataProblems = new StringBuffer();
-    }
-
-    this.fromDataProblems.append(s);
-    this.fromDataProblems.append(System.getProperty("line.separator", "\n"));
-  }
-
   @Override
   public Version[] getSerializationVersions() {
     return null;
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/InternalInstantiator.java 
b/geode-core/src/main/java/org/apache/geode/internal/InternalInstantiator.java
index fea2c4c..a2a46db 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/InternalInstantiator.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/InternalInstantiator.java
@@ -889,7 +889,7 @@ public class InternalInstantiator {
       DataSerializer.writeObject(this.eventId, out);
     }
 
-    private void fromDataProblem(String s) {
+    private void recordFromDataProblem(String s) {
       if (this.fromDataProblems == null) {
         this.fromDataProblems = new StringBuffer();
       }
@@ -913,8 +913,9 @@ public class InternalInstantiator {
               
InternalDataSerializer.getCachedClass(this.instantiatorClassName); // fix for 
bug
                                                                                
  // 41206
         } catch (ClassNotFoundException ex) {
-          
fromDataProblem(LocalizedStrings.InternalInstantiator_COULD_NOT_LOAD_INSTANTIATOR_CLASS_0
-              .toLocalizedString(ex));
+          recordFromDataProblem(
+              
LocalizedStrings.InternalInstantiator_COULD_NOT_LOAD_INSTANTIATOR_CLASS_0
+                  .toLocalizedString(ex));
           this.instantiatorClass = null;
         }
         try {
@@ -922,8 +923,9 @@ public class InternalInstantiator {
               
InternalDataSerializer.getCachedClass(this.instantiatedClassName); // fix for 
bug
                                                                                
  // 41206
         } catch (ClassNotFoundException ex) {
-          
fromDataProblem(LocalizedStrings.InternalInstantiator_COULD_NOT_LOAD_INSTANTIATED_CLASS_0
-              .toLocalizedString(ex));
+          recordFromDataProblem(
+              
LocalizedStrings.InternalInstantiator_COULD_NOT_LOAD_INSTANTIATED_CLASS_0
+                  .toLocalizedString(ex));
           this.instantiatedClass = null;
         }
       }
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileParser.java
 
b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileParser.java
index 177274a..56bc038 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileParser.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileParser.java
@@ -584,7 +584,7 @@ public class DiskInitFileParser {
     DataInputStream dis = new DataInputStream(bais);
     PersistentMemberID result = new PersistentMemberID();
     if (Version.GFE_70.compareTo(gfversion) > 0) {
-      result.fromData662(dis);
+      result._fromData662(dis);
     } else {
       InternalDataSerializer.invokeFromData(result, dis);
     }
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/PersistentMemberID.java
 
b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/PersistentMemberID.java
index 7baae21..64d3c08 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/PersistentMemberID.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/PersistentMemberID.java
@@ -79,7 +79,7 @@ public class PersistentMemberID implements DataSerializable {
     this.name = DataSerializer.readString(in);
   }
 
-  public void fromData662(DataInput in) throws IOException, 
ClassNotFoundException {
+  public void _fromData662(DataInput in) throws IOException, 
ClassNotFoundException {
     long diskStoreIdHigh = in.readLong();
     long diskStoreIdLow = in.readLong();
     this.diskStoreId = new DiskStoreID(diskStoreIdHigh, diskStoreIdLow);
diff --git 
a/geode-core/src/test/java/org/apache/geode/codeAnalysis/CompiledClassUtils.java
 
b/geode-core/src/test/java/org/apache/geode/codeAnalysis/CompiledClassUtils.java
index 468eff9..0de2bf5 100644
--- 
a/geode-core/src/test/java/org/apache/geode/codeAnalysis/CompiledClassUtils.java
+++ 
b/geode-core/src/test/java/org/apache/geode/codeAnalysis/CompiledClassUtils.java
@@ -26,18 +26,32 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 
 import org.apache.geode.codeAnalysis.decode.CompiledClass;
 import org.apache.geode.codeAnalysis.decode.CompiledField;
 import org.apache.geode.codeAnalysis.decode.CompiledMethod;
+import org.apache.geode.internal.Version;
 
 public class CompiledClassUtils {
+
+  static Set<String> allowedDataSerializerMethods;
+
+  static {
+    allowedDataSerializerMethods = new HashSet<>();
+    Version.getAllVersions().iterator().forEachRemaining((version) -> {
+      allowedDataSerializerMethods.add("toDataPre_" + 
version.getMethodSuffix());
+      allowedDataSerializerMethods.add("fromDataPre_" + 
version.getMethodSuffix());
+    });
+  }
+
   /**
    * Parse the given class files and return a map of name->Dclass. Any IO 
exceptions are consumed by
    * this method and written to stderr.
@@ -191,14 +205,27 @@ public class CompiledClassUtils {
         ClassAndMethods nc = newclass;
         newclass = null;
         if (gold.methods.size() != nc.numMethods()) {
-          changedClassesSb.append(nc).append(": method count\n");
+          changedClassesSb.append(nc).append(": method count (expected " + 
gold.methods.size()
+              + " but found " + nc.numMethods() + ")\n");
           continue;
         }
         boolean comma = false;
         for (Map.Entry<String, CompiledMethod> entry : nc.methods.entrySet()) {
           CompiledMethod method = entry.getValue();
-          String name = method.name();
-          Integer goldCode = gold.methods.get(name);
+          String methodName = method.name();
+          if (!methodName.equals("toData") && !methodName.equals("fromData")
+              && !allowedDataSerializerMethods.contains(methodName)) {
+            if (comma) {
+              changedClassesSb.append(", and ");
+            } else {
+              changedClassesSb.append(nc).append(":  ");
+              comma = true;
+            }
+            changedClassesSb.append(methodName)
+                .append(" is not a valid method name - doesn't match any 
Version");
+            continue;
+          }
+          Integer goldCode = gold.methods.get(methodName);
           if (goldCode == null) {
             if (comma) {
               changedClassesSb.append(", and ");
@@ -206,7 +233,7 @@ public class CompiledClassUtils {
               changedClassesSb.append(nc).append(":  ");
               comma = true;
             }
-            changedClassesSb.append(name).append(" was added");
+            changedClassesSb.append(methodName).append(" was added");
             continue; // only report one diff per class
           }
           if (goldCode != method.getCode().code.length) {
@@ -216,7 +243,7 @@ public class CompiledClassUtils {
               changedClassesSb.append(nc).append(":  ");
               comma = true;
             }
-            changedClassesSb.append(name)
+            changedClassesSb.append(methodName)
                 .append(" (len=" + method.getCode().code.length + ",expected=" 
+ goldCode + ")");
             continue;
           }
diff --git 
a/geode-core/src/test/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt
 
b/geode-core/src/test/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt
index c4ad894..a6e37a7 100644
--- 
a/geode-core/src/test/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt
+++ 
b/geode-core/src/test/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt
@@ -186,13 +186,11 @@ org/apache/geode/distributed/internal/ShutdownMessage,2
 fromData,27
 toData,24
 
-org/apache/geode/distributed/internal/StartupMessage,3
-fromDataProblem,38
+org/apache/geode/distributed/internal/StartupMessage,2
 fromData,293
 toData,318
 
-org/apache/geode/distributed/internal/StartupResponseMessage,3
-fromDataProblem,43
+org/apache/geode/distributed/internal/StartupResponseMessage,2
 fromData,220
 toData,170
 
@@ -392,8 +390,7 @@ 
org/apache/geode/internal/InternalInstantiator$RegistrationContextMessage,2
 fromData,14
 toData,14
 
-org/apache/geode/internal/InternalInstantiator$RegistrationMessage,3
-fromDataProblem,38
+org/apache/geode/internal/InternalInstantiator$RegistrationMessage,2
 fromData,125
 toData,46
 
@@ -1823,9 +1820,8 @@ 
org/apache/geode/internal/cache/persistence/MembershipViewRequest$MembershipView
 fromData,36
 toData,38
 
-org/apache/geode/internal/cache/persistence/PersistentMemberID,3
+org/apache/geode/internal/cache/persistence/PersistentMemberID,2
 fromData,74
-fromData662,66
 toData,71
 
 org/apache/geode/internal/cache/persistence/PersistentMemberPattern,2

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to