Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Playground fails to start with error dependency failed to start: container playground-ranger is unhealthy #112

Open
EmilyIsCoding opened this issue Dec 19, 2024 · 7 comments

Comments

@EmilyIsCoding
Copy link

Expected Behavior:
Following the instructions in the documentation, Gravitino Playground containers should be healthy

Current Behavior:
Starting playground with ./playground.sh start shows that the playground-ranger container is unhealthy

Steps to Reproduce:

  1. Build Apache Gravitino on Windows (Using WSL)
  2. Clone or download Gravitino playground repository
  3. cd gravitino-playground
  4. Start playground with ./playground.sh start
  5. After running, playground-ranger's status is unhealthy
@tim108108
Copy link
Contributor

Seem like playground.sh line 55 echo "Checking ports with sudo permission ...' unexpected EOF while looking for matching

@truth1024
Copy link

I also encountered the same problem.

@tim108108
Copy link
Contributor

Hi @truth1024, when I initially ran ./playground.sh start, the status of playground-ranger was unhealthy. However, after restarting it again with ./playground.sh start, the status became healthy.

@truth1024
Copy link

@tim108108
It still doesn't work according to your operation

@xunliu xunliu closed this as completed Jan 8, 2025
@NICK-T-D
Copy link

I also encountered the same problem

@tim108108 It still doesn't work according to your operation

@jerqi jerqi reopened this Feb 19, 2025
@apache apache deleted a comment from NICK-T-D Feb 19, 2025
@jerqi
Copy link
Contributor

jerqi commented Feb 19, 2025

I also encountered the same problem

@tim108108 It still doesn't work according to your operation

Could you provide more information? Maybe you can use sh -x playground.sh start to show more detailed information.

@NICK-T-D
Copy link

I also encountered the same problem

@tim108108 It still doesn't work according to your operation

Context:
Due to another issue discuss, I followed the guidelines and commented out the # checkPortsInUse operation.

Execution log:

