|
2 | 2 |
|
3 | 3 | set -e |
4 | 4 |
|
| 5 | +WAIT_FOR_CONFIG_FILE_ATTEMPTS=600 |
| 6 | +WAIT_FOR_PASSWORD_SET_ATTEMPTS=300 |
| 7 | +WAIT_FOR_SERVICE_READY_ATTEMPTS=300 |
| 8 | +WAIT_INTERVAL_SECONDS=1 |
| 9 | + |
5 | 10 | CONFIG_FILE="/etc/oceanbase/seekdb.cnf" |
6 | 11 |
|
7 | 12 | # Replace values in config file with environment variables if they are set |
@@ -31,50 +36,51 @@ if [ -n "$LOG_DISK_SIZE" ]; then |
31 | 36 | fi |
32 | 37 |
|
33 | 38 | # Execute the main process |
34 | | -/usr/libexec/oceanbase/scripts/seekdb_systemd_start |
| 39 | +/usr/libexec/oceanbase/scripts/seekdb_systemd_start 2>/dev/null |
35 | 40 |
|
36 | 41 | OBSERVER_CONFIG_FILE="/var/lib/oceanbase/etc/observer.config.bin" |
37 | | -for i in {1..10}; do |
38 | | - echo "Loop iteration #$i" |
| 42 | +for i in $(seq 1 $WAIT_FOR_CONFIG_FILE_ATTEMPTS); do |
39 | 43 | if [ -f "$OBSERVER_CONFIG_FILE" ]; then |
40 | 44 | echo "File '$OBSERVER_CONFIG_FILE' found on attempt #$i." |
41 | 45 | break |
42 | 46 | fi |
43 | | - sleep 1 |
| 47 | + if [ $((i % 10)) -eq 0 ]; then |
| 48 | + echo "seekdb is still not ready." |
| 49 | + fi |
| 50 | + sleep $WAIT_INTERVAL_SECONDS |
44 | 51 | done |
45 | 52 | obshell agent start --seekdb --base-dir=/var/lib/oceanbase |
46 | 53 |
|
47 | 54 | INITIALIZED_FLAG="/var/lib/oceanbase/.initialized" |
48 | 55 |
|
49 | 56 | if [ ! -f "$INITIALIZED_FLAG" ]; then |
50 | 57 | # change password using obshell |
51 | | - for i in {1..10}; do |
| 58 | + for i in $(seq 1 $WAIT_FOR_PASSWORD_SET_ATTEMPTS); do |
52 | 59 | curl -X PUT "http://127.0.0.1:2886/api/v1/observer/user/root/password" -d "{\"password\":\"$ROOT_PASSWORD\"}" --unix-socket "/var/lib/oceanbase/run/obshell.sock" |
53 | 60 | EXIT_STATUS=$? |
54 | 61 | if [ $EXIT_STATUS -eq 0 ]; then |
55 | 62 | echo "Command succeeded on attempt #$i." |
56 | 63 | break # Exit the loop if successful |
57 | 64 | else |
58 | | - echo "Command failed on attempt #$i (exit status: $EXIT_STATUS). Retrying in 1 seconds..." |
59 | | - sleep 1 |
| 65 | + echo "Command failed on attempt #$i (exit status: $EXIT_STATUS). Retrying in $WAIT_INTERVAL_SECONDS seconds..." |
| 66 | + sleep $WAIT_INTERVAL_SECONDS |
60 | 67 | fi |
61 | 68 | done |
62 | 69 |
|
63 | | - # Execute initialization scripts if INIT_SCRIPTS_PATH is set |
64 | | - if [ -n "$INIT_SCRIPTS_PATH" ]; then |
65 | | - echo "Executing initialization scripts from $INIT_SCRIPTS_PATH..." |
66 | | - # Determine mysql connection options |
67 | | - MYSQL_OPTS="-h 127.0.0.1 -P 2881 -u root" |
68 | | - if [ -n "$ROOT_PASSWORD" ]; then |
69 | | - MYSQL_OPTS="$MYSQL_OPTS -p$ROOT_PASSWORD" |
70 | | - fi |
| 70 | + # Init database and execute init scripts |
| 71 | + MYSQL_OPTS="-h127.0.0.1 -P2881 -uroot" |
| 72 | + if [ -n "$ROOT_PASSWORD" ]; then |
| 73 | + MYSQL_OPTS="$MYSQL_OPTS -p$ROOT_PASSWORD" |
| 74 | + fi |
71 | 75 |
|
72 | | - if [ -n "$SEEKDB_DATABASE" ]; then |
73 | | - mysql $MYSQL_OPTS -e "CREATE DATABASE IF NOT EXISTS \`$SEEKDB_DATABASE\`;" |
74 | | - echo "Database $SEEKDB_DATABASE created." |
75 | | - MYSQL_OPTS="$MYSQL_OPTS -D$SEEKDB_DATABASE" |
76 | | - fi |
| 76 | + if [ -n "$SEEKDB_DATABASE" ]; then |
| 77 | + mysql $MYSQL_OPTS -e "CREATE DATABASE IF NOT EXISTS \`$SEEKDB_DATABASE\`;" |
| 78 | + echo "Database $SEEKDB_DATABASE created." |
| 79 | + MYSQL_OPTS="$MYSQL_OPTS -D$SEEKDB_DATABASE" |
| 80 | + fi |
77 | 81 |
|
| 82 | + if [ -n "$INIT_SCRIPTS_PATH" ]; then |
| 83 | + echo "Executing initialization scripts from $INIT_SCRIPTS_PATH..." |
78 | 84 | for sql_file in "$INIT_SCRIPTS_PATH"/*.sql; do |
79 | 85 | if [ -f "$sql_file" ]; then |
80 | 86 | echo "Executing $sql_file..." |
|
92 | 98 | echo "Already initialized. Skipping initialization." |
93 | 99 | fi |
94 | 100 |
|
| 101 | +# Execute command passed to docker run if present |
| 102 | +if [ $# -gt 0 ]; then |
| 103 | + MYSQL_OPTS="-h127.0.0.1 -P2881 -uroot" |
| 104 | + if [ -n "$ROOT_PASSWORD" ]; then |
| 105 | + MYSQL_OPTS="$MYSQL_OPTS -p$ROOT_PASSWORD" |
| 106 | + fi |
| 107 | + |
| 108 | + echo "Waiting for seekdb to be ready..." |
| 109 | + for i in $(seq 1 $WAIT_FOR_SERVICE_READY_ATTEMPTS); do |
| 110 | + if mysql $MYSQL_OPTS -e "show databases" >/dev/null 2>&1; then |
| 111 | + echo "seekdb is ready." |
| 112 | + break |
| 113 | + fi |
| 114 | + if [ $i -eq $WAIT_FOR_SERVICE_READY_ATTEMPTS ]; then |
| 115 | + echo "Timeout waiting for seekdb to be ready." |
| 116 | + exit 1 |
| 117 | + fi |
| 118 | + sleep $WAIT_INTERVAL_SECONDS |
| 119 | + done |
| 120 | + |
| 121 | + if [ -n "$SEEKDB_DATABASE" ]; then |
| 122 | + MYSQL_OPTS="$MYSQL_OPTS -D$SEEKDB_DATABASE" |
| 123 | + fi |
| 124 | + |
| 125 | + echo "Executing sql: $*" |
| 126 | + mysql $MYSQL_OPTS -e "$*" |
| 127 | + exit $? |
| 128 | +fi |
| 129 | + |
95 | 130 | echo "Starting observer health check..." |
96 | 131 | while pgrep observer > /dev/null; do |
97 | 132 | sleep 5 |
|
0 commit comments