Problem running 18.1 Quick-Start

#1

Hello, i2b2/tranSMART community!

I use the GitHub repo (https://github.com/i2b2-tranSMART/i2b2transmart-quick-start) to download, install and run the i2b2/tranSMART on my MacBook Pro.
I’d tried both, native app and docker-machine approach and did not find the way to start the app fully.
Currently I build everything with the docker-machine.
When I access the docker-machine.ip.address/transmart, I’m getting

Proxy Error

The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request [GET /transmart] .
Reason: Error reading from remote server

for the first time and

HTTP Status 404 – Not Found

Type Status Report
Message /transmart
Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

Apache Tomcat/8.0.53

for any further trials.

Another strange thing is that, after starting “docker-compose up -d” the VBoxHeadless uses 100% of CPU (configured 4) for quite a long period. Once I’d checked logs without “-d” and saw some wildfly deployment errors there and service restarts.

I’m new to docker and don’t know what to check in this situation.
Can you help me to resolve this situation?

#2

Hi Ihor,

Thanks for your feedback and for participating on the forum so everyone can benefit.

The CPU being 100% consumed on startup is normal. The tranSMART application typically consumes all of your system’s processing power on startup for 30 seconds to 2 minutes depending on how fast your computer is. During this time the other containers are also trying to start and fighting over the same CPU.

Because of this, the containers may need to be started in a specific order on slower machines, or machines that don’t have that many cores.

The instructions in the README file assume you are starting from scratch and instruct you to download and start the DB container first. This is because the tranSMART container will not successfully initialize if the DB is not available. Similarly, the wildfly containers(IRCT, i2b2) will not be able to start until the MySQL containers have completely started. This might be some of the restarting you are seeing.

Unfortunately Docker doesn’t give a reliable way to ensure that the applications have completely started before their dependent applications attempt to start. There are dependencies expressed in the docker-compose file that control the order in which they start, but they may be swapped out by the OS before they complete their initialization.

I’ll be adding the following instructions to the troubleshooting section of the README file once you confirm that the process works to resolve the issue in your environment:

Start the deployment over

docker-compose down

Start all the database containers:

docker-compose up -d db irctdb && docker-compose logs -f db irctdb

You should see “DATABASE IS READY TO USE!” in the log once the Oracle database has initialized, but if there was an unclean shutdown of the database previously it might take quite a while as Oracle will be checking things over.
You should see “mysqld: ready for connections” in the log once the MySQL database has initialized.

Start i2b2 and tranSMART and watch the log for exceptions

docker-compose up -d i2b2-wildfly irct transmart && docker-compose logs -f i2b2-wildfly irct transmart

You should see no exceptions in any of the logs and in the transmart log after some time:

org.apache.catalina.startup.Catalina.start Server startup in XXXXXms

Start the remaining services

docker-compose up

#3

Hi Jason,

Thank you for these instructions!
Yeah, actually, if run services one by one and wait until they are completely up before running next ones, the platform starts well and is available for exploration.

I played a bit with the startup order and figured out that the problem occurred when i2b2-wildfly irct transmart services were started in a single command. In this case, sometimes, this error appeared:

ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0348: Timeout after [300] seconds waiting for service container stability. Operation will roll back. Step that first updated the service container was 'add' at address '[
irct_1          |     ("core-service" => "management"),
irct_1          |     ("management-interface" => "http-interface")
irct_1          | ]'

Strange thing, that even it didn’t appear HTTP Status 404 still occurred on reaching the [GET /transmart] web-interface.
The next sequence worked for me every time I started up the stack:

  1. docker-compose up -d db irctdb && docker-compose logs -f db irctdb
    … wait till “mysqld: ready for connections” (for MySQL) and “DATABASE IS READY TO USE!” (for Oracle, or, sometimes it hangs on “Database mounted.” and its enough) … ctrl+c …

  2. docker-compose up -d i2b2-wildfly irct && docker-compose logs -f i2b2-wildfly irct
    … wait for something like:

    INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 10.0.0.Final (WildFly Core 2.0.10.Final) started in 273853ms - Started 703 of 1029 services (443 services are lazy, passive or on-demand)

    in the i2b2-wildfly service logs and something like:

    INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 10.1.0.Final (WildFly Core 2.2.0.Final) started in 403532ms - Started 601 of 792 services (335 services are lazy, passive or on-demand)

    in the irct thread … ctrl+c …

  3. docker-compose up -d transmart && docker-compose logs -f transmart
    then wait for

    … ctrl+c …

  4. Finally

After some time it is possible to reach the PIC-SURE HPDS UI at the Docker machine IP address (obtained with the docker-machine ip 18-1 command in the command line, where “18-1” is the name of the Docker machine I created).