Hermes Agent commited on
Commit
6137b1d
Β·
1 Parent(s): ec2b16b

Eliminate directory collision for storage.sqlite and consolidate unified backup pipeline for storage.sqlite and state directories

Browse files
Files changed (1) hide show
  1. entrypoint.sh +49 -5
entrypoint.sh CHANGED
@@ -58,13 +58,19 @@ BACKUP_DIR="/data/omniroute/backups"
58
  RUNTIME_DIR="/root/.omniroute"
59
  RUNTIME_DB="/root/.omniroute/storage.sqlite"
60
 
 
 
 
 
 
 
61
  mkdir -p "$PERSIST_DIR" "$BACKUP_DIR" "$RUNTIME_DIR" 2>/dev/null || true
62
 
63
  echo "[PERSISTENCE] Storage mount inspection:"
64
  mount | grep -E 'hf|bucket|data|fuse|nfs' || echo "[STORAGE] /data info: $(df -h /data 2>&1 || true)"
65
 
66
- # ── Snapshot Restoration on Boot ──────────────────────────────────────────────
67
- if [ -s "$PERSIST_DB" ]; then
68
  _INIT_SIZE=$(wc -c < "$PERSIST_DB" 2>/dev/null | tr -d ' \t\n\r' || echo "0")
69
  echo "[PERSISTENCE] Found OmniRoute snapshot at: ${PERSIST_DB} (${_INIT_SIZE} bytes)"
70
  if command -v sqlite3 >/dev/null 2>&1; then
@@ -84,28 +90,66 @@ else
84
  echo "[PERSISTENCE] No snapshot found at ${PERSIST_DB}. Initializing fresh OmniRoute database."
85
  fi
86
 
