You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by mr...@apache.org on 2015/11/20 05:26:21 UTC

[12/19] usergrid git commit: Fix delete so that it doesn't return null

Fix delete so that it doesn't return null


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/88f6feae
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/88f6feae
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/88f6feae

Branch: refs/heads/master
Commit: 88f6feae8c8d635598954ee9a5d239eda42653bd
Parents: 9bc2241
Author: Michael Russo <mi...@gmail.com>
Authored: Thu Nov 19 09:43:36 2015 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Thu Nov 19 09:43:36 2015 -0800

----------------------------------------------------------------------
 .../asyncevents/EventBuilderImpl.java           | 39 +++++++++-----------
 1 file changed, 17 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/88f6feae/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/EventBuilderImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/EventBuilderImpl.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/EventBuilderImpl.java
index d819f39..9b68c4c 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/EventBuilderImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/EventBuilderImpl.java
@@ -125,42 +125,37 @@ public class EventBuilderImpl implements EventBuilder {
         log.debug( "Deleting entity id from index in app scope {} with entityId {} }", applicationScope, entityId );
 
         final EntityCollectionManager ecm = entityCollectionManagerFactory.createCollectionManager( applicationScope );
-
         final GraphManager gm = graphManagerFactory.createEdgeManager( applicationScope );
 
+        //TODO USERGRID-1123: Implement so we don't iterate logs twice (latest DELETED version, then to get all DELETED)
 
-        //TODO: change this to be an observable
-        //so we get these versions and loop through them until we find the MvccLogEntry that is marked as delete.
-        //TODO: evauluate this to possibly be an observable to pass to the nextmethod.
         MvccLogEntry mostRecentlyMarked = ecm.getVersions( entityId ).toBlocking()
                                              .firstOrDefault( null,
                                                  mvccLogEntry -> mvccLogEntry.getState() == MvccLogEntry.State.DELETED );
 
-        //If there is nothing marked then we shouldn't return any results.
-        //TODO: evaluate if we want to return null or return empty observable when we don't have any results marked as deleted.
-        if(mostRecentlyMarked == null)
-            return null;
+        // De-indexing and entity deletes don't check log entiries.  We must do that first. If no DELETED logs, then
+        // return an empty observable as our no-op.
+        Observable<IndexOperationMessage> deIndexObservable = Observable.empty();
+        Observable<List<MvccLogEntry>> ecmDeleteObservable = Observable.empty();
 
-        //observable of index operation messages
-        //this method will need the most recent version.
-        //When we go to compact the graph make sure you turn on the debugging mode for the deleted nodes so
-        //we can verify that we mark them. That said that part seems kinda done. as we also delete the mvcc buffers.
-        final Observable<IndexOperationMessage> edgeObservable =
-            indexService.deleteEntityIndexes( applicationScope, entityId, mostRecentlyMarked.getVersion() );
+        if(mostRecentlyMarked != null){
+            deIndexObservable =
+                indexService.deleteEntityIndexes( applicationScope, entityId, mostRecentlyMarked.getVersion() );
 
+            ecmDeleteObservable =
+                ecm.getVersions( entityId )
+                    .filter( mvccLogEntry-> mvccLogEntry.getState() == MvccLogEntry.State.DELETED)
+                    .buffer( serializationFig.getBufferSize() )
+                    .doOnNext( buffer -> ecm.delete( buffer ) );
 
-        //TODO: not sure what we need the list of versions here when we search for the mark above
-        //observable of entries as the batches are deleted
-        final Observable<List<MvccLogEntry>> entries =
-            ecm.getVersions( entityId ).buffer( serializationFig.getBufferSize() )
-               .doOnNext( buffer -> ecm.delete( buffer ) );
 
+        }
 
-        // observable of the edge delete from graph
-        final Observable<Id> compactedNode = gm.compactNode(entityId);
 
+        // Graph compaction checks the versions inside compactNode, just build this up for the caller to subscribe to
+        final Observable<Id> graphCompactObservable = gm.compactNode(entityId);
 
-        return new EntityDeleteResults( edgeObservable, entries, compactedNode );
+        return new EntityDeleteResults( deIndexObservable, ecmDeleteObservable, graphCompactObservable );
     }