You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "xiaojian zhou (JIRA)" <ji...@apache.org> on 2018/10/21 05:46:00 UTC

[jira] [Created] (GEODE-5908) DiskStoreID.compare treat different DiskStoreID with same leastSig as equal

xiaojian zhou created GEODE-5908:
------------------------------------

             Summary: DiskStoreID.compare treat different DiskStoreID with same leastSig as equal
                 Key: GEODE-5908
                 URL: https://issues.apache.org/jira/browse/GEODE-5908
             Project: Geode
          Issue Type: Bug
          Components: core
            Reporter: xiaojian zhou


When reviewing code, I found this actually is a bug, and will impact our 

checkForConflict() to throw CME in following case:

stamps's DiskStoreID is: 5a42b9ec2e6e45db-87559e428bd3ad67

tag's DiskStoreID is: a870e3a0126e4b0d-87559e428bd3ad67

tag is actually bigger than stamp's. But in current code, they will be treated as equal. 

I wrote a junit test to reproduce this problem.

 

The root cause is:

*diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskStoreID.java b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskStoreID.java*

*index 601d24899..0392e92dd 100644*

*--- a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskStoreID.java*

*+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskStoreID.java*

@@ -80,7 +80,7 @@ public class DiskStoreID implements VersionSource<DiskStoreID>, Serializable {

       return 1;

     }

     int result = Long.signum(mostSig - tagID.mostSig);

-    if (result != 0) {

+    if (result == 0) {

       result = Long.signum(leastSig - tagID.leastSig);

     }

     return result;



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)