Skip to content
This repository was archived by the owner on May 12, 2021. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,41 +18,26 @@

package org.apache.tajo.ws.rs.resources;

import java.net.URI;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriInfo;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tajo.TajoConstants;
import org.apache.tajo.catalog.CatalogService;
import org.apache.tajo.catalog.proto.CatalogProtos.DatabaseProto;
import org.apache.tajo.catalog.proto.CatalogProtos.TablespaceProto;
import org.apache.tajo.master.TajoMaster.MasterContext;
import org.apache.tajo.ws.rs.JerseyResourceDelegate;
import org.apache.tajo.ws.rs.JerseyResourceDelegateContext;
import org.apache.tajo.ws.rs.JerseyResourceDelegateContextKey;
import org.apache.tajo.ws.rs.JerseyResourceDelegateUtil;
import org.apache.tajo.ws.rs.ResourcesUtil;
import org.apache.tajo.ws.rs.*;
import org.apache.tajo.ws.rs.requests.NewDatabaseRequest;
import org.apache.tajo.ws.rs.responses.DatabaseInfoResponse;

import javax.ws.rs.*;
import javax.ws.rs.core.*;
import javax.ws.rs.core.Response.Status;
import java.net.URI;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* Deals with Database Management
*/
Expand Down Expand Up @@ -131,19 +116,19 @@ public Response run(JerseyResourceDelegateContext context) {
* @return
*/
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response createNewDatabase(NewDatabaseRequest request) {
@Path("/{databaseName}")
public Response createNewDatabase(@PathParam("databaseName") String databaseName) {
if (LOG.isDebugEnabled()) {
LOG.debug("Client sent a new database creation request");
}

Response response = null;
try {
initializeContext();
JerseyResourceDelegateContextKey<NewDatabaseRequest> newDatabaseRequestKey =
JerseyResourceDelegateContextKey.valueOf(newDatabaseRequestKeyName, NewDatabaseRequest.class);
context.put(newDatabaseRequestKey, request);
JerseyResourceDelegateContextKey<String> databaseNameKey =
JerseyResourceDelegateContextKey.valueOf(databaseNameKeyName, String.class);
context.put(databaseNameKey, databaseName);

response = JerseyResourceDelegateUtil.runJerseyResourceDelegate(
new CreateNewDatabaseDelegate(),
application,
Expand All @@ -162,29 +147,29 @@ private static class CreateNewDatabaseDelegate implements JerseyResourceDelegate

@Override
public Response run(JerseyResourceDelegateContext context) {
JerseyResourceDelegateContextKey<NewDatabaseRequest> newDatabaseRequestKey =
JerseyResourceDelegateContextKey.valueOf(newDatabaseRequestKeyName, NewDatabaseRequest.class);
NewDatabaseRequest request = context.get(newDatabaseRequestKey);
JerseyResourceDelegateContextKey<String> databaseNameKey =
JerseyResourceDelegateContextKey.valueOf(databaseNameKeyName, String.class);
String databaseName = context.get(databaseNameKey);
JerseyResourceDelegateContextKey<MasterContext> masterContextKey =
JerseyResourceDelegateContextKey.valueOf(JerseyResourceDelegateUtil.MasterContextKey, MasterContext.class);
MasterContext masterContext = context.get(masterContextKey);
JerseyResourceDelegateContextKey<UriInfo> uriInfoKey =
JerseyResourceDelegateContextKey.valueOf(JerseyResourceDelegateUtil.UriInfoKey, UriInfo.class);
UriInfo uriInfo = context.get(uriInfoKey);

if (request.getDatabaseName() == null || request.getDatabaseName().isEmpty()) {
if (databaseName == null || databaseName.isEmpty()) {
return ResourcesUtil.createBadRequestResponse(LOG, "databaseName is null or empty.");
}

boolean databaseCreated =
masterContext.getCatalog().createDatabase(request.getDatabaseName(),
masterContext.getCatalog().createDatabase(databaseName,
TajoConstants.DEFAULT_TABLESPACE_NAME);

if (databaseCreated) {
URI newDatabaseURI = uriInfo.getBaseUriBuilder()
.path(DatabasesResource.class)
.path(DatabasesResource.class, "getDatabase")
.build(request.getDatabaseName());
.build(databaseName);
return Response.created(newDatabaseURI).build();
} else {
return ResourcesUtil.createExceptionResponse(LOG, "Failed to create a new database.");
Expand All @@ -209,7 +194,7 @@ public Response getDatabase(@PathParam("databaseName") String databaseName) {
try {
initializeContext();
JerseyResourceDelegateContextKey<String> databaseNameKey =
JerseyResourceDelegateContextKey.valueOf(databaseNameKeyName, String.class);
JerseyResourceDelegateContextKey.valueOf(databaseNameKeyName, String.class);
context.put(databaseNameKey, databaseName);

response = JerseyResourceDelegateUtil.runJerseyResourceDelegate(
Expand All @@ -231,7 +216,7 @@ private static class GetDatabaseDelegate implements JerseyResourceDelegate {
@Override
public Response run(JerseyResourceDelegateContext context) {
JerseyResourceDelegateContextKey<MasterContext> masterContextKey =
JerseyResourceDelegateContextKey.valueOf(JerseyResourceDelegateUtil.MasterContextKey, MasterContext.class);
JerseyResourceDelegateContextKey.valueOf(JerseyResourceDelegateUtil.MasterContextKey, MasterContext.class);
MasterContext masterContext = context.get(masterContextKey);
JerseyResourceDelegateContextKey<String> databaseNameKey =
JerseyResourceDelegateContextKey.valueOf(databaseNameKeyName, String.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,30 +18,27 @@

package org.apache.tajo.ws.rs.resources;

import java.net.URI;
import java.util.Collection;
import java.util.Map;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;

import org.apache.tajo.QueryTestCaseBase;
import org.apache.tajo.TajoConstants;
import org.apache.tajo.conf.TajoConf.ConfVars;
import org.apache.tajo.ws.rs.netty.gson.GsonFeature;
import org.apache.tajo.ws.rs.requests.NewDatabaseRequest;
import org.apache.tajo.ws.rs.responses.DatabaseInfoResponse;
import org.glassfish.jersey.client.ClientProperties;
import org.glassfish.jersey.filter.LoggingFilter;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import java.net.URI;
import java.util.Collection;
import java.util.Map;

import static org.junit.Assert.*;

public class TestDatabasesResource extends QueryTestCaseBase {
Expand Down Expand Up @@ -89,12 +86,11 @@ public void testGetAllDatabases() throws Exception {
@Test
public void testCreateDatabase() throws Exception {
String databaseName = "TestDatabasesResource";
NewDatabaseRequest request = new NewDatabaseRequest();

request.setDatabaseName(databaseName);

Response response = restClient.target(databasesURI)
.request().post(Entity.entity(request, MediaType.APPLICATION_JSON));
URI datbaseCreateURI = new URI(restServiceURI + "/databases/" + databaseName);

Entity<Object> entity = Entity.entity(null, "application/x-ample");
Response response = restClient.target(datbaseCreateURI)
.request().post(entity);

assertNotNull(response);
assertEquals(Status.CREATED.getStatusCode(), response.getStatus());
Expand All @@ -113,13 +109,14 @@ public void testCreateDatabase() throws Exception {

@Test
public void testCreateDatabaseBadRequest() throws Exception {
NewDatabaseRequest request = new NewDatabaseRequest();

URI datbaseCreateURI = new URI(restServiceURI + "/databases");
Entity<Object> entity = Entity.entity(null, "application/x-ample");

Response response = restClient.target(databasesURI)
.request().post(Entity.entity(request, MediaType.APPLICATION_JSON));
.request().post(entity);

assertNotNull(response);
assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
assertEquals(Status.METHOD_NOT_ALLOWED.getStatusCode(), response.getStatus());
}

@Test
Expand Down Expand Up @@ -148,12 +145,11 @@ public void testGetDatabaseNotFound() throws Exception {
@Test
public void testDropDatabase() throws Exception {
String databaseName = "TestDropDatabase";
NewDatabaseRequest request = new NewDatabaseRequest();

request.setDatabaseName(databaseName);

Response response = restClient.target(databasesURI)
.request().post(Entity.entity(request, MediaType.APPLICATION_JSON));
URI datbaseCreateURI = new URI(restServiceURI + "/databases/" + databaseName);

Entity<Object> entity = Entity.entity(null, "application/x-ample");
Response response = restClient.target(datbaseCreateURI)
.request().post(entity);

assertNotNull(response);
assertEquals(Status.CREATED.getStatusCode(), response.getStatus());
Expand Down