File size: 2,519 Bytes
653e4d2
 
 
 
166628c
653e4d2
041dca5
653e4d2
166628c
 
 
 
 
 
6650372
653e4d2
 
 
9b015e1
653e4d2
041dca5
653e4d2
 
 
 
166628c
 
6650372
166628c
1036cc2
 
 
9b015e1
1036cc2
 
166628c
1036cc2
 
9b015e1
1036cc2
 
9b015e1
1036cc2
 
653e4d2
041dca5
 
 
166628c
1036cc2
 
 
 
 
9b015e1
1036cc2
 
 
 
041dca5
1036cc2
 
 
9b015e1
1036cc2
 
 
041dca5
 
 
1036cc2
 
 
 
 
 
 
653e4d2
1036cc2
653e4d2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/bin/bash
set -e

SNAPSHOT_DIR="/data/qdrant_snapshots"
LOCAL_SNAPSHOT_DIR="/tmp/qdrant_snapshots"
QDRANT_URL="http://localhost:6333"
API_KEY="${QDRANT__SERVICE__API_KEY}"

# Copy snapshots from FUSE mount to local disk first
echo "Copying snapshots from FUSE mount to local /tmp..."
mkdir -p "$LOCAL_SNAPSHOT_DIR"
cp -r "$SNAPSHOT_DIR"/. "$LOCAL_SNAPSHOT_DIR/"
echo "Copy complete."

# Start Qdrant in background
/qdrant/qdrant &
QDRANT_PID=$!

# Wait for Qdrant to be ready
echo "Waiting for Qdrant to start..."
until wget -qO- --header="api-key: $API_KEY" "$QDRANT_URL/readyz" > /dev/null 2>&1; do
    sleep 1
done
echo "Qdrant ready."

# Recover snapshots from LOCAL copy (not FUSE mount)
echo "Scanning $LOCAL_SNAPSHOT_DIR for snapshots..."

for COLLECTION_DIR in "$LOCAL_SNAPSHOT_DIR"/*/; do
    [ -d "$COLLECTION_DIR" ] || continue
    COLLECTION=$(basename "$COLLECTION_DIR")
    echo "Found collection folder: $COLLECTION"

    SNAPSHOT=""
    for f in "$COLLECTION_DIR"*.snapshot; do
        case "$f" in *.checksum) continue ;; esac
        [ -f "$f" ] && SNAPSHOT="$f" && break
    done

    if [ -z "$SNAPSHOT" ]; then
        echo "No snapshot file found in $COLLECTION_DIR, skipping."
        continue
    fi
    echo "Found snapshot: $SNAPSHOT"

    HTTP_STATUS=$(wget -qO- \
        --header="api-key: $API_KEY" \
        "$QDRANT_URL/collections/$COLLECTION" 2>/dev/null | grep -o '"status":"[^"]*"' | head -1)
    echo "Collection $COLLECTION status: $HTTP_STATUS"

    if echo "$HTTP_STATUS" | grep -q '"status":"green"'; then
        echo "Collection '$COLLECTION' already green, skipping."
        continue
    fi

    echo "Recovering '$COLLECTION' from $SNAPSHOT ..."
    RESPONSE=$(wget -qO- \
        --method=PUT \
        --header="Content-Type: application/json" \
        --header="api-key: $API_KEY" \
        --body-data="{\"location\":\"file://$SNAPSHOT\"}" \
        "$QDRANT_URL/collections/$COLLECTION/snapshots/recover" 2>&1)
    echo "Recovery response: $RESPONSE"

    echo "Waiting for '$COLLECTION' to become green..."
    for i in $(seq 1 60); do
        sleep 5
        STATUS=$(wget -qO- \
            --header="api-key: $API_KEY" \
            "$QDRANT_URL/collections/$COLLECTION" 2>/dev/null | grep -o '"status":"[^"]*"' | head -1)
        echo "  Attempt $i: $STATUS"
        if echo "$STATUS" | grep -q '"status":"green"'; then
            echo "  '$COLLECTION' is green!"
            break
        fi
    done
done

echo "Snapshot recovery complete."
wait $QDRANT_PID