Skip to content

Commit 682bd30

Browse files
committed
Add script to update and handle issue for ohmx
1 parent a5d5f23 commit 682bd30

File tree

3 files changed

+66
-3
lines changed

3 files changed

+66
-3
lines changed

images/ohmx-adiff-builder/Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ RUN echo "Update repo 08/08/2025"
3333
RUN git clone https://github.com/OpenHistoricalMap/osmx-adiff-builder.git /app
3434

3535
COPY start.sh .
36+
COPY update.sh .
3637

3738
RUN chmod +x /app/*.sh && chmod +x /app/*.py
3839

images/ohmx-adiff-builder/start.sh

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@ SPLIT_ADIFFS_DIR=$WORKDIR/stage-data/split-adiffs
1818
CHANGESET_DIR=$WORKDIR/stage-data/changesets
1919
BUCKET_DIR=$WORKDIR/stage-data/bucket-data
2020
UPLOAD_TRACK_FILE=$WORKDIR/stage-data/uploaded_files.md5
21+
BAD_CHANGESETS_DIR=$WORKDIR/stage-data/bad_changesets
2122

2223
## Sequence number
2324
OSMX_INITIAL_SEQNUM=${OSMX_INITIAL_SEQNUM:-0}
2425

2526
## Process diff files from the last 60 min
2627
FILTER_ADIFF_FILES=60
2728

28-
mkdir -p $OSMX_DB_DIR $REPLICATION_ADIFFS_DIR $SPLIT_ADIFFS_DIR $CHANGESET_DIR $BUCKET_DIR
29+
mkdir -p $OSMX_DB_DIR $REPLICATION_ADIFFS_DIR $SPLIT_ADIFFS_DIR $CHANGESET_DIR $BUCKET_DIR $BAD_CHANGESETS_DIR
2930

3031
create_database() {
3132
if [ ! -f "$OSMX_DB_PATH" ]; then
@@ -40,7 +41,7 @@ create_database() {
4041
echo "Database created successfully."
4142

4243
## Update database with initial sequence number and get adiff files, starts at OSMX_INITIAL_SEQNU
43-
./update.sh $OSMX_DB_PATH $REPLICATION_ADIFFS_DIR $OSMX_INITIAL_SEQNUM
44+
./update.sh $OSMX_DB_PATH $REPLICATION_ADIFFS_DIR $BAD_CHANGESETS_DIR $OSMX_INITIAL_SEQNUM
4445
## Start generating files with no initial sequence number
4546
create_diff_files
4647

@@ -53,7 +54,7 @@ create_database() {
5354
create_diff_files() {
5455
while true; do
5556
echo "Running update.sh at $(date)..."
56-
if ! ./update.sh "$OSMX_DB_PATH" "$REPLICATION_ADIFFS_DIR"; then
57+
if ! ./update.sh "$OSMX_DB_PATH" "$REPLICATION_ADIFFS_DIR" "$BAD_CHANGESETS_DIR"; then
5758
echo "update.sh failed at $(date), restarting..."
5859
else
5960
echo "update.sh completed successfully at $(date)"
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#!/bin/bash
2+
set -euo pipefail
3+
4+
# This script is base on https://github.com/OSMCha/osmx-adiff-builder/blob/main/update.sh
5+
6+
export PATH="$PATH:$PWD"
7+
8+
if [ "$#" -lt 3 ]; then
9+
echo "Usage: $0 <osmx_db_path> <replication_adiffs_dir> <bad_changesets_dir> [initial_seqnum]"
10+
exit 1
11+
fi
12+
13+
OSMX_DB_PATH=$1
14+
REPLICATION_ADIFFS_DIR=$2
15+
BAD_CHANGESETS_DIR=$3
16+
INITIAL_SEQNUM=${4:-}
17+
18+
eval "$(mise activate bash --shims)"
19+
20+
if [ -n "${INITIAL_SEQNUM:-}" ]; then
21+
seqno_start="$INITIAL_SEQNUM"
22+
else
23+
seqno_start="$(osmx query "$OSMX_DB_PATH" seqnum)"
24+
fi
25+
26+
echo ">>> Starting from seqno=$seqno_start"
27+
28+
osm replication minute --seqno "$seqno_start" \
29+
| while read -r seqno timestamp url; do
30+
# Exit if seqno is empty
31+
if [ -z "${seqno:-}" ]; then
32+
echo ">>> seqno is empty, end of stream"; break
33+
fi
34+
35+
echo ">>> [$seqno] fetching $url"
36+
# Robust curl with retries and timeout
37+
if ! curl -fsSL --retry 3 --retry-delay 2 --max-time 120 "$url" | gzip -d > "${seqno}.osc"; then
38+
echo "!!! [$seqno] failed to download or decompress. skipping..."
39+
continue
40+
fi
41+
42+
echo ">>> [$seqno] building adiff"
43+
tmpfile="$(mktemp)"
44+
if augmented_diff.py "$OSMX_DB_PATH" "${seqno}.osc" \
45+
| xmlstarlet format > "$tmpfile"; then
46+
mv "$tmpfile" "$REPLICATION_ADIFFS_DIR/${seqno}.adiff"
47+
echo ">>> [$seqno] adiff OK -> ${REPLICATION_ADIFFS_DIR}/${seqno}.adiff"
48+
else
49+
rm -f "$tmpfile"
50+
mv "${seqno}.osc" "$BAD_CHANGESETS_DIR/${seqno}.osc"
51+
echo "!!! [$seqno] error generating adiff (possible invalid XML). OSC moved to $BAD_CHANGESETS_DIR. Continuing..."
52+
continue
53+
fi
54+
55+
echo ">>> [$seqno] osmx update"
56+
osmx update "$OSMX_DB_PATH" "${seqno}.osc" "$seqno" "$timestamp" --commit || {
57+
echo "!!! [$seqno] osmx update failed"; exit 1;
58+
}
59+
rm -f "${seqno}.osc"
60+
echo ">>> [$seqno] done"
61+
done

0 commit comments

Comments
 (0)