# sh -x playground.sh start
+ set -e
++ dirname playground.sh
+ playground_dir=.
++ cd .
++ pwd
+ playground_dir=/ssd1/hudi_env/gravitino-playground
+ playgroundRuntimeName=gravitino-playground
+ requiredDiskSpaceGB=25
+ requiredRamGB=8
+ requiredCpuCores=2
+ requiredPorts=(6080 8090 9001 3307 19000 19083 60070 13306 15342 18080 18888 19090 13000)
+ dockerComposeCommand=
+ case "$1" in
+ [[ '' == \-\-\e\n\a\b\l\e\-\r\a\n\g\e\r ]]
+ enableRanger=false
+ start
+ '[' false == true ']'
+ echo '[INFO] Starting the playground...'
[INFO] Starting the playground...
+ echo '[INFO] The playground requires 2 CPU cores, 8 GB of RAM, and 25 GB of disk storage to operate efficiently.'
[INFO] The playground requires 2 CPU cores, 8 GB of RAM, and 25 GB of disk storage to operate efficiently.
+ testDocker
+ echo '[INFO] Testing Docker environment by running hello-world...'
[INFO] Testing Docker environment by running hello-world...
+ docker run --rm --pull always hello-world:linux
+ '[' 0 -eq 0 ']'
+ echo '[INFO] Docker check passed: Docker is working correctly!'
[INFO] Docker check passed: Docker is working correctly!
++ docker ps -a
++ grep hello-world
++ awk '{print $1}'
++ awk '{print $2}'
++ grep hello-world
++ docker images
+ for imageTag in '$(docker images | grep hello-world | awk '\''{print $2}'\'')'
+ docker rmi hello-world:linux
Untagged: hello-world:linux
Untagged: hello-world@sha256:a77ecd852b17bfaee6708208960645d20fc9e6d0eec12353f8eb0e7b94bb647a
Deleted: sha256:74cc54e27dc41bb10dc4b2226072d469509f2f22f1a3ce74f4a59661a1d44602
Deleted: sha256:63a41026379f4391a306242eb0b9f26dc3550d863b7fdbb97d899f6eb89efe72
+ checkDockerCompose
+ dockerComposeCommand=
+ command -v docker
+ command -v docker compose
+ dockerComposeCommand='docker compose'
+ echo '[INFO] Docker compose check passed: Docker compose is working correctly using docker compose command!'
[INFO] Docker compose check passed: Docker compose is working correctly using docker compose command!
+ checkPlaygroundNotRunning
+ docker compose ls
+ grep -q gravitino-playground
+ checkDockerDisk
++ awk '{print $NF}'
++ grep 'Docker Root Dir'
++ docker info
+ local dockerRootDir=/ssd1/docker/data
+ '[' -z /ssd1/docker/data ']'
+ local availableSpaceKB
+ '[' -d /ssd1/docker/data ']'
++ awk 'NR==2 {print $4}'
++ df -k /ssd1/docker/data
+ availableSpaceKB=3228843860
+ local availableSpaceGB=3079
+ '[' 3079 -ge 25 ']'
+ echo '[INFO] Docker disk check passed: 3079 GB available.'
[INFO] Docker disk check passed: 3079 GB available.
+ checkDockerRam
++ docker info --format '{{.MemTotal}}'
+ local totalRamBytes=539946176512
+ local totalRamGB=502
+ '[' 502 -ge 8 ']'
+ echo '[INFO] Docker RAM check passed: 502 GB available.'
[INFO] Docker RAM check passed: 502 GB available.
+ checkDockerCpu
++ docker info --format '{{.NCPU}}'
+ local cpuCores=128
+ '[' 128 -ge 2 ']'
+ echo '[INFO] Docker CPU check passed: 128 cores available.'
[INFO] Docker CPU check passed: 128 cores available.
+ cd /ssd1/hudi_env/gravitino-playground
+ echo '[INFO] Preparing packages...'
[INFO] Preparing packages...
+ ./init/spark/spark-dependency.sh
Downloading iceberg-spark-runtime-3.4_2.12-1.5.2.jar to /ssd1/hudi_env/gravitino-playground/init/spark/packages
Downloading gravitino-spark-connector-runtime-3.4_2.12-0.8.0-incubating.jar to /ssd1/hudi_env/gravitino-playground/init/spark/packages
Downloading mysql-connector-java-8.0.27.jar to /ssd1/hudi_env/gravitino-playground/init/spark/packages
Downloading kyuubi-spark-authz-shaded_2.12-1.9.2.jar to /ssd1/hudi_env/gravitino-playground/init/spark/packages
+ ./init/gravitino/gravitino-dependency.sh
Downloading mysql-connector-java-8.0.27.jar to /ssd1/hudi_env/gravitino-playground/init/gravitino/packages
Downloading postgresql-42.2.7.jar to /ssd1/hudi_env/gravitino-playground/init/gravitino/packages
+ ./init/jupyter/jupyter-dependency.sh
++ date +%Y%m%d%H%M%s
+ logSuffix=2025021911171739935058
+ '[' false == true ']'
+ docker compose -p gravitino-playground up --detach
[+] Running 11/11
 ✔ Network gravitino-playground_default  Created                                                                                                                                 0.0s 
 ✔ Container playground-grafana          Started                                                                                                                                 1.5s 
 ✘ Container playground-ranger           Error                                                                                                                                 146.5s 
 ✔ Container playground-prometheus       Started                                                                                                                                 1.5s 
 ✔ Container playground-postgresql       Started                                                                                                                                 1.5s 
 ✔ Container playground-hive             Healthy                                                                                                                                20.5s 
 ✔ Container playground-spark            Started                                                                                                                                 1.4s 
 ✔ Container playground-mysql            Healthy                                                                                                                                12.0s 
 ✔ Container playground-gravitino        Created                                                                                                                                 0.0s 
 ✔ Container playground-jupyter          Created                                                                                                                                 0.0s 
 ✔ Container playground-trino            Created                                                                                                                                 0.0s 
dependency failed to start: container playground-ranger is unhealthy

