Repository: usergrid Updated Branches: refs/heads/collectionDelete [created] 7d3eb647d
http://git-wip-us.apache.org/repos/asf/usergrid/blob/7d3eb647/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Application.java ---------------------------------------------------------------------- diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Application.java b/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Application.java index 790b4d9..0a4360f 100644 --- a/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Application.java +++ b/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Application.java @@ -48,6 +48,32 @@ public class Application extends TypedEntity implements Serializable { public static final String COLLECTION_ACTIVITIES = "activities"; + public static final String COLLECTION_EVENTS = "events"; + + public static final String COLLECTION_FOLDERS = "folders"; + + public static final String COLLECTION_DEVICES = "devices"; + + public static final String COLLECTION_NOTIFICATIONS = "notifications"; + + public static final String COLLECTION_ROLES = "roles"; + + public static boolean isCustomCollectionName(String collectionName) { + switch (collectionName.toLowerCase()) { + case COLLECTION_USERS: + case COLLECTION_GROUPS: + case COLLECTION_ASSETS: + case COLLECTION_ACTIVITIES: + case COLLECTION_EVENTS: + case COLLECTION_FOLDERS: + case COLLECTION_DEVICES: + case COLLECTION_NOTIFICATIONS: + case COLLECTION_ROLES: + return false; + } + return true; + } + @EntityProperty(indexed = true, fulltextIndexed = false, required = true, mutable = false, aliasProperty = true, basic = true) protected String name; http://git-wip-us.apache.org/repos/asf/usergrid/blob/7d3eb647/stack/core/src/main/java/org/apache/usergrid/utils/InflectionUtils.java ---------------------------------------------------------------------- diff --git a/stack/core/src/main/java/org/apache/usergrid/utils/InflectionUtils.java b/stack/core/src/main/java/org/apache/usergrid/utils/InflectionUtils.java index 72b9207..dde2f4f 100644 --- a/stack/core/src/main/java/org/apache/usergrid/utils/InflectionUtils.java +++ b/stack/core/src/main/java/org/apache/usergrid/utils/InflectionUtils.java @@ -17,25 +17,59 @@ package org.apache.usergrid.utils; +import org.apache.usergrid.corepersistence.index.CollectionVersionUtil; +import org.apache.usergrid.corepersistence.index.VersionedCollectionName; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + public class InflectionUtils { + private static final Logger logger = LoggerFactory.getLogger(InflectionUtils.class ); + + private static VersionedCollectionName parseName(Object word) { + String name = word.toString().trim(); + try { + return CollectionVersionUtil.parseVersionedName(name); + } + catch (Exception e) { + logger.error("parseName(): failed to parse the versioned name: {}", name); + return CollectionVersionUtil.createVersionedName(name, ""); + } + } + + private static String getVersionedName(String name, String version) { + try { + return CollectionVersionUtil.buildVersionedNameString(name, version, true); + } + catch (Exception e) { + // if versioned invalid, return name + return name; + } + } + public static String pluralize( Object word ) { - return Inflector.INSTANCE.pluralize( word ); + VersionedCollectionName name = parseName(word); + String pluralizedName = Inflector.INSTANCE.pluralize(name.getCollectionName()); + return getVersionedName(pluralizedName, name.getCollectionVersion()); } public static String singularize( Object word ) { - return Inflector.INSTANCE.singularize( word ); + VersionedCollectionName name = parseName(word); + String singuralizedName = Inflector.INSTANCE.singularize(name.getCollectionName()); + return getVersionedName(singuralizedName, name.getCollectionVersion()); } public static boolean isPlural( Object word ) { - return Inflector.INSTANCE.isPlural( word ); + VersionedCollectionName name = parseName(word); + return Inflector.INSTANCE.isPlural( name.getCollectionName() ); } public static boolean isSingular( Object word ) { - return Inflector.INSTANCE.isSingular( word ); + VersionedCollectionName name = parseName(word); + return Inflector.INSTANCE.isSingular( name.getCollectionName() ); } http://git-wip-us.apache.org/repos/asf/usergrid/blob/7d3eb647/stack/core/src/test/java/org/apache/usergrid/corepersistence/AggregationServiceTest.java ---------------------------------------------------------------------- diff --git a/stack/core/src/test/java/org/apache/usergrid/corepersistence/AggregationServiceTest.java b/stack/core/src/test/java/org/apache/usergrid/corepersistence/AggregationServiceTest.java index 55ce26e..7a82513 100644 --- a/stack/core/src/test/java/org/apache/usergrid/corepersistence/AggregationServiceTest.java +++ b/stack/core/src/test/java/org/apache/usergrid/corepersistence/AggregationServiceTest.java @@ -29,6 +29,8 @@ import org.apache.usergrid.persistence.Entity; import org.apache.usergrid.persistence.core.scope.ApplicationScope; import org.junit.Assert; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.Map; @@ -37,8 +39,13 @@ import java.util.Map; * Classy class class. */ public class AggregationServiceTest extends AbstractCoreIT { + + private static final Logger logger = LoggerFactory.getLogger( AggregationServiceTest.class ); + + @Test public void testEntitySize() throws Exception { + logger.info("appId={}", this.app.getId()); ApplicationScope applicationScope = CpNamingUtils.getApplicationScope(this.app.getId()); Injector injector = SpringResource.getInstance().getBean(Injector.class); AggregationServiceFactory factory = injector.getInstance(AggregationServiceFactory.class); http://git-wip-us.apache.org/repos/asf/usergrid/blob/7d3eb647/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/AsyncEventServiceImplTest.java ---------------------------------------------------------------------- diff --git a/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/AsyncEventServiceImplTest.java b/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/AsyncEventServiceImplTest.java index 92b5983..c9bba02 100644 --- a/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/AsyncEventServiceImplTest.java +++ b/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/AsyncEventServiceImplTest.java @@ -26,6 +26,7 @@ import org.apache.usergrid.corepersistence.TestIndexModule; import org.apache.usergrid.corepersistence.asyncevents.AsyncEventService; import org.apache.usergrid.corepersistence.asyncevents.AsyncEventServiceImpl; import org.apache.usergrid.corepersistence.asyncevents.EventBuilder; +import org.apache.usergrid.corepersistence.rx.impl.AllEntityIdsObservable; import org.apache.usergrid.persistence.core.aws.NoAWSCredsRule; import org.apache.usergrid.persistence.core.metrics.MetricsFactory; import org.apache.usergrid.persistence.core.rx.RxTaskScheduler; @@ -84,9 +85,15 @@ public class AsyncEventServiceImplTest extends AsyncIndexServiceTest { @Inject public EntityIndexFactory entityIndexFactory; + @Inject + public CollectionVersionFig collectionVersionFig; + + @Inject + public AllEntityIdsObservable allEntityIdsObservable; + @Override protected AsyncEventService getAsyncEventService() { - return new AsyncEventServiceImpl( queueManagerFactory, indexProcessorFig, indexProducer, metricsFactory, entityCollectionManagerFactory, indexLocationStrategyFactory, entityIndexFactory, eventBuilder, mapManagerFactory, queueFig, rxTaskScheduler ); + return new AsyncEventServiceImpl( queueManagerFactory, indexProcessorFig, indexProducer, metricsFactory, entityCollectionManagerFactory, indexLocationStrategyFactory, entityIndexFactory, eventBuilder, mapManagerFactory, queueFig, collectionVersionFig, allEntityIdsObservable, rxTaskScheduler ); } http://git-wip-us.apache.org/repos/asf/usergrid/blob/7d3eb647/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/CollectionVersionTest.java ---------------------------------------------------------------------- diff --git a/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/CollectionVersionTest.java b/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/CollectionVersionTest.java new file mode 100644 index 0000000..0278708 --- /dev/null +++ b/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/CollectionVersionTest.java @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.usergrid.corepersistence.index; + +public class CollectionVersionTest { +} http://git-wip-us.apache.org/repos/asf/usergrid/blob/7d3eb647/stack/core/src/test/java/org/apache/usergrid/persistence/RebuildIndexTest.java ---------------------------------------------------------------------- diff --git a/stack/core/src/test/java/org/apache/usergrid/persistence/RebuildIndexTest.java b/stack/core/src/test/java/org/apache/usergrid/persistence/RebuildIndexTest.java index a7759de..281f2af 100644 --- a/stack/core/src/test/java/org/apache/usergrid/persistence/RebuildIndexTest.java +++ b/stack/core/src/test/java/org/apache/usergrid/persistence/RebuildIndexTest.java @@ -178,7 +178,10 @@ public class RebuildIndexTest extends AbstractCoreIT { logger.info( "Started rebuildIndex()" ); String rand = RandomStringUtils.randomAlphanumeric( 5 ); - final UUID appId = setup.createApplication( "org_" + rand, "app_" + rand ); + String orgName = "org_" + rand; + String appName = "app_" + rand; + final UUID appId = setup.createApplication(orgName,appName); + logger.info("orgName={} appName={} appId={}", orgName, appName, appId.toString()); final EntityManager em = setup.getEmf().getEntityManager( appId ); http://git-wip-us.apache.org/repos/asf/usergrid/blob/7d3eb647/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 b8c1caa..0ab0661 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 @@ -31,6 +31,9 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.PathSegment; import javax.ws.rs.core.UriInfo; +import org.apache.usergrid.persistence.entities.Application; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @@ -48,6 +51,8 @@ import org.apache.usergrid.services.ServicePayload; import com.fasterxml.jackson.jaxrs.json.annotation.JSONP; +import java.util.UUID; + /** * A collection resource that stands before the Service Resource. If it cannot find @@ -61,10 +66,63 @@ import com.fasterxml.jackson.jaxrs.json.annotation.JSONP; }) public class CollectionResource extends ServiceResource { + private static final Logger logger = LoggerFactory.getLogger(CollectionResource.class); + + public static final String CONFIRM_COLLECTION_NAME = "confirm_collection_name"; + public CollectionResource() { } + @POST + @Path("{itemName}/clear") + @Produces({MediaType.APPLICATION_JSON, "application/javascript"}) + @RequireApplicationAccess + public ApiResponse executeClearCollection( + @Context UriInfo ui, + @PathParam("itemName") PathSegment itemName, + @QueryParam(CONFIRM_COLLECTION_NAME) String confirmCollectionName) throws Exception { + + if (logger.isTraceEnabled()){ + logger.trace( "CollectionResource.executeDeleteOnCollection" ); + } + + if (!Application.isCustomCollectionName(itemName.toString())) { + throw new IllegalArgumentException( + "Cannot clear built-in collections (" + itemName + ")." + ); + } + + if (!itemName.toString().equals(confirmCollectionName)) { + throw new IllegalArgumentException( + "Cannot delete collection without supplying correct collection name in query parameter " + CONFIRM_COLLECTION_NAME + ); + } + + addItemToServiceContext( ui, itemName ); + + UUID applicationId = getApplicationId(); + + emf.getEntityManager(applicationId).deleteCollection(itemName.toString()); + + if (logger.isTraceEnabled()) { + logger.trace("CollectionResource.executeDeleteOnCollection() deleted, appId={} collection={}", + applicationId, itemName); + } + + ApiResponse response = createApiResponse(); + response.setAction("delete"); + response.setApplication(emf.getEntityManager( applicationId ).getApplication()); + response.setParams(ui.getQueryParameters()); + + if (logger.isTraceEnabled()) { + logger.trace("CollectionResource.executeDeleteOnCollection() sending response"); + } + + return response; + + } + /** * POST settings for a collection. * http://git-wip-us.apache.org/repos/asf/usergrid/blob/7d3eb647/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ServiceResource.java ---------------------------------------------------------------------- diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ServiceResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ServiceResource.java index 9373f5e..14ed54f 100644 --- a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ServiceResource.java +++ b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ServiceResource.java @@ -22,6 +22,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.jaxrs.json.annotation.JSONP; import com.google.cloud.storage.StorageException; import org.apache.commons.lang.StringUtils; +import org.apache.usergrid.corepersistence.index.CollectionVersionUtil; +import org.apache.usergrid.corepersistence.index.VersionedCollectionName; import org.apache.usergrid.management.OrganizationConfig; import org.apache.usergrid.management.OrganizationConfigProps; import org.apache.usergrid.persistence.Entity; @@ -415,6 +417,8 @@ public class ServiceResource extends AbstractContextResource { response.setCount( results.size() ); } + stripCollectionVersionsFromTypes(results); + response.setResults( results ); } @@ -423,6 +427,17 @@ public class ServiceResource extends AbstractContextResource { return results; } + private void stripCollectionVersionsFromTypes(ServiceResults r) { + for (int i = 0; i < r.getEntities().size(); i++) { + Entity e = r.getEntity(i); + String oldType = e.getType(); + VersionedCollectionName v = CollectionVersionUtil.parseVersionedName(oldType); + if (v.hasVersion()) { + e.setType(v.getCollectionName()); + r.setEntity(i, e); + } + } + } @CheckPermissionsForPath @GET http://git-wip-us.apache.org/repos/asf/usergrid/blob/7d3eb647/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/CollectionDeleteTooSoonExceptionMapper.java ---------------------------------------------------------------------- diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/CollectionDeleteTooSoonExceptionMapper.java b/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/CollectionDeleteTooSoonExceptionMapper.java new file mode 100644 index 0000000..3b247df --- /dev/null +++ b/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/CollectionDeleteTooSoonExceptionMapper.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.usergrid.rest.exceptions; + + +import org.apache.usergrid.corepersistence.asyncevents.CollectionDeleteTooSoonException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.Provider; + +import static javax.ws.rs.core.Response.Status.BAD_REQUEST; + + +@Provider +public class CollectionDeleteTooSoonExceptionMapper extends AbstractExceptionMapper<CollectionDeleteTooSoonException> { + + private static final Logger logger = LoggerFactory.getLogger(CollectionDeleteTooSoonExceptionMapper.class); + + @Override + public Response toResponse( CollectionDeleteTooSoonException e ) { + + if(logger.isTraceEnabled()) { + logger.trace("Tried to delete collection too soon after previous deletion", e.getMessage()); + } + + return toResponse( BAD_REQUEST, e ); + } +} http://git-wip-us.apache.org/repos/asf/usergrid/blob/7d3eb647/stack/services/src/main/java/org/apache/usergrid/services/ServiceInfo.java ---------------------------------------------------------------------- diff --git a/stack/services/src/main/java/org/apache/usergrid/services/ServiceInfo.java b/stack/services/src/main/java/org/apache/usergrid/services/ServiceInfo.java index 4f6ce2f..2c5e527 100644 --- a/stack/services/src/main/java/org/apache/usergrid/services/ServiceInfo.java +++ b/stack/services/src/main/java/org/apache/usergrid/services/ServiceInfo.java @@ -83,6 +83,18 @@ public class ServiceInfo { hashCode = hasher.hash().asInt(); } + // returns a copy of supplied ServiceInfo, with updated collectionName and itemType + public ServiceInfo( ServiceInfo info, String collectionName, String itemType ) { + this.name = info.name; + this.rootService = info.rootService; + this.rootType = info.rootType; + this.containerType = info.containerType; + this.collectionName = collectionName; + this.itemType = itemType; + this.patterns = new ArrayList<>(info.patterns); + this.collections = new ArrayList<>(info.collections); + } + public static String normalizeServicePattern( String s ) { if ( s == null ) { @@ -363,6 +375,11 @@ public class ServiceInfo { return info; } + public static ServiceInfo getVersionedServiceInfo( ServiceInfo origInfo, String collectionName, String itemType ) { + // this is not cached + return new ServiceInfo(origInfo, collectionName, itemType); + } + public String getClassName() { return getClassName( name ); http://git-wip-us.apache.org/repos/asf/usergrid/blob/7d3eb647/stack/services/src/main/java/org/apache/usergrid/services/ServiceManager.java ---------------------------------------------------------------------- diff --git a/stack/services/src/main/java/org/apache/usergrid/services/ServiceManager.java b/stack/services/src/main/java/org/apache/usergrid/services/ServiceManager.java index 075278f..711a86c 100644 --- a/stack/services/src/main/java/org/apache/usergrid/services/ServiceManager.java +++ b/stack/services/src/main/java/org/apache/usergrid/services/ServiceManager.java @@ -22,6 +22,10 @@ import java.util.*; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; +import org.apache.usergrid.corepersistence.index.CollectionScopeImpl; +import org.apache.usergrid.corepersistence.index.CollectionVersionManager; +import org.apache.usergrid.corepersistence.index.CollectionVersionManagerFactory; +import org.apache.usergrid.corepersistence.index.CollectionVersionUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; @@ -77,6 +81,8 @@ public class ServiceManager { private ServiceManagerFactory smf; private QueueManager qm; + private CollectionVersionManagerFactory cvmf; + private Properties properties; // search for commercial packages first for SaaS version @@ -89,11 +95,12 @@ public class ServiceManager { } - public ServiceManager init( ServiceManagerFactory smf, EntityManager em, Properties properties, QueueManager qm ) { + public ServiceManager init( ServiceManagerFactory smf, EntityManager em, Properties properties, QueueManager qm, CollectionVersionManagerFactory cvmf) { this.smf = smf; this.em = em; this.qm = qm; this.properties = properties; + this.cvmf = cvmf; // additional logging to help debug https://issues.apache.org/jira/browse/USERGRID-1291 if ( em == null ) { @@ -102,6 +109,9 @@ public class ServiceManager { if ( qm == null ) { logger.error("QueueManager is null"); } + if ( cvmf == null ) { + logger.error("CollectionVersionManagerFactory is null"); + } if ( em != null ) { try { @@ -180,6 +190,9 @@ public class ServiceManager { public Entity importEntity( ServiceRequest request, Entity entity ) throws Exception { + if (logger.isTraceEnabled()) { + logger.trace("importEntity: entity.type=", entity.getType()); + } Service service = getEntityService( entity.getType() ); if ( service != null ) { return service.importEntity( request, entity ); @@ -189,6 +202,9 @@ public class ServiceManager { public Entity writeEntity( ServiceRequest request, Entity entity ) throws Exception { + if (logger.isTraceEnabled()) { + logger.trace("writeEntity: entity.type=", entity.getType()); + } Service service = getEntityService( entity.getType() ); if ( service != null ) { return service.writeEntity( request, entity ); @@ -198,6 +214,9 @@ public class ServiceManager { public Entity updateEntity( ServiceRequest request, EntityRef ref, ServicePayload payload ) throws Exception { + if (logger.isTraceEnabled()) { + logger.trace("writeEntity: entity.type=", ref.getType()); + } Service service = getEntityService( ref.getType() ); if ( service != null ) { return service.updateEntity( request, ref, payload ); @@ -227,6 +246,34 @@ public class ServiceManager { return null; } + // use versionedCollectionName if appropriate + String versionedCollectionName = info.getCollectionName(); + String unversionedCollectionName = CollectionVersionUtil.getBaseCollectionName(versionedCollectionName); + if (logger.isTraceEnabled()) { + logger.trace("getService: serviceType={} incoming collectionName={}", serviceType, versionedCollectionName); + } + + // if versioned collection name was passed in, use it, because it may be for an old version + if (versionedCollectionName.equals(unversionedCollectionName)) { + // no version passed in + CollectionVersionManager collectionVersionManager = cvmf.getInstance(new CollectionScopeImpl(applicationId, unversionedCollectionName)); + // always bypass collection version cache for now + String currentCollectionVersion = collectionVersionManager.getCollectionVersion(true); + + if (currentCollectionVersion != "") { + if (logger.isTraceEnabled()) { + logger.trace("getService: currentCollectionVersion={}", currentCollectionVersion); + } + versionedCollectionName = CollectionVersionUtil.buildVersionedNameString(unversionedCollectionName, currentCollectionVersion, false); + String versionedItemType = CollectionVersionUtil.buildVersionedNameString(info.getItemType(), currentCollectionVersion, false); + if (logger.isTraceEnabled()) { + logger.trace("getService() - using versioned collection name: collectionName={} versionedCollectionName={} versionedItemType={}", + unversionedCollectionName, versionedCollectionName, versionedItemType); + } + info = ServiceInfo.getVersionedServiceInfo(info, versionedCollectionName, versionedItemType); + } + } + Service service = getServiceInstance( info ); if ( service != null ) { http://git-wip-us.apache.org/repos/asf/usergrid/blob/7d3eb647/stack/services/src/main/java/org/apache/usergrid/services/ServiceManagerFactory.java ---------------------------------------------------------------------- diff --git a/stack/services/src/main/java/org/apache/usergrid/services/ServiceManagerFactory.java b/stack/services/src/main/java/org/apache/usergrid/services/ServiceManagerFactory.java index 2425b95..1cc4751 100644 --- a/stack/services/src/main/java/org/apache/usergrid/services/ServiceManagerFactory.java +++ b/stack/services/src/main/java/org/apache/usergrid/services/ServiceManagerFactory.java @@ -22,7 +22,7 @@ import java.util.Properties; import java.util.UUID; import com.google.inject.Injector; -import org.apache.usergrid.locking.Lock; +import org.apache.usergrid.corepersistence.index.CollectionVersionManagerFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; @@ -46,6 +46,7 @@ public class ServiceManagerFactory implements ApplicationContextAware { private SchedulerService schedulerService; private LockManager lockManager; private QueueManagerFactory qmf; + private CollectionVersionManagerFactory cvmf; private List<ServiceExecutionEventListener> eventListeners; private List<ServiceCollectionEventListener> collectionListeners; @@ -58,6 +59,7 @@ public class ServiceManagerFactory implements ApplicationContextAware { this.schedulerService = schedulerService; lockManager = injector.getInstance(LockManager.class); this.qmf = qmf; + this.cvmf = injector.getInstance(CollectionVersionManagerFactory.class); } @@ -80,7 +82,7 @@ public class ServiceManagerFactory implements ApplicationContextAware { qm = qmf.getQueueManager( applicationId ); } ServiceManager sm = new ServiceManager(); - sm.init( this, em, properties, qm ); + sm.init( this, em, properties, qm, cvmf); return sm; } http://git-wip-us.apache.org/repos/asf/usergrid/blob/7d3eb647/stack/services/src/test/java/org/apache/usergrid/services/ActivitiesServiceIT.java ---------------------------------------------------------------------- diff --git a/stack/services/src/test/java/org/apache/usergrid/services/ActivitiesServiceIT.java b/stack/services/src/test/java/org/apache/usergrid/services/ActivitiesServiceIT.java index c4762f2..b654b5f 100644 --- a/stack/services/src/test/java/org/apache/usergrid/services/ActivitiesServiceIT.java +++ b/stack/services/src/test/java/org/apache/usergrid/services/ActivitiesServiceIT.java @@ -17,6 +17,7 @@ package org.apache.usergrid.services; +import net.jcip.annotations.NotThreadSafe; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,6 +30,7 @@ import static org.junit.Assert.assertNotNull; +@NotThreadSafe public class ActivitiesServiceIT extends AbstractServiceIT { @SuppressWarnings("unused") private static final Logger LOG = LoggerFactory.getLogger( ActivitiesServiceIT.class ); http://git-wip-us.apache.org/repos/asf/usergrid/blob/7d3eb647/stack/services/src/test/java/org/apache/usergrid/services/CollectionServiceIT.java ---------------------------------------------------------------------- diff --git a/stack/services/src/test/java/org/apache/usergrid/services/CollectionServiceIT.java b/stack/services/src/test/java/org/apache/usergrid/services/CollectionServiceIT.java index 62818c2..abc4897 100644 --- a/stack/services/src/test/java/org/apache/usergrid/services/CollectionServiceIT.java +++ b/stack/services/src/test/java/org/apache/usergrid/services/CollectionServiceIT.java @@ -28,6 +28,8 @@ import org.apache.usergrid.persistence.exceptions.UnexpectedEntityTypeException; import org.apache.usergrid.persistence.schema.CollectionInfo; import org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException; +import java.util.UUID; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; @@ -244,7 +246,9 @@ public class CollectionServiceIT extends AbstractServiceIT { // TODO: This test cannot be supported with Core Persistence // try PUT on cats with a new UUID - final String catsUuid = "99999990-600c-11e2-b414-14109fd49581"; + //final String catsUuid = "99999990-600c-11e2-b414-14109fd49581"; + final String catsUuidStr = "99999990-600c-11e2-b414-14109fd49581"; + final UUID catsUuid = UUID.fromString(catsUuidStr); ServiceResults results = app.testRequest( ServiceAction.PUT, 1, "cats", catsUuid ); Entity entity = results.getEntity(); //Assert.assertEquals( entity.getUuid().toString(), catsUuid );