You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by to...@apache.org on 2015/03/20 22:32:40 UTC

[07/31] incubator-usergrid git commit: add delete back

add delete back


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

Branch: refs/heads/USERGRID-486
Commit: a87ca3a1968d29170314dc8a67ae108862fb04e6
Parents: 65c20a1
Author: Shawn Feldman <sf...@apache.org>
Authored: Wed Mar 18 17:45:35 2015 -0600
Committer: Shawn Feldman <sf...@apache.org>
Committed: Wed Mar 18 17:45:35 2015 -0600

----------------------------------------------------------------------
 .../corepersistence/CpEntityManager.java        |  5 +-
 .../usergrid/persistence/EntityManager.java     |  3 +-
 .../cassandra/EntityManagerImpl.java            |  4 +-
 .../org/apache/usergrid/CoreApplication.java    |  7 ++-
 .../usergrid/persistence/index/EntityIndex.java |  2 +-
 .../index/impl/EsEntityIndexBatchImpl.java      |  5 +-
 .../index/impl/EsEntityIndexImpl.java           | 59 +++++++++++++++-----
 .../persistence/index/impl/IndexingUtils.java   | 25 +++++----
 8 files changed, 80 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a87ca3a1/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java
index 789e640..8787410 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java
@@ -36,6 +36,7 @@ import java.util.UUID;
 import com.codahale.metrics.Meter;
 import org.apache.usergrid.persistence.collection.FieldSet;
 import org.apache.usergrid.persistence.core.future.BetterFuture;
+import org.elasticsearch.action.ListenableActionFuture;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.util.Assert;
@@ -2899,9 +2900,9 @@ public class CpEntityManager implements EntityManager {
         ei.initializeIndex();
     }
 