docker logs:

# docker logs playground-ranger
Starting MariaDB database server: mysqld.
2025-02-19 03:40:11,540   --------- Running Ranger PolicyManager Web Application Install Script --------- 
2025-02-19 03:40:11,542  [I] uname=Linux
2025-02-19 03:40:11,543  [I] hostname=1682068cf30b
2025-02-19 03:40:11,546  [I] DB_FLAVOR=MYSQL
2025-02-19 03:40:11,548  [I] Audit source=db
2025-02-19 03:40:11,550  [I] Checking distribution name..
2025-02-19 03:40:11,555  [I] Found distribution : PRETTY_NAME="Debian
2025-02-19 03:40:11,555  [I] check if command /usr/local/jdk/bin/java exists
2025-02-19 03:40:11,556  [I] '/usr/local/jdk/bin/java' command found
/opt/ranger-admin/setup.sh: line 380: bc: command not found
/opt/ranger-admin/setup.sh: line 380: [: -eq: unary operator expected
2025-02-19 03:40:11,729  [I] Checking MYSQL CONNECTOR FILE : /usr/share/java/mysql-connector-java.jar
2025-02-19 03:40:11,730  [I] MYSQL CONNECTOR FILE : /usr/share/java/mysql-connector-java.jar file found
2025-02-19 03:40:11,731  [I] Setting up UNIX user : ranger and group: ranger
2025-02-19 03:40:11,736  [I] Creating new user and adding to group
2025-02-19 03:40:11,747  [I] Setting up UNIX user : ranger and group: ranger DONE
2025-02-19 03:40:11,748  [I] Setting up installation files and directory
2025-02-19 03:40:11,751  [WARN] core-site.xml file not found in provided hadoop_conf path. Creating blank core-site.xml
2025-02-19 03:40:11,751  [I] Creating /opt/ranger-admin/ews/webapp/WEB-INF/classes/lib
2025-02-19 03:40:11,753  [I] Setting up init.d
2025-02-19 03:40:11,755  [I] Creating script S88ranger-admin/K90ranger-admin in /etc/rc2.d directory .... 
2025-02-19 03:40:11,757  [I] Creating script S88ranger-admin/K90ranger-admin in /etc/rc3.d directory .... 
2025-02-19 03:40:11,761  [I] RANGER ADMIN LOGBACK CONF FILE : /opt/ranger-admin/ews/webapp/WEB-INF/classes/conf/logback.xml
2025-02-19 03:40:11,763  [I]Creating Ranger PID folder: /var/run/ranger
2025-02-19 03:40:11,765  [I] Setting up installation files and directory DONE
2025-02-19 03:40:12,934  [I] /opt/ranger-admin/ews/webapp folder found
2025-02-19 03:40:12,935  [I] db/mysql/optimized/current/ranger_core_db_mysql.sql file found
2025-02-19 03:40:12,936  [I] Copying MYSQL Connector to /opt/ranger-admin/ews/webapp/WEB-INF/lib 
2025-02-19 03:40:12,939  [I] Copying MYSQL Connector to /opt/ranger-admin/ews/webapp/WEB-INF/lib DONE
2025-02-19 03:40:12,940  [I] check if command python3 exists
2025-02-19 03:40:12,941  [I] 'python3' command found
2025-02-19 03:40:13,773  [I] DB FLAVOR :MYSQL
2025-02-19 03:40:13,773  [I] --------- Verifying Ranger DB connection ---------
2025-02-19 03:40:13,773  [I] Checking connection..
2025-02-19 03:40:13,774  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "select 1;"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:14,938  [I] Checking connection passed.
2025-02-19 03:40:14,946  [E] 'setup_mode' not found in /opt/ranger-admin/install.properties file while getting....!!
2025-02-19 03:40:14,947  [I] Setup mode is not set. Running DBA steps..
2025-02-19 03:40:15,045  [I] Running DBA setup script. QuiteMode:True
2025-02-19 03:40:15,045  [I] Using Java:/usr/local/jdk/bin/java
2025-02-19 03:40:15,045  [I] DB FLAVOR:MYSQL
2025-02-19 03:40:15,045  [I] DB Host:localhost
2025-02-19 03:40:15,045  [I] ---------- Verifying DB root password ---------- 
2025-02-19 03:40:15,045  [I] DBA root user password validated
2025-02-19 03:40:15,045  [I] ---------- Verifying Ranger Admin db user password ---------- 
2025-02-19 03:40:15,045  [I] admin user password validated
2025-02-19 03:40:15,045  [I] ---------- Creating Ranger Admin db user ---------- 
2025-02-19 03:40:15,045  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/mysql -u root -p '********' -noheader -trim -c \; -query "SELECT version();"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:16,149  [I] Verifying user rangeradmin for Host %
2025-02-19 03:40:16,149  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/mysql -u root -p '********' -noheader -trim -c \; -query "select user from mysql.user where user='rangeradmin' and host='%';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:17,242  [I] MySQL user rangeradmin does not exists for host %
2025-02-19 03:40:17,243  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/mysql -u root -p '********' -noheader -trim -c \; -query "create user 'rangeradmin'@'%' identified by '********';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:18,255  [I] Verifying user rangeradmin for Host %
2025-02-19 03:40:18,256  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/mysql -u root -p '********' -noheader -trim -c \; -query "select user from mysql.user where user='rangeradmin' and host='%';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:19,444  [I] MySQL user rangeradmin created for host %
2025-02-19 03:40:19,444  [I] Verifying user rangeradmin for Host localhost
2025-02-19 03:40:19,444  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/mysql -u root -p '********' -noheader -trim -c \; -query "select user from mysql.user where user='rangeradmin' and host='localhost';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:20,546  [I] MySQL user rangeradmin already exists for host localhost
2025-02-19 03:40:20,546  [I] ---------- Creating Ranger Admin database ----------
2025-02-19 03:40:20,546  [I] Verifying database ranger
2025-02-19 03:40:20,547  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/mysql -u root -p '********' -noheader -trim -c \; -query "show databases like 'ranger';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:21,648  [I] Database ranger already exists.
2025-02-19 03:40:21,649  [I] ---------- Granting permission to Ranger Admin db user ----------
2025-02-19 03:40:21,649  [I] ---------- Granting privileges TO user 'rangeradmin'@'%' on db 'ranger'----------
2025-02-19 03:40:21,649  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/mysql -u root -p '********' -noheader -trim -c \; -query "grant all privileges on ranger.* to 'rangeradmin'@'%' with grant option;"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:22,729  [I] ---------- FLUSH PRIVILEGES ----------
2025-02-19 03:40:22,729  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/mysql -u root -p '********' -noheader -trim -c \; -query "FLUSH PRIVILEGES;"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:23,832  [I] Privileges granted to 'rangeradmin' on 'ranger'
2025-02-19 03:40:23,832  [I] ---------- Granting privileges TO user 'rangeradmin'@'localhost' on db 'ranger'----------
2025-02-19 03:40:23,832  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/mysql -u root -p '********' -noheader -trim -c \; -query "grant all privileges on ranger.* to 'rangeradmin'@'localhost' with grant option;"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:24,949  [I] ---------- FLUSH PRIVILEGES ----------
2025-02-19 03:40:24,950  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/mysql -u root -p '********' -noheader -trim -c \; -query "FLUSH PRIVILEGES;"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:26,050  [I] Privileges granted to 'rangeradmin' on 'ranger'
2025-02-19 03:40:26,051  [I] ---------- Ranger Policy Manager DB and User Creation Process Completed..  ---------- 
2025-02-19 03:40:26,058  [I] /opt/ranger-admin/ews/webapp/WEB-INF/classes/conf/ranger-admin-site.xml file found
2025-02-19 03:40:26,059  [I] /opt/ranger-admin/ews/webapp/WEB-INF/classes/conf/ranger-admin-default-site.xml file found
Starting configuration for Ranger DB credentials:
Using Java:/usr/local/jdk/bin/java
Alias ranger.db.password created successfully!
Using Java:/usr/local/jdk/bin/java
Alias unixAuthKeyStoreAlias created successfully!
Using Java:/usr/local/jdk/bin/java
Alias unixAuthTrustStoreAlias created successfully!
2025-02-19 03:40:33,760  [I] Starting setup based on user authentication method=NONE
/opt/ranger-admin/ews/webapp
2025-02-19 03:40:33,832  [I] Finished setup based on user authentication method=NONE
ln -sf /opt/ranger-admin/ews/webapp/WEB-INF/classes/conf /opt/ranger-admin/conf
2025-02-19 03:40:34,640  [I] DB FLAVOR :MYSQL
2025-02-19 03:40:34,640  [I] --------- Verifying Ranger DB connection ---------
2025-02-19 03:40:34,640  [I] Checking connection..
2025-02-19 03:40:34,640  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "select 1;"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:35,753  [I] Checking connection passed.
2025-02-19 03:40:35,753  [I] --------- Verifying version history table ---------
2025-02-19 03:40:35,753  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "show tables like 'x_db_version_h';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:36,948  [I] Table x_db_version_h does not exist in database ranger
2025-02-19 03:40:36,948  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "show tables like 'x_db_version_h';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:38,050  [I] Table x_db_version_h does not exist in database ranger
2025-02-19 03:40:38,050  [I] Importing x_db_version_h table schema to database ranger from file: create_dbversion_catalog.sql
2025-02-19 03:40:38,050  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \; -input /opt/ranger-2.4.0-admin/db/mysql/create_dbversion_catalog.sql 
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:39,129  [I] create_dbversion_catalog.sql file imported successfully
2025-02-19 03:40:39,130  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "show tables like 'x_db_version_h';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:40,331  [I] Table x_db_version_h already exists in database 'ranger'
2025-02-19 03:40:40,331  [I] --------- Importing Ranger Core DB Schema ---------
2025-02-19 03:40:40,331  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "select version from x_db_version_h where version = 'CORE_DB_SCHEMA' and active = 'Y';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:41,443  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "select version from x_db_version_h where version = 'CORE_DB_SCHEMA' and active = 'N';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:42,549  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('CORE_DB_SCHEMA', current_timestamp, 'Ranger 2.4.0', current_timestamp, '1682068cf30b','N') ;"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:43,653  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "show tables like 'x_portal_user';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:44,842  [I] Table x_portal_user does not exist in database ranger
2025-02-19 03:40:44,842  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "show tables like 'x_policy_ref_group';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:46,043  [I] Table x_policy_ref_group does not exist in database ranger
2025-02-19 03:40:46,043  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "select version from x_db_version_h where version = 'DB_PATCHES' and active = 'Y';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:47,248  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "select version from x_db_version_h where version = 'JAVA_PATCHES' and active = 'Y';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:48,343  [I] Importing DB schema to database ranger from file: ranger_core_db_mysql.sql
2025-02-19 03:40:48,343  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \; -input /opt/ranger-2.4.0-admin/db/mysql/optimized/current/ranger_core_db_mysql.sql 
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:50,254  [I] ranger_core_db_mysql.sql file imported successfully
2025-02-19 03:40:50,254  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "update x_db_version_h set inst_by='Ranger 2.4.0' where active='Y' and updated_by='localhost';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:51,258  [I] Patches status entries updated from base ranger version to current installed ranger version:Ranger 2.4.0
2025-02-19 03:40:51,258  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "show tables like 'x_portal_user';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:52,353  [I] Table x_portal_user already exists in database 'ranger'
2025-02-19 03:40:52,354  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "show tables like 'x_policy_ref_group';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:53,543  [I] Table x_policy_ref_group already exists in database 'ranger'
2025-02-19 03:40:53,543  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "select version from x_db_version_h where version = 'DB_PATCHES' and active = 'Y';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:54,946  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "select version from x_db_version_h where version = 'JAVA_PATCHES' and active = 'Y';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:56,144  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "update x_db_version_h set active='Y' where version='CORE_DB_SCHEMA' and active='N' and updated_by='1682068cf30b';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:57,157  [I] CORE_DB_SCHEMA import status has been updated
2025-02-19 03:40:57,157  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "select version from x_db_version_h where version = 'DB_PATCHES' and inst_by = 'Ranger 2.4.0' and active = 'Y';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:40:58,251  [I] DB_PATCHES have already been applied
2025-02-19 03:40:59,149  [I] DB FLAVOR :MYSQL
2025-02-19 03:40:59,150  [I] --------- Verifying Ranger DB connection ---------
2025-02-19 03:40:59,150  [I] Checking connection..
2025-02-19 03:40:59,150  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "select 1;"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:41:00,249  [I] Checking connection passed.
2025-02-19 03:41:00,249  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "select version from x_db_version_h where version = 'JAVA_PATCHES' and inst_by = 'Ranger 2.4.0' and active = 'Y';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:41:01,449  [I] JAVA_PATCHES have already been applied
2025-02-19 03:41:02,343  [I] DB FLAVOR :MYSQL
2025-02-19 03:41:02,344  [I] --------- Verifying Ranger DB connection ---------
2025-02-19 03:41:02,344  [I] Checking connection..
2025-02-19 03:41:02,344  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "select 1;"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:41:03,551  [I] Checking connection passed.
2025-02-19 03:41:03,551  [I] RANGER_ADMIN_ENV_PATH : /opt/ranger-2.4.0-admin
2025-02-19 03:41:03,551  [I] env_file_path : /opt/ranger-2.4.0-admin/ranger-admin-env*.sh
2025-02-19 03:41:03,552  [I] RANGER ADMIN LOG DIR : /opt/ranger-2.4.0-admin/ews/logs
2025-02-19 03:41:03,552  [I] LOGBACK CONF FILE : file:/opt/ranger-2.4.0-admin/ews/webapp/WEB-INF/classes/conf/logback.xml
2025-02-19 03:41:03,552  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "select version from x_db_version_h where version = 'DEFAULT_ALL_ADMIN_UPDATE' and active = 'Y';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:41:04,654  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "select version from x_db_version_h where version = 'DEFAULT_ALL_ADMIN_UPDATE' and active = 'N';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:41:05,845  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('DEFAULT_ALL_ADMIN_UPDATE', current_timestamp, 'Ranger 2.4.0', current_timestamp, '1682068cf30b','N') ;"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:41:06,862  [I] Ranger all admins default password change request is in process..
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:41:55,345  [JISQL] /usr/local/jdk/bin/java  -cp /usr/share/java/mysql-connector-java.jar:/opt/ranger-2.4.0-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://localhost/ranger?useSSL=false -u 'rangeradmin' -p '********' -noheader -trim -c \;  -query "update x_db_version_h set active='Y' where version='DEFAULT_ALL_ADMIN_UPDATE' and active='N' and updated_by='1682068cf30b';"
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2025-02-19 03:41:56,360  [I] Ranger all admins default password change request processed successfully..
Installation of Ranger PolicyManager Web Application is completed.
Starting Apache Ranger Admin Service
Apache Ranger Admin Service with pid 2418 has started.
[[email protected] gravitino-playground]# 

docker inspect info

# docker inspect playground-ranger
[
    {
        "Id": "1682068cf30bdb82db061ab4ce7e9587151481563711cac8861ce34d6692c3f9",
        "Created": "2025-02-19T03:40:07.473809278Z",
        "Path": "/bin/bash",
        "Args": [
            "/tmp/ranger/init.sh"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": true,
            "Dead": false,
            "Pid": 4241,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2025-02-19T03:40:08.867587822Z",
            "FinishedAt": "0001-01-01T00:00:00Z",
            "Health": {
                "Status": "unhealthy",
                "FailingStreak": 107,
                "Log": [
                    {
                        "Start": "2025-02-19T11:50:45.643831253+08:00",
                        "End": "2025-02-19T11:50:45.687501134+08:00",
                        "ExitCode": 7,
                        "Output": "+ max_attempts=3\n+ attempt=0\n+ '[' 0 -lt 3 ']'\n++ curl -s -o /dev/null -w '%{http_code}' -u 'admin:rangerR0cks!' -H 'Content-Type: application/json' -X GET http://127.0.0.1:6080/service/public/v2/api/plugins/info\n+ response=000\n"
                    },
                    {
                        "Start": "2025-02-19T11:50:50.688431328+08:00",
                        "End": "2025-02-19T11:50:50.732436872+08:00",
                        "ExitCode": 7,
                        "Output": "+ max_attempts=3\n+ attempt=0\n+ '[' 0 -lt 3 ']'\n++ curl -s -o /dev/null -w '%{http_code}' -u 'admin:rangerR0cks!' -H 'Content-Type: application/json' -X GET http://127.0.0.1:6080/service/public/v2/api/plugins/info\n+ response=000\n"
                    },
                    {
                        "Start": "2025-02-19T11:50:55.733574821+08:00",
                        "End": "2025-02-19T11:50:55.789662682+08:00",
                        "ExitCode": 7,
                        "Output": "+ max_attempts=3\n+ attempt=0\n+ '[' 0 -lt 3 ']'\n++ curl -s -o /dev/null -w '%{http_code}' -u 'admin:rangerR0cks!' -H 'Content-Type: application/json' -X GET http://127.0.0.1:6080/service/public/v2/api/plugins/info\n+ response=000\n"
                    },
                    {
                        "Start": "2025-02-19T11:51:00.790643367+08:00",
                        "End": "2025-02-19T11:51:00.835966188+08:00",
                        "ExitCode": 7,
                        "Output": "+ max_attempts=3\n+ attempt=0\n+ '[' 0 -lt 3 ']'\n++ curl -s -o /dev/null -w '%{http_code}' -u 'admin:rangerR0cks!' -H 'Content-Type: application/json' -X GET http://127.0.0.1:6080/service/public/v2/api/plugins/info\n+ response=000\n"
                    },
                    {
                        "Start": "2025-02-19T11:51:05.836699388+08:00",
                        "End": "2025-02-19T11:51:05.880775506+08:00",
                        "ExitCode": 7,
                        "Output": "+ max_attempts=3\n+ attempt=0\n+ '[' 0 -lt 3 ']'\n++ curl -s -o /dev/null -w '%{http_code}' -u 'admin:rangerR0cks!' -H 'Content-Type: application/json' -X GET http://127.0.0.1:6080/service/public/v2/api/plugins/info\n+ response=000\n"
                    }
                ]
            }
        }
...

container check info

# docker exec -it playground-ranger /bin/bash
root@1682068cf30b:~# sh -x /tmp/healthcheck/ranger-healthcheck.sh
+ set -ex
+ max_attempts=3
+ attempt=0
+ [ 0 -lt 3 ]
+ curl -s -o /dev/null -w %{http_code} -u admin:rangerR0cks! -H Content-Type: application/json -X GET http://127.0.0.1:6080/service/public/v2/api/plugins/info
+ response=000
root@1682068cf30b:~# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.0   3732  1540 ?        Ss   03:40   0:00 /bin/bash /tmp/ranger/init.sh
root         36  0.0  0.0   2384   752 ?        S    03:40   0:00 /bin/sh /usr/bin/mysqld_safe
mysql       152  0.2  0.0 2358468 96528 ?       Sl   03:40   0:01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/x86_64-linux-gnu/mariadb19/plugin --u
root        153  0.0  0.0   4704   920 ?        S    03:40   0:00 logger -t mysqld -p daemon error
root       3068  0.0  0.0   3864  2024 pts/0    Ss   03:46   0:00 /bin/bash
root       3199  0.0  0.0   2292   376 ?        S    03:47   0:00 sleep 5
root       3207  0.0  0.0   7920  1676 pts/0    R+   03:47   0:00 ps -aux
root@1682068cf30b:~# 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants