Changes Listed below:
[music.git] / src / main / java / org / onap / music / rest / RestMusicDataAPI.java
index 8500298..5fa955e 100755 (executable)
@@ -125,8 +125,8 @@ public class RestMusicDataAPI {
         public String primarKeyValue;
         public StringBuilder rowIdString;
         @SuppressWarnings("unused")
-        public PreparedQueryObject queryObject;// the string with all the row
-                                               // identifiers separated by AND
+        public PreparedQueryObject queryObject; // the string with all the row
+                                                // identifiers separated by AND
 
         public RowIdentifier(String primaryKeyValue, StringBuilder rowIdString,
                         PreparedQueryObject queryObject) {
@@ -151,128 +151,130 @@ public class RestMusicDataAPI {
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces(MediaType.APPLICATION_JSON)
     public Response createKeySpace(
-                    @ApiParam(value = "Major Version",required = true) @PathParam("version") String version,
-                    @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
-                    @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
-                    @ApiParam(value = "AID", required = false) @HeaderParam("aid") String aid,
-                    @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization,
-                    @ApiParam(value = "Application namespace",required = true) @HeaderParam(NS) String ns,
-                    JsonKeySpace kspObject,
-                    @ApiParam(value = "Keyspace Name",required = true) @PathParam("name") String keyspaceName) {
+        @ApiParam(value = "Major Version",required = true) @PathParam("version") String version,
+        @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
+        @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
+        @ApiParam(value = "AID", required = false) @HeaderParam("aid") String aid,
+        @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization,
+        @ApiParam(value = "Application namespace",required = true) @HeaderParam(NS) String ns,
+        JsonKeySpace kspObject,
+        @ApiParam(value = "Keyspace Name",required = true) @PathParam("name") String keyspaceName) {
         try {
-        ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
-        EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspaceName+" ) ");
-        logger.info(EELFLoggerDelegate.applicationLogger,"In Create Keyspace " + keyspaceName);
-        if ( KEYSPACE_ACTIVE ) {
-            logger.info(EELFLoggerDelegate.applicationLogger,"Creating Keyspace " + keyspaceName);
-            Map<String,String> userCredentials = MusicUtil.extractBasicAuthentication(authorization);
-            String userId = userCredentials.get(MusicUtil.USERID);
-            String password = userCredentials.get(MusicUtil.PASSWORD);
-            Map<String, Object> authMap = CachingUtil.verifyOnboarding(ns, userId, password);
-            if (!authMap.isEmpty()) {
-                logger.error(EELFLoggerDelegate.errorLogger,authMap.get("Exception").toString(), AppMessages.MISSINGDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.AUTHENTICATIONERROR);
-                response.status(Status.UNAUTHORIZED);
-                return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Exception"))).toMap()).build();
-            }
-    
-            if (!authenticator.authenticateUser(ns, authorization, keyspaceName, aid, Operation.CREATE_KEYSPACE)) {
-                return response.status(Status.UNAUTHORIZED)
-                        .entity(new JsonResponse(ResultType.FAILURE)
-                                .setError("Unauthorized: Please check username, password and make sure your app is onboarded")
-                                .toMap()).build();
-            }  
-    
-            String consistency = MusicUtil.EVENTUAL;// for now this needs only
-                                                    // eventual consistency
-    
-            if(kspObject == null || kspObject.getReplicationInfo() == null) {
-                response.status(Status.BAD_REQUEST);
-                return response.entity(new JsonResponse(ResultType.FAILURE).setError(ResultType.BODYMISSING.getResult()).toMap()).build();
-            }
-            PreparedQueryObject queryObject = new PreparedQueryObject();
-            if(consistency.equalsIgnoreCase(MusicUtil.EVENTUAL) && kspObject.getConsistencyInfo().get("consistency") != null) {
-                if(MusicUtil.isValidConsistency(kspObject.getConsistencyInfo().get("consistency")))
-                    queryObject.setConsistency(kspObject.getConsistencyInfo().get("consistency"));
-                else
-                    return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.SYNTAXERROR).setError("Invalid Consistency type").toMap()).build();
-            }
-            long start = System.currentTimeMillis();
-            Map<String, Object> replicationInfo = kspObject.getReplicationInfo();
-            String repString = null;
-            try {
-                repString = "{" + MusicUtil.jsonMaptoSqlString(replicationInfo, ",") + "}";
-            } catch (Exception e) {
-                logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.MISSINGDATA  ,ErrorSeverity
-                    .CRITICAL, ErrorTypes.DATAERROR, e);
-    
-            }
-            queryObject.appendQueryString(
-                            "CREATE KEYSPACE " + keyspaceName + " WITH replication = " + repString);
-            if (kspObject.getDurabilityOfWrites() != null) {
+            ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
+            EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspaceName+" ) ");
+            logger.info(EELFLoggerDelegate.applicationLogger,"In Create Keyspace " + keyspaceName);
+            if ( MusicUtil.isKeyspaceActive() ) {
+                logger.info(EELFLoggerDelegate.applicationLogger,"Creating Keyspace " + keyspaceName);
+                Map<String,String> userCredentials = MusicUtil.extractBasicAuthentication(authorization);
+                String userId = userCredentials.get(MusicUtil.USERID);
+                String password = userCredentials.get(MusicUtil.PASSWORD);
+                Map<String, Object> authMap = CachingUtil.verifyOnboarding(ns, userId, password);
+                if (!authMap.isEmpty()) {
+                    logger.error(EELFLoggerDelegate.errorLogger,authMap.get("Exception").toString(), AppMessages.MISSINGDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.AUTHENTICATIONERROR);
+                    response.status(Status.UNAUTHORIZED);
+                    return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Exception"))).toMap()).build();
+                }
+        
+                if (!authenticator.authenticateUser(ns, authorization, keyspaceName, aid, Operation.CREATE_KEYSPACE)) {
+                    return response.status(Status.UNAUTHORIZED)
+                            .entity(new JsonResponse(ResultType.FAILURE)
+                                    .setError("Unauthorized: Please check username, password and make sure your app is onboarded")
+                                    .toMap()).build();
+                }  
+        
+                String consistency = MusicUtil.EVENTUAL;// for now this needs only
+                                                        // eventual consistency
+        
+                if(kspObject == null || kspObject.getReplicationInfo() == null) {
+                    response.status(Status.BAD_REQUEST);
+                    return response.entity(new JsonResponse(ResultType.FAILURE).setError(ResultType.BODYMISSING.getResult()).toMap()).build();
+                }
+                PreparedQueryObject queryObject = new PreparedQueryObject();
+                if(consistency.equalsIgnoreCase(MusicUtil.EVENTUAL) && kspObject.getConsistencyInfo().get("consistency") != null) {
+                    if (MusicUtil.isValidConsistency(kspObject.getConsistencyInfo().get("consistency"))) { 
+                        queryObject.setConsistency(kspObject.getConsistencyInfo().get("consistency")); 
+                    } else {
+                        return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.SYNTAXERROR)
+                            .setError("Invalid Consistency type").toMap()).build();
+                    }
+                }
+                long start = System.currentTimeMillis();
+                Map<String, Object> replicationInfo = kspObject.getReplicationInfo();
+                String repString = null;
+                try {
+                    repString = "{" + MusicUtil.jsonMaptoSqlString(replicationInfo, ",") + "}";
+                } catch (Exception e) {
+                    logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.MISSINGDATA  ,ErrorSeverity
+                        .CRITICAL, ErrorTypes.DATAERROR, e);
+        
+                }
                 queryObject.appendQueryString(
-                                " AND durable_writes = " + kspObject.getDurabilityOfWrites());
-            }
-    
-            queryObject.appendQueryString(";");
-            long end = System.currentTimeMillis();
-            logger.info(EELFLoggerDelegate.applicationLogger,
-                            "Time taken for setting up query in create keyspace:" + (end - start));
-    
-            ResultType result = ResultType.FAILURE;
-            try {
-                result = MusicCore.nonKeyRelatedPut(queryObject, consistency);
-                logger.info(EELFLoggerDelegate.applicationLogger, "result = " + result);
-            } catch ( MusicServiceException ex) {
-                logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), AppMessages.UNKNOWNERROR  ,ErrorSeverity
-                    .WARN, ErrorTypes.MUSICSERVICEERROR, ex);
-                return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("err:" + ex.getMessage()).toMap()).build();
-            }
-    
-            try {
-                queryObject = new PreparedQueryObject();
-                queryObject.appendQueryString("CREATE ROLE IF NOT EXISTS '" + userId
-                                + "' WITH PASSWORD = '" + password + "' AND LOGIN = true;");
-                MusicCore.nonKeyRelatedPut(queryObject, consistency);
-                queryObject = new PreparedQueryObject();
-                queryObject.appendQueryString("GRANT ALL PERMISSIONS on KEYSPACE " + keyspaceName
-                                    + " to '" + userId + "'");
+                                "CREATE KEYSPACE " + keyspaceName + " WITH replication = " + repString);
+                if (kspObject.getDurabilityOfWrites() != null) {
+                    queryObject.appendQueryString(
+                                    " AND durable_writes = " + kspObject.getDurabilityOfWrites());
+                }
+        
                 queryObject.appendQueryString(";");
-                MusicCore.nonKeyRelatedPut(queryObject, consistency);
-            } catch (Exception e) {
-                logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.UNKNOWNERROR,ErrorSeverity
-                    .WARN, ErrorTypes.MUSICSERVICEERROR, e);
-            }
-    
-            try {
-                boolean isAAF = Boolean.valueOf(CachingUtil.isAAFApplication(ns));
-                String hashedpwd = BCrypt.hashpw(password, BCrypt.gensalt());
-                queryObject = new PreparedQueryObject();
-                queryObject.appendQueryString(
-                            "INSERT into admin.keyspace_master (uuid, keyspace_name, application_name, is_api, "
-                                            + "password, username, is_aaf) values (?,?,?,?,?,?,?)");
-                queryObject.addValue(MusicUtil.convertToActualDataType(DataType.uuid(), aid));
-                queryObject.addValue(MusicUtil.convertToActualDataType(DataType.text(), keyspaceName));
-                queryObject.addValue(MusicUtil.convertToActualDataType(DataType.text(), ns));
-                queryObject.addValue(MusicUtil.convertToActualDataType(DataType.cboolean(), "True"));
-                queryObject.addValue(MusicUtil.convertToActualDataType(DataType.text(), hashedpwd));
-                queryObject.addValue(MusicUtil.convertToActualDataType(DataType.text(), userId));
-                queryObject.addValue(MusicUtil.convertToActualDataType(DataType.cboolean(), isAAF));
-                CachingUtil.updateMusicCache(keyspaceName, ns);
-                CachingUtil.updateMusicValidateCache(ns, userId, hashedpwd);
-                MusicCore.eventualPut(queryObject);
-            } catch (Exception e) {
-                logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.UNKNOWNERROR,ErrorSeverity
-                    .WARN, ErrorTypes.MUSICSERVICEERROR, e);
-                return response.status(Response.Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(e.getMessage()).toMap()).build();
+                long end = System.currentTimeMillis();
+                logger.info(EELFLoggerDelegate.applicationLogger,
+                                "Time taken for setting up query in create keyspace:" + (end - start));
+        
+                ResultType result = ResultType.FAILURE;
+                try {
+                    result = MusicCore.nonKeyRelatedPut(queryObject, consistency);
+                    logger.info(EELFLoggerDelegate.applicationLogger, "result = " + result);
+                } catch ( MusicServiceException ex) {
+                    logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), AppMessages.UNKNOWNERROR  ,ErrorSeverity
+                        .WARN, ErrorTypes.MUSICSERVICEERROR, ex);
+                    return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("err:" + ex.getMessage()).toMap()).build();
+                }
+        
+                try {
+                    queryObject = new PreparedQueryObject();
+                    queryObject.appendQueryString("CREATE ROLE IF NOT EXISTS '" + userId
+                                    + "' WITH PASSWORD = '" + password + "' AND LOGIN = true;");
+                    MusicCore.nonKeyRelatedPut(queryObject, consistency);
+                    queryObject = new PreparedQueryObject();
+                    queryObject.appendQueryString("GRANT ALL PERMISSIONS on KEYSPACE " + keyspaceName
+                                        + " to '" + userId + "'");
+                    queryObject.appendQueryString(";");
+                    MusicCore.nonKeyRelatedPut(queryObject, consistency);
+                } catch (Exception e) {
+                    logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.UNKNOWNERROR,ErrorSeverity
+                        .WARN, ErrorTypes.MUSICSERVICEERROR, e);
+                }
+        
+                try {
+                    boolean isAAF = Boolean.valueOf(CachingUtil.isAAFApplication(ns));
+                    String hashedpwd = BCrypt.hashpw(password, BCrypt.gensalt());
+                    queryObject = new PreparedQueryObject();
+                    queryObject.appendQueryString(
+                                "INSERT into admin.keyspace_master (uuid, keyspace_name, application_name, is_api, "
+                                                + "password, username, is_aaf) values (?,?,?,?,?,?,?)");
+                    queryObject.addValue(MusicUtil.convertToActualDataType(DataType.uuid(), aid));
+                    queryObject.addValue(MusicUtil.convertToActualDataType(DataType.text(), keyspaceName));
+                    queryObject.addValue(MusicUtil.convertToActualDataType(DataType.text(), ns));
+                    queryObject.addValue(MusicUtil.convertToActualDataType(DataType.cboolean(), "True"));
+                    queryObject.addValue(MusicUtil.convertToActualDataType(DataType.text(), hashedpwd));
+                    queryObject.addValue(MusicUtil.convertToActualDataType(DataType.text(), userId));
+                    queryObject.addValue(MusicUtil.convertToActualDataType(DataType.cboolean(), isAAF));
+                    CachingUtil.updateMusicCache(keyspaceName, ns);
+                    CachingUtil.updateMusicValidateCache(ns, userId, hashedpwd);
+                    MusicCore.eventualPut(queryObject);
+                } catch (Exception e) {
+                    logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.UNKNOWNERROR,ErrorSeverity
+                        .WARN, ErrorTypes.MUSICSERVICEERROR, e);
+                    return response.status(Response.Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(e.getMessage()).toMap()).build();
+                }
+        
+                return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).setMessage("Keyspace " + keyspaceName + " Created").toMap()).build();
+            } else {
+                String vError = "Keyspace Creation has been turned off. Contact DBA to create the keyspace or set keyspace.active to true.";
+                logger.info(EELFLoggerDelegate.applicationLogger,vError);
+                logger.error(EELFLoggerDelegate.errorLogger,vError, AppMessages.UNKNOWNERROR,ErrorSeverity.WARN, ErrorTypes.MUSICSERVICEERROR);
+                return response.status(Response.Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(vError).toMap()).build();
             }
-    
-            return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).setMessage("Keyspace " + keyspaceName + " Created").toMap()).build();
-        } else {
-            String vError = "Keyspace Creation no longer supported after versions 3.2.x. Contact DBA to create the keyspace.";
-            logger.info(EELFLoggerDelegate.applicationLogger,vError);
-            logger.error(EELFLoggerDelegate.errorLogger,vError, AppMessages.UNKNOWNERROR,ErrorSeverity.WARN, ErrorTypes.MUSICSERVICEERROR);
-            return response.status(Response.Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(vError).toMap()).build();
-        }
         } finally {
             EELFLoggerDelegate.mdcRemove("keyspace");
         }
