Fix last update for a casablanca release 06/72706/3 3.0.0-ONAP 3.0.24
authorNelson,Thomas(tn1381)(arthurdent3) <tn1381@att.com>
Wed, 14 Nov 2018 20:50:17 +0000 (15:50 -0500)
committerNelson,Thomas(tn1381)(arthurdent3) <tn1381@att.com>
Wed, 14 Nov 2018 21:22:00 +0000 (16:22 -0500)
Used wrong commit to cherry-pick into casablanca release.
Pushing a fix.
Also pushed MUSIC-157

Change-Id: I851bc43c79857de2d3d0517918344f7459be9043
Issue-ID: MUSIC-181
Signed-off-by: Nelson,Thomas(tn1381)(arthurdent3) <tn1381@att.com>
distribution/cassandra_job/runcql.sh
musictrigger/assembly.xml
musictrigger/src/MusicTrigger.java
pom.xml
src/main/java/org/onap/music/rest/RestMusicAdminAPI.java
src/main/java/org/onap/music/rest/RestMusicDataAPI.java
src/main/java/org/onap/music/rest/RestMusicHealthCheckAPI.java
version.properties

index 687e93b..2ffd5f2 100644 (file)
@@ -1,25 +1,41 @@
 #! /bin/bash
+if [ -z "$TIMEOUT" ]; then
+    TIMEOUT=10;
+fi
+if [ -z "$DELAY" ]; then
+    DELAY=60;
+fi
+TO="--request-timeout=$TIMEOUT"
+
 if [ $CASS_HOSTNAME ]; then
-    echo "#############################################"
-    echo "############## Let run cql's ################"
-    echo "#############################################"
-    echo "Current Variales in play"
-    echo "Default User"
-    echo "DEF_USER="$DEF_USER
-    echo "DEF_PASS=***********"
-    echo "New User"
-    echo "USERNAME="$USERNAME
-    echo "PASSWORD=***********"
-    if cqlsh -u cassandra -p cassandra -e "describe keyspaces;";
+    echo "Sleeping for $DELAY seconds before running cql";
+    sleep $DELAY;
+    >&2 echo "#############################################"
+    >&2 echo "############## Let run cql's ################"
+    >&2 echo "#############################################"
+    >&2 echo "Current Variables in play"
+    >&2 echo "Default User"
+    >&2 echo "DEF_USER="$DEF_USER
+    >&2 echo "DEF_PASS=***********"
+    >&2 echo "New User"
+    >&2 echo "USERNAME="$USERNAME
+    >&2 echo "PASSWORD=***********"
+    >&2 echo "TIMEOUT="$TIMEOUT
+    >&2 echo "Running cqlsh $TO -u cassandra -p cassandra -e \"describe keyspaces;\" ${CASS_HOSTNAME} ${PORT};"
+    if cqlsh $TO -u cassandra -p cassandra -e "describe keyspaces;" ${CASS_HOSTNAME} ${PORT};
     then
         >&2 echo "Cassandra user still avalable, will continue as usual";
     else
-        if cqlsh -u $USERNAME -p $PASSWORD -e "describe keyspaces;";
+        CASSFAIL=true
+        >&2 echo "$DEF_USER failed, trying with $USERNAME"
+        if cqlsh $TO -u $USERNAME -p $PASSWORD -e "describe keyspaces;" ${CASS_HOSTNAME} ${PORT};
         then
             >&2 echo "Password $USERNAME in play, update Variables"
             DEF_USER=$USERNAME
             DEF_PASS=$PASSWORD
-            if cqlsh -u $USERNAME -p $PASSWORD -e "describe keyspaces;" | grep admin1;
+            >&2 echo "DEF_USER="$DEF_USER
+            >&2 echo "DEF_PASS=***********"
+            if cqlsh $TO -u $USERNAME -p $PASSWORD -e "describe keyspaces;" ${CASS_HOSTNAME} ${PORT} | grep admin;
             then
                 >&2 echo "Admin table exists, everything looks good"
                 exit 0;
@@ -28,25 +44,28 @@ if [ $CASS_HOSTNAME ]; then
                 >&2 echo "DEF_USER=" $DEF_USER
             fi
         else
-            >&2 echo "Continue and as usual"
+            if [ $CASSFAIL ]; then
+                >&2 echo "$DEF_USER and $USERNAME fail. DB might need to be initialized again. This shouldn't have happend."
+                exit 1;
+            else
+                >&2 echo "Continue and as usual"
+            fi
         fi
     fi
-    echo "admin.cql file:"
-    cat /cql/admin.cql
+    >&2 echo "Running admin.cql file:"
     >&2 echo "Running cqlsh -u $DEF_USER -p $DEF_PASS -f /cql/admin.cql ${CASS_HOSTNAME} ${PORT}"
     sleep 1;
-    if cqlsh -u $DEF_USER -p $DEF_PASS -f /cql/admin.cql ${CASS_HOSTNAME} ${PORT};
+    if cqlsh $TO -u $DEF_USER -p $DEF_PASS -f /cql/admin.cql ${CASS_HOSTNAME} ${PORT};
     then
         >&2 echo "Success - admin.cql - Admin keyspace created";
     else
         >&2 echo "Failure - admin.cql";
         exit 0;
     fi
-    echo "admin_pw.cql file:"
-    cat /cql/admin_pw.cql
+    >&2 echo "Running admin_pw.cql file:"
     >&2 echo "Running cqlsh -u $DEF_USER -p $DEF_PASS -f /cql/admin_pw.cql ${CASS_HOSTNAME} ${PORT}"
     sleep 1;
-    if cqlsh -u $DEF_USER -p $DEF_PASS -f /cql/admin_pw.cql ${CASS_HOSTNAME} ${PORT};
+    if cqlsh $TO -u $DEF_USER -p $DEF_PASS -f /cql/admin_pw.cql ${CASS_HOSTNAME} ${PORT};
     then
         >&2 echo "Success - admin_pw.cql - Password Changed";
     else
@@ -54,16 +73,17 @@ if [ $CASS_HOSTNAME ]; then
         exit 0;
     fi
 
-    for f in /cql/extra/*; do
-        case "$f" in
-            *.cql)
-                echo "$0: running $f" && cqlsh -u ${USERNAME} -p ${PASSWORD} -f "$f" ${CASS_HOSTNAME} ${PORT};
-                ;;
-            *)
-                echo "$0: ignoring $f"
-                ;;
-        esac
-    done
+    >&2 echo "Running Test - look for admin keyspace:"
+    >&2 echo "Running cqlsh -u $USERNAME -p $PASSWORD -e "select * from system_auth.roles;" ${CASS_HOSTNAME} ${PORT}"
+    sleep 1;
+    if cqlsh $TO -u $USERNAME -p $PASSWORD -e "select * from system_auth.roles;" ${CASS_HOSTNAME} ${PORT}
+    then
+        >&2 echo "Success - running test";
+    else
+        >&2 echo "Failure - running test";
+        exit 0;
+    fi
+
 else
     >&2 echo "Missing CASS_HOSTNAME";
     exit 0;
index 90178d8..34451ee 100644 (file)
@@ -19,4 +19,4 @@
             <outputDirectory>.</outputDirectory>
         </fileSet>
     </fileSets>
-</assembly>
+</assembly>
\ No newline at end of file
index b5894da..eb79cb8 100755 (executable)
@@ -51,15 +51,23 @@ import com.sun.jersey.api.client.Client;
 import com.sun.jersey.api.client.ClientResponse;
 import com.sun.jersey.api.client.WebResource;
 
+
 public class MusicTrigger implements ITrigger {
 
        private static final Logger logger = LoggerFactory.getLogger(MusicTrigger.class);
-
        
     public Collection<Mutation> augment(Partition partition)
     {
+       new Thread(new Runnable() {
+           public void run() {
+               makeAsyncCall(partition);
+           }
+       }).start();
+        return Collections.emptyList();
+    }
+    
+    private void makeAsyncCall(Partition partition) {
        boolean isDelete = false;
-       logger.info("Step 1: "+partition.partitionLevelDeletion().isLive());
        if(partition.partitionLevelDeletion().isLive()) {
                
        } else {
@@ -69,6 +77,7 @@ public class MusicTrigger implements ITrigger {
        logger.info("MusicTrigger isDelete: " + isDelete);
        String ksName = partition.metadata().ksName;
         String tableName = partition.metadata().cfName;
+        String pkValue = partition.metadata().getKeyValidator().getString(partition.partitionKey().getKey());
         logger.info("MusicTrigger Table: " + tableName);
         boolean isInsert = checkQueryType(partition);
         org.json.simple.JSONObject obj = new org.json.simple.JSONObject();
@@ -121,7 +130,7 @@ public class MusicTrigger implements ITrigger {
                        }
                    }
                } catch (Exception e) {
-       
+                       logger.info("Exception while constructing.. "+e.getMessage());
                }
                obj.put("updateList", updateList);
         } else {
@@ -132,11 +141,12 @@ public class MusicTrigger implements ITrigger {
         logger.info("Sending response: "+obj.toString());
         try {
             notifyMusic(obj.toString());
+            logger.info("MUSIC was notified.. "+obj.toString());
         } catch(Exception e) {
-            e.printStackTrace();
             logger.error("Notification failed..."+e.getMessage());
+            logger.info("Notification failed..."+e.getMessage());
         }
-        return Collections.emptyList();
+        
     }
     
     private int fromByteArray(byte[] bytes) {
@@ -160,62 +170,41 @@ public class MusicTrigger implements ITrigger {
     }
        
        private void notifyMusic(String request) {
-               System.out.println("notifyMusic...");
+               logger.info("notifyMusic...");
                Client client = Client.create();
                WebResource webResource = client.resource("http://localhost:8080/MUSIC/rest/v2/admin/callbackOps");
                        
                JSONObject data = new JSONObject();
                data.setData(request);
-               
-               ClientResponse response = webResource.accept("application/json").type("application/json")
+               ClientResponse response = null;
+               try { 
+                       response = webResource.accept("application/json").type("application/json")
                 .post(ClientResponse.class, data);
+               } catch (Exception e) {
+                       logger.info("Exception while notifying MUSIC. Retrying..");
+                       try { 
+                               response = webResource.accept("application/json").type("application/json")
+                       .post(ClientResponse.class, data);
+                       } catch (Exception e1) {
+                               logger.info("Exception while notifying MUSIC. Stopping retry attempts..");
+                       }
+               }
                
                if(response.getStatus() != 200){
-                       System.out.println("Exception while notifying MUSIC...");
+                       logger.info("Exception while notifying MUSIC...");
+                       try { 
+                               response = webResource.accept("application/json").type("application/json")
+                       .post(ClientResponse.class, data);
+                       } catch (Exception e) {
+                               logger.info("Exception while notifying MUSIC. Retrying..");
+                               try { 
+                                       response = webResource.accept("application/json").type("application/json")
+                               .post(ClientResponse.class, data);
+                               } catch (Exception e1) {
+                                       logger.info("Exception while notifying MUSIC. Stopping retry attempts..");
+                               }
+                       }
         }
-               /*response.getHeaders().put(HttpHeaders.CONTENT_TYPE, Arrays.asList(MediaType.APPLICATION_JSON));
-               response.bufferEntity();
-               String x = response.getEntity(String.class);
-               System.out.println("Response: "+x);*/
-               
        }
 
