Nerdur commited on
Commit
9ba0bc4
·
verified ·
1 Parent(s): e768617

Fix restore: sentinel file logika — restore jednom, pa cuva podatke

Browse files
Files changed (1) hide show
  1. backup_restore.sh +17 -23
backup_restore.sh CHANGED
@@ -8,6 +8,7 @@ BACKUP_INTERVAL_SECONDS="${HF_BACKUP_INTERVAL_SECONDS:-300}"
8
  BACKUP_NAME="openwebui-data.tar.gz"
9
  BACKUP_URL=""
10
  UPLOAD_URL=""
 
11
 
12
  if [ -n "$HF_REPO" ]; then
13
  BACKUP_URL="https://huggingface.co/datasets/${HF_REPO}/resolve/main/${BACKUP_NAME}"
@@ -15,16 +16,10 @@ if [ -n "$HF_REPO" ]; then
15
  fi
16
 
17
  if [ -z "$HF_REPO" ] || [ -z "$HF_TOKEN" ]; then
18
- echo "HF backup nije omogucen: postavi HF_BACKUP_REPO i HF_TOKEN u Space Secrets ako zelis restore/backup."
19
  exit 0
20
  fi
21
 
22
- # Provjera: da li /data vec ima sadrzaj (persistent volume nije prazan)
23
- data_is_populated() {
24
- FILE_COUNT=$(find "$DATA_DIR" -mindepth 1 -maxdepth 2 2>/dev/null | wc -l)
25
- [ "$FILE_COUNT" -ge 2 ]
26
- }
27
-
28
  backup_archive() {
29
  local archive_path="$1"
30
  mkdir -p "$(dirname "$archive_path")"
@@ -34,13 +29,13 @@ backup_archive() {
34
  do_restore() {
35
  mkdir -p "$DATA_DIR"
36
 
37
- # NOVA LOGIKA: Preskoci restore ako persistent volume vec ima podatke
38
- if data_is_populated; then
39
- echo "Persistent volume vec ima podatke ($(find "$DATA_DIR" -mindepth 1 -maxdepth 2 | wc -l) fajlova) — preskacem restore iz HF."
40
  return
41
  fi
42
 
43
- echo "Pokusavam restore Open WebUI data iz ${HF_REPO}..."
44
 
45
  HTTP_STATUS=$(curl -s -o /tmp/openwebui_restore.tar.gz -w "%{http_code}" \
46
  -L \
@@ -50,14 +45,17 @@ do_restore() {
50
  if [ "$HTTP_STATUS" = "200" ]; then
51
  FILESIZE=$(wc -c < /tmp/openwebui_restore.tar.gz)
52
  if [ "$FILESIZE" -gt 1000 ]; then
53
- find "$DATA_DIR" -mindepth 1 -maxdepth 1 -exec rm -rf {} +
 
54
  tar -xzf /tmp/openwebui_restore.tar.gz -C "$DATA_DIR"
55
- echo "Data restored: ${FILESIZE} bytes"
 
 
56
  else
57
- echo "Backup je premalen, preskacem restore."
58
  fi
59
  else
60
- echo "Backup ne postoji ili nije dostupan (HTTP ${HTTP_STATUS})."
61
  fi
62
  }
63
 
@@ -72,7 +70,7 @@ backup_archive_to_hf() {
72
 
73
  FILESIZE=$(wc -c < "$ARCHIVE_PATH")
74
  if [ "$FILESIZE" -lt 1000 ]; then
75
- echo "Arhiva je premala (${FILESIZE} bytes), preskacem backup."
76
  return
77
  fi
78
 
@@ -86,31 +84,27 @@ backup_archive_to_hf() {
86
  if [ "$HTTP_STATUS" = "200" ] || [ "$HTTP_STATUS" = "201" ]; then
87
  echo "Backup uspesan."
88
  else
89
- echo "Backup nije uspesan (HTTP ${HTTP_STATUS})."
90
  cat /tmp/backup_response.json 2>/dev/null || true
91
  fi
92
  }
93
 
94
- # Podrska za mode argument: restore | loop | all (default)
95
  MODE="${1:-all}"
96
 
97
  case "$MODE" in
98
  restore)
99
- # Samo uradi restore, pa izadji (za sekvencijalni startup)
100
  do_restore
101
  ;;
102
  loop)
103
- # Samo backup loop (bez restore)
104
- echo "Periodicki backup svakih ${BACKUP_INTERVAL_SECONDS} sekundi je aktivan."
105
  while true; do
106
  sleep "$BACKUP_INTERVAL_SECONDS"
107
  backup_archive_to_hf
108
  done
109
  ;;
110
  all|*)
111
- # Legacy mode: restore pa loop
112
  do_restore
113
- echo "Periodicki backup svakih ${BACKUP_INTERVAL_SECONDS} sekundi je aktivan."
114
  while true; do
115
  sleep "$BACKUP_INTERVAL_SECONDS"
116
  backup_archive_to_hf
 
8
  BACKUP_NAME="openwebui-data.tar.gz"
9
  BACKUP_URL=""
10
  UPLOAD_URL=""
11
+ SENTINEL="${DATA_DIR}/.hf_backup_restored"
12
 
13
  if [ -n "$HF_REPO" ]; then
14
  BACKUP_URL="https://huggingface.co/datasets/${HF_REPO}/resolve/main/${BACKUP_NAME}"
 
16
  fi
17
 
18
  if [ -z "$HF_REPO" ] || [ -z "$HF_TOKEN" ]; then
19
+ echo "HF backup nije omogucen: postavi HF_BACKUP_REPO i HF_TOKEN u Space Secrets."
20
  exit 0
21
  fi
22
 
 
 
 
 
 
 
23
  backup_archive() {
24
  local archive_path="$1"
25
  mkdir -p "$(dirname "$archive_path")"
 
29
  do_restore() {
30
  mkdir -p "$DATA_DIR"
31
 
32
+ # Ako sentinel postoji, backup je vec jednom uspjesno restorovan — preskoci
33
+ if [ -f "$SENTINEL" ]; then
34
+ echo "Sentinel pronadjen — backup vec restorovan, preskacemo. Za force restore: obrisi ${SENTINEL}"
35
  return
36
  fi
37
 
38
+ echo "Sentinel nije pronadjen — pokusavam restore iz ${HF_REPO}..."
39
 
40
  HTTP_STATUS=$(curl -s -o /tmp/openwebui_restore.tar.gz -w "%{http_code}" \
41
  -L \
 
45
  if [ "$HTTP_STATUS" = "200" ]; then
46
  FILESIZE=$(wc -c < /tmp/openwebui_restore.tar.gz)
47
  if [ "$FILESIZE" -gt 1000 ]; then
48
+ echo "Brisem stare podatke i raspakovavam backup (${FILESIZE} bytes)..."
49
+ find "$DATA_DIR" -mindepth 1 -maxdepth 1 -not -name '.hf_backup_restored' -exec rm -rf {} +
50
  tar -xzf /tmp/openwebui_restore.tar.gz -C "$DATA_DIR"
51
+ # Kreiraj sentinel — sljedeci restart ce preskociti restore
52
+ touch "$SENTINEL"
53
+ echo "✅ Restore uspesan! Sentinel kreiran."
54
  else
55
+ echo "Backup je premalen (${FILESIZE} bytes), preskacem restore."
56
  fi
57
  else
58
+ echo "Backup nije dostupan (HTTP ${HTTP_STATUS}) — pokrecemo WebUI bez restore."
59
  fi
60
  }
61
 
 
70
 
71
  FILESIZE=$(wc -c < "$ARCHIVE_PATH")
72
  if [ "$FILESIZE" -lt 1000 ]; then
73
+ echo "Arhiva premala (${FILESIZE} bytes), preskacem backup."
74
  return
75
  fi
76
 
 
84
  if [ "$HTTP_STATUS" = "200" ] || [ "$HTTP_STATUS" = "201" ]; then
85
  echo "Backup uspesan."
86
  else
87
+ echo "Backup neuspesan (HTTP ${HTTP_STATUS})."
88
  cat /tmp/backup_response.json 2>/dev/null || true
89
  fi
90
  }
91
 
 
92
  MODE="${1:-all}"
93
 
94
  case "$MODE" in
95
  restore)
 
96
  do_restore
97
  ;;
98
  loop)
99
+ echo "Periodicki backup svakih ${BACKUP_INTERVAL_SECONDS} sekundi aktivan."
 
100
  while true; do
101
  sleep "$BACKUP_INTERVAL_SECONDS"
102
  backup_archive_to_hf
103
  done
104
  ;;
105
  all|*)
 
106
  do_restore
107
+ echo "Periodicki backup svakih ${BACKUP_INTERVAL_SECONDS} sekundi aktivan."
108
  while true; do
109
  sleep "$BACKUP_INTERVAL_SECONDS"
110
  backup_archive_to_hf