@@ -291,69 +293,68 @@ public class RestMusicDataAPI {
     @ApiOperation(value = "Delete Keyspace", response = String.class,hidden=true)
     @Produces(MediaType.APPLICATION_JSON)
     public Response dropKeySpace(
-                    @ApiParam(value = "Major Version",required = true) @PathParam("version") String version,
-                    @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
-                    @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
-                    @ApiParam(value = "AID", required = false) @HeaderParam("aid") String aid,
-                    @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization,
-                    @ApiParam(value = "Application namespace",required = true) @HeaderParam(NS) String ns,
-                    @ApiParam(value = "Keyspace Name",required = true) @PathParam("name") String keyspaceName) throws Exception {
+        @ApiParam(value = "Major Version",required = true) @PathParam("version") String version,
+        @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
+        @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
+        @ApiParam(value = "AID", required = false) @HeaderParam("aid") String aid,
+        @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization,
+        @ApiParam(value = "Application namespace",required = true) @HeaderParam(NS) String ns,
+        @ApiParam(value = "Keyspace Name",required = true) @PathParam("name") String keyspaceName) throws Exception {
         try {
-        ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
-        EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspaceName+" ) ");
-        logger.info(EELFLoggerDelegate.applicationLogger,"In Drop Keyspace " + keyspaceName);
-        if ( KEYSPACE_ACTIVE ) {
-            if (!authenticator.authenticateUser(ns, authorization, keyspaceName, aid, Operation.DROP_KEYSPACE)) {
-                return response.status(Status.UNAUTHORIZED)
+            ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
+            EELFLoggerDelegate.mdcPut("keyspace", "( " + keyspaceName + " ) ");
+            logger.info(EELFLoggerDelegate.applicationLogger,"In Drop Keyspace " + keyspaceName);
+            if (MusicUtil.isKeyspaceActive()) {
+                if (!authenticator.authenticateUser(ns, authorization, keyspaceName, aid, Operation.DROP_KEYSPACE)) {
+                    return response.status(Status.UNAUTHORIZED)
                         .entity(new JsonResponse(ResultType.FAILURE)
-                                .setError("Unauthorized: Please check username, password and make sure your app is onboarded")
-                                .toMap()).build();
-            }  
-    
-            String consistency = MusicUtil.EVENTUAL;// for now this needs only
-                                                    // eventual
-            // consistency
-            String appName = CachingUtil.getAppName(keyspaceName);
-            String uuid = CachingUtil.getUuidFromMusicCache(keyspaceName);
-            PreparedQueryObject pQuery = new PreparedQueryObject();
-            pQuery.appendQueryString(
-                            "select  count(*) as count from admin.keyspace_master where application_name=? allow filtering;");
-            pQuery.addValue(MusicUtil.convertToActualDataType(DataType.text(), appName));
-            Row row = MusicCore.get(pQuery).one();
-            long count = row.getLong(0);
-    
-            if (count == 0) {
-                logger.error(EELFLoggerDelegate.errorLogger,"Keyspace not found. Please make sure keyspace exists.", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.DATAERROR);
-                return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("Keyspace not found. Please make sure keyspace exists.").toMap()).build();
-            // Admin Functions:
-            } else if (count == 1) {
-                pQuery = new PreparedQueryObject();
+                        .setError("Unauthorized: Please check username, password and make sure your app is onboarded")
+                        .toMap()).build();
+                }
+                String consistency = MusicUtil.EVENTUAL;// for now this needs only
+                                                        // eventual
+                // consistency
+                String appName = CachingUtil.getAppName(keyspaceName);
+                String uuid = CachingUtil.getUuidFromMusicCache(keyspaceName);
+                PreparedQueryObject pQuery = new PreparedQueryObject();
                 pQuery.appendQueryString(
-                        "UPDATE admin.keyspace_master SET keyspace_name=? where uuid = ?;");
-                pQuery.addValue(MusicUtil.convertToActualDataType(DataType.text(),
-                        MusicUtil.DEFAULTKEYSPACENAME));
-                pQuery.addValue(MusicUtil.convertToActualDataType(DataType.uuid(), uuid));
-                MusicCore.nonKeyRelatedPut(pQuery, consistency);
+                                "select  count(*) as count from admin.keyspace_master where application_name=? allow filtering;");
+                pQuery.addValue(MusicUtil.convertToActualDataType(DataType.text(), appName));
+                Row row = MusicCore.get(pQuery).one();
+                long count = row.getLong(0);
+        
+                if (count == 0) {
+                    logger.error(EELFLoggerDelegate.errorLogger,"Keyspace not found. Please make sure keyspace exists.", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.DATAERROR);
+                    return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("Keyspace not found. Please make sure keyspace exists.").toMap()).build();
+                // Admin Functions:
+                } else if (count == 1) {
+                    pQuery = new PreparedQueryObject();
+                    pQuery.appendQueryString(
+                            "UPDATE admin.keyspace_master SET keyspace_name=? where uuid = ?;");
+                    pQuery.addValue(MusicUtil.convertToActualDataType(DataType.text(),
+                            MusicUtil.DEFAULTKEYSPACENAME));
+                    pQuery.addValue(MusicUtil.convertToActualDataType(DataType.uuid(), uuid));
+                    MusicCore.nonKeyRelatedPut(pQuery, consistency);
+                } else {
+                    pQuery = new PreparedQueryObject();
+                    pQuery.appendQueryString("delete from admin.keyspace_master where uuid = ?");
+                    pQuery.addValue(MusicUtil.convertToActualDataType(DataType.uuid(), uuid));
+                    MusicCore.nonKeyRelatedPut(pQuery, consistency);
+                }
+        
+                PreparedQueryObject queryObject = new PreparedQueryObject();
+                queryObject.appendQueryString("DROP KEYSPACE " + keyspaceName + ";");
+                ResultType result = MusicCore.nonKeyRelatedPut(queryObject, consistency);
+                if ( result.equals(ResultType.FAILURE) ) {
+                    return response.status(Status.BAD_REQUEST).entity(new JsonResponse(result).setError("Error Deleteing Keyspace " + keyspaceName).toMap()).build();
+                }
+                return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).setMessage("Keyspace " + keyspaceName + " Deleted").toMap()).build();
             } else {
-                pQuery = new PreparedQueryObject();
-                pQuery.appendQueryString("delete from admin.keyspace_master where uuid = ?");
-                pQuery.addValue(MusicUtil.convertToActualDataType(DataType.uuid(), uuid));
-                MusicCore.nonKeyRelatedPut(pQuery, consistency);
+                String vError = "Keyspace deletion has been turned off. Contact DBA to delete the keyspace or set keyspace.active to true.";
+                logger.info(EELFLoggerDelegate.applicationLogger,vError);
+                logger.error(EELFLoggerDelegate.errorLogger,vError, AppMessages.UNKNOWNERROR,ErrorSeverity.WARN, ErrorTypes.MUSICSERVICEERROR);
+                return response.status(Response.Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(vError).toMap()).build();
             }
-    
-            PreparedQueryObject queryObject = new PreparedQueryObject();
-            queryObject.appendQueryString("DROP KEYSPACE " + keyspaceName + ";");
-            ResultType result = MusicCore.nonKeyRelatedPut(queryObject, consistency);
-            if ( result.equals(ResultType.FAILURE) ) {
-                return response.status(Status.BAD_REQUEST).entity(new JsonResponse(result).setError("Error Deleteing Keyspace " + keyspaceName).toMap()).build();
-            }
-            return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).setMessage("Keyspace " + keyspaceName + " Deleted").toMap()).build();
-        } else {
-            String vError = "Keyspace Droping no longer supported after versions 3.2.x. Contact DBA to drop the keyspace.";
-            logger.info(EELFLoggerDelegate.applicationLogger,vError);
-            logger.error(EELFLoggerDelegate.errorLogger,vError, AppMessages.UNKNOWNERROR,ErrorSeverity.WARN, ErrorTypes.MUSICSERVICEERROR);
-            return response.status(Response.Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(vError).toMap()).build();
-        }
         } finally {
             EELFLoggerDelegate.mdcRemove("keyspace");
         }
