You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by gr...@apache.org on 2016/04/08 22:21:14 UTC

[27/36] usergrid git commit: Added a delete test and a delete endpoint so that we can delete schema's

Added a delete test and a delete endpoint so that we can delete schema's


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

Branch: refs/heads/release-2.1.1
Commit: 956a6f5a552d2b627b0ac0547d40beed9712d416
Parents: f4769e6
Author: George Reyes <gr...@apache.org>
Authored: Thu Mar 31 12:53:45 2016 -0700
Committer: George Reyes <gr...@apache.org>
Committed: Thu Mar 31 12:53:45 2016 -0700

----------------------------------------------------------------------
 .../corepersistence/CpEntityManager.java        |  33 ++++-
 .../corepersistence/index/IndexSchemaCache.java |   2 +
 .../index/IndexSchemaCacheImpl.java             |   7 +-
 .../corepersistence/index/IndexServiceImpl.java |   4 +
 .../usergrid/persistence/EntityManager.java     |   2 +
 .../rest/applications/CollectionResource.java   |  35 ++++-
 .../collection/CollectionsResourceIT.java       | 142 +++++++++++++++++++
 7 files changed, 217 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/956a6f5a/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 642b837..08204c9 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
@@ -51,6 +51,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.util.Assert;
 
+import org.apache.avro.generic.GenericData;
+
 import org.apache.usergrid.corepersistence.asyncevents.AsyncEventService;
 import org.apache.usergrid.corepersistence.util.CpEntityMapUtils;
 import org.apache.usergrid.corepersistence.util.CpNamingUtils;
@@ -1786,16 +1788,41 @@ public class CpEntityManager implements EntityManager {
         else {
             schemaMap.put( "lastReindexed", 0 );
         }
-        schemaMap.putAll( properties );
 
-        //TODO: we have to update then invalidate previous entry.
+
+        ArrayList<String> fieldProperties = ( ArrayList<String> ) properties.get( "fields" );
+
+        //TODO: do tests for * , and now add put and delete.
+        if(fieldProperties.contains( "*" )){
+            ArrayList<String> wildCardArrayList = new ArrayList<>(  );
+            wildCardArrayList.add( "*" );
+            schemaMap.put( "fields",wildCardArrayList );
+        }
+        else {
+            schemaMap.putAll( properties );
+        }
+
+        //do a check to see if you have a * field. If you do have a * field then ignore all other fields
+        //and only accept the * field. That logic goes below and in the put.
+
         indexSchemaCache.putCollectionSchema( collectionName, JsonUtils.mapToJsonString( schemaMap ) );
-        
+
         return schemaMap;
 
     }
 
     @Override