87
- # ── SQLite WAL-aware Continuous Backup Function ───────────────────────────────
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  sync_omniroute_db() {
89
  if [ -f "$RUNTIME_DB" ] && [ -s "$RUNTIME_DB" ]; then
90
  mkdir -p "$PERSIST_DIR" "$BACKUP_DIR" 2>/dev/null || true
 
 
91
  if command -v sqlite3 >/dev/null 2>&1; then
92
  sqlite3 "$RUNTIME_DB" ".backup '$PERSIST_DB'" 2>/dev/null || cp -f "$RUNTIME_DB" "$PERSIST_DB" 2>/dev/null || true
93
  else
94
  cp -f "$RUNTIME_DB" "$PERSIST_DB" 2>/dev/null || true
95
  fi
96
 
97
- # Verify integrity of persistent snapshot
98
  _CHK="ok"
99
  if command -v sqlite3 >/dev/null 2>&1; then
100
  _CHK=$(sqlite3 "$PERSIST_DB" "PRAGMA quick_check;" 2>/dev/null || echo "failed")
101
  fi
102
 
103
  if [ "$_CHK" = "ok" ]; then
104
- # Rotate backups (keep last-known-good + rolling backups)
105
  cp -f "$PERSIST_DB" "${BACKUP_DIR}/last-known-good.sqlite" 2>/dev/null || true
106
  TIMESTAMP=$(date +%Y%m%d-%H%M)
107
  cp -f "$PERSIST_DB" "${BACKUP_DIR}/storage-${TIMESTAMP}.sqlite" 2>/dev/null || true
108
  ls -t "${BACKUP_DIR}"/storage-*.sqlite 2>/dev/null | tail -n +6 | xargs rm -f 2>/dev/null || true
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  _SIZE=$(wc -c < "$PERSIST_DB" 2>/dev/null | tr -d ' \t\n\r' || echo "0")
110
  echo "[PERSISTENCE] Snapshot OK: ${_SIZE} bytes synced to ${PERSIST_DB}"
111
  else
 
58
  RUNTIME_DIR="/root/.omniroute"
59
  RUNTIME_DB="/root/.omniroute/storage.sqlite"
60
 
61
+ # Clean up legacy directory collision if storage.sqlite was created as a folder
62
+ if [ -d "$PERSIST_DB" ]; then
63
+ echo "[PERSISTENCE] Fixing directory collision: removing directory $PERSIST_DB..."
64
+ rm -rf "$PERSIST_DB"
65
+ fi
66
+
67
  mkdir -p "$PERSIST_DIR" "$BACKUP_DIR" "$RUNTIME_DIR" 2>/dev/null || true
68
 
69
  echo "[PERSISTENCE] Storage mount inspection:"
70
  mount | grep -E 'hf|bucket|data|fuse|nfs' || echo "[STORAGE] /data info: $(df -h /data 2>&1 || true)"
71
 
72
+ # ── Snapshot & State Restoration on Boot ──────────────────────────────────────
73
+ if [ -f "$PERSIST_DB" ] && [ -s "$PERSIST_DB" ]; then
74
  _INIT_SIZE=$(wc -c < "$PERSIST_DB" 2>/dev/null | tr -d ' \t\n\r' || echo "0")
75
  echo "[PERSISTENCE] Found OmniRoute snapshot at: ${PERSIST_DB} (${_INIT_SIZE} bytes)"
76
  if command -v sqlite3 >/dev/null 2>&1; then
 
90
  echo "[PERSISTENCE] No snapshot found at ${PERSIST_DB}. Initializing fresh OmniRoute database."
91
  fi
92
 
93
+ # Restore supplementary state directories (oauth, credentials, runtime, gemini_cli, config_dir)
94
+ for _ITEM in oauth credentials runtime gemini_cli config_dir; do
95
+ if [ -d "${PERSIST_DIR}/${_ITEM}" ]; then
96
+ if [ "$_ITEM" = "gemini_cli" ]; then
97
+ mkdir -p /root/.gemini 2>/dev/null || true
98
+ cp -af "${PERSIST_DIR}/gemini_cli/"* /root/.gemini/ 2>/dev/null || true
99
+ elif [ "$_ITEM" = "config_dir" ]; then
100
+ mkdir -p /root/.config 2>/dev/null || true
101
+ cp -af "${PERSIST_DIR}/config_dir/"* /root/.config/ 2>/dev/null || true
102
+ else
103
+ mkdir -p "${RUNTIME_DIR}/${_ITEM}" 2>/dev/null || true
104
+ cp -af "${PERSIST_DIR}/${_ITEM}/"* "${RUNTIME_DIR}/${_ITEM}/" 2>/dev/null || true
105
+ fi
106
+ echo "[PERSISTENCE] Restored persistent state directory: ${_ITEM}"
107
+ fi
108
+ done
109
+
110
+ # ── Unified Single Backup Pipeline ───────────────────────────────────────────
111
  sync_omniroute_db() {
112
  if [ -f "$RUNTIME_DB" ] && [ -s "$RUNTIME_DB" ]; then
113
  mkdir -p "$PERSIST_DIR" "$BACKUP_DIR" 2>/dev/null || true
114
+
115
+ # 1. SQLite WAL-aware database backup
116
  if command -v sqlite3 >/dev/null 2>&1; then
117
  sqlite3 "$RUNTIME_DB" ".backup '$PERSIST_DB'" 2>/dev/null || cp -f "$RUNTIME_DB" "$PERSIST_DB" 2>/dev/null || true
118
  else
119
  cp -f "$RUNTIME_DB" "$PERSIST_DB" 2>/dev/null || true
120
  fi
121
 
122
+ # 2. Verify persistent snapshot integrity
123
  _CHK="ok"
124
  if command -v sqlite3 >/dev/null 2>&1; then
125
  _CHK=$(sqlite3 "$PERSIST_DB" "PRAGMA quick_check;" 2>/dev/null || echo "failed")
126
  fi
127
 
128
  if [ "$_CHK" = "ok" ]; then
129
+ # Rotate database backups (keep last-known-good + 5 rolling snapshots)
130
  cp -f "$PERSIST_DB" "${BACKUP_DIR}/last-known-good.sqlite" 2>/dev/null || true
131
  TIMESTAMP=$(date +%Y%m%d-%H%M)
132
  cp -f "$PERSIST_DB" "${BACKUP_DIR}/storage-${TIMESTAMP}.sqlite" 2>/dev/null || true
133
  ls -t "${BACKUP_DIR}"/storage-*.sqlite 2>/dev/null | tail -n +6 | xargs rm -f 2>/dev/null || true
134
+
135
+ # 3. Synchronize supplementary state directories
136
+ for _ITEM in oauth credentials runtime; do
137
+ if [ -d "${RUNTIME_DIR}/${_ITEM}" ]; then
138
+ mkdir -p "${PERSIST_DIR}/${_ITEM}" 2>/dev/null || true
139
+ cp -af "${RUNTIME_DIR}/${_ITEM}/"* "${PERSIST_DIR}/${_ITEM}/" 2>/dev/null || true
140
+ fi
141
+ done
142
+
143
+ if [ -d "/root/.gemini" ]; then
144
+ mkdir -p "${PERSIST_DIR}/gemini_cli" 2>/dev/null || true
145
+ cp -af /root/.gemini/* "${PERSIST_DIR}/gemini_cli/" 2>/dev/null || true
146
+ fi
147
+
148
+ if [ -d "/root/.config" ]; then
149
+ mkdir -p "${PERSIST_DIR}/config_dir" 2>/dev/null || true
150
+ cp -af /root/.config/* "${PERSIST_DIR}/config_dir/" 2>/dev/null || true
151
+ fi
152
+
153
  _SIZE=$(wc -c < "$PERSIST_DB" 2>/dev/null | tr -d ' \t\n\r' || echo "0")
154
  echo "[PERSISTENCE] Snapshot OK: ${_SIZE} bytes synced to ${PERSIST_DB}"
155
  else