-       /*public Collection<Mutation> augment(Partition partition) {
-               
-               String tableName = partition.metadata().cfName;
-        System.out.println("Table: " + tableName);
-
-        JSONObject obj = new JSONObject();
-        obj.put("message_id", partition.metadata().getKeyValidator().getString(partition.partitionKey().getKey()));
-
-        
-           try {
-               UnfilteredRowIterator it = partition.unfilteredIterator();
-               while (it.hasNext()) {
-                   Unfiltered un = it.next();
-                   Clustering clt = (Clustering) un.clustering();  
-                   Iterator<Cell> cls = partition.getRow(clt).cells().iterator();
-                Iterator<ColumnDefinition> columns = partition.getRow(clt).columns().iterator();
-
-                   while(cls.hasNext()){
-                       Cell cell = cls.next();
-                       String data = new String(cell.value().array()); // If cell type is text
-                       System.out.println(cell + " : " +data);
-                       
-                   }
-                   while(columns.hasNext()){
-                    ColumnDefinition columnDef = columns.next();
-                    Cell cell = cls.next();
-                    String data = new String(cell.value().array()); // If cell type is text
-                    obj.put(columnDef.toString(), data);
-                }
-               }
-           } catch (Exception e) {
-           }
-           
-           System.out.println(obj.toString());
-
-        return Collections.emptyList();
-       }*/
-       
 }
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 22a1724..eba89df 100755 (executable)
--- a/pom.xml
+++ b/pom.xml
@@ -25,7 +25,7 @@
     <groupId>org.onap.music</groupId>
     <artifactId>MUSIC</artifactId>
     <packaging>war</packaging>
-    <version>3.0.22</version>
+    <version>3.0.24</version>
     <description>
             This is the MUSIC REST interface, packaged as a war file.
     </description>
     </build>
 
     <dependencies>
+        <!-- Added to fix MUSIC-157 License Issue -->
+        <dependency>
+            <groupId>javax.xml.bind</groupId>
+            <artifactId>jaxb-api</artifactId>
+            <version>2.2.3</version>
+        </dependency>
         <!-- Development -->
         <dependency>
             <groupId>javax.servlet</groupId>
             <version>3.0.1</version>
             <scope>provided</scope>
         </dependency>
-        <!-- /Development -->
-        <!-- <dependency>
-                       <groupId>com.hazelcast</groupId>
-                       <artifactId>hazelcast-client</artifactId>
-                       <version>3.7.1</version>
-               </dependency> -->
         <!-- Logging -->
         <dependency>
             <groupId>ch.qos.logback</groupId>
             <artifactId>jbcrypt</artifactId>
             <version>0.4</version>
         </dependency>
-        <dependency>
-                  <groupId>com.owlike</groupId>
-                  <artifactId>genson</artifactId>
-                  <version>1.3</version>
-        </dependency>
 
     </dependencies>
 
index 33128f3..0e36565 100755 (executable)
 package org.onap.music.rest;
 
 
-import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
-import java.security.KeyManagementException;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.UUID;
 
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.POST;
@@ -76,24 +66,26 @@ import org.onap.music.main.ResultType;
 import org.onap.music.main.ReturnType;
 import org.onap.music.response.jsonobjects.JsonResponse;
 
-import com.datastax.driver.core.ColumnDefinitions;
-import com.datastax.driver.core.ColumnDefinitions.Definition;
 import com.datastax.driver.core.DataType;
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Row;
-import com.datastax.driver.core.TableMetadata;
 import com.datastax.driver.core.exceptions.InvalidQueryException;
 import com.sun.jersey.api.client.Client;
 import com.sun.jersey.api.client.ClientResponse;
 import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.api.client.config.ClientConfig;
-import com.sun.jersey.api.client.config.DefaultClientConfig;
-import com.sun.jersey.api.json.JSONConfiguration;
-import com.sun.jersey.client.urlconnection.HTTPSProperties;
 import com.sun.jersey.core.util.Base64;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import com.datastax.driver.core.TableMetadata;
+
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import com.datastax.driver.core.ColumnDefinitions;
+import com.datastax.driver.core.ColumnDefinitions.Definition;
+import com.datastax.driver.core.TableMetadata;
+//import java.util.Base64.Encoder; 
+//import java.util.Base64.Decoder;
 
 @Path("/v2/admin")
 // @Path("/v{version: [0-9]+}/admin")