+    public void deleteCollectionSchema( String collectionName ){
+        MapManager mm = getMapManagerForTypes();
+
+        IndexSchemaCache indexSchemaCache = indexSchemaCacheFactory.getInstance( mm );
+
+        indexSchemaCache.deleteCollectionSchema( collectionName );
+
+    }
+
+
+    @Override
     public Object getCollectionSchema( String collectionName ){
         MapManager mm = getMapManagerForTypes();
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/956a6f5a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexSchemaCache.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexSchemaCache.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexSchemaCache.java
index 6fbe148..debfe2a 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexSchemaCache.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexSchemaCache.java
@@ -31,6 +31,8 @@ public interface IndexSchemaCache {
 
     void putCollectionSchema( String collectionName, String collectionSchema );
 
+    void deleteCollectionSchema( String collectionName );
+
     /**
      * Evict the collection schema from the cache.
      * @param collectionName

http://git-wip-us.apache.org/repos/asf/usergrid/blob/956a6f5a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexSchemaCacheImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexSchemaCacheImpl.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexSchemaCacheImpl.java
index 9e57480..14752b4 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexSchemaCacheImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexSchemaCacheImpl.java
@@ -80,11 +80,16 @@ public class IndexSchemaCacheImpl implements IndexSchemaCache {
     }
 
     @Override
-    public void putCollectionSchema(final String collectionName ,final String collectionSchema){
+    public void putCollectionSchema( final String collectionName, final String collectionSchema ){
         mapManager.putString( collectionName, collectionSchema );
         evictCollectionSchema( collectionName );
     }
 
+    @Override
+    public void deleteCollectionSchema(final String collectionName){
+        mapManager.delete( collectionName );
+        evictCollectionSchema( collectionName );
+    }
 
     @Override
     public void evictCollectionSchema( final String collectionName ) {

http://git-wip-us.apache.org/repos/asf/usergrid/blob/956a6f5a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexServiceImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexServiceImpl.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexServiceImpl.java
index f931528..9e05df3 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexServiceImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexServiceImpl.java
@@ -229,6 +229,10 @@ public class IndexServiceImpl implements IndexService {
             defaultProperties = schema.getRequiredProperties( collectionName );
             fieldsToKeep = ( ArrayList ) jsonMapData.get( "fields" );
 
+            if(fieldsToKeep.contains( "*" )){
+                return Optional.empty();
+            }
+
             defaultProperties.addAll( fieldsToKeep );
         }
         else {

http://git-wip-us.apache.org/repos/asf/usergrid/blob/956a6f5a/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 f5b398a..ef96f10 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
@@ -514,6 +514,8 @@ public interface EntityManager {
 
     public Map createCollectionSchema( String collectionName, String owner ,Map<String, Object> properties );
 
+    void deleteCollectionSchema( String collectionName );
+
     Object getCollectionSchema( String collectionName );
 
     public void grantRolePermission( String roleName, String permission ) throws Exception;

http://git-wip-us.apache.org/repos/asf/usergrid/blob/956a6f5a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/CollectionResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/CollectionResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/CollectionResource.java
index 80ed36b..b097469 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/CollectionResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/CollectionResource.java
@@ -21,6 +21,7 @@ package org.apache.usergrid.rest.applications;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 
+import javax.ws.rs.DELETE;
 import javax.ws.rs.DefaultValue;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
@@ -94,9 +95,7 @@ public class CollectionResource extends ServiceResource {
         if(logger.isTraceEnabled()){
             logger.trace( "ServiceResource.executePostOnIndexes" );
         }
-        /**
 
-         */
         addItemToServiceContext( ui, itemName );
 
         Object json;
@@ -119,7 +118,6 @@ public class CollectionResource extends ServiceResource {
         return response;
     }
 
-
     private void addItemToServiceContext( final @Context UriInfo ui,
                                           final @PathParam( "itemName" ) PathSegment itemName ) throws Exception {
         if ( itemName.getPath().startsWith( "{" ) ) {
@@ -135,6 +133,35 @@ public class CollectionResource extends ServiceResource {
         addMatrixParams( getServiceParameters(), ui, itemName );
     }
 
+    @DELETE
+    @Path( "{itemName}/_indexes" )
+    @Produces({ MediaType.APPLICATION_JSON,"application/javascript"})
+    @RequireApplicationAccess
+    @JSONP
+    public ApiResponse executeDeleteOnIndexesWithCollectionName( @Context UriInfo ui, @PathParam("itemName") PathSegment itemName,
+                                                               String body,
+                                                               @QueryParam("callback") @DefaultValue("callback") String callback )
+        throws Exception {
+
+        if(logger.isTraceEnabled()){
+            logger.trace( "CollectionResource.executeDeleteOnIndexesWithCollectionName" );
+        }
+
+        addItemToServiceContext( ui, itemName );
+
+        ApiResponse response = createApiResponse();
+
+        response.setAction( "delete" );
+        response.setApplication( services.getApplication() );
+        response.setParams( ui.getQueryParameters() );
+
+
+        emf.getEntityManager( services.getApplicationId() ).deleteCollectionSchema( itemName.getPath().toLowerCase() );
+
+        return response;
+    }
+
+
 
     @GET
     @Path( "{itemName}/_index")
@@ -162,7 +189,7 @@ public class CollectionResource extends ServiceResource {
     }
 
 
-    //TODO: this can't be controlled and until it can be controlled we should allow muggles to do this. So system access only.
+    //TODO: this can't be controlled and until it can be controlled we shouldn' allow muggles to do this. So system access only.
     //TODO: use scheduler here to get around people sending a reindex call 30 times.
     @POST
     @Path("{itemName}/_reindex")

http://git-wip-us.apache.org/repos/asf/usergrid/blob/956a6f5a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/CollectionsResourceIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/CollectionsResourceIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/CollectionsResourceIT.java
index 04ed18e..8ec4a3a 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/CollectionsResourceIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/CollectionsResourceIT.java
@@ -115,6 +115,148 @@ public class CollectionsResourceIT extends AbstractRestIT {
 
     }
 
+    @Test
+    public void deleteCollectionSchema() throws Exception {
+        //Creating schema.
+        //this could be changed to a hashmap.
+        ArrayList<String> indexingArray = new ArrayList<>(  );
+
+
+        //field "fields" is required.
+        Entity payload = new Entity();
+        payload.put( "fields", indexingArray);
+
+        //Post index to the collection metadata
+        Entity thing = this.app().collection( "testCollections" ).collection( "_indexes" ).post( payload );
+        refreshIndex();
+
+
+        //The above verifies the test case.
+
+
+        //Create test collection with a test entity that is partially indexed.
+        Entity testEntity = new Entity();
+        testEntity.put( "one", "helper" );
+        testEntity.put( "two","query" );
+
+        //Post entity.
+        Entity postedEntity = this.app().collection( "testCollections" ).post( testEntity );
+        refreshIndex();
+
+        //Do a query to see if you can find the indexed query.
+        String query = "two ='query'";
+        QueryParameters queryParameters = new QueryParameters().setQuery(query);
+
+        //having a name breaks it. Need to get rid of the stack trace and also
+        Collection tempEntity = this.app().collection( "testCollections" ).get(queryParameters,true);
+        assertEquals( 0,tempEntity.getResponse().getEntities().size() );
+
+        //Verify if you can query on an entity that was not indexed and that no entities are returned.
+        query = "one = 'helper'";
+        queryParameters = new QueryParameters().setQuery(query);
+        tempEntity = this.app().collection( "testCollections" ).get(queryParameters,true);
+        assertEquals(0,tempEntity.getResponse().getEntities().size());
+
+        query = "uuid = "+postedEntity.getUuid().toString();
+        queryParameters = new QueryParameters().setQuery(query);
+        tempEntity = this.app().collection( "testCollections" ).get(queryParameters,true);
+        assertEquals(1,tempEntity.getResponse().getEntities().size());
+
+        //since the collection schema doesn't index anything it shouldn't show up except for the default properties
+        //to prove that the entity exists
+
+        //next part is to delete the schema then reindex it and it should work.
+        this.app().collection( "testCollections" ).collection( "_indexes" ).delete();
+        refreshIndex();
+
+        this.app().collection( "testCollections" ).collection( "_reindex" ).post(true,clientSetup.getSuperuserToken(),ApiResponse.class,null,null,false);
+        refreshIndex();
+
+
+        //Do a query to see if you can find the indexed query.
+        query = "two ='query'";
+        queryParameters = new QueryParameters().setQuery(query);
+
+        //having a name breaks it. Need to get rid of the stack trace and also
+        tempEntity = this.app().collection( "testCollections" ).get(queryParameters,true);
+        assertEquals( 1,tempEntity.getResponse().getEntities().size() );
+
+        //Verify if you can query on an entity that was not indexed and that no entities are returned.
+        query = "one = 'helper'";
+        queryParameters = new QueryParameters().setQuery(query);
+        tempEntity = this.app().collection( "testCollections" ).get(queryParameters,true);
+        assertEquals(1,tempEntity.getResponse().getEntities().size());
+
+        query = "uuid = "+postedEntity.getUuid().toString();
+        queryParameters = new QueryParameters().setQuery(query);
+        tempEntity = this.app().collection( "testCollections" ).get(queryParameters,true);
+        assertEquals(1,tempEntity.getResponse().getEntities().size());
+
+    }
+
+    @Test
+    public void putCollectionSchema() throws Exception {
+
+
+    }
+
+
+    @Test
+    public void postCollectionSchemaWithWildcardIndexAll() throws Exception {
+        //Creating schema.
+        //this could be changed to a hashmap.
+        ArrayList<String> indexingArray = new ArrayList<>(  );
+        indexingArray.add( "*" );
+        indexingArray.add( "one" );
+        indexingArray.add( "two" );
+
+
+        //field "fields" is required.
+        Entity payload = new Entity();
+        payload.put( "fields", indexingArray);
+
+        //Post index to the collection metadata
+        Entity thing = this.app().collection( "testCollection" ).collection( "_indexes" ).post( payload );
+        refreshIndex();
+
+
+        Collection collection = this.app().collection( "testCollection" ).collection( "_index" ).get();
+
+        LinkedHashMap testCollectionSchema = (LinkedHashMap)collection.getResponse().getData();
+        ArrayList<String> schema = ( ArrayList<String> ) testCollectionSchema.get( "fields" );
+        assertTrue( schema.contains( "*" ) );
+        assertFalse( schema.contains( "one" ) );
+        assertFalse( schema.contains( "two" ) );
+
+
+//The above verifies the test case.
+
+
+        //Create test collection with a test entity that is partially indexed.
+        Entity testEntity = new Entity();
+        testEntity.put( "one", "helper" );
+        testEntity.put( "two","query" );
+
+        //Post entity.
+        this.app().collection( "testCollection" ).post( testEntity );
+        refreshIndex();
+
+        //Do a query to see if you can find the indexed query.
+        String query = "two ='query'";
+        QueryParameters queryParameters = new QueryParameters().setQuery(query);
+
+        //having a name breaks it. Need to get rid of the stack trace and also
+        Collection tempEntity = this.app().collection( "testCollection" ).get(queryParameters,true);
+        Entity reindexedEntity = tempEntity.getResponse().getEntity();
+        assertEquals( "helper",reindexedEntity.get( "one" ) );
+
+        //Verify if you can query on an entity that was not indexed and that no entities are returned.
+        query = "one = 'helper'";
+        queryParameters = new QueryParameters().setQuery(query);
+        tempEntity = this.app().collection( "testCollection" ).get(queryParameters,true);
+        assertEquals(1,tempEntity.getResponse().getEntities().size());
+    }
+
 
     /**
      * Create test collection