From c873e7629db2741ab675f2df88ecbc4d53b5215c Mon Sep 17 00:00:00 2001 From: Rob Daugherty Date: Tue, 4 Dec 2018 12:22:49 -0500 Subject: MUSIC-224 Dockerize MdbcServer This is a single site installation, with a cassandra container, a mariadb container, and an mdbc-server container. To build the docker images, first build mdbc software normally, then use the 'docker' maven profile: mvn -P docker To bring up the environment: cd mdbc-packages/mdbc-docker/compose/one-site docker-compose up Change-Id: Ie48487fc6c7853b80017dfa45aff52801da52cf0 Issue-ID: MUSIC-224 Signed-off-by: Rob Daugherty --- mdbc-packages/mdbc-docker/compose/one-site/.env | 2 + .../compose/one-site/docker-compose.yml | 72 ++++++++ .../01-create-music-internal-keyspace.cql | 1 + .../one-site/volumes/mariadb/conf.d/mariadb1.cnf | 193 +++++++++++++++++++++ .../01-create-test-database.sh | 28 +++ .../volumes/mdbc-server/config/music.properties | 4 + .../mdbc-server/config/tableConfiguration.json | 23 +++ mdbc-packages/mdbc-docker/pom.xml | 171 ++++++++++++++++++ .../docker/docker-files/Dockerfile.mdbc-cassandra | 9 + .../docker/docker-files/Dockerfile.mdbc-server | 30 ++++ .../docker/docker-files/scripts/start-cassandra.sh | 148 ++++++++++++++++ .../docker-files/scripts/start-mdbc-server.sh | 82 +++++++++ .../main/docker/docker-files/scripts/wait-for.sh | 103 +++++++++++ mdbc-packages/pom.xml | 33 ++++ pom.xml | 1 + 15 files changed, 900 insertions(+) create mode 100644 mdbc-packages/mdbc-docker/compose/one-site/.env create mode 100644 mdbc-packages/mdbc-docker/compose/one-site/docker-compose.yml create mode 100644 mdbc-packages/mdbc-docker/compose/one-site/volumes/cassandra/docker-entrypoint-initdb.d/01-create-music-internal-keyspace.cql create mode 100644 mdbc-packages/mdbc-docker/compose/one-site/volumes/mariadb/conf.d/mariadb1.cnf create mode 100644 mdbc-packages/mdbc-docker/compose/one-site/volumes/mariadb/docker-entrypoint-initdb.d/01-create-test-database.sh create mode 100644 mdbc-packages/mdbc-docker/compose/one-site/volumes/mdbc-server/config/music.properties create mode 100644 mdbc-packages/mdbc-docker/compose/one-site/volumes/mdbc-server/config/tableConfiguration.json create mode 100644 mdbc-packages/mdbc-docker/pom.xml create mode 100644 mdbc-packages/mdbc-docker/src/main/docker/docker-files/Dockerfile.mdbc-cassandra create mode 100644 mdbc-packages/mdbc-docker/src/main/docker/docker-files/Dockerfile.mdbc-server create mode 100644 mdbc-packages/mdbc-docker/src/main/docker/docker-files/scripts/start-cassandra.sh create mode 100644 mdbc-packages/mdbc-docker/src/main/docker/docker-files/scripts/start-mdbc-server.sh create mode 100755 mdbc-packages/mdbc-docker/src/main/docker/docker-files/scripts/wait-for.sh create mode 100644 mdbc-packages/pom.xml diff --git a/mdbc-packages/mdbc-docker/compose/one-site/.env b/mdbc-packages/mdbc-docker/compose/one-site/.env new file mode 100644 index 0000000..1c22d2b --- /dev/null +++ b/mdbc-packages/mdbc-docker/compose/one-site/.env @@ -0,0 +1,2 @@ +# Default values used by docker-compose if not defined as environment variables. +MTU=1500 diff --git a/mdbc-packages/mdbc-docker/compose/one-site/docker-compose.yml b/mdbc-packages/mdbc-docker/compose/one-site/docker-compose.yml new file mode 100644 index 0000000..d30d3e2 --- /dev/null +++ b/mdbc-packages/mdbc-docker/compose/one-site/docker-compose.yml @@ -0,0 +1,72 @@ +version: '3' +networks: + default: + driver: bridge + driver_opts: + com.docker.network.driver.mtu: ${MTU} +services: +################################################################################ + cassandra-1: + image: + onap/music/mdbc-cassandra + container_name: + cassandra-1 + hostname: + cassandra-1.music.testlab.onap.org + expose: + - 9042 + - 9160 + - 7199 + environment: + - CASSANDRA_CLUSTER_NAME=testcluster + - CASSANDRA_SEEDS=cassandra-1 + - CASSANDRA_START_RPC=true + volumes: + - ./volumes/cassandra/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d +# - ./cache/cassandra-1:/var/lib/cassandra + command: + - -s0 +################################################################################ + mariadb-1: + image: mariadb:10.1.11 + container_name: + mariadb-1 + hostname: + mariadb-1.music.testlab.onap.org + expose: + - 3306 + environment: + - MYSQL_ROOT_PASSWORD=password + volumes: + - ./volumes/mariadb/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d + - ./volumes/mariadb/conf.d:/etc/mysql/conf.d +################################################################################ + mdbc-server-1: + image: onap/music/mdbc-server + container_name: + mdbc-server-1 + ports: + - "30001:30001" + volumes: + - ./volumes/mdbc-server/config:/app/config + environment: + - JVM_ARGS=-Xms64m -Xmx512m + - AVATICA_PORT=30001 + - JDBC_URL=jdbc:mysql://mariadb-1:3306 + - JDBC_USER=test + - JDBC_PASSWORD=password + - EXIT_DELAY=900 + hostname: + mdbc-server-1.music.testlab.onap.org + depends_on: + - cassandra-1 + - mariadb-1 + command: + - /app/wait-for.sh + - -q + - -t + - "300" + - cassandra-1:9042 + - mariadb-1:3306 + - -- + - "/app/start-mdbc-server.sh" diff --git a/mdbc-packages/mdbc-docker/compose/one-site/volumes/cassandra/docker-entrypoint-initdb.d/01-create-music-internal-keyspace.cql b/mdbc-packages/mdbc-docker/compose/one-site/volumes/cassandra/docker-entrypoint-initdb.d/01-create-music-internal-keyspace.cql new file mode 100644 index 0000000..7884dd5 --- /dev/null +++ b/mdbc-packages/mdbc-docker/compose/one-site/volumes/cassandra/docker-entrypoint-initdb.d/01-create-music-internal-keyspace.cql @@ -0,0 +1 @@ +CREATE KEYSPACE IF NOT EXISTS music_internal WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true; diff --git a/mdbc-packages/mdbc-docker/compose/one-site/volumes/mariadb/conf.d/mariadb1.cnf b/mdbc-packages/mdbc-docker/compose/one-site/volumes/mariadb/conf.d/mariadb1.cnf new file mode 100644 index 0000000..39ed022 --- /dev/null +++ b/mdbc-packages/mdbc-docker/compose/one-site/volumes/mariadb/conf.d/mariadb1.cnf @@ -0,0 +1,193 @@ +# Example MySQL config file for medium systems. +# +# This is for a system with memory 8G where MySQL plays +# an important part, or systems up to 128M where MySQL is used together with +# other programs (such as a web server) +# +# In this file, you can use all long options that a program supports. +# If you want to know which options a program supports, run the program +# with the "--help" option. + +# The following options will be passed to all MySQL clients +##[client] +##user = root +##port = 3306 +##socket = //opt/app/mysql/mysql.sock + +# Here follows entries for some specific programs + +# The MySQL server +[mysqld] +##performance_schema + +slow_query_log =ON +long_query_time =2 +slow_query_log_file =//var/lib/mysql/slow_query.log + +skip-external-locking +explicit_defaults_for_timestamp = true +skip-symbolic-links +local-infile = 0 +key_buffer_size = 16M +max_allowed_packet = 4M +table_open_cache = 100 +sort_buffer_size = 512K +net_buffer_length = 8K +read_buffer_size = 256K +read_rnd_buffer_size = 512K +myisam_sort_buffer_size = 8M +max_connections = 500 +lower_case_table_names = 1 +thread_stack = 256K +thread_cache_size = 25 +query_cache_size = 8M +query_cache_type = 0 +query_prealloc_size = 512K +query_cache_limit = 1M + +# Password validation +##plugin-load-add=simple_password_check.so +##simple_password_check_other_characters=0 + +# Audit Log settings +plugin-load-add=server_audit.so +server_audit=FORCE_PLUS_PERMANENT +server_audit_file_path=//var/lib/mysql/audit.log +server_audit_file_rotate_size=50M +server_audit_events=CONNECT,QUERY,TABLE +server_audit_logging=on + +# Don't listen on a TCP/IP port at all. This can be a security enhancement, +# if all processes that need to connect to mysqld run on the same host. +# All interaction with mysqld must be made via Unix sockets or named pipes. +# Note that using this option without enabling named pipes on Windows +# (via the "enable-named-pipe" option) will render mysqld useless! +# +#skip-networking + +# Replication Master Server (default) +# binary logging is required for replication +##log-bin=//var/lib/mysql/mysql-bin + +# binary logging format - mixed recommended +binlog_format=row + +# required unique id between 1 and 2^32 - 1 +# defaults to 1 if master-host is not set +# but will not function as a master if omitted + +# Replication Slave (comment out master section to use this) +# +# To configure this host as a replication slave, you can choose between +# two methods : +# +# 1) Use the CHANGE MASTER TO command (fully described in our manual) - +# the syntax is: +# +# CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=, +# MASTER_USER=, MASTER_PASSWORD= ; +# +# where you replace , , by quoted strings and +# by the master's port number (3306 by default). +# +# Example: +# +# CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306, +# MASTER_USER='joe', MASTER_PASSWORD='secret'; +# +# OR +# +# 2) Set the variables below. However, in case you choose this method, then +# start replication for the first time (even unsuccessfully, for example +# if you mistyped the password in master-password and the slave fails to +# connect), the slave will create a master.info file, and any later +# change in this file to the variables' values below will be ignored and +# overridden by the content of the master.info file, unless you shutdown +# the slave server, delete master.info and restart the slaver server. +# For that reason, you may want to leave the lines below untouched +# (commented) and instead use CHANGE MASTER TO (see above) +# +# required unique id between 2 and 2^32 - 1 +# (and different from the master) +# defaults to 2 if master-host is set +# but will not function as a slave if omitted +#server-id = 2 +# +# The replication master for this slave - required +#master-host = +# +# The username the slave will use for authentication when connecting +# to the master - required +#master-user = +# +# The password the slave will authenticate with when connecting to +# the master - required +#master-password = +# +# The port the master is listening on. +# optional - defaults to 3306 +#master-port = +# +# binary logging - not required for slaves, but recommended +#log-bin=mysql-bin + +# Uncomment the following if you are using InnoDB tables +##innodb_data_home_dir = //opt/app/mysql/data +##innodb_data_file_path = ibdata1:20M:autoextend:max:32G +##innodb_log_group_home_dir = //opt/app/mysql/iblogs +# You can set .._buffer_pool_size up to 50 - 80 % +# of RAM but beware of setting memory usage too high +#innodb_buffer_pool_size = 6380M +#innodb_additional_mem_pool_size = 2M +# Set .._log_file_size to 25 % of buffer pool size +innodb_log_file_size = 150M +innodb_log_files_in_group = 3 +innodb_log_buffer_size = 8M +#innodb_flush_log_at_trx_commit = 1 +innodb_lock_wait_timeout = 50 +innodb_autoextend_increment = 100 +expire_logs_days = 8 +open_files_limit = 2000 +transaction-isolation=READ-COMMITTED +####### Galera parameters ####### +## Galera Provider configuration +wsrep_provider=/usr/lib/galera/libgalera_smm.so +wsrep_provider_options="gcache.size=2G; gcache.page_size=1G" +## Galera Cluster configuration +wsrep_cluster_name="MSO-automated-tests-cluster" +wsrep_cluster_address="gcomm://" +#wsrep_cluster_address="gcomm://mariadb1,mariadb2,mariadb3" +##wsrep_cluster_address="gcomm://192.169.3.184,192.169.3.185,192.169.3.186" +## Galera Synchronization configuration +wsrep_sst_method=rsync +#wsrep_sst_method=xtrabackup-v2 +#wsrep_sst_auth="sstuser:Mon#2o!6" +## Galera Node configuration +wsrep_node_name="mariadb1" +##wsrep_node_address="192.169.3.184" +wsrep_on=ON +## Status notification +#wsrep_notify_cmd=/opt/app/mysql/bin/wsrep_notify +####### + + +[mysqldump] +quick +max_allowed_packet = 16M + +[mysql] +no-auto-rehash +# Remove the next comment character if you are not familiar with SQL +#safe-updates + +[myisamchk] +key_buffer_size = 20971520 + +##[mysqlhotcopy] +##interactive-timeout +##[mysqld_safe] +##malloc-lib=//opt/app/mysql/local/lib/libjemalloc.so.1 +##log-error=//opt/app/mysql/log/mysqld.log + +general_log_file = /var/log/mysql/mysql.log +general_log = 1 diff --git a/mdbc-packages/mdbc-docker/compose/one-site/volumes/mariadb/docker-entrypoint-initdb.d/01-create-test-database.sh b/mdbc-packages/mdbc-docker/compose/one-site/volumes/mariadb/docker-entrypoint-initdb.d/01-create-test-database.sh new file mode 100644 index 0000000..3316153 --- /dev/null +++ b/mdbc-packages/mdbc-docker/compose/one-site/volumes/mariadb/docker-entrypoint-initdb.d/01-create-test-database.sh @@ -0,0 +1,28 @@ +#!/bin/sh +# +# ============LICENSE_START===================================================== +# Copyright (c) 2018 AT&T Intellectual Property. All rights reserved. +# ============================================================================== +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END======================================================= +# + +echo "Creating test database and user . . ." +mysql -uroot -p$MYSQL_ROOT_PASSWORD << 'EOF' || exit 1 +DROP DATABASE IF EXISTS `test`; +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET latin1 */; +DELETE FROM mysql.user WHERE User='test'; +CREATE USER 'test'; +GRANT ALL ON test.* TO 'test' identified by 'password' with GRANT OPTION; +FLUSH PRIVILEGES; +EOF diff --git a/mdbc-packages/mdbc-docker/compose/one-site/volumes/mdbc-server/config/music.properties b/mdbc-packages/mdbc-docker/compose/one-site/volumes/mdbc-server/config/music.properties new file mode 100644 index 0000000..b030b62 --- /dev/null +++ b/mdbc-packages/mdbc-docker/compose/one-site/volumes/mdbc-server/config/music.properties @@ -0,0 +1,4 @@ +cassandra.host = cassandra-1 +cassandra.user = cassandra +cassandra.password = cassandra +zookeeper.host = cassandra-1 diff --git a/mdbc-packages/mdbc-docker/compose/one-site/volumes/mdbc-server/config/tableConfiguration.json b/mdbc-packages/mdbc-docker/compose/one-site/volumes/mdbc-server/config/tableConfiguration.json new file mode 100644 index 0000000..383593a --- /dev/null +++ b/mdbc-packages/mdbc-docker/compose/one-site/volumes/mdbc-server/config/tableConfiguration.json @@ -0,0 +1,23 @@ +{ + "partitions": [ + { + "tables": [ + { + "table": "table11" + } + ], + "owner": "", + "mriTableName": "musicrangeinformation", + "mtxdTableName": "musictxdigest", + "partitionId": "", + "replicationFactor": 1 + } + ], + "musicNamespace": "namespace", + "tableToPartitionName": "tabletopartition", + "partitionInformationTableName": "partitioninfo", + "redoHistoryTableName": "redohistory", + "sqlDatabaseName": "test", + "internalNamespace": "music_internal", + "internalReplicationFactor": 1 +} diff --git a/mdbc-packages/mdbc-docker/pom.xml b/mdbc-packages/mdbc-docker/pom.xml new file mode 100644 index 0000000..f2e73f7 --- /dev/null +++ b/mdbc-packages/mdbc-docker/pom.xml @@ -0,0 +1,171 @@ + + + 4.0.0 + + + org.onap.music.mdbc + mdbc-packages + 0.0.1-SNAPSHOT + + + pom + mdbc-docker + mdbc-docker + MDBC Docker Images + + + UTF-8 + UTF-8 + ${project.version} + false + false + false + nexus3.onap.org:10001 + nexus3.onap.org:10003 + + + + ${project.artifactId}-${project.version} + + + org.codehaus.groovy.maven + gmaven-plugin + 1.0 + + + validate + + execute + + + + println 'Project version: ' + project.properties['mdbc.project.version']; + def versionArray; + if ( project.properties['mdbc.project.version'] != null ) { + versionArray = project.properties['mdbc.project.version'].split('-'); + } + + if ( project.properties['mdbc.project.version'].endsWith("-SNAPSHOT") ) { + project.properties['project.docker.latesttag.version']=versionArray[0] + "-SNAPSHOT-latest"; + } else { + project.properties['project.docker.latesttag.version']=versionArray[0] + "-STAGING-latest"; + } + + println 'New tag for docker: ' + project.properties['project.docker.latesttag.version']; + + + + + + + + io.fabric8 + docker-maven-plugin + 0.19.1 + + + true + 1.23 + ${docker.pull.registry} + ${docker.push.registry} + + + + onap/music/mdbc-server + + try + docker-files + Dockerfile.mdbc-server + + ${project.version} + ${project.version}-${maven.build.timestamp} + ${project.docker.latesttag.version} + + + + + + + org.onap.music.mdbc:mdbc-server:jar:jar-with-dependencies + + mdbc-server.jar + + + + + + + + + onap/music/mdbc-cassandra + + try + docker-files + Dockerfile.mdbc-cassandra + + ${project.version} + ${project.version}-${maven.build.timestamp} + ${project.docker.latesttag.version} + + + + + + + + + clean-images + pre-clean + + remove + + + true + + + + + generate-images + generate-sources + + build + + + + + push-images + deploy + + build + push + + + onap/music/mdbc-server,onap/music/mdbc-cassandra + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + 2.8 + + true + + + + + + + + org.onap.music.mdbc + mdbc-server + jar-with-dependencies + ${project.version} + + + diff --git a/mdbc-packages/mdbc-docker/src/main/docker/docker-files/Dockerfile.mdbc-cassandra b/mdbc-packages/mdbc-docker/src/main/docker/docker-files/Dockerfile.mdbc-cassandra new file mode 100644 index 0000000..2583234 --- /dev/null +++ b/mdbc-packages/mdbc-docker/src/main/docker/docker-files/Dockerfile.mdbc-cassandra @@ -0,0 +1,9 @@ +FROM cassandra:3.11.1 + +VOLUME /docker-entrypoint-initdb.d + +COPY scripts/start-cassandra.sh / +RUN chmod 755 /start-cassandra.sh + +CMD [] +ENTRYPOINT ["/start-cassandra.sh"] diff --git a/mdbc-packages/mdbc-docker/src/main/docker/docker-files/Dockerfile.mdbc-server b/mdbc-packages/mdbc-docker/src/main/docker/docker-files/Dockerfile.mdbc-server new file mode 100644 index 0000000..0de50aa --- /dev/null +++ b/mdbc-packages/mdbc-docker/src/main/docker/docker-files/Dockerfile.mdbc-server @@ -0,0 +1,30 @@ +FROM openjdk:8-jdk-alpine + +ARG http_proxy +ARG https_proxy +ENV HTTP_PROXY=$http_proxy +ENV HTTPS_PROXY=$https_proxy +ENV http_proxy=$HTTP_PROXY +ENV https_proxy=$HTTPS_PROXY + +# Update the package list and upgrade installed packages +RUN apk update && apk upgrade + +# Install commonly needed tools +RUN apk --no-cache add curl netcat-openbsd sudo + +# Create 'mdbc' user +RUN addgroup -g 1000 mdbc && adduser -S -u 1000 -G mdbc -s /bin/sh mdbc + +RUN mkdir /app && mkdir /app/config + +COPY maven/mdbc-server.jar /app +COPY scripts/start-mdbc-server.sh /app +COPY scripts/wait-for.sh /app + +RUN chown -R mdbc:mdbc /app && chmod 700 /app/*.sh + +VOLUME /app/config + +WORKDIR /app +CMD ["/app/start-mdbc-server.sh"] diff --git a/mdbc-packages/mdbc-docker/src/main/docker/docker-files/scripts/start-cassandra.sh b/mdbc-packages/mdbc-docker/src/main/docker/docker-files/scripts/start-cassandra.sh new file mode 100644 index 0000000..362c9e9 --- /dev/null +++ b/mdbc-packages/mdbc-docker/src/main/docker/docker-files/scripts/start-cassandra.sh @@ -0,0 +1,148 @@ +#!/bin/bash + +# This enhances the standard docker entrypoint script by running cql scripts +# and shell scripts present in /docker-entrypoint-initdb.d. The public native +# transport port is not exposed until all the scripts have been completed. + +if [[ $PRIVATE_PORT == "" ]] +then + PRIVATE_PORT=19042 +fi + +if [[ $START_TIMEOUT_SECS == "" ]] +then + START_TIMEOUT_SECS=300 +fi + +function getPort +{ + grep "^native_transport_port:" /etc/cassandra/cassandra.yaml | cut -d: -f2 | tr -d '\t ' +} + +function setPort +{ + local port=$1 + sed -i "s/^native_transport_port:.*/native_transport_port: $port/" /etc/cassandra/cassandra.yaml +} + +function usage +{ + echo "usage: $(basename $0) [-sX]" +} + +sleep=0 +args= + +while [[ $# != 0 ]] +do + case "$1" in + -s*) + sleep=${1:2} + shift 1 + ;; + *) + usage && exit 1 + ;; + esac +done + +if [[ $# != 0 ]] +then + usage && exit 1 +fi + +if [[ $sleep != 0 ]] +then + echo "Delaying startup by $sleep seconds" + sleep $sleep +fi + +# Note: this does not start up cassandra +echo "Running docker-entrypoint.sh to configure cassandra" +/docker-entrypoint.sh true || exit 1 + +echo "Enabling password authentication" +sed -i 's/^authenticator: AllowAllAuthenticator/authenticator: PasswordAuthenticator/g' /etc/cassandra/cassandra.yaml || exit 1 + +if [[ $(/bin/ls -1 /docker-entrypoint-initdb.d 2>/dev/null | wc -l) == 0 ]] +then + echo "Starting cassandra" +else + # Get the public native transport port from cassandra.yaml + + public_port=$(getPort) + + if [[ $public_port == "" ]] + then + echo "ERROR: No native_transport_port in /etc/cassandra/cassandra.yaml" + exit 1 + fi + + echo "Starting cassandra on port $PRIVATE_PORT" + setPort $PRIVATE_PORT || exit 1 + + /docker-entrypoint.sh cassandra + + if [[ $? != 0 ]] + then + setPort $public_port + exit 1 + fi + + tries=$START_TIMEOUT_SECS + + while true + do + if echo "describe keyspaces;" | cqlsh -u cassandra -p cassandra 127.0.0.1 $PRIVATE_PORT >/dev/null 2>&1 + then + break + fi + + tries=$((tries-1)) + + if [[ $tries == 0 ]] + then + setPort $public_port + echo "Timed out waiting for cassandra to start on port $PRIVATE_PORT" + exit 1 + fi + + sleep 1 + done + + echo "Cassandra is started on port $PRIVATE_PORT" + + for file in $(/bin/ls -1 /docker-entrypoint-initdb.d 2>/dev/null) + do + case "$file" in + *.sh) + echo "Running $file" + source "/docker-entrypoint-initdb.d/$file" + ;; + *.cql) + echo "Running $file" + cqlsh -u cassandra -p cassandra -f "/docker-entrypoint-initdb.d/$file" 127.0.0.1 $PRIVATE_PORT + ;; + *) + echo "Ignoring $file" + esac + done + + sleep 5 + + echo "Restarting cassandra on port $public_port" + + setPort $public_port + pkill java + + if [[ $? != 0 ]] + then + echo "Failed to restart cassandra (kill failed)" + exit 1 + fi + + sleep 5 +fi + +# NOTE: this starts cassandra in the foreground +/docker-entrypoint.sh cassandra -f diff --git a/mdbc-packages/mdbc-docker/src/main/docker/docker-files/scripts/start-mdbc-server.sh b/mdbc-packages/mdbc-docker/src/main/docker/docker-files/scripts/start-mdbc-server.sh new file mode 100644 index 0000000..bb74415 --- /dev/null +++ b/mdbc-packages/mdbc-docker/src/main/docker/docker-files/scripts/start-mdbc-server.sh @@ -0,0 +1,82 @@ +#!/bin/sh + +if [ `id -u` = 0 ] +then + # Perform tasks that need to be run as root + + # Re-exec this script as the application user. + this=`readlink -f $0` + exec su mdbc -c "$this" +fi + +if [ -z "${TABLE_CONFIG_PATH}" ] +then + export TABLE_CONFIG_PATH=$PWD/config/tableConfiguration.json +fi + +if [ -z "${CONFIG_BASE}" ] +then + export CONFIG_BASE=config +fi + +if [ -z "$AVATICA_PORT" ] +then + AVATICA_PORT=30000 +fi + +if [ -z "$JDBC_URL" ] +then + echo "JDBC_URL environment variable is not set" 1>&2 + exit 1 +fi + +if [ -z "$JDBC_USER" ] +then + echo "JDBC_USER environment variable is not set" 1>&2 + exit 1 +fi + +if [ -z "$JDBC_PASSWORD" ] +then + echo "JDBC_PASSWORD environment variable is not set" 1>&2 + exit 1 +fi + +jvmargs="${JVM_ARGS}" + +echo "JVM Arguments: ${jvmargs}" + +if [ ! -s ${CONFIG_BASE}-0.json ] +then + echo "Running CreateNodeConfigurations" + + java ${jvmargs} -cp config:mdbc-server.jar org.onap.music.mdbc.tools.CreateNodeConfigurations -t ${TABLE_CONFIG_PATH} -b ${CONFIG_BASE} -o $PWD + + if [[ $? != 0 ]] + then + echo "CreateNodeConfigurations failed" + exit 1 + fi + + if [ ! -s ${CONFIG_BASE}-0.json ] + then + echo "Configuration not created correctlly: ${CONFIG_BASE}-0.json" + exit 1 + fi + + echo "CreateNodeConfigurations created ${CONFIG_BASE}-0.json" +fi + +echo "Running MdbcServer" + +java ${jvmargs} -cp config:mdbc-server.jar org.onap.music.mdbc.MdbcServer -c ${CONFIG_BASE}-0.json -p ${AVATICA_PORT} -u ${JDBC_URL} -s ${JDBC_USER} -a ${JDBC_PASSWORD} +rc=$? + +echo "Application exiting with status code $rc" + +if [ ! -z "${EXIT_DELAY}" -a "${EXIT_DELAY}" != 0 ]; then + echo "Delaying exit for $EXIT_DELAY seconds" + sleep $EXIT_DELAY +fi + +exit $rc diff --git a/mdbc-packages/mdbc-docker/src/main/docker/docker-files/scripts/wait-for.sh b/mdbc-packages/mdbc-docker/src/main/docker/docker-files/scripts/wait-for.sh new file mode 100755 index 0000000..cee1cfe --- /dev/null +++ b/mdbc-packages/mdbc-docker/src/main/docker/docker-files/scripts/wait-for.sh @@ -0,0 +1,103 @@ +#!/bin/sh +# https://github.com/Eficode/wait-for.git +# MIT License +# Modified to wait for multiple ports to open + +TIMEOUT=15 +QUIET=0 +ADDRESSES= + +echoerr() { + if [ "$QUIET" -ne 1 ]; then printf "%s\n" "$*" 1>&2; fi +} + +usage() { + exitcode="$1" + cat << USAGE >&2 +Usage: + wait-for host:port [host:port ... ] [-t timeout] [-- command args] + -q | --quiet Do not output any status messages + -t TIMEOUT | --timeout=timeout Timeout in seconds, zero for no timeout + -- COMMAND ARGS Execute command with args after the test finishes +USAGE + exit "$exitcode" +} + +wait_for() { + command="$*" + if [ "$QUIET" -ne 1 ]; then echo "$0: probing host $HOST port $PORT"; fi + for i in `seq $TIMEOUT` ; do + ready=TRUE + set DUMMY $ADDRESSES; shift 1 + while [ $# -gt 0 ] ; do + host=$1 + port=$2 + shift 2 + if ! nc -z "$host" "$port" > /dev/null 2>&1 ; then + ready=FALSE + break + fi + done + if [ $ready = TRUE ] ; then + if [ "$QUIET" -ne 1 ] ; then + echo "$0: operation succeeded on try $i" + fi + if [ -n "$command" ] ; then + if [ "$QUIET" -ne 1 ] ; + then echo "$0: exec-ing command $command" ; + fi + exec $command + fi + exit 0 + fi + if [ "$QUIET" -ne 1 ] ; then + echo "$0: sleeping after try $i" ; + fi + sleep 1 + done + echo "$0: Operation timed out" >&2 + exit 1 +} + +while [ $# -gt 0 ] +do + case "$1" in + *:* ) + host=$(printf "%s\n" "$1"| cut -d : -f 1) + port=$(printf "%s\n" "$1"| cut -d : -f 2) + ADDRESSES="$ADDRESSES $host $port" + shift 1 + ;; + -q | --quiet) + QUIET=1 + shift 1 + ;; + -t) + TIMEOUT="$2" + if [ "$TIMEOUT" = "" ]; then break; fi + shift 2 + ;; + --timeout=*) + TIMEOUT="${1#*=}" + shift 1 + ;; + --) + shift + break + ;; + --help) + usage 0 + ;; + *) + echoerr "Unknown argument: $1" + usage 1 + ;; + esac +done + +if [ "$ADDRESSES" = "" ] ; then + echoerr "Error: you need to provide at least one host and port to test." + usage 2 +fi + +wait_for "$@" diff --git a/mdbc-packages/pom.xml b/mdbc-packages/pom.xml new file mode 100644 index 0000000..a694471 --- /dev/null +++ b/mdbc-packages/pom.xml @@ -0,0 +1,33 @@ + + 4.0.0 + + org.onap.music.mdbc + mdbc + 0.0.1-SNAPSHOT + + + mdbc-packages + pom + mdbc-packages + + + + default + + true + + + + + docker + + mdbc-docker + + + + false + + + + diff --git a/pom.xml b/pom.xml index d999ad1..778dda3 100755 --- a/pom.xml +++ b/pom.xml @@ -97,6 +97,7 @@ mdbc-server + mdbc-packages -- cgit 1.2.3-korg