Merge branch 'two-dot-o-dev' into usergrid-103-upgrade-jersey
Conflicts:
stack/rest/src/main/java/org/apache/usergrid/rest/ApplicationsResource.java
stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsResource.java
stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/SystemResource.java
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/0db86225
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/0db86225
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/0db86225
Branch: refs/heads/two-dot-o-dev
Commit: 0db8622540987e951748ca1c01f7f609fe39ee3d
Parents: 2aaa37f a1be2fd
Author: Dave Johnson <[email protected]>
Authored: Wed Sep 9 13:11:35 2015 -0400
Committer: Dave Johnson <[email protected]>
Committed: Wed Sep 9 13:11:35 2015 -0400
----------------------------------------------------------------------
.../usergrid/corepersistence/CoreModule.java | 25 ++---
.../service/ApplicationService.java | 2 +-
.../service/ApplicationServiceImpl.java | 38 +++++---
.../corepersistence/service/StatusService.java | 81 ++++++++++++++++
.../service/StatusServiceImpl.java | 98 ++++++++++++++++++++
.../corepersistence/CpEntityMapUtilsTest.java | 26 +++---
.../persistence/ApplicationServiceIT.java | 8 +-
.../usergrid/rest/ApplicationsResource.java | 94 ++++++++++++++++---
.../rest/applications/ApplicationResource.java | 43 +++------
.../applications/ApplicationResource.java | 5 +-
.../apache/usergrid/rest/SystemResourceIT.java | 23 ++++-
.../test/resource/endpoints/SystemResource.java | 22 ++++-
.../usergrid/management/ManagementService.java | 2 +-
.../cassandra/ManagementServiceImpl.java | 45 +++++----
14 files changed, 391 insertions(+), 121 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0db86225/stack/rest/src/main/java/org/apache/usergrid/rest/ApplicationsResource.java
----------------------------------------------------------------------
diff --cc
stack/rest/src/main/java/org/apache/usergrid/rest/ApplicationsResource.java
index b702276,8d36acb..74827e9
---
a/stack/rest/src/main/java/org/apache/usergrid/rest/ApplicationsResource.java
+++
b/stack/rest/src/main/java/org/apache/usergrid/rest/ApplicationsResource.java
@@@ -19,8 -19,12 +19,10 @@@
*/
package org.apache.usergrid.rest;
-import com.sun.jersey.api.json.JSONWithPadding;
+import com.fasterxml.jackson.jaxrs.json.annotation.JSONP;
+ import org.apache.usergrid.corepersistence.service.StatusService;
-import org.apache.usergrid.persistence.Entity;
import org.apache.usergrid.persistence.EntityManager;
-import org.apache.usergrid.persistence.core.util.StringUtils;
+ import org.apache.usergrid.persistence.model.util.UUIDGenerator;
import org.apache.usergrid.rest.security.annotations.RequireSystemAccess;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@@ -56,13 -64,12 +59,15 @@@ public class ApplicationsResource exten
@RequireSystemAccess
@DELETE
+ @JSONP
@Path( "{applicationId}" )
- public ApiResponse clearApplication( @Context UriInfo ui,
- public JSONWithPadding clearApplication( @Context UriInfo ui,
- @PathParam("applicationId") UUID
applicationId,
- @QueryParam(
"confirmApplicationName" ) String confirmApplicationName,
- @QueryParam( "limit" ) int limit,
- @QueryParam( "callback" )
@DefaultValue( "callback" ) String callback )
++ public ApiResponse clearApplication(
++ @Context UriInfo ui,
+ @PathParam("applicationId") UUID applicationId,
+ @QueryParam( "confirmApplicationName" ) String confirmApplicationName,
++ @QueryParam( "limit" ) int limit,
+ @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback
)
+
throws Exception {
if(confirmApplicationName == null){
@@@ -72,28 -81,89 +79,89 @@@
final EntityManager em = emf.getEntityManager(applicationId);
final String name = em.getApplication().getApplicationName();
if(!name.toLowerCase().equals(confirmApplicationName.toLowerCase())){
- throw new IllegalArgumentException("confirmApplicationName: " +
confirmApplicationName + " does not equal " + name);
+ throw new IllegalArgumentException(
+ "confirmApplicationName: " + confirmApplicationName + " does
not equal " + name);
}
+ final StatusService statusService =
injector.getInstance(StatusService.class);
+
final ApiResponse response = createApiResponse();
+
response.setAction( "clear application" );
- logger.info( "clearing up application" );
- final AtomicInteger itemsDeleted = new AtomicInteger(0);
- try {
- management.deleteAllEntities(applicationId)
- .count()
- .doOnNext(count -> itemsDeleted.set(count))
- .toBlocking().lastOrDefault(0);
- }
- catch ( Exception e ) {
- logger.error( "Unable to delete all items, deleted: " +
itemsDeleted.get(), e );
- }
+ logger.info("clearing up application");
+
-
+ final Thread delete = new Thread() {
+
+ @Override
+ public void run() {
+ final AtomicInteger itemsDeleted = new AtomicInteger(0);
+ try {
+ management.deleteAllEntities(applicationId, limit)
+ .count()
+ .doOnNext(count -> itemsDeleted.set(count))
+ .doOnNext(count -> {
+ if( count % 100 == 0 ){
+ Map<String,Object> map = new
LinkedHashMap<>();
+ map.put("count",itemsDeleted.intValue());
+ final StatusService statusService =
injector.getInstance(StatusService.class);
+ statusService.setStatus(applicationId, jobId,
StatusService.Status.INPROGRESS,map).subscribe();
+ }
+ })
+ .doOnCompleted(() ->{
+ Map<String,Object> map = new LinkedHashMap<>();
+ map.put("count",itemsDeleted.intValue());
+ final StatusService statusService =
injector.getInstance(StatusService.class);
+ statusService.setStatus(applicationId,jobId,
StatusService.Status.COMPLETE,map).subscribe();
+ })
+ .subscribe();
+
+ } catch ( Exception e ) {
+ Map<String,Object> map = new LinkedHashMap<>();
+ map.put("exception",e);
+ statusService.setStatus(applicationId,jobId,
StatusService.Status.FAILED,map).subscribe();
+ logger.error( "Failed to delete appid:"+applicationId + "
jobid:"+jobId+" count:"+itemsDeleted, e );
+ }
+ }
+ };
+
+ delete.setName("Delete for app : " + applicationId + " job: " +
jobId);
+ delete.setDaemon(true);
+ delete.start();
+
+ statusService.setStatus(applicationId,jobId,
StatusService.Status.STARTED,new LinkedHashMap<>()).subscribe();
+
+ Map<String,Object> data = new HashMap<>();
+ data.put("jobId",jobId);
+ data.put("status",StatusService.Status.STARTED);
+ response.setData(data);
+ response.setSuccess();
- return new JSONWithPadding( response, callback );
++ return response;
+ }
+
+ @RequireSystemAccess
+ @GET
+ @Path( "{applicationId}/job/{jobId}" )
- public JSONWithPadding getStatus( @Context UriInfo ui,
- @PathParam("applicationId") UUID
applicationId,
- @PathParam("jobId") UUID jobId,
- @QueryParam( "callback" )
@DefaultValue( "callback" ) String callback ) throws Exception{
++ public ApiResponse getStatus(
++ @Context UriInfo ui,
++ @PathParam("applicationId") UUID applicationId,
++ @PathParam("jobId") UUID jobId,
++ @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback
) throws Exception{
++
+ final StatusService statusService =
injector.getInstance(StatusService.class);
+
+ final ApiResponse response = createApiResponse();
+
+ response.setAction( "clear application" );
+
+ StatusService.JobStatus jobStatus =
statusService.getStatus(applicationId, jobId).toBlocking().lastOrDefault(null);
+
Map<String,Object> data = new HashMap<>();
- data.put("count",itemsDeleted.get());
+ data.put("jobId",jobId);
+ data.put( "status", jobStatus.getStatus().toString() );
+ data.put( "metadata", jobStatus.getData() );
response.setData(data);
response.setSuccess();
-
- return new JSONWithPadding( response, callback );
-
+ return response;
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0db86225/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
----------------------------------------------------------------------
diff --cc
stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
index 7dc6717,52a0f99..afcbbaf
---
a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
+++
b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
@@@ -17,35 -17,8 +17,7 @@@
package org.apache.usergrid.rest.applications;
- import java.io.UnsupportedEncodingException;
- import java.net.URLEncoder;
- import java.util.Map;
- import java.util.UUID;
-
- import javax.ws.rs.Consumes;
- import javax.ws.rs.DELETE;
- import javax.ws.rs.DefaultValue;
- import javax.ws.rs.FormParam;
- import javax.ws.rs.GET;
- import javax.ws.rs.HeaderParam;
- import javax.ws.rs.POST;
- import javax.ws.rs.Path;
- import javax.ws.rs.Produces;
- import javax.ws.rs.QueryParam;
- import javax.ws.rs.core.Context;
- import javax.ws.rs.core.MediaType;
- import javax.ws.rs.core.PathSegment;
- import javax.ws.rs.core.Response;
- import javax.ws.rs.core.UriInfo;
-
-import com.sun.jersey.api.json.JSONWithPadding;
-import com.sun.jersey.api.view.Viewable;
+import com.fasterxml.jackson.jaxrs.json.annotation.JSONP;
- import org.apache.usergrid.rest.ApiResponse;
- import org.glassfish.jersey.server.mvc.Viewable;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.context.annotation.Scope;
- import org.springframework.stereotype.Component;
-
import org.apache.amber.oauth2.common.error.OAuthError;
import org.apache.amber.oauth2.common.exception.OAuthProblemException;
import org.apache.amber.oauth2.common.message.OAuthResponse;
@@@ -65,6 -37,6 +36,7 @@@ import org.apache.usergrid.persistence.
import org.apache.usergrid.persistence.entities.User;
import org.apache.usergrid.persistence.index.query.Identifier;
import org.apache.usergrid.rest.AbstractContextResource;
++import org.apache.usergrid.rest.ApiResponse;
import org.apache.usergrid.rest.applications.assets.AssetsResource;
import org.apache.usergrid.rest.applications.events.EventsResource;
import org.apache.usergrid.rest.applications.queues.QueueResource;
@@@ -75,6 -47,17 +47,18 @@@ import org.apache.usergrid.rest.securit
import
org.apache.usergrid.rest.security.annotations.RequireOrganizationAccess;
import org.apache.usergrid.security.oauth.AccessInfo;
import org.apache.usergrid.security.oauth.ClientCredentialsInfo;
++import org.glassfish.jersey.server.mvc.Viewable;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+ import org.springframework.context.annotation.Scope;
+ import org.springframework.stereotype.Component;
+
+ import javax.ws.rs.*;
+ import javax.ws.rs.core.*;
+ import java.io.UnsupportedEncodingException;
+ import java.net.URLEncoder;
+ import java.util.Map;
+ import java.util.UUID;
import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
import static javax.servlet.http.HttpServletResponse.SC_OK;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0db86225/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationResource.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0db86225/stack/rest/src/test/java/org/apache/usergrid/rest/SystemResourceIT.java
----------------------------------------------------------------------
diff --cc
stack/rest/src/test/java/org/apache/usergrid/rest/SystemResourceIT.java
index a278358,55623dd..ae9a2c2
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/SystemResourceIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/SystemResourceIT.java
@@@ -20,9 -20,11 +20,10 @@@ package org.apache.usergrid.rest
import org.apache.usergrid.rest.test.resource.AbstractRestIT;
import org.apache.usergrid.rest.test.resource.model.Entity;
import org.apache.usergrid.rest.test.resource.model.QueryParameters;
+import org.junit.Test;
import java.util.LinkedHashMap;
+ import java.util.UUID;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@@ -60,12 -63,25 +61,26 @@@ public class SystemResourceIT extends A
queryParameters.addParam( "access_token",
clientSetup.getSuperuserToken().getAccessToken() );
queryParameters.addParam("confirmApplicationName",
this.clientSetup.getAppName());
- org.apache.usergrid.rest.test.resource.model.ApiResponse result =
clientSetup.getRestClient().system().applications(this.clientSetup.getAppUuid()).delete(
queryParameters);
+ org.apache.usergrid.rest.test.resource.model.ApiResponse result =
+
clientSetup.getRestClient().system().applications(this.clientSetup.getAppUuid()).delete(
queryParameters);
- assertNotNull( result );
- assertNotNull( "ok",result.getStatus() );
- assertEquals(((LinkedHashMap) result.getData()).get("count"), count);
+ assertNotNull(result);
+ assertNotNull("ok", result.getStatus());
+ assertNotNull(((LinkedHashMap) result.getData()).get("jobId"));
+
+ String jobId = (String)((LinkedHashMap)
result.getData()).get("jobId");
+ queryParameters = new QueryParameters();
+ for(int i = 0;i<10;i++ ) {
+ result =
clientSetup.getRestClient().system().applications(this.clientSetup.getAppUuid(),
"job/" + jobId).get(queryParameters);
+ String status = (String) ((LinkedHashMap)
result.getData()).get("status");
+ if(status.equals("COMPLETE")){
+ break;
+ }else{
+ Thread.sleep(100);
+ }
+ }
+ assertEquals(((LinkedHashMap)((LinkedHashMap)
result.getData()).get("metadata")).get("count"), 10);
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/0db86225/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/SystemResource.java
----------------------------------------------------------------------
diff --cc
stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/SystemResource.java
index 6d89fa9,1a7b594..96e8fa5
---
a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/SystemResource.java
+++
b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/SystemResource.java
@@@ -45,32 -48,37 +45,46 @@@ public class SystemResource extends Nam
public ApplicationsResource applications(String appid) {
return new ApplicationsResource(appid,context,this);
}
+
+ public ApplicationsResource applications(String appid, String
additionalPath) {
+ return new
ApplicationsResource(appid+"/"+additionalPath,context,this);
+ }
++
public class ApplicationsResource extends NamedResource {
- public ApplicationsResource(final String appid, final ClientContext
context, final UrlResource parent ) {
- super( "applications/"+appid,context, parent );
+
+ public ApplicationsResource(final String appid, final ClientContext
context, final UrlResource parent) {
+ super( "applications/" + appid, context, parent );
}
+ public ApiResponse get(QueryParameters queryParameters){
+
- WebResource resource = getResource();
++ WebTarget resource = getTarget();
+ resource = addParametersToResource( resource, queryParameters );
+
- //added httpBasicauth filter to all setup calls because they all
do verification this way.
- HTTPBasicAuthFilter httpBasicAuthFilter = new
HTTPBasicAuthFilter( "superuser","superpassword" );
- resource.addFilter(httpBasicAuthFilter);
++ HttpAuthenticationFeature feature =
HttpAuthenticationFeature.basicBuilder()
++ .credentials( "superuser", "superpassword" ).build();
+
- return resource.type( MediaType.APPLICATION_JSON_TYPE ).accept(
MediaType.APPLICATION_JSON )
++ return resource.register( feature ).request().accept(
MediaType.APPLICATION_JSON )
+ .get(ApiResponse.class);
+ }
- public ApiResponse delete(QueryParameters queryParameters){
+
- WebResource resource = getResource();
++
+ public ApiResponse delete(QueryParameters queryParameters) {
+
+ WebTarget resource = getTarget();
resource = addParametersToResource( resource, queryParameters );
- //added httpBasicauth filter to all setup calls because they all
do verification this way.
- HTTPBasicAuthFilter httpBasicAuthFilter = new
HTTPBasicAuthFilter( "superuser","superpassword" );
- resource.addFilter(httpBasicAuthFilter);
+ HttpAuthenticationFeature feature =
HttpAuthenticationFeature.basicBuilder()
+ .credentials( "superuser", "superpassword" ).build();
+
+ return resource.register( feature ).request().delete(
ApiResponse.class );
- return resource.type( MediaType.APPLICATION_JSON_TYPE ).accept(
MediaType.APPLICATION_JSON )
- .delete(ApiResponse.class);
}
}
+
+ public ApiResponse put(){
- ApiResponse
- response = getTarget(true)
- .request()
- .accept(MediaType.APPLICATION_JSON)
++ ApiResponse response =
getTarget(true).request().accept(MediaType.APPLICATION_JSON)
+ .put( javax.ws.rs.client.Entity.json(""), ApiResponse.class);
+ return response;
+ }
}