Anonymous avatar Anonymous committed aa8d762

assume ring-sending party is older when both vclocks are null

Comments (0)

Files changed (1)

src/riak_ring.erl

 % @spec reconcile(ExternState :: hstate(), MyState :: hstate()) ->
 %       {no_change, hstate()} | {new_ring, hstate()}
 reconcile(ExternState, MyState) ->
-    case ancestors([ExternState, MyState]) of
-        [OlderState] ->
-          case vclock:equal(OlderState#hstate.vclock,MyState#hstate.vclock) of
-              true -> {new_ring, #hstate{nodename=MyState#hstate.nodename,
-                                         vclock=ExternState#hstate.vclock,
-                                         ring=ExternState#hstate.ring,
-                                         meta=ExternState#hstate.meta}};
-              false -> {no_change, MyState}
-          end;
-	[] -> 
-            case equal_rings(ExternState,MyState) of
-                true -> {no_change, MyState};
-                false -> {new_ring, reconcile(MyState#hstate.nodename,
-                                              ExternState, MyState)}
+    case vclock:equal(MyState#hstate.vclock, vclock:fresh()) of
+        true -> 
+            {new_ring, #hstate{nodename=MyState#hstate.nodename,
+                               vclock=ExternState#hstate.vclock,
+                               ring=ExternState#hstate.ring,
+                               meta=ExternState#hstate.meta}};
+        false ->
+            case ancestors([ExternState, MyState]) of
+                [OlderState] ->
+                    case vclock:equal(OlderState#hstate.vclock,
+                                      MyState#hstate.vclock) of
+                        true ->
+                            {new_ring, #hstate{nodename=MyState#hstate.nodename,
+                                               vclock=ExternState#hstate.vclock,
+                                               ring=ExternState#hstate.ring,
+                                               meta=ExternState#hstate.meta}};
+                        false -> {no_change, MyState}
+                    end;
+                [] -> 
+                    case equal_rings(ExternState,MyState) of
+                        true -> {no_change, MyState};
+                        false -> {new_ring, reconcile(MyState#hstate.nodename,
+                                                      ExternState, MyState)}
+                    end
             end
     end.
 
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.