[AMBARI-23828] Provide a command line utility in AMS scripts to upgrade the schema using the collector's tool (dsen) (#1252)

* [AMBARI-23828] Provide a command line utility in AMS scripts to upgrade the schema using the collector's tool (dsen)

* [AMBARI-23828] Provide a command line utility in AMS scripts to upgrade the schema using the collector's tool (dsen) - changes according to review
diff --git a/ambari-metrics-timelineservice/conf/unix/ambari-metrics-collector b/ambari-metrics-timelineservice/conf/unix/ambari-metrics-collector
index ce75742..ba3d650 100644
--- a/ambari-metrics-timelineservice/conf/unix/ambari-metrics-collector
+++ b/ambari-metrics-timelineservice/conf/unix/ambari-metrics-collector
@@ -19,6 +19,10 @@
 OUTFILE=/var/log/ambari-metrics-collector/ambari-metrics-collector.out
 STARTUPFILE=/var/log/ambari-metrics-collector/ambari-metrics-collector-startup.out
 
+
+UPGRADE_PIDFILE=/var/run/ambari-metrics-collector/ambari-metrics-collector_upgrade.pid
+UPGRADE_LOGFILE=ambari-metrics-migration.log
+
 HBASE_ZK_PID=/var/run/ams-hbase/hbase-${USER}-zookeeper.pid
 HBASE_MASTER_PID=/var/run/ams-hbase/hbase-${USER}-master.pid
 HBASE_RS_PID=/var/run/ams-hbase/hbase-${USER}-regionserver.pid
@@ -309,6 +313,60 @@
     fi
   }
 
+function start_upgrade()
+{
+  hadoop_java_setup
+
+	CLASS='org.apache.ambari.metrics.core.timeline.upgrade.core.MetricsDataMigrationLauncher'
+
+  daemon_status "${UPGRADE_PIDFILE}"
+  if [[ $? == 0  ]]; then
+    echo "Metrics data migration is already running as process $(cat "${UPGRADE_PIDFILE}"). Exiting"
+    exit 0
+  else
+    # stale pid file, so just remove it and continue on
+    rm -f "${UPGRADE_PIDFILE}" >/dev/null 2>&1
+  fi
+
+  #get rid of the first command argument and pass the rest to java
+  shift
+  nohup "${JAVA}" "-cp" "/usr/lib/ambari-metrics-collector/*:${COLLECTOR_CONF_DIR}:${COLLECTOR_ADDITIONAL_CLASSPATH}" "-Dams.log.dir=${AMS_COLLECTOR_LOG_DIR}" "-Dams.log.file=${UPGRADE_LOGFILE}" "${CLASS}" "${AMS_COLLECTOR_LOG_DIR}/ambari-metrics-migration-state.txt" "$@" > $OUTFILE 2>&1 &
+  PID=$!
+  write_pidfile "${UPGRADE_PIDFILE}"
+  sleep 1
+
+  echo "Verifying metrics data migration process status..."
+  if [ -z "`ps ax | grep -w ${PID} | grep MetricsDataMigrationLauncher`" ]; then
+    echo "ERROR: metrics data migration start failed. For more details, see ${AMS_COLLECTOR_LOG_DIR}/${UPGRADE_LOGFILE}:"
+    exit -1
+  fi
+
+  echo "$(date) Metrics data migration successfully started."
+  }
+
+function stop_upgrade()
+{
+  pidfile=${UPGRADE_PIDFILE}
+
+  if [[ -f "${pidfile}" ]]; then
+    pid=$(cat "$pidfile")
+
+    kill "${pid}" >/dev/null 2>&1
+    sleep "${STOP_TIMEOUT}"
+
+    if kill -0 "${pid}" > /dev/null 2>&1; then
+      echo "WARNING: Metrics data migration did not stop gracefully after ${STOP_TIMEOUT} seconds: Trying to kill with kill -9"
+      kill -9 "${pid}" >/dev/null 2>&1
+    fi
+
+    if ps -p "${pid}" > /dev/null 2>&1; then
+      echo "ERROR: Unable to kill ${pid}"
+    else
+      rm -f "${pidfile}" >/dev/null 2>&1
+    fi
+  fi
+}
+
 function stop()
 {
   pidfile=${PIDFILE}
@@ -404,6 +462,16 @@
     start
 
     ;;
+
+    upgrade_start)
+    start_upgrade "$@"
+
+    ;;
+
+    upgrade_stop)
+    stop_upgrade
+
+    ;;
 	stop)
     stop