@@ -367,7 +368,7 @@ public class RestMusicDataAPI {
      * @param tablename
      * @param headers
      * @return
-     * @throws Exception
+     * @throws Exception -
      */
     @POST
     @Path("/{keyspace: .*}/tables/{tablename: .*}")
@@ -379,216 +380,215 @@ public class RestMusicDataAPI {
         @ApiResponse(code= 401, message = "Unautorized User")
     })
     public Response createTable(
-                    @ApiParam(value = "Major Version",required = true) @PathParam("version") String version,
-                    @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
-                    @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
-                    @ApiParam(value = "AID", required = false) @HeaderParam("aid") String aid,
-                    @ApiParam(value = "Application namespace",required = true) @HeaderParam(NS) String ns,
-                    @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization,
-                     JsonTable tableObj,
-                    @ApiParam(value = "Keyspace Name",required = true) @PathParam("keyspace") String keyspace,
-                    @ApiParam(value = "Table Name",required = true) @PathParam("tablename") String tablename) throws Exception {
+        @ApiParam(value = "Major Version",required = true) @PathParam("version") String version,
+        @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
+        @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
+        @ApiParam(value = "AID", required = false) @HeaderParam("aid") String aid,
+        @ApiParam(value = "Application namespace",required = true) @HeaderParam(NS) String ns,
+        @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization,
+        JsonTable tableObj,
+        @ApiParam(value = "Keyspace Name",required = true) @PathParam("keyspace") String keyspace,
+        @ApiParam(value = "Table Name",required = true) @PathParam("tablename") String tablename) throws Exception {
         try {
-        ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
-        if(keyspace == null || keyspace.isEmpty() || tablename == null || tablename.isEmpty()){
-            return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
-                    .setError("One or more path parameters are not set, please check and try again."
-                        + "Parameter values: keyspace='" + keyspace + "' tablename='" + tablename + "'")
-                          .toMap()).build();
-        }
-        EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspace+" ) ");
-        if (!authenticator.authenticateUser(ns, authorization, keyspace, aid, Operation.CREATE_TABLE)) {
-            return response.status(Status.UNAUTHORIZED)
-                    .entity(new JsonResponse(ResultType.FAILURE)
-                            .setError("Unauthorized: Please check username, password and make sure your app is onboarded")
+            ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
+            if(keyspace == null || keyspace.isEmpty() || tablename == null || tablename.isEmpty()){
+                return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
+                        .setError("One or more path parameters are not set, please check and try again."
+                            + "Parameter values: keyspace='" + keyspace + "' tablename='" + tablename + "'")
                             .toMap()).build();
-        }       
-        
-        String consistency = MusicUtil.EVENTUAL;
-        // for now this needs only eventual consistency
-
-        String primaryKey = null;
-        String partitionKey = tableObj.getPartitionKey();
-        String clusterKey = tableObj.getClusteringKey();
-        String filteringKey = tableObj.getFilteringKey();
-        if(filteringKey != null) {
-            clusterKey = clusterKey + "," + filteringKey;
-        }
-        primaryKey = tableObj.getPrimaryKey(); // get primaryKey if available
-
-        PreparedQueryObject queryObject = new PreparedQueryObject();
-        // first read the information about the table fields
-        Map<String, String> fields = tableObj.getFields();
-        StringBuilder fieldsString = new StringBuilder("(vector_ts text,");
-        int counter = 0;
-        for (Map.Entry<String, String> entry : fields.entrySet()) {
-            if (entry.getKey().equals("PRIMARY KEY")) {
-                primaryKey = entry.getValue(); // replaces primaryKey
-                primaryKey = primaryKey.trim();
-            } else {
-                  if (counter == 0 )  fieldsString.append("" + entry.getKey() + " " + entry.getValue() + "");
-                  else fieldsString.append("," + entry.getKey() + " " + entry.getValue() + "");
             }
+            EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspace+" ) ");
+            if (!authenticator.authenticateUser(ns, authorization, keyspace, aid, Operation.CREATE_TABLE)) {
+                return response.status(Status.UNAUTHORIZED)
+                        .entity(new JsonResponse(ResultType.FAILURE)
+                                .setError("Unauthorized: Please check username, password and make sure your app is onboarded")
+                                .toMap()).build();
+            }       
+            String consistency = MusicUtil.EVENTUAL;
+            // for now this needs only eventual consistency
+            String primaryKey = null;
+            String partitionKey = tableObj.getPartitionKey();
+            String clusterKey = tableObj.getClusteringKey();
+            String filteringKey = tableObj.getFilteringKey();
+            if(filteringKey != null) {
+                clusterKey = clusterKey + "," + filteringKey;
+            }
+            primaryKey = tableObj.getPrimaryKey(); // get primaryKey if available
 
-            if (counter != (fields.size() - 1) ) {
-
-                counter = counter + 1; 
-            } else {
+            PreparedQueryObject queryObject = new PreparedQueryObject();
+            // first read the information about the table fields
+            Map<String, String> fields = tableObj.getFields();
+            if (fields == null) {
+                return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
+                        .setError("Create Table Error: No fields in request").toMap()).build();
+            }
 
-                if((primaryKey != null) && (partitionKey == null)) {
+            StringBuilder fieldsString = new StringBuilder("(vector_ts text,");
+            int counter = 0;
+            for (Map.Entry<String, String> entry : fields.entrySet()) {
+                if (entry.getKey().equals("PRIMARY KEY")) {
+                    primaryKey = entry.getValue(); // replaces primaryKey
                     primaryKey = primaryKey.trim();
-                    int count1 = StringUtils.countMatches(primaryKey, ')');
-                    int count2 = StringUtils.countMatches(primaryKey, '(');
-                    if (count1 != count2) {
-                        return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
+                } else {
+                    if (counter == 0 )  fieldsString.append("" + entry.getKey() + " " + entry.getValue() + "");
+                    else fieldsString.append("," + entry.getKey() + " " + entry.getValue() + "");
+                }
+
+                if (counter != (fields.size() - 1) ) {
+                    counter = counter + 1; 
+                } else {
+            
+                    if((primaryKey != null) && (partitionKey == null)) {
+                        primaryKey = primaryKey.trim();
+                        int count1 = StringUtils.countMatches(primaryKey, ')');
+                        int count2 = StringUtils.countMatches(primaryKey, '(');
+                        if (count1 != count2) {
+                            return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
                                 .setError("Create Table Error: primary key '(' and ')' do not match, primary key=" + primaryKey)
                                 .toMap()).build();
-                    }
+                        }
 
-                    if ( primaryKey.indexOf('(') == -1  || ( count2 == 1 && (primaryKey.lastIndexOf(')') +1) ==  primaryKey.length() ) )
-                    {
-                        if (primaryKey.contains(",") ) {
-                            partitionKey= primaryKey.substring(0,primaryKey.indexOf(','));
-                            partitionKey=partitionKey.replaceAll("[\\(]+","");
-                            clusterKey=primaryKey.substring(primaryKey.indexOf(',')+1);  // make sure index
-                            clusterKey=clusterKey.replaceAll("[)]+", "");
-                        } else {
-                            partitionKey=primaryKey;
-                            partitionKey=partitionKey.replaceAll("[\\)]+","");
+                        if ( primaryKey.indexOf('(') == -1  || ( count2 == 1 && (primaryKey.lastIndexOf(')') +1) ==  primaryKey.length() ) ) {
+                            if (primaryKey.contains(",") ) {
+                                partitionKey= primaryKey.substring(0,primaryKey.indexOf(','));
+                                partitionKey=partitionKey.replaceAll("[\\(]+","");
+                                clusterKey=primaryKey.substring(primaryKey.indexOf(',')+1);  // make sure index
+                                clusterKey=clusterKey.replaceAll("[)]+", "");
+                            } else {
+                                partitionKey=primaryKey;
+                                partitionKey=partitionKey.replaceAll("[\\)]+","");
+                                partitionKey=partitionKey.replaceAll("[\\(]+","");
+                                clusterKey="";
+                            }
+                        } else {   // not null and has ) before the last char
+                            partitionKey= primaryKey.substring(0,primaryKey.indexOf(')'));
                             partitionKey=partitionKey.replaceAll("[\\(]+","");
-                            clusterKey="";
+                            partitionKey = partitionKey.trim();
+                            clusterKey= primaryKey.substring(primaryKey.indexOf(')'));
+                            clusterKey=clusterKey.replaceAll("[\\(]+","");
+                            clusterKey=clusterKey.replaceAll("[\\)]+","");
+                            clusterKey = clusterKey.trim();
+                            if (clusterKey.indexOf(',') == 0) {
+                                clusterKey=clusterKey.substring(1);
+                            }
+                            clusterKey = clusterKey.trim();
+                            if (clusterKey.equals(",") ) clusterKey=""; // print error if needed    ( ... ),)
                         }
-                    } else {   // not null and has ) before the last char
-                        partitionKey= primaryKey.substring(0,primaryKey.indexOf(')'));
-                        partitionKey=partitionKey.replaceAll("[\\(]+","");
-                        partitionKey = partitionKey.trim();
-                        clusterKey= primaryKey.substring(primaryKey.indexOf(')'));
-                        clusterKey=clusterKey.replaceAll("[\\(]+","");
-                        clusterKey=clusterKey.replaceAll("[\\)]+","");
-                        clusterKey = clusterKey.trim();
-                        if (clusterKey.indexOf(',') == 0) clusterKey=clusterKey.substring(1);
-                        clusterKey = clusterKey.trim();
-                        if (clusterKey.equals(",") ) clusterKey=""; // print error if needed    ( ... ),)
-                    }
 
-                    if (!(partitionKey.isEmpty() || clusterKey.isEmpty())
+                        if (!(partitionKey.isEmpty() || clusterKey.isEmpty())
                             && (partitionKey.equalsIgnoreCase(clusterKey) ||
-                                    clusterKey.contains(partitionKey) || partitionKey.contains(clusterKey)) )
-                    {
-                        logger.error("DataAPI createTable partition/cluster key ERROR: partitionKey="+partitionKey+", clusterKey=" + clusterKey + " and primary key=" + primaryKey );
-                        return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(
+                            clusterKey.contains(partitionKey) || partitionKey.contains(clusterKey)) ) {
+                            logger.error("DataAPI createTable partition/cluster key ERROR: partitionKey="+partitionKey+", clusterKey=" + clusterKey + " and primary key=" + primaryKey );
+                            return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(
                                 "Create Table primary key error: clusterKey(" + clusterKey + ") equals/contains/overlaps partitionKey(" +partitionKey+ ")  of"
-                                        + " primary key=" + primaryKey)
+                                + " primary key=" + primaryKey)
                                 .toMap()).build();
 
-                    }
-
-                    if (partitionKey.isEmpty() )  primaryKey="";
-                    else  if (clusterKey.isEmpty() ) primaryKey=" (" + partitionKey  + ")";
-                    else  primaryKey=" (" + partitionKey + ")," + clusterKey;
+                        }
 
+                        if (partitionKey.isEmpty() )  primaryKey="";
+                        else  if (clusterKey.isEmpty() ) primaryKey=" (" + partitionKey  + ")";
+                        else  primaryKey=" (" + partitionKey + ")," + clusterKey;
 
-                    if (primaryKey != null) fieldsString.append(", PRIMARY KEY (" + primaryKey + " )");
+                
+                        if (primaryKey != null) fieldsString.append(", PRIMARY KEY (" + primaryKey + " )");
 
-                } // end of length > 0
-                else {
-                    if (!(partitionKey.isEmpty() || clusterKey.isEmpty())
+                    } else { // end of length > 0
+                    
+                        if (!(partitionKey.isEmpty() || clusterKey.isEmpty())
                             && (partitionKey.equalsIgnoreCase(clusterKey) ||
-                                    clusterKey.contains(partitionKey) || partitionKey.contains(clusterKey)) )
-                    {
-                        logger.error("DataAPI createTable partition/cluster key ERROR: partitionKey="+partitionKey+", clusterKey=" + clusterKey);
-                        return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(
+                            clusterKey.contains(partitionKey) || partitionKey.contains(clusterKey)) ) {
+                            logger.error("DataAPI createTable partition/cluster key ERROR: partitionKey="+partitionKey+", clusterKey=" + clusterKey);
+                            return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(
                                 "Create Table primary key error: clusterKey(" + clusterKey + ") equals/contains/overlaps partitionKey(" +partitionKey+ ")")
                                 .toMap()).build();
-                    }
+                        }
 
-                    if (partitionKey.isEmpty() )  primaryKey="";
-                    else  if (clusterKey.isEmpty() ) primaryKey=" (" + partitionKey  + ")";
-                    else  primaryKey=" (" + partitionKey + ")," + clusterKey;
+                        if (partitionKey.isEmpty() )  primaryKey="";
+                        else  if (clusterKey.isEmpty() ) primaryKey=" (" + partitionKey  + ")";
+                        else  primaryKey=" (" + partitionKey + ")," + clusterKey;
 
+                        if (primaryKey != null) fieldsString.append(", PRIMARY KEY (" + primaryKey + " )");
+                    }
+                    fieldsString.append(")");
+
+                } // end of last field check
+
+            } // end of for each
+            // information about the name-value style properties
+            Map<String, Object> propertiesMap = tableObj.getProperties();
+            StringBuilder propertiesString = new StringBuilder();
+            if (propertiesMap != null) {
+                counter = 0;
+                for (Map.Entry<String, Object> entry : propertiesMap.entrySet()) {
+                    Object ot = entry.getValue();
+                    String value = ot + "";
+                    if (ot instanceof String) {
+                        value = "'" + value + "'";
+                    } else if (ot instanceof Map) {
+                        @SuppressWarnings("unchecked")
+                        Map<String, Object> otMap = (Map<String, Object>) ot;
+                        value = "{" + MusicUtil.jsonMaptoSqlString(otMap, ",") + "}";
+                    }
 
-                    if (primaryKey != null) fieldsString.append(", PRIMARY KEY (" + primaryKey + " )");
-                }
-                fieldsString.append(")");
+                    propertiesString.append(entry.getKey() + "=" + value + "");
+                    if (counter != propertiesMap.size() - 1)
+                        propertiesString.append(" AND ");
 
-            } // end of last field check
-
-        } // end of for each
-        // information about the name-value style properties
-        Map<String, Object> propertiesMap = tableObj.getProperties();
-        StringBuilder propertiesString = new StringBuilder();
-        if (propertiesMap != null) {
-            counter = 0;
-            for (Map.Entry<String, Object> entry : propertiesMap.entrySet()) {
-                Object ot = entry.getValue();
-                String value = ot + "";
-                if (ot instanceof String) {
-                    value = "'" + value + "'";
-                } else if (ot instanceof Map) {
-                    @SuppressWarnings("unchecked")
-                    Map<String, Object> otMap = (Map<String, Object>) ot;
-                    value = "{" + MusicUtil.jsonMaptoSqlString(otMap, ",") + "}";
+                    counter = counter + 1;
                 }
-
-                propertiesString.append(entry.getKey() + "=" + value + "");
-                if (counter != propertiesMap.size() - 1)
-                    propertiesString.append(" AND ");
-
-                counter = counter + 1;
             }
-        }
 
-        String clusteringOrder = tableObj.getClusteringOrder();
+            String clusteringOrder = tableObj.getClusteringOrder();
 
-        if (clusteringOrder != null && !(clusteringOrder.isEmpty())) {
-            String[] arrayClusterOrder = clusteringOrder.split("[,]+");
+            if (clusteringOrder != null && !(clusteringOrder.isEmpty())) {
+                String[] arrayClusterOrder = clusteringOrder.split("[,]+");
 
-            for (int i = 0; i < arrayClusterOrder.length; i++) {
-                String[] clusterS = arrayClusterOrder[i].trim().split("[ ]+");
-                if ( (clusterS.length ==2)  && (clusterS[1].equalsIgnoreCase("ASC") || clusterS[1].equalsIgnoreCase("DESC"))) {
-                    continue;
-                } else {
-                    return response.status(Status.BAD_REQUEST)
-                            .entity(new JsonResponse(ResultType.FAILURE)
-                                    .setError("createTable/Clustering Order vlaue ERROR: valid clustering order is ASC or DESC or expecting colname  order; please correct clusteringOrder:"+ clusteringOrder+".")
-                                    .toMap()).build();
+                for (int i = 0; i < arrayClusterOrder.length; i++) {
+                    String[] clusterS = arrayClusterOrder[i].trim().split("[ ]+");
+                    if ( (clusterS.length ==2)  && (clusterS[1].equalsIgnoreCase("ASC") || clusterS[1].equalsIgnoreCase("DESC"))) {
+                        continue;
+                    } else {
+                        return response.status(Status.BAD_REQUEST)
+                        .entity(new JsonResponse(ResultType.FAILURE)
+                        .setError("createTable/Clustering Order vlaue ERROR: valid clustering order is ASC or DESC or expecting colname  order; please correct clusteringOrder:"+ clusteringOrder+".")
+                        .toMap()).build();
+                    }
+                    // add validation for column names in cluster key
                 }
-                // add validation for column names in cluster key
-            }
 
-            if (!(clusterKey.isEmpty())) {
-                clusteringOrder = "CLUSTERING ORDER BY (" +clusteringOrder +")";
-                //cjc check if propertiesString.length() >0 instead propertiesMap
-                if (propertiesMap != null) {
-                    propertiesString.append(" AND  "+ clusteringOrder);
+                if (!(clusterKey.isEmpty())) {
+                    clusteringOrder = "CLUSTERING ORDER BY (" +clusteringOrder +")";
+                    //cjc check if propertiesString.length() >0 instead propertiesMap
+                    if (propertiesMap != null) {
+                        propertiesString.append(" AND  "+ clusteringOrder);
+                    } else {
+                        propertiesString.append(clusteringOrder);
+                    }
                 } else {
-                    propertiesString.append(clusteringOrder);
+                    logger.warn("Skipping clustering order=("+clusteringOrder+ ") since clustering key is empty ");
                 }
-            } else {
-                logger.warn("Skipping clustering order=("+clusteringOrder+ ") since clustering key is empty ");
-            }
-        } //if non empty
+            } //if non empty
 
-        queryObject.appendQueryString(
+            queryObject.appendQueryString(
                 "CREATE TABLE " + keyspace + "." + tablename + " " + fieldsString);
 
 
-        if (propertiesString != null &&  propertiesString.length()>0 )
-            queryObject.appendQueryString(" WITH " + propertiesString);
-        queryObject.appendQueryString(";");
-        ResultType result = ResultType.FAILURE;
-        try {
-            result = MusicCore.createTable(keyspace, tablename, queryObject, consistency);
-        } catch (MusicServiceException ex) {
-            logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), AppMessages.UNKNOWNERROR  ,ErrorSeverity
-                .CRITICAL, ErrorTypes.MUSICSERVICEERROR, ex);
-            response.status(Status.BAD_REQUEST);
-            return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build();
-        }
-        if ( result.equals(ResultType.FAILURE) ) {
-            return response.status(Status.BAD_REQUEST).entity(new JsonResponse(result).setError("Error Creating Table " + tablename).toMap()).build();
-        }
-        return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).setMessage("TableName " + tablename.trim() + " Created under keyspace " + keyspace.trim()).toMap()).build();
+            if (propertiesString != null &&  propertiesString.length()>0 )
+                queryObject.appendQueryString(" WITH " + propertiesString);
+            queryObject.appendQueryString(";");
+            ResultType result = ResultType.FAILURE;
+            try {
+                result = MusicCore.createTable(keyspace, tablename, queryObject, consistency);
+            } catch (MusicServiceException ex) {
+                logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), AppMessages.UNKNOWNERROR  ,ErrorSeverity.CRITICAL, ErrorTypes.MUSICSERVICEERROR);
+                response.status(Status.BAD_REQUEST);
+                return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build();
+            }
+            if ( result.equals(ResultType.FAILURE) ) {
+                return response.status(Status.BAD_REQUEST).entity(new JsonResponse(result).setError("Error Creating Table " + tablename).toMap()).build();
+            }
+            return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).setMessage("TableName " + tablename.trim() + " Created under keyspace " + keyspace.trim()).toMap()).build();
         } finally {
             EELFLoggerDelegate.mdcRemove("keyspace");
         }
@@ -621,8 +621,8 @@ public class RestMusicDataAPI {
         ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         if((keyspace == null || keyspace.isEmpty()) || (tablename == null || tablename.isEmpty()) || (fieldName == null || fieldName.isEmpty())){
             return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
-                    .setError("one or more path parameters are not set, please check and try again")
-                          .toMap()).build();
+                .setError("one or more path parameters are not set, please check and try again")
+                .toMap()).build();
         }
         EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspace+" ) ");
         if (!authenticator.authenticateUser(ns, authorization, keyspace, aid, Operation.CREATE_INDEX)) {
@@ -688,8 +688,8 @@ public class RestMusicDataAPI {
         ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         if((keyspace == null || keyspace.isEmpty()) || (tablename == null || tablename.isEmpty())){
             return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
-                    .setError("one or more path parameters are not set, please check and try again")
-                          .toMap()).build();
+                .setError("one or more path parameters are not set, please check and try again")
+                .toMap()).build();
         }
         EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspace+" ) ");
         if (!authenticator.authenticateUser(ns, authorization, keyspace, aid, Operation.INSERT_INTO_TABLE)) {
@@ -699,7 +699,6 @@ public class RestMusicDataAPI {
                             .toMap()).build();
         }
 
-        Map<String, Object> valuesMap = insObj.getValues();
         PreparedQueryObject queryObject = new PreparedQueryObject();
         TableMetadata tableInfo = null;
         try {
@@ -717,9 +716,14 @@ public class RestMusicDataAPI {
                         String.valueOf(Thread.currentThread().getId() + System.currentTimeMillis());
         StringBuilder valueString = new StringBuilder("(" + "?" + ",");
         queryObject.addValue(vectorTs);
+        
+        Map<String, Object> valuesMap = insObj.getValues();
+        if (valuesMap==null) {
+            return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
+                    .setError("Nothing to insert. No values provided in request.").toMap()).build();
+        }
         int counter = 0;
         String primaryKey = "";
-        Map<String, byte[]> objectMap = insObj.getObjectMap();
         for (Map.Entry<String, Object> entry : valuesMap.entrySet()) {
             fieldsString.append("" + entry.getKey());
             Object valueObj = entry.getValue();
@@ -738,7 +742,7 @@ public class RestMusicDataAPI {
 
             Object formattedValue = null;
             try {
-              formattedValue = MusicUtil.convertToActualDataType(colType, valueObj);
+                formattedValue = MusicUtil.convertToActualDataType(colType, valueObj);
             } catch (Exception e) {
               logger.error(EELFLoggerDelegate.errorLogger,e);
           }
@@ -757,38 +761,35 @@ public class RestMusicDataAPI {
         }
 
         //blobs..
+        Map<String, byte[]> objectMap = insObj.getObjectMap();
         if(objectMap != null) {
-        for (Map.Entry<String, byte[]> entry : objectMap.entrySet()) {
-            if(counter > 0) {
-                fieldsString.replace(fieldsString.length()-1, fieldsString.length(), ",");
-                valueString.replace(valueString.length()-1, valueString.length(), ",");
-            }
-            fieldsString.append("" + entry.getKey());
-            byte[] valueObj = entry.getValue();
-            if (primaryKeyName.equals(entry.getKey())) {
-                primaryKey = entry.getValue() + "";
-                primaryKey = primaryKey.replace("'", "''");
-            }
+            for (Map.Entry<String, byte[]> entry : objectMap.entrySet()) {
+                if(counter > 0) {
+                    fieldsString.replace(fieldsString.length()-1, fieldsString.length(), ",");
+                    valueString.replace(valueString.length()-1, valueString.length(), ",");
+                }
+                fieldsString.append("" + entry.getKey());
+                byte[] valueObj = entry.getValue();
+                if (primaryKeyName.equals(entry.getKey())) {
+                    primaryKey = entry.getValue() + "";
+                    primaryKey = primaryKey.replace("'", "''");
+                }
 
-            DataType colType = tableInfo.getColumn(entry.getKey()).getType();
+                DataType colType = tableInfo.getColumn(entry.getKey()).getType();
 
-            ByteBuffer formattedValue = null;
+                ByteBuffer formattedValue = null;
 
-            if(colType.toString().toLowerCase().contains("blob"))
-                formattedValue = MusicUtil.convertToActualDataType(colType, valueObj);
+                if(colType.toString().toLowerCase().contains("blob"))
+                    formattedValue = MusicUtil.convertToActualDataType(colType, valueObj);
 
-            valueString.append("?");
+                valueString.append("?");
 
-            queryObject.addValue(formattedValue);
-            counter = counter + 1;
-            /*if (counter == valuesMap.size() - 1) {
-                fieldsString.append(")");
-                valueString.append(")");
-            } else {*/
+                queryObject.addValue(formattedValue);
+                counter = counter + 1;
                 fieldsString.append(",");
                 valueString.append(",");
-            //}
-        } }
+            } 
+        }
 
         if(primaryKey == null || primaryKey.length() <= 0) {
             logger.error(EELFLoggerDelegate.errorLogger, "Some required partition key parts are missing: "+primaryKeyName );
@@ -907,7 +908,7 @@ public class RestMusicDataAPI {
         if((keyspace == null || keyspace.isEmpty()) || (tablename == null || tablename.isEmpty())){
             return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
                     .setError("one or more path parameters are not set, please check and try again")
-                          .toMap()).build();
+                    .toMap()).build();
         }
         EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspace+" ) ");
         if (!authenticator.authenticateUser(ns, authorization, keyspace, aid, Operation.UPDATE_TABLE)) {
@@ -918,8 +919,8 @@ public class RestMusicDataAPI {
         }
 
         long startTime = System.currentTimeMillis();
-        String operationId = UUID.randomUUID().toString();// just for infoging
-                                                          // purposes.
+        String operationId = UUID.randomUUID().toString();  // just for infoging
+                                                            // purposes.
         String consistency = updateObj.getConsistencyInfo().get("type");
 
         logger.info(EELFLoggerDelegate.applicationLogger, "--------------Music " + consistency
@@ -939,12 +940,11 @@ public class RestMusicDataAPI {
         }
         if (tableInfo == null) {
             logger.error(EELFLoggerDelegate.errorLogger,"Table information not found. Please check input for table name= "+tablename, AppMessages.MISSINGINFO  ,ErrorSeverity.WARN, ErrorTypes.AUTHENTICATIONERROR);
-              return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
-                            .setError("Table information not found. Please check input for table name= "
-                                            + keyspace + "." + tablename).toMap()).build();
+            return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
+                .setError("Table information not found. Please check input for table name= "
+                + keyspace + "." + tablename).toMap()).build();
         }
-        String vectorTs =
-                        String.valueOf(Thread.currentThread().getId() + System.currentTimeMillis());
+        String vectorTs = String.valueOf(Thread.currentThread().getId() + System.currentTimeMillis());
         StringBuilder fieldValueString = new StringBuilder("vector_ts=?,");
         queryObject.addValue(vectorTs);
         int counter = 0;
@@ -959,7 +959,7 @@ public class RestMusicDataAPI {
             }
             Object valueString = null;
             try {
-              valueString = MusicUtil.convertToActualDataType(colType, valueObj);
+                valueString = MusicUtil.convertToActualDataType(colType, valueObj);
             } catch (Exception e) {
               logger.error(EELFLoggerDelegate.errorLogger,e);
             }
@@ -974,7 +974,6 @@ public class RestMusicDataAPI {
 
         queryObject.appendQueryString("UPDATE " + keyspace + "." + tablename + " ");
         if ((ttl != null) && (timestamp != null)) {
-
             logger.info("both there");
             queryObject.appendQueryString(" USING TTL ? AND TIMESTAMP ?");
             queryObject.addValue(Integer.parseInt(ttl));
@@ -1013,11 +1012,11 @@ public class RestMusicDataAPI {
         Condition conditionInfo;
         if (updateObj.getConditions() == null)
             conditionInfo = null;
-        else {// to avoid parsing repeatedly, just send the select query to
-              // obtain row
+        else {
+            // to avoid parsing repeatedly, just send the select query to obtain row
             PreparedQueryObject selectQuery = new PreparedQueryObject();
             selectQuery.appendQueryString("SELECT *  FROM " + keyspace + "." + tablename + " WHERE "
-                            + rowId.rowIdString + ";");
+                + rowId.rowIdString + ";");
             selectQuery.addValue(rowId.primarKeyValue);
             conditionInfo = new Condition(updateObj.getConditions(), selectQuery);
         }
@@ -1047,20 +1046,19 @@ public class RestMusicDataAPI {
         } else if (consistency.equalsIgnoreCase("atomic_delete_lock")) {
             // this function is mainly for the benchmarks
             try {
-              operationResult = MusicCore.atomicPutWithDeleteLock(keyspace, tablename,
-                              rowId.primarKeyValue, queryObject, conditionInfo);
+                operationResult = MusicCore.atomicPutWithDeleteLock(keyspace, tablename,
+                    rowId.primarKeyValue, queryObject, conditionInfo);
             } catch (MusicLockingException e) {
                 logger.error(EELFLoggerDelegate.errorLogger,e, AppMessages.UNKNOWNERROR  ,ErrorSeverity.WARN,
                     ErrorTypes.GENERALSERVICEERROR, e);
-                  return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(e.getMessage()).toMap()).build();
+                return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(e.getMessage()).toMap()).build();
             }
         } else if (consistency.equalsIgnoreCase(MusicUtil.ATOMIC)) {
             try {
-              operationResult = MusicCore.atomicPut(keyspace, tablename, rowId.primarKeyValue,
-                              queryObject, conditionInfo);
+                operationResult = MusicCore.atomicPut(keyspace, tablename, rowId.primarKeyValue,
+                    queryObject, conditionInfo);
             } catch (MusicLockingException e) {
-                logger.error(EELFLoggerDelegate.errorLogger,e, AppMessages.UNKNOWNERROR  ,ErrorSeverity.WARN,
-                    ErrorTypes.GENERALSERVICEERROR, e);
+                logger.error(EELFLoggerDelegate.errorLogger,e, AppMessages.UNKNOWNERROR  ,ErrorSeverity.WARN, ErrorTypes.GENERALSERVICEERROR, e);
                 return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(e.getMessage()).toMap()).build();
             }
         }else if(consistency.equalsIgnoreCase(MusicUtil.EVENTUAL_NB)) {
@@ -1083,7 +1081,7 @@ public class RestMusicDataAPI {
 
         if (operationResult==null) {
             logger.error(EELFLoggerDelegate.errorLogger,"Null result - Please Contact admin", AppMessages.UNKNOWNERROR  ,ErrorSeverity.WARN, ErrorTypes.GENERALSERVICEERROR);
-              return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("Null result - Please Contact admin").toMap()).build();
+            return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("Null result - Please Contact admin").toMap()).build();
         }
         if ( operationResult.getResult() == ResultType.SUCCESS ) {
             return response.status(Status.OK).entity(new JsonResponse(operationResult.getResult()).setMessage(operationResult.getMessage()).toMap()).build();
@@ -1134,7 +1132,7 @@ public class RestMusicDataAPI {
         if((keyspace == null || keyspace.isEmpty()) || (tablename == null || tablename.isEmpty())){
             return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
                     .setError("one or more path parameters are not set, please check and try again")
-                          .toMap()).build();
+                    .toMap()).build();
         }
         EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspace+" ) ");
         if (!authenticator.authenticateUser(ns, authorization, keyspace, aid, Operation.DELETE_FROM_TABLE)) {
@@ -1146,7 +1144,7 @@ public class RestMusicDataAPI {
  
         if(delObj == null) {
             logger.error(EELFLoggerDelegate.errorLogger,"Required HTTP Request body is missing.", AppMessages.MISSINGDATA  ,ErrorSeverity.WARN, ErrorTypes.DATAERROR);
-              return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("Required HTTP Request body is missing.").toMap()).build();
+            return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("Required HTTP Request body is missing.").toMap()).build();
         }
         PreparedQueryObject queryObject = new PreparedQueryObject();
         StringBuilder columnString = new StringBuilder();
@@ -1189,10 +1187,11 @@ public class RestMusicDataAPI {
         }
         // get the conditional, if any
         Condition conditionInfo;
-        if (delObj.getConditions() == null)
+        if (delObj.getConditions() == null) {
             conditionInfo = null;
-        else {// to avoid parsing repeatedly, just send the select query to
-              // obtain row
+        } else {
+            // to avoid parsing repeatedly, just send the select query to
+            // obtain row
             PreparedQueryObject selectQuery = new PreparedQueryObject();
             selectQuery.appendQueryString("SELECT *  FROM " + keyspace + "." + tablename + " WHERE "
                             + rowId.rowIdString + ";");
@@ -1234,9 +1233,8 @@ public class RestMusicDataAPI {
                 operationResult = MusicCore.eventualPut_nb(queryObject, keyspace, tablename, rowId.primarKeyValue);
             }
         } catch (MusicLockingException e) {
-            logger.error(EELFLoggerDelegate.errorLogger,e, AppMessages.UNKNOWNERROR  ,ErrorSeverity.WARN, ErrorTypes
-                .GENERALSERVICEERROR, e);
-              return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
+            logger.error(EELFLoggerDelegate.errorLogger,e, AppMessages.UNKNOWNERROR  ,ErrorSeverity.WARN, ErrorTypes.GENERALSERVICEERROR, e);
+            return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
                     .setError("Unable to perform Delete operation. Exception from music").toMap()).build();
         }
         if (operationResult==null) {
@@ -1247,7 +1245,7 @@ public class RestMusicDataAPI {
             return response.status(Status.OK).entity(new JsonResponse(operationResult.getResult()).setMessage(operationResult.getMessage()).toMap()).build();
         } else {
             logger.error(EELFLoggerDelegate.errorLogger,operationResult.getMessage(), AppMessages.UNKNOWNERROR  ,ErrorSeverity.WARN, ErrorTypes.GENERALSERVICEERROR);
-              return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(operationResult.getMessage()).toMap()).build();
+            return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(operationResult.getMessage()).toMap()).build();
         }
         } finally {
             EELFLoggerDelegate.mdcRemove("keyspace");
@@ -1284,8 +1282,8 @@ public class RestMusicDataAPI {
         ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         if((keyspace == null || keyspace.isEmpty()) || (tablename == null || tablename.isEmpty())){
             return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
-                    .setError("one or more path parameters are not set, please check and try again")
-                          .toMap()).build();
+                .setError("one or more path parameters are not set, please check and try again")
+                .toMap()).build();
         }
         EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspace+" ) ");
         if (!authenticator.authenticateUser(ns, authorization, keyspace, aid, Operation.DROP_TABLE)) {
@@ -1345,8 +1343,8 @@ public class RestMusicDataAPI {
         ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         if((keyspace == null || keyspace.isEmpty()) || (tablename == null || tablename.isEmpty())){
             return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
-                    .setError("one or more path parameters are not set, please check and try again")
-                          .toMap()).build();
+                .setError("one or more path parameters are not set, please check and try again")
+                .toMap()).build();
         }
         EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspace+" ) ");
         if (!authenticator.authenticateUser(ns, authorization, keyspace, aid, Operation.SELECT_CRITICAL)) {
@@ -1369,24 +1367,27 @@ public class RestMusicDataAPI {
               return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build();
         }
         queryObject.appendQueryString(
-                        "SELECT *  FROM " + keyspace + "." + tablename + " WHERE " + rowId.rowIdString + ";");
+            "SELECT *  FROM " + keyspace + "." + tablename + " WHERE " + rowId.rowIdString + ";");
 
         ResultSet results = null;
 
         String consistency = selObj.getConsistencyInfo().get("type");
-
+        try {
         if (consistency.equalsIgnoreCase(MusicUtil.CRITICAL)) {
             if(lockId == null) {
                 logger.error(EELFLoggerDelegate.errorLogger,"LockId cannot be null. Create lock reference or"
-                        + " use ATOMIC instead of CRITICAL", ErrorSeverity.FATAL, ErrorTypes.MUSICSERVICEERROR);
+                    + " use ATOMIC instead of CRITICAL", ErrorSeverity.FATAL, ErrorTypes.MUSICSERVICEERROR);
                 return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("LockId cannot be null. Create lock "
-                        + "and acquire lock or use ATOMIC instead of CRITICAL").toMap()).build();
+                    + "and acquire lock or use ATOMIC instead of CRITICAL").toMap()).build();
             }
-            results = MusicCore.criticalGet(keyspace, tablename, rowId.primarKeyValue, queryObject,
-                            lockId);
+            results = MusicCore.criticalGet(keyspace, tablename, rowId.primarKeyValue, queryObject,lockId);
         } else if (consistency.equalsIgnoreCase(MusicUtil.ATOMIC)) {
             results = MusicCore.atomicGet(keyspace, tablename, rowId.primarKeyValue, queryObject);
         }
+        }catch(Exception ex) {
+            return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build();
+        }
+        
         if(results!=null && results.getAvailableWithoutFetching() >0) {
             return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).setDataResult(MusicDataStoreHandle.marshallResults(results)).toMap()).build();
         }
@@ -1429,8 +1430,8 @@ public class RestMusicDataAPI {
         ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         if((keyspace == null || keyspace.isEmpty()) || (tablename == null || tablename.isEmpty())){
             return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
-                    .setError("one or more path parameters are not set, please check and try again")
-                          .toMap()).build();
+                .setError("one or more path parameters are not set, please check and try again")
+                .toMap()).build();
         }
         EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspace+" ) ");
         if (!authenticator.authenticateUser(ns, authorization, keyspace, aid, Operation.SELECT)) {
@@ -1531,10 +1532,10 @@ public class RestMusicDataAPI {
             DataType colType = null;
             Object formattedValue = null;
             try {
-              colType = tableInfo.getColumn(entry.getKey()).getType();
-              formattedValue = MusicUtil.convertToActualDataType(colType, indValue);
+                colType = tableInfo.getColumn(entry.getKey()).getType();
+                formattedValue = MusicUtil.convertToActualDataType(colType, indValue);
             } catch (Exception e) {
-              logger.error(EELFLoggerDelegate.errorLogger,e);
+                logger.error(EELFLoggerDelegate.errorLogger,e);
             }
             if(tableInfo.getPrimaryKey().get(0).getName().equals(entry.getKey()))
             primaryKey.append(indValue);