@@ -432,7 +424,6 @@ public class RestMusicAdminAPI {
        Map<String, Object> resultMap = new HashMap<>();
        try {
                logger.info(EELFLoggerDelegate.applicationLogger, "Got notification: " + inputJsonObj.getData());
-               logger.info("Got notification: " + inputJsonObj.getData());
                        String dataStr = inputJsonObj.getData();
                        JSONCallbackResponse jsonResponse = mapper.readValue(dataStr, JSONCallbackResponse.class);
                        String operation = jsonResponse.getOperation();
@@ -452,6 +443,22 @@ public class RestMusicAdminAPI {
                        if(notifiyList == null || notifiyList.isEmpty()) {
                                logger.info("Is cache empty? reconstructing Object from cache..");
                                constructJsonCallbackFromCache();
+                               /*notifiyList = CachingUtil.getCallbackNotifyList();
+                               if("update".equals(operation)) {
+                                       List<String> updateList = jsonResponse.getUpdateList();
+                                       //logger.info("update list from trigger: "+updateList);
+                                       for(String element : updateList) {
+                                               logger.info("element: "+element);
+                                               logger.info("notifiyList: "+notifiyList);
+                                               if(notifiyList.contains(element)) {
+                                                       logger.info("Found the notifyOn property: "+element);
+                                                       field_value = element;
+                                               }
+                                       }
+                               }
+                               
+                               baseRequestObj = CachingUtil.getCallBackCache(field_value);
+                               logger.info("Reconstructing Object from cache is Successful.."+baseRequestObj);*/
                        }
                        notifiyList = CachingUtil.getCallbackNotifyList();
                        JsonCallback baseRequestObj = null;
@@ -474,45 +481,45 @@ public class RestMusicAdminAPI {
                                                break;
                                        }
                                }
-                               if(baseRequestObj == null || field_value == null) {             
-                                       for(String element: inputUpdateList) {          
-                                               String[] elementArr = element.split(":");               
-                                               String newElement = null;               
-                                               if(elementArr.length >= 2) {            
-                                                       newElement = elementArr[0]+":"+elementArr[1];           
-                                       }               
-                                               baseRequestObj = CachingUtil.getCallBackCache(newElement);              
-                                               if(baseRequestObj != null) {            
-                                                       logger.info("Found the element that was changed... "+newElement);               
-                                                       break;          
-                                               }               
-                                       }               
-                                       for(String element : updateList) {              
-                                               String[] elementArr = element.split(":");               
-                                               String newElement = null;               
-                                               if(elementArr.length >= 2) {            
-                                                       newElement = elementArr[0]+":"+elementArr[1];           
-                                       }               
-                                               if(notifiyList.contains(newElement)) {          
-                                                       logger.info("Found the notifyOn property: "+newElement);                
-                                                       field_value = newElement;               
-                                                       break;          
-                                               }               
-                                       }               
+                               if(baseRequestObj == null || field_value == null) {
+                                       for(String element: inputUpdateList) {
+                                               String[] elementArr = element.split(":");
+                                               String newElement = null;
+                                               if(elementArr.length >= 2) {
+                                                       newElement = elementArr[0]+":"+elementArr[1];
+                                       } 
+                                               baseRequestObj = CachingUtil.getCallBackCache(newElement);
+                                               if(baseRequestObj != null) {
+                                                       logger.info("Found the element that was changed... "+newElement);
+                                                       break;
+                                               }
+                                       }
+                                       for(String element : updateList) {
+                                               String[] elementArr = element.split(":");
+                                               String newElement = null;
+                                               if(elementArr.length >= 2) {
+                                                       newElement = elementArr[0]+":"+elementArr[1];
+                                       } 
+                                               if(notifiyList.contains(newElement)) {
+                                                       logger.info("Found the notifyOn property: "+newElement);
+                                                       field_value = newElement;
+                                                       break;
+                                               }
+                                       }
                                }
                        } else {
                                field_value = jsonResponse.getFull_table();
                                baseRequestObj = CachingUtil.getCallBackCache(field_value);
                        }
                        
-                       if(baseRequestObj == null || field_value == null) {
+                       if(baseRequestObj == null) {
                                resultMap.put("Exception",
                            "Oops. Something went wrong. Please make sure Callback properties are onboarded.");
                                logger.error(EELFLoggerDelegate.errorLogger, "", AppMessages.INCORRECTDATA,
                            ErrorSeverity.CRITICAL, ErrorTypes.DATAERROR);
                                return Response.status(Status.BAD_REQUEST).entity(resultMap).build();
                        }
-                       logger.info(EELFLoggerDelegate.applicationLogger, "Going through list: "+operation+ " && List: "+jsonResponse.getUpdateList());
+                       logger.info("Going through list: "+operation+ " && List: "+jsonResponse.getUpdateList());
                        
                        String key = "admin" + "." + "notification_master" + "." + baseRequestObj.getUuid();
                String lockId = MusicCore.createLockReference(key);
@@ -521,7 +528,7 @@ public class RestMusicAdminAPI {
                        logger.error(EELFLoggerDelegate.errorLogger, "Some other node is notifying the caller..: ");
                }
                        
-               logger.info(EELFLoggerDelegate.applicationLogger, operation+ ": Operation :: changeValue: "+changeValueMap);
+                       logger.info(operation+ ": Operation :: changeValue: "+changeValueMap);
                        if(operation.equals("update")) {
                                String notifyWhenChangeIn = baseRequestObj.getNotifyWhenChangeIn(); // conductor.plans.status
                                if(null!=field_value) {
@@ -547,125 +554,28 @@ public class RestMusicAdminAPI {
                        MusicCore.releaseLock(lockId, true);    
            } catch(Exception e) {
             e.printStackTrace();
-            logger.error(EELFLoggerDelegate.errorLogger, "Exception while notifying...."+e.getMessage());
+            logger.info("Exception...");
         }
        logger.info(EELFLoggerDelegate.applicationLogger, "callback is completed. Notification was sent from Music...");
        return Response.status(Status.OK).entity(resultMap).build();
     }
     
-    private void notifyCallBackAppl(JSONCallbackResponse jsonResponse, JsonCallback baseRequestObj) throws Exception {
+    private void notifyCallBackAppl(JSONCallbackResponse jsonResponse, JsonCallback baseRequestObj) {
        int notifytimeout = MusicUtil.getNotifyTimeout();
        int notifyinterval = MusicUtil.getNotifyInterval();
        String endpoint = baseRequestObj.getApplicationNotificationEndpoint();
         String username = baseRequestObj.getApplicationUsername();
         String password = baseRequestObj.getApplicationPassword();
         JsonNotification jsonNotification = constructJsonNotification(jsonResponse, baseRequestObj);
-        jsonNotification.setPassword("************");
         jsonNotification.setOperation_type(jsonResponse.getOperation());
-        logger.info(EELFLoggerDelegate.applicationLogger, "Notification Response sending is: "+jsonNotification);
-        logger.info("Notification Response sending is: "+jsonNotification);
-        jsonNotification.setPassword(baseRequestObj.getApplicationPassword());
+        logger.info(EELFLoggerDelegate.applicationLogger, "Notification Response sent is: "+jsonNotification);
         WebResource webResource = client.resource(endpoint);
         String authData = username+":"+password;
         byte[] plainCredsBytes = authData.getBytes();
         byte[] base64CredsBytes = Base64.encode(plainCredsBytes);
         String base64Creds = new String(base64CredsBytes);
-        ClientConfig config = new DefaultClientConfig();
-       config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
+        Map<String, String> response_body = baseRequestObj.getResponseBody();
         ClientResponse response = null;
-        WebResource service = null;
-        boolean ok = false;
-        try { 
-               Client client = Client.create(config);
-               TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager(){
-                public X509Certificate[] getAcceptedIssuers(){return null;}
-                public void checkClientTrusted(X509Certificate[] certs, String authType){}
-                public void checkServerTrusted(X509Certificate[] certs, String authType){}
-            }};
-
-            // Install the all-trusting trust manager
-            try {
-                SSLContext sc = SSLContext.getInstance("TLS");
-                sc.init(null, trustAllCerts, new SecureRandom());
-                HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
-            } catch (Exception e) {
-                ;
-            }
-
-               try {
-                SSLContext sslcontext = SSLContext.getInstance( "TLS" );
-                sslcontext.init( null, null, null );
-                Map<String, Object> properties = config.getProperties();
-                HTTPSProperties httpsProperties = new HTTPSProperties(
-                        new HostnameVerifier() {
-                            @Override
-                            public boolean verify( String s, SSLSession sslSession ) {
-                                return true;
-                            }
-                        }, sslcontext
-                );
-                properties.put( HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, httpsProperties );
-                HttpsURLConnection.setDefaultHostnameVerifier (new HostnameVerifier() {
-                                       @Override
-                                       public boolean verify(String hostname, SSLSession session) {
-                                               return true;
-                                       }
-                               });
-                Client.create( config );
-            }
-            catch ( KeyManagementException | NoSuchAlgorithmException e ) {
-                throw new RuntimeException( e );
-            }
-               
-               service = client.resource(endpoint);
-
-               response = service.header("Authorization", "Basic " + base64Creds).accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON)
-                                 .post(ClientResponse.class, jsonNotification);
-               
-        } catch (Exception chf) {
-               logger.info(EELFLoggerDelegate.applicationLogger, "Is Service down?");
-               logger.info("An Exception occured while notifying. "+chf+ " : "+chf.getMessage() +" ...Retrying for: "+notifytimeout);
-        }
-        if(response != null && response.getStatus() == 200) ok = true;
-        if(!ok) {
-               long now= System.currentTimeMillis();
-               long end = now+notifytimeout;
-               while(! ok) {
-                       logger.info(EELFLoggerDelegate.applicationLogger, "retrying since error in notifying callback for "+notifytimeout+"ms");
-                       logger.info("retrying since error in notifying callback.. response status: "+ (response == null ? "404" : response.getStatus()));
-                       try {
-                               ok = true;
-                               response = service.header("Authorization", "Basic " + base64Creds).accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON)
-                                 .post(ClientResponse.class, jsonNotification);
-                               if(response != null && response.getStatus() == 200) ok = true;
-                               else if(System.currentTimeMillis() < end) {
-                                       try{ Thread.sleep(notifyinterval); } catch(Exception e1) {}
-                                       ok = false;
-                               }
-                       }catch (Exception e) {
-                               logger.info(EELFLoggerDelegate.applicationLogger, "Retry until "+(end-System.currentTimeMillis()));
-                               if(response == null && System.currentTimeMillis() < end) ok = false;
-                               else ok = true;
-                               try{ Thread.sleep(notifyinterval); } catch(Exception e1) {}
-                       }
-               }
-        }
-        
-        if(response == null) {
-               logger.error(EELFLoggerDelegate.errorLogger, "Can NOT notify the caller as caller failed to respond..");
-               return;
-        }
-        try {
-               JsonNotifyClientResponse responseStr = response.getEntity(JsonNotifyClientResponse.class);
-               logger.info(EELFLoggerDelegate.applicationLogger, "Response from Notified client: "+responseStr);
-               logger.info("Response from Notified client: "+responseStr);
-        } catch(Exception e) {
-               logger.info("Exception while reading response from Caller");
-               logger.error("Exception while reading response from Caller");
-               logger.error(EELFLoggerDelegate.errorLogger, "Can NOT notify the caller as caller failed to respond..");
-        }
-        
-        /*ClientResponse response = null;
         try { 
                response = webResource.header("Authorization", "Basic " + base64Creds).accept("application/json").type("application/json")
             .post(ClientResponse.class, jsonNotification);
@@ -704,7 +614,7 @@ public class RestMusicAdminAPI {
                            .post(ClientResponse.class, jsonNotification);
                }
                logger.info(EELFLoggerDelegate.applicationLogger, "Exception while notifying.. "+response.getStatus());
-        }*/
+        }
     }
     
     private JsonNotification constructJsonNotification(JSONCallbackResponse jsonResponse, JsonCallback baseRequestObj) {
@@ -725,66 +635,64 @@ public class RestMusicAdminAPI {
                        String primaryId = tableInfo.getPrimaryKey().get(0).getName();
                        
                        Map<String, String> responseBodyMap = baseRequestObj.getResponseBody();
-                       for (Entry<String, String> entry : new HashSet<>(responseBodyMap.entrySet())) {
-                           String trimmed = entry.getKey().trim();
-                           if (!trimmed.equals(entry.getKey())) {
-                               responseBodyMap.remove(entry.getKey());
-                               responseBodyMap.put(trimmed, entry.getValue());
-                           }
+                       Map<String, String> newMap = new HashMap<>();
+                       if(responseBodyMap.size() == 1 && responseBodyMap.containsKey("")) {
+                               jsonNotification.setResponse_body(newMap);
+                       } else {
+                               for (Entry<String, String> entry : new HashSet<>(responseBodyMap.entrySet())) {
+                                   String trimmed = entry.getKey().trim();
+                                   if (!trimmed.equals(entry.getKey())) {
+                                       responseBodyMap.remove(entry.getKey());
+                                       responseBodyMap.put(trimmed, entry.getValue());
+                                   }
+                               }
+                               
+                               Set<String> keySet = responseBodyMap.keySet();
+                               String cql = "select *";
+                               /*for(String keys: keySet) {
+                                       cql = cql + keys + ",";
+                               }*/
+                               //cql = cql.substring(0, cql.length()-1);
+                               cql = cql + " FROM "+fullNotifyArr[0]+" WHERE "+primaryId+" = ?";
+                               logger.info("CQL in constructJsonNotification: "+cql);
+                               PreparedQueryObject pQuery = new PreparedQueryObject();
+                               pQuery.appendQueryString(cql);
+                               pQuery.addValue(MusicUtil.convertToActualDataType(primaryIdType, pkValue));
+                               Row row = MusicCore.get(pQuery).one();
+                               if(row != null) {
+                                       ColumnDefinitions colInfo = row.getColumnDefinitions();
+                               for (Definition definition : colInfo) {
+                                   String colName = definition.getName();
+                                   if(keySet.contains(colName)) {
+                                       DataType colType = definition.getType();
+                                       Object valueObj = MusicCore.getDSHandle().getColValue(row, colName, colType);
+                                       Object valueString = MusicUtil.convertToActualDataType(colType, valueObj);
+                                       logger.info(colName+" : "+valueString);
+                                       newMap.put(colName, valueString.toString());
+                                       keySet.remove(colName);
+                                   }
+                               }
+                               }
+                               if(! keySet.isEmpty()) {
+                                       Iterator<String> iterator = keySet.iterator();
+                                       while (iterator.hasNext()) {
+                                           String element = iterator.next();
+                                           if(element != null && element.length() > 0)
+                                               newMap.put(element,"COLUMN_NOT_FOUND");
+                                       }
+                               }
+                           
+                               if("delete".equals(jsonResponse.getOperation()) || newMap.isEmpty()) {
+                                       newMap.put(primaryId, pkValue);
+                               }
+                               jsonNotification.setResponse_body(newMap);
                        }
-                       
-               Set<String> keySet = responseBodyMap.keySet();
-               Map<String, String> newMap = new HashMap<>();
-               if(responseBodyMap.size() == 1 && responseBodyMap.containsKey("")) {
-                       jsonNotification.setResponse_body(newMap);
-                       return jsonNotification;
-               }
-               logger.info(EELFLoggerDelegate.applicationLogger, "responseBodyMap is not blank: "+responseBodyMap);
-               String cql = "select *";
-               /*for(String keys: keySet) {
-                       cql = cql + keys + ",";
-               }*/
-               //cql = cql.substring(0, cql.length()-1);
-               cql = cql + " FROM "+fullNotifyArr[0]+" WHERE "+primaryId+" = ?";
-               logger.info(EELFLoggerDelegate.applicationLogger, "CQL in constructJsonNotification: "+cql);
-               PreparedQueryObject pQuery = new PreparedQueryObject();
-               pQuery.appendQueryString(cql);
-               pQuery.addValue(MusicUtil.convertToActualDataType(primaryIdType, pkValue));
-               Row row = MusicCore.get(pQuery).one();
-               if(row != null) {
-                       ColumnDefinitions colInfo = row.getColumnDefinitions();
-                   for (Definition definition : colInfo) {
-                       String colName = definition.getName();
-                       if(keySet.contains(colName)) {
-                               DataType colType = definition.getType();
-                               Object valueObj = MusicCore.getDSHandle().getColValue(row, colName, colType);
-                               Object valueString = MusicUtil.convertToActualDataType(colType, valueObj);
-                               logger.info(colName+" : "+valueString);
-                               newMap.put(colName, valueString.toString());
-                               keySet.remove(colName);
-                       }
-                   }
-               }
-               if(! keySet.isEmpty()) {
-                       Iterator<String> iterator = keySet.iterator();
-                       while (iterator.hasNext()) {
-                           String element = iterator.next();
-                           newMap.put(element,"COLUMN_NOT_FOUND");
-                       }
-               }
-            
-               if("delete".equals(jsonResponse.getOperation()) || newMap.isEmpty()) {
-                       newMap.put(primaryId, pkValue);
-               }
-               jsonNotification.setResponse_body(newMap);
-       } catch(Exception e) {
-               e.printStackTrace();
-       }
-       return jsonNotification;
+                       } catch(Exception e) {
+                       e.printStackTrace();
+                       }
+                       return jsonNotification;
     }
     
-    
-    
     private void constructJsonCallbackFromCache() throws Exception{
        PreparedQueryObject pQuery = new PreparedQueryObject();
                JsonCallback jsonCallback = null;
@@ -794,6 +702,7 @@ public class RestMusicAdminAPI {
                 + " notify_delete_on, notify_update_on, request, notifyon from admin.notification_master allow filtering";
         pQuery.appendQueryString(cql);
         //pQuery.addValue(MusicUtil.convertToActualDataType(DataType.text(), fullTable));
+        logger.info("Query: "+pQuery.getQuery());
         
         ResultSet rs = MusicCore.get(pQuery);
         Iterator<Row> it = rs.iterator();
@@ -821,7 +730,7 @@ public class RestMusicAdminAPI {
             jsonCallback.setNotifyWhenDeletesIn(delete);
             jsonCallback.setNotifyWhenChangeIn(update);
             jsonCallback.setUuid(uuid);
-            logger.info(EELFLoggerDelegate.applicationLogger, "From DB. Saved request_body: "+request);
+            logger.info("From DB. Saved request_body: "+request);
             request = request.substring(1, request.length()-1);           
             String[] keyValuePairs = request.split(",");              
             Map<String,String> responseBody = new HashMap<>();               
@@ -833,9 +742,9 @@ public class RestMusicAdminAPI {
                        val = entry[1];
                 responseBody.put(entry[0], val);          
             }
-            logger.info(EELFLoggerDelegate.applicationLogger, "After parsing. Saved request_body: "+responseBody);
+            logger.info("After parsing. Saved request_body: "+responseBody);
             jsonCallback.setResponseBody(responseBody);
-            logger.info(EELFLoggerDelegate.applicationLogger, "Updating Cache with updateCallBackCache: "+notifyon+ " :::: "+jsonCallback);
+            logger.info("Updating Cache with updateCallBackCache: "+notifyon+ " :::: "+jsonCallback);
             CachingUtil.updateCallBackCache(notifyon, jsonCallback);
         }
         CachingUtil.updateCallbackNotifyList(notifyList);
@@ -907,6 +816,7 @@ public class RestMusicAdminAPI {
                jsonCallback.setNotifyWhenInsertsIn(inserts);
                jsonCallback.setResponseBody(responseBody);
                CachingUtil.updateCallBackCache(notify_field, jsonCallback);
+               logger.info("Cache updated ");
                pQuery = new PreparedQueryObject();
                pQuery.appendQueryString(cql);
                ResultType nonKeyRelatedPut = MusicCore.nonKeyRelatedPut(pQuery, MusicUtil.EVENTUAL);
@@ -923,27 +833,6 @@ public class RestMusicAdminAPI {
         }
        return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).setMessage("Callback api successfully registered").toMap()).build();
     }
-    
-    @DELETE
-    @Path("/onboardCallback")
-    @Produces(MediaType.APPLICATION_JSON)
-    @Consumes(MediaType.APPLICATION_JSON)
-    public Response deleteCallbackProp(JsonNotification jsonNotification) {
-       Map<String, Object> resultMap = new HashMap<>();
-        ResponseBuilder response =
-                        Response.noContent().header("X-latestVersion", MusicUtil.getVersion());
-        String notifyOn = jsonNotification.getNotify_field();
-        PreparedQueryObject pQuery = new PreparedQueryObject();
-        try {
-               pQuery.appendQueryString("DELETE FROM admin.notification_master WHERE notifyon = ?");
-               pQuery.addValue(MusicUtil.convertToActualDataType(DataType.text(), notifyOn));
-               MusicCore.nonKeyRelatedPut(pQuery, MusicUtil.EVENTUAL);
-        } catch(Exception e) {
-               e.printStackTrace();
-               return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setMessage("Callback api registration failed").toMap()).build();
-        }
-       return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).setMessage("Callback api successfully deleted").toMap()).build();
-    }
 
     /*public String encodePwd(String password) {
        return Base64.getEncoder().encodeToString(password.getBytes());
index 592b744..2d1a883 100755 (executable)
@@ -157,13 +157,14 @@ public class RestMusicDataAPI {
                String password = userCredentials.get(MusicUtil.PASSWORD);
         Map<String, Object> authMap = CachingUtil.verifyOnboarding(ns, userId, password);
         if (!authMap.isEmpty()) {
-            logger.error(EELFLoggerDelegate.errorLogger,"authMap has an error. verifyOnboarding may have failed silently", AppMessages.MISSINGDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.AUTHENTICATIONERROR);
+            logger.error(EELFLoggerDelegate.errorLogger,"", 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();
+            return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Error"))).toMap()).build();
         }
         if(kspObject == null || kspObject.getReplicationInfo() == null) {
+            authMap.put(ResultType.EXCEPTION.getResult(), ResultType.BODYMISSING.getResult());
             response.status(Status.BAD_REQUEST);
-            return response.entity(new JsonResponse(ResultType.FAILURE).setError(ResultType.BODYMISSING.getResult()).toMap()).build();
+            return response.entity(authMap).build();
         }
 
 
@@ -182,7 +183,7 @@ public class RestMusicDataAPI {
             } else {
                 logger.error(EELFLoggerDelegate.errorLogger,"", 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();
+                return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Error"))).toMap()).build();
             }
         }
 
@@ -367,7 +368,7 @@ public class RestMusicDataAPI {
             authMap.remove("aid");
         if (!authMap.isEmpty()) {
             logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.MISSINGINFO  ,ErrorSeverity.CRITICAL, ErrorTypes.AUTHENTICATIONERROR);
-            return response.status(Status.UNAUTHORIZED).entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Exception"))).toMap()).build();
+            return response.status(Status.UNAUTHORIZED).entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Error"))).toMap()).build();
         }
         String consistency = MusicUtil.EVENTUAL;
         // for now this needs only eventual consistency
@@ -593,7 +594,7 @@ public class RestMusicDataAPI {
         if (!authMap.isEmpty()) {
             logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.MISSINGINFO  ,ErrorSeverity.CRITICAL, ErrorTypes.AUTHENTICATIONERROR);
             response.status(Status.UNAUTHORIZED);
-            return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Exception"))).toMap()).build();
+            return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Error"))).toMap()).build();
         }
         MultivaluedMap<String, String> rowParams = info.getQueryParameters();
         String indexName = "";
@@ -661,7 +662,7 @@ public class RestMusicDataAPI {
             authMap.remove("aid");
         if (!authMap.isEmpty()) {
             logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.MISSINGINFO  ,ErrorSeverity.CRITICAL, ErrorTypes.AUTHENTICATIONERROR);
-            return response.status(Status.UNAUTHORIZED).entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Exception"))).toMap()).build();
+            return response.status(Status.UNAUTHORIZED).entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Error"))).toMap()).build();
         }
 
         Map<String, Object> valuesMap = insObj.getValues();
@@ -871,7 +872,7 @@ public class RestMusicDataAPI {
             authMap.remove("aid");
         if (!authMap.isEmpty()) {
             logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.MISSINGINFO  ,ErrorSeverity.WARN, ErrorTypes.AUTHENTICATIONERROR);
-              return response.status(Status.UNAUTHORIZED).entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Exception"))).toMap()).build();
+              return response.status(Status.UNAUTHORIZED).entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Error"))).toMap()).build();
         }
         long startTime = System.currentTimeMillis();
         String operationId = UUID.randomUUID().toString();// just for infoging
@@ -1084,7 +1085,7 @@ public class RestMusicDataAPI {
             authMap.remove("aid");
         if (!authMap.isEmpty()) {
             logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.MISSINGINFO  ,ErrorSeverity.WARN, ErrorTypes.AUTHENTICATIONERROR);
-              return response.status(Status.UNAUTHORIZED).entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Exception"))).toMap()).build();
+              return response.status(Status.UNAUTHORIZED).entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Error"))).toMap()).build();
         }
         if(delObj == null) {
             logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.MISSINGDATA  ,ErrorSeverity.WARN, ErrorTypes.DATAERROR);
@@ -1219,7 +1220,7 @@ public class RestMusicDataAPI {
             authMap.remove("aid");
         if (!authMap.isEmpty()) {
             logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.MISSINGINFO  ,ErrorSeverity.WARN, ErrorTypes.AUTHENTICATIONERROR);
-            return response.status(Status.UNAUTHORIZED).entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Exception"))).toMap()).build();
+            return response.status(Status.UNAUTHORIZED).entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Error"))).toMap()).build();
         }
         String consistency = "eventual";// for now this needs only eventual
                                         // consistency
@@ -1274,7 +1275,7 @@ public class RestMusicDataAPI {
             authMap.remove("aid");
         if (!authMap.isEmpty()) {
             logger.error(EELFLoggerDelegate.errorLogger,"Error while authentication... ", AppMessages.MISSINGINFO  ,ErrorSeverity.WARN, ErrorTypes.AUTHENTICATIONERROR);
-              return response.status(Status.UNAUTHORIZED).entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Exception"))).toMap()).build();
+              return response.status(Status.UNAUTHORIZED).entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Error"))).toMap()).build();
         }
         String lockId = selObj.getConsistencyInfo().get("lockId");
 
@@ -1357,7 +1358,7 @@ public class RestMusicDataAPI {
             authMap.remove("aid");
         if (!authMap.isEmpty()) {
             logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.AUTHENTICATIONERROR  ,ErrorSeverity.WARN, ErrorTypes.AUTHENTICATIONERROR);
-            return response.status(Status.UNAUTHORIZED).entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Exception"))).toMap()).build();
+            return response.status(Status.UNAUTHORIZED).entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(authMap.get("Error"))).toMap()).build();
         }
         PreparedQueryObject queryObject = new PreparedQueryObject();
 
index 44b4a51..895f0ab 100644 (file)
@@ -111,28 +111,10 @@ public class RestMusicHealthCheckAPI {
                }
        }
        
-       @GET
-       @Path("/musicHealthCheck")
-       @ApiOperation(value = "Get Health Status", response = Map.class)
-       @Produces(MediaType.APPLICATION_JSON)
-       public Response musicHealthCheck() {
-               logger.info(EELFLoggerDelegate.applicationLogger,"Replying to request for Health Check status for MUSIC");
-               Map<String, Object> resultMap = new HashMap<>();
-               MusicHealthCheck healthCheck = new MusicHealthCheck();
-               String status = healthCheck.getZookeeperStatus();
-               if(status.equals("ACTIVE")) {
-                       resultMap.put("ZooKeeper", "Active");
-               }else {
-                       resultMap.put("ZooKeeper", "Inactive");
-               }
-               status = healthCheck.getCassandraStatus(ConsistencyLevel.ANY.toString());
-               if(status.equals("ACTIVE")) {
-                       resultMap.put("Cassandra", "Active");
-               } else {
-                       resultMap.put("Cassandra", "Inactive");
-               }
-               resultMap.put("MUSIC", "Active");
-               return Response.status(Status.OK).entity(resultMap).build();
-       }
+       
+       
+       
+       
+       
 
 }
index ecd8584..36a7f08 100755 (executable)
@@ -4,7 +4,7 @@
 
 major=3
 minor=0
-patch=22
+patch=24
 
 base_version=${major}.${minor}.${patch}