-    public void deleteIndex(){
+    public ListenableActionFuture deleteIndex(){
         EntityIndex ei = managerCache.getEntityIndex( applicationScope );
-        ei.deleteIndex();
+        return ei.deleteIndex();
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a87ca3a1/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManager.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManager.java b/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManager.java
index 65fac8d..2a951aa 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManager.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManager.java
@@ -34,6 +34,7 @@ import org.apache.usergrid.persistence.entities.Role;
 import org.apache.usergrid.persistence.index.query.CounterResolution;
 import org.apache.usergrid.persistence.index.query.Identifier;
 import org.apache.usergrid.persistence.index.query.Query.Level;
+import org.elasticsearch.action.ListenableActionFuture;
 
 
 /**
@@ -696,7 +697,7 @@ public interface EntityManager {
     /**
     * Create the index, should ONLY ever be called the first time an application is created
     */
-    void deleteIndex();
+    ListenableActionFuture deleteIndex();
 
     public void init( EntityManagerFactory emf, UUID applicationId);
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a87ca3a1/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerImpl.java b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerImpl.java
index ce45ebf..966a601 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerImpl.java
@@ -36,6 +36,7 @@ import java.util.UUID;
 
 import javax.annotation.Resource;
 
+import org.elasticsearch.action.ListenableActionFuture;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.ApplicationContext;
@@ -2895,8 +2896,9 @@ public class EntityManagerImpl implements EntityManager {
 
 
     @Override
-    public void deleteIndex() {
+    public ListenableActionFuture deleteIndex() {
         //no op
+        return null;
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a87ca3a1/stack/core/src/test/java/org/apache/usergrid/CoreApplication.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/CoreApplication.java b/stack/core/src/test/java/org/apache/usergrid/CoreApplication.java
index 99cfcf5..a48ce4e 100644
--- a/stack/core/src/test/java/org/apache/usergrid/CoreApplication.java
+++ b/stack/core/src/test/java/org/apache/usergrid/CoreApplication.java
@@ -20,6 +20,7 @@ package org.apache.usergrid;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.UUID;
+import java.util.concurrent.ExecutionException;
 
 import org.junit.rules.TestRule;
 import org.junit.runner.Description;
@@ -144,7 +145,11 @@ public class CoreApplication implements Application, TestRule {
     protected void after( Description description ) {
         LOG.info( "Test {}: finish with application", description.getDisplayName() );
 
-        setup.getEmf().getEntityManager( id ).deleteIndex();
+        try {
+            setup.getEmf().getEntityManager(id).deleteIndex().get();
+        }catch (Exception ee){
+            throw new RuntimeException(ee);
+        }
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a87ca3a1/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/EntityIndex.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/EntityIndex.java b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/EntityIndex.java
index c8840fa..db4b50d 100644
--- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/EntityIndex.java
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/EntityIndex.java
@@ -45,7 +45,7 @@ public interface EntityIndex {
     /**
      * Delete the index from ES
      */
-    public void deleteIndex();
+    public ListenableActionFuture deleteIndex();
 
     /**
      * Create an index and add to alias, will create alias and remove any old index from write alias if alias already exists

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a87ca3a1/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexBatchImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexBatchImpl.java b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexBatchImpl.java
index c0d0d1e..d7b1f9c 100644
--- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexBatchImpl.java
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexBatchImpl.java
@@ -94,7 +94,10 @@ public class EsEntityIndexBatchImpl implements EntityIndexBatch {
         IndexValidationUtils.validateIndexScope( indexScope );
         ValidationUtils.verifyEntityWrite( entity );
         ValidationUtils.verifyVersion( entity.getVersion() );
-
+        //add app id for indexing
+        entity.setField(
+            new StringField(APPLICATION_ID_FIELDNAME,IndexingUtils.idString(applicationScope.getApplication()))
+        );
         final String context = createContextName(indexScope);
 
         if ( log.isDebugEnabled() ) {

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a87ca3a1/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
index 5e23d67..0ecc31b 100644
--- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
@@ -265,7 +265,7 @@ public class EsEntityIndexImpl implements AliasedEntityIndex {
             String indexName = indexIdentifier.getIndex(indexSuffix);
             final AdminClient adminClient = esProvider.getClient().admin();
 
-            String[] indexNames = getIndexesFromEs( AliasType.Write );
+            String[] indexNames = getIndexesFromEs(AliasType.Write);
 
 
             final IndicesAliasesRequestBuilder aliasesRequestBuilder = adminClient.indices().prepareAliases();
@@ -280,7 +280,7 @@ public class EsEntityIndexImpl implements AliasedEntityIndex {
 
             // add read alias
             aliasesRequestBuilder.addAlias(  indexName, alias.getReadAlias());
-            logger.info( "Created new read Alias Name [{}] on Index [{}]", alias.getReadAlias(), indexName);
+            logger.info("Created new read Alias Name [{}] on Index [{}]", alias.getReadAlias(), indexName);
 
 
             //add write alias
@@ -623,23 +623,56 @@ public class EsEntityIndexImpl implements AliasedEntityIndex {
     /**
      * Completely delete an index.
      */
-    public void deleteIndex() {
-        AdminClient adminClient = esProvider.getClient().admin();
+    public ListenableActionFuture deleteIndex() {
+        String idString = IndexingUtils.idString(applicationScope.getApplication());
 
-        DeleteIndexResponse response = adminClient.indices()
-                .prepareDelete( indexIdentifier.getIndex(null) ).get();
+        final TermQueryBuilder tqb = QueryBuilders.termQuery(APPLICATION_ID_FIELDNAME, idString);
+
+        //Added For Graphite Metrics
+
+        final ListenableActionFuture<DeleteByQueryResponse> response = esProvider.getClient()
+            .prepareDeleteByQuery( alias.getWriteAlias() ).setQuery( tqb ).execute();
+
+        response.addListener(new ActionListener<DeleteByQueryResponse>() {
+
+            @Override
+            public void onResponse(DeleteByQueryResponse response) {
+                checkDeleteByQueryResponse(tqb,response);
+            }
+
+
+            @Override
+            public void onFailure(Throwable e) {
+                logger.error("failed on delete index",e);
+            }
+        });
+        return response;
+    }
+    /**
+     * Validate the response doesn't contain errors, if it does, fail fast at the first error we encounter
+     */
+    private void checkDeleteByQueryResponse(
+        final QueryBuilder query, final DeleteByQueryResponse response ) {
+
+        for ( IndexDeleteByQueryResponse indexDeleteByQueryResponse : response ) {
+            final ShardOperationFailedException[] failures = indexDeleteByQueryResponse.getFailures();
+
+            for ( ShardOperationFailedException failedException : failures ) {
+                logger.error( String.format("Unable to delete by query %s. "
+                            + "Failed with code %d and reason %s on shard %s in index %s",
+                        query.toString(),
+                        failedException.status().getStatus(),
+                        failedException.reason(),
+                        failedException.shardId(),
+                        failedException.index() )
+                );
+            }
 
-        if ( response.isAcknowledged() ) {
-            logger.info( "Deleted index: read {} write {}", alias.getReadAlias(), alias.getWriteAlias());
-            //invlaidate the alias
-            aliasCache.invalidate(alias);
-        }
-        else {
-            logger.info( "Failed to delete index: read {} write {}", alias.getReadAlias(), alias.getWriteAlias());
         }
     }
 
 
+
     /**
      * Do the retry operation
      */

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a87ca3a1/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexingUtils.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexingUtils.java b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexingUtils.java
index aa6d0f3..d49d8cc 100644
--- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexingUtils.java
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexingUtils.java
@@ -50,6 +50,7 @@ public class IndexingUtils {
     //
     // Reserved UG fields.
     //
+    public static final String APPLICATION_ID_FIELDNAME = "ug_applicationId";
 
     public static final String ENTITY_CONTEXT_FIELDNAME = "ug_context";
 
@@ -162,23 +163,27 @@ public class IndexingUtils {
                     .endObject()
                     .startArray("dynamic_templates")
                         // we need most specific mappings first since it's a stop on match algorithm
-                        .startObject()
-                            .startObject("entity_id_template")
-                                .field("match", IndexingUtils.ENTITYID_ID_FIELDNAME)
+                            .startObject()
+                                .startObject("application_id_template")
+                                    .field("match", APPLICATION_ID_FIELDNAME)
                                     .field("match_mapping_type", "string")
-                                            .startObject("mapping").field("type", "string")
-                                                .field("index", "not_analyzed")
-                                            .endObject()
-                                    .endObject()
+                                    .startObject("mapping").field("type", "string").field("index", "not_analyzed").field(DOC_VALUES_KEY, true).endObject()
+                                .endObject()
+                            .endObject()
+                            .startObject()
+                                .startObject("entity_id_template")
+                                    .field("match", IndexingUtils.ENTITYID_ID_FIELDNAME)
+                                    .field("match_mapping_type", "string")
+                                    .startObject("mapping").field("type", "string").field("index", "not_analyzed").field(DOC_VALUES_KEY, true).endObject()
                                 .endObject()
+                            .endObject()
 
                             .startObject()
                                 .startObject("entity_context_template")
                                     .field("match", IndexingUtils.ENTITY_CONTEXT_FIELDNAME)
                                     .field("match_mapping_type", "string")
                                         .startObject("mapping")
-                                            .field("type", "string")
-                                            .field("index", "not_analyzed")
+                                            .field("type", "string").field("index", "not_analyzed").field(DOC_VALUES_KEY, true)
                                         .endObject()
                                 .endObject()
                             .endObject()
@@ -187,7 +192,7 @@ public class IndexingUtils {
                                 .startObject("entity_version_template")
                                     .field("match", IndexingUtils.ENTITY_VERSION_FIELDNAME)
                                     .field("match_mapping_type", "string")
-                                    .startObject("mapping").field("type", "long").field(DOC_VALUES_KEY, true)
+                                    .startObject("mapping").field("type", "long").field("index", "not_analyzed").field(DOC_VALUES_KEY, true)
                                     .endObject()
                                 .endObject()
                             .endObject()