Ensure shutdown hook is called on docker stop 87/4287/1
authorBlimkie, Steven (sb787e) <steven.blimkie@amdocs.com>
Wed, 17 May 2017 14:45:08 +0000 (17:45 +0300)
committerBlimkie, Steven (sb787e) <steven.blimkie@amdocs.com>
Wed, 17 May 2017 14:45:55 +0000 (17:45 +0300)
Change-Id: I7f2165c6c4b8cfeb3d62c4a286b62f4e42dde449
Signed-off-by: Blimkie, Steven (sb787e) <steven.blimkie@amdocs.com>
src/main/bin/start.sh
src/main/docker/Dockerfile
src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java
src/main/java/org/openecomp/modelloader/service/ModelLoaderService.java

index 07f707e..f35b1f1 100644 (file)
@@ -1,45 +1,25 @@
-###\r
-# ============LICENSE_START=======================================================
-# MODEL LOADER SERVICE
-# ================================================================================
-# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");\r
-# you may not use this file except in compliance with the License.\r
-# You may obtain a copy of the License at\r
-# \r
-#      http://www.apache.org/licenses/LICENSE-2.0\r
-# \r
-# Unless required by applicable law or agreed to in writing, software\r
-# distributed under the License is distributed on an "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-# See the License for the specific language governing permissions and\r
-# limitations under the License.
-# ============LICENSE_END=========================================================\r
-###\r
-\r
-#!/bin/sh\r
-\r
-BASEDIR="/opt/app/model-loader/"\r
-AJSC_HOME="$BASEDIR"\r
-\r
-if [ -z "$CONFIG_HOME" ]; then\r
-       echo "CONFIG_HOME must be set in order to start up process"\r
-       exit 1\r
-fi\r
-\r
-CLASSPATH="$AJSC_HOME/lib/*"\r
-CLASSPATH="$CLASSPATH:$AJSC_HOME/extJars/"\r
-CLASSPATH="$CLASSPATH:$AJSC_HOME/etc/"\r
-PROPS="-DAJSC_HOME=$AJSC_HOME"\r
-PROPS="$PROPS -DAJSC_CONF_HOME=$BASEDIR/bundleconfig/"\r
-PROPS="$PROPS -Dlogback.configurationFile=$BASEDIR/bundleconfig/etc/logback.xml"\r
-PROPS="$PROPS -DAJSC_SHARED_CONFIG=$AJSC_CONF_HOME"\r
-PROPS="$PROPS -DAJSC_SERVICE_NAMESPACE=model-loader"\r
-PROPS="$PROPS -DAJSC_SERVICE_VERSION=v1"\r
-PROPS="$PROPS -Dserver.port=8080"\r
-PROPS="$PROPS -DCONFIG_HOME=$CONFIG_HOME"\r
-\r
-echo $CLASSPATH\r
-\r
-java -Xms1024m -Xmx4096m -XX:PermSize=2024m $PROPS -classpath $CLASSPATH com.att.ajsc.runner.Runner context=// sslport=8081\r
+#!/bin/sh
+
+BASEDIR="/opt/app/model-loader/"
+AJSC_HOME="$BASEDIR"
+
+if [ -z "$CONFIG_HOME" ]; then
+       echo "CONFIG_HOME must be set in order to start up process"
+       exit 1
+fi
+
+CLASSPATH="$AJSC_HOME/lib/*"
+CLASSPATH="$CLASSPATH:$AJSC_HOME/extJars/"
+CLASSPATH="$CLASSPATH:$AJSC_HOME/etc/"
+PROPS="-DAJSC_HOME=$AJSC_HOME"
+PROPS="$PROPS -DAJSC_CONF_HOME=$BASEDIR/bundleconfig/"
+PROPS="$PROPS -Dlogback.configurationFile=$BASEDIR/bundleconfig/etc/logback.xml"
+PROPS="$PROPS -DAJSC_SHARED_CONFIG=$AJSC_CONF_HOME"
+PROPS="$PROPS -DAJSC_SERVICE_NAMESPACE=model-loader"
+PROPS="$PROPS -DAJSC_SERVICE_VERSION=v1"
+PROPS="$PROPS -Dserver.port=8080"
+PROPS="$PROPS -DCONFIG_HOME=$CONFIG_HOME"
+
+echo $CLASSPATH
+
+exec java -Xms1024m -Xmx4096m -XX:PermSize=2024m $PROPS -classpath $CLASSPATH com.att.ajsc.runner.Runner context=// sslport=8081
index 6f187d5..9aafdda 100644 (file)
@@ -21,4 +21,4 @@ COPY *.sh $BIN_HOME
 RUN chmod 755 $BIN_HOME/*
 RUN ln -s /logs $MICRO_HOME/logs
 
-CMD /opt/app/model-loader/bin/start.sh
+CMD ["/opt/app/model-loader/bin/start.sh"]
index 6f9f64f..19b69cf 100644 (file)
@@ -166,11 +166,14 @@ public class ModelArtifactHandler extends ArtifactHandler {
   private String getURL(ModelArtifact model) {
     String baseURL = config.getAaiBaseUrl().trim();
     String subURL = null;
+    String instance = null;
     if (model.getType().equals(ArtifactType.MODEL)) {
       subURL = config.getAaiModelUrl(model.getModelNamespaceVersion()).trim();
+      instance = model.getModelInvariantId();
     }
     else {
       subURL = config.getAaiNamedQueryUrl(model.getModelNamespaceVersion()).trim();
+      instance = model.getNameVersionId();
     }
 
     if ( (!baseURL.endsWith("/")) && (!subURL.startsWith("/")) ) {
@@ -185,18 +188,21 @@ public class ModelArtifactHandler extends ArtifactHandler {
       subURL = subURL + "/";
     }
 
-    String url = baseURL + subURL + model.getModelInvariantId();
+    String url = baseURL + subURL + instance;
     return url;
   }
 
   private String getModelVerURL(ModelArtifact model) {
     String baseURL = config.getAaiBaseUrl().trim();
     String subURL = null;
+    String instance = null;
     if (model.getType().equals(ArtifactType.MODEL)) {
       subURL = config.getAaiModelUrl(model.getModelNamespaceVersion()).trim() + model.getModelInvariantId() + AAI_MODEL_VER;
+      instance = model.getModelVerId();
     }
     else {
       subURL = config.getAaiNamedQueryUrl(model.getModelNamespaceVersion()).trim();
+      instance = model.getNameVersionId();
     }
 
     if ( (!baseURL.endsWith("/")) && (!subURL.startsWith("/")) ) {
@@ -211,8 +217,7 @@ public class ModelArtifactHandler extends ArtifactHandler {
       subURL = subURL + "/";
     }
 
-    String url = baseURL + subURL + model.getModelVerId();
-    System.out.println(url);
+    String url = baseURL + subURL + instance;
     return url;
   }
 
index aeaa6f4..786f1a2 100644 (file)
@@ -48,156 +48,157 @@ import javax.ws.rs.core.Response;
  * capabilities between AAI and an ASDC.
  */
 public class ModelLoaderService implements ModelLoaderInterface {
-
-  protected static final String FILESEP = (System.getProperty("file.separator") == null) ? "/"
-      : System.getProperty("file.separator");
-
-  protected static final String CONFIG_DIR = System.getProperty("CONFIG_HOME") + FILESEP;
-  protected static final String CONFIG_AUTH_LOCATION = CONFIG_DIR + "auth" + FILESEP;
-  protected static final String CONFIG_FILE = CONFIG_DIR + "model-loader.properties";
-
-  private IDistributionClient client;
-  private ModelLoaderConfig config;
-  private Timer timer = null;
-
-  static Logger logger = LoggerFactory.getInstance().getLogger(ModelLoaderService.class.getName());
-
-  /**
-   * Responsible for loading configuration files and calling initialization.
-   */
-  public ModelLoaderService() {
-    start();
-  }
-
-  protected void start() {
-    // Load model loader system configuration
-    logger.info(ModelLoaderMsgs.LOADING_CONFIGURATION);
-    Properties configProperties = new Properties();
-    try {
-      configProperties.load(new FileInputStream(CONFIG_FILE));
-    } catch (IOException e) {
-      String errorMsg = "Failed to load configuration: " + e.getMessage();
-      logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
-      shutdown();
-    }
-
-    config = new ModelLoaderConfig(configProperties, CONFIG_AUTH_LOCATION);
-    init();
-  }
-
-  @Override
-  public void finalize() {
-    preShutdownOperations();
-  }
-
-  /**
-   * Responsible for stopping the connection to the distribution client before
-   * the resource is destroyed.
-   */
-  protected void preShutdownOperations() {
-    logger.info(ModelLoaderMsgs.STOPPING_CLIENT);
-    if (client != null) {
-      client.stop();
-    }
-  }
-
-  /**
-   * Responsible for loading configuration files, initializing model
-   * distribution clients, and starting them.
-   */
-  protected void init() {
-    // Initialize distribution client
-    logger.debug(ModelLoaderMsgs.INITIALIZING, "Initializing distribution client...");
-    client = DistributionClientFactory.createDistributionClient();
-    EventCallback callback = new EventCallback(client, config);
-
-    IDistributionClientResult initResult = client.init(config, callback);
-
-    if (initResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      String errorMsg = "Failed to initialize distribution client: "
-          + initResult.getDistributionMessageResult();
-      logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
-
-      // Kick off a timer to retry the SDC connection
-      timer = new Timer();
-      TimerTask task = new SdcConnectionJob(client, config, callback, timer);
-      timer.schedule(task, new Date(), 60000);
-    }
-    else {
-      // Start distribution client
-      logger.debug(ModelLoaderMsgs.INITIALIZING, "Starting distribution client...");
-      IDistributionClientResult startResult = client.start();
-      if (startResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-        String errorMsg = "Failed to start distribution client: "
-            + startResult.getDistributionMessageResult();
-        logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
-
-        // Kick off a timer to retry the SDC connection
-        timer = new Timer();
-        TimerTask task = new SdcConnectionJob(client, config, callback, timer);
-        timer.schedule(task, new Date(), 60000);
-      }
-      else {
-        logger.info(ModelLoaderMsgs.INITIALIZING, "Connection to SDC established");
-      }
-    }
-  }
-
-  /**
-   * Shut down the process.
-   */
-  private void shutdown() {
-    preShutdownOperations();
-
-    // TODO: Find a better way to shut down the model loader.
-    try {
-      // Give logs time to write to file
-      Thread.sleep(2000);
-    } catch (InterruptedException e) {
-      // Nothing we can do at this point
-    }
-
-    Runtime.getRuntime().halt(1);
-  }
-
-  /** (non-Javadoc)
-   * @see org.openecomp.modelloader.service.ModelLoaderInterface#loadModel(java.lang.String)
-   */
-  @Override
-  public Response loadModel(String modelid) {
-    Response response = Response.ok("{\"model_loaded\":\"" + modelid + "\"}").build();
-
-    return response;
-  }
-
-  /** (non-Javadoc)
-   * @see org.openecomp.modelloader.service.ModelLoaderInterface#saveModel(java.lang.String, java.lang.String)
-   */
-  @Override
-  public Response saveModel(String modelid, String modelname) {
-    Response response = Response.ok("{\"model_saved\":\"" + modelid + "-" + modelname + "\"}")
-        .build();
-
-    return response;
-  }
-
-  @Override
-  public Response ingestModel(String modelid, HttpServletRequest req, String payload)
-      throws IOException {
-    Response response;
-
-    if (config.getIngestSimulatorEnabled()) {
-      logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Received test artifact");
-
-      ModelArtifactHandler handler = new ModelArtifactHandler(config);
-      handler.loadModelTest(payload.getBytes());
-
-      response = Response.ok().build();
-    } else {
-      logger.debug("Simulation interface disabled");
-      response = Response.serverError().build();
-    }
-
-    return response;
-  }
+       
+       protected static final String FILESEP = (System.getProperty("file.separator") == null) ? "/"
+            : System.getProperty("file.separator");
+
+       protected static final String CONFIG_DIR = System.getProperty("CONFIG_HOME") + FILESEP;
+       protected static final String CONFIG_AUTH_LOCATION = CONFIG_DIR + "auth" + FILESEP;
+       protected static final String CONFIG_FILE = CONFIG_DIR + "model-loader.properties";
+
+       private IDistributionClient client;
+       private ModelLoaderConfig config;
+       private Timer timer = null;
+
+       static Logger logger = LoggerFactory.getInstance().getLogger(ModelLoaderService.class.getName());
+
+       /**
+        * Responsible for loading configuration files and calling initialization.
+        */
+       public ModelLoaderService() {
+               start();
+       }
+
+       protected void start() {
+               // Load model loader system configuration
+               logger.info(ModelLoaderMsgs.LOADING_CONFIGURATION);
+               Properties configProperties = new Properties();
+               try {
+                       configProperties.load(new FileInputStream(CONFIG_FILE));
+               } catch (IOException e) {
+                       String errorMsg = "Failed to load configuration: " + e.getMessage();
+                       logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
+                       shutdown();
+               }
+
+               config = new ModelLoaderConfig(configProperties, CONFIG_AUTH_LOCATION);
+               init();
+               
+               Runtime.getRuntime().addShutdownHook(new Thread(new Runnable(){
+                       public void run() {
+                               preShutdownOperations();
+                       }
+               }));
+       }
+       
+       /**
+        * Responsible for stopping the connection to the distribution client before
+        * the resource is destroyed.
+        */
+       protected void preShutdownOperations() {
+               logger.info(ModelLoaderMsgs.STOPPING_CLIENT);
+               if (client != null) {
+                       client.stop();
+               }
+       }
+
+       /**
+        * Responsible for loading configuration files, initializing model
+        * distribution clients, and starting them.
+        */
+       protected void init() {
+               // Initialize distribution client
+               logger.debug(ModelLoaderMsgs.INITIALIZING, "Initializing distribution client...");
+               client = DistributionClientFactory.createDistributionClient();
+               EventCallback callback = new EventCallback(client, config);
+               
+               IDistributionClientResult initResult = client.init(config, callback);
+
+               if (initResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
+                       String errorMsg = "Failed to initialize distribution client: "
+                                       + initResult.getDistributionMessageResult();
+                       logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
+                       
+                       // Kick off a timer to retry the SDC connection
+                       timer = new Timer();
+                       TimerTask task = new SdcConnectionJob(client, config, callback, timer);
+                       timer.schedule(task, new Date(), 60000);
+               }
+               else {
+                       // Start distribution client
+                       logger.debug(ModelLoaderMsgs.INITIALIZING, "Starting distribution client...");
+                       IDistributionClientResult startResult = client.start();
+                       if (startResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
+                               String errorMsg = "Failed to start distribution client: "
+                                               + startResult.getDistributionMessageResult();
+                               logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
+
+                               // Kick off a timer to retry the SDC connection
+                               timer = new Timer();
+                               TimerTask task = new SdcConnectionJob(client, config, callback, timer);
+                               timer.schedule(task, new Date(), 60000);
+                       }
+                       else {
+                               logger.info(ModelLoaderMsgs.INITIALIZING, "Connection to SDC established");
+                       }
+               }
+       }
+
+       /**
+        * Shut down the process.
+        */
+       private void shutdown() {
+               preShutdownOperations();
+
+               // TODO: Find a better way to shut down the model loader.
+               try {
+                       // Give logs time to write to file
+                       Thread.sleep(2000);
+               } catch (InterruptedException e) {
+                       // Nothing we can do at this point
+               }
+
+               Runtime.getRuntime().halt(1);
+       }
+
+       /** (non-Javadoc)
+        * @see org.openecomp.modelloader.service.ModelLoaderInterface#loadModel(java.lang.String)
+        */
+       @Override
+       public Response loadModel(String modelid) {
+               Response response = Response.ok("{\"model_loaded\":\"" + modelid + "\"}").build();
+
+               return response;
+       }
+
+       /** (non-Javadoc)
+        * @see org.openecomp.modelloader.service.ModelLoaderInterface#saveModel(java.lang.String, java.lang.String)
+        */
+       @Override
+       public Response saveModel(String modelid, String modelname) {
+               Response response = Response.ok("{\"model_saved\":\"" + modelid + "-" + modelname + "\"}")
+                               .build();
+
+               return response;
+       }
+
+       @Override
+       public Response ingestModel(String modelid, HttpServletRequest req, String payload)
+                       throws IOException {
+               Response response;
+
+               if (config.getIngestSimulatorEnabled()) {
+                       logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Received test artifact");
+
+                       ModelArtifactHandler handler = new ModelArtifactHandler(config);
+                       handler.loadModelTest(payload.getBytes());
+
+                       response = Response.ok().build();
+               } else {
+                       logger.debug("Simulation interface disabled");
+                       response = Response.serverError().build();
+               }
+
+               return response;
+       }
 }