lpc “erzählt” ein wenig Statistik, kann auch weg. simc muss sein.
Gruss
walter
p.s. hier mal mein ganzer Script. Der rennt mit cron ganz gut.
#!/bin/bash
#
#set -x
#
cd /home/walter/osm/db/diff
date
PIDFILE=`basename $0`.pid
RUNLOG=`basename $0`.log
OSMOSIS=/opt/install/osmosis-git/package/bin/osmosis
m_info()
{
echo "[`date +"%Y-%m-%d %H:%M:%S"`] $$ $1"
echo "[`date +"%Y-%m-%d %H:%M:%S"`] $$ $1" >> "$RUNLOG"
}
getlock()
{
if [ -s $PIDFILE ]; then
if [ "$(ps -p `cat $PIDFILE` | wc -l)" -gt 1 ]; then
return 1 #false
fi
fi
echo $$ >"$PIDFILE"
return 0 #true
}
freelock()
{
rm "$PIDFILE"
}
if ! getlock; then
m_info "pid `cat $PIDFILE` still running"
exit 3
fi
TSTART=`date "+%s"`
m_info "starting osmosis"
$OSMOSIS \
--read-replication-interval \
--simc \
--lpc interval=60 \
--write-pgsql-change database=osm authFile=authFile.txt
RC=$?
m_info "osmosis done RC=$RC"
m_info "lag is `$OSMOSIS --read-replication-lag humanReadable=yes workingDirectory=.`"
Vorteil: wenn ein Update läuft, kann cron den trotzdem ein 2. mal starten. der loggt sich dann einfach wieder aus, solange der erste noch nicht fertig ist.
ähm, also ich bin der Meinung, es ist optional. Bissl langsamer, speziell wenn man seltener repliziert und damit die Wahrscheinlickeit steigt, das es mehr als eine Änderung an einem Objekt gibt, was --simc zu einer einzigen Änderung verschmilzt, aber es geht auch ohne
komisch. Hier gings ohne simc. Okay, war nicht alles drin, aber das ist ja ohne Belang für die Replikation…geschrieben wird ja doch alles, was als Change reinkommt.
so:
osmosis --rri workingDirectory=$ROOT_DIR/data/replication --log-progress-change --buffer-change bufferCapacity=6666 --write-pgsql-change authFile=$AUTH_FILE
edit: oh, doch. Einzelne Länder waren auch komplett drin
Das ist ganz einfach mit dem simc. Es hängt, wie bei so vielen Sachen, von genauen Umfeld ab.
Wenn man ein Diff als ein File vom Replication-Server abholt, brauch man natürlich kein simc. Wenn man aber in einem Update-Vorgang mehrere Diffs abholt, müssen vor dem eigentlichen Update der DB die “Doppelgänger” raus. Doppelgänger sind hier Objekte, die mehrfach kurz hintereinander geändert wurden.
Mein configuration.txt sieht so aus:
Damit holt mein Rechner vom Replication-Server die minütlichen Diffs maximal einer Stunde ab (maxInterval=3600 Sekunden), merged die automatisch und schmeisst dann die Doppelgänger raus (dafür das simc).
Somit bekommt der Update seine Daten in akzeptablen Happen (maximal 1h) und später klappt das ohne irgendeine Änderung der Konfiguration auch im minütlichen Abstand.
Konkret bei mir: Morgens Kiste anschmeissen und nach einiger Zeit ist die DB top aktuell. Sollte ich während des Updates mal rebooten müssen, verliert der Update maximal 1H und setzt vollautomatisch neu auf.
Und das ganze ohne Hexerei. Das macht die Replication-Software von Osmosis ganz alleine - wenn man sie freundlich drum bittet.
Die Grafik kennst du ja schon:
Die “Treppenstufen” sind immer die Daten einer Stunde, die er dann in einigen Minuten drin hat. Die nächlichen Daten sind geringer als die täglichen, daher geht es unterschiedlich steil “bergab”
also wenn Du maxInterval=3600 von einer Stunde auf 48 Stunden stellen würdest, bräuchtest Du simc auch nicht sofern Du mindestens alle 48 Stunden ein Update machst. Okay, verstanden. Ich hatte mein maxInterval schon immer recht hoch, was erklärt, warum ich nie ein Problem mit simc hatte. Wobei mir simc sehr sinnvoll erscheint.
Leider nicht
Dir ist eventuell entgangen, dass ich die minütlichen Diffs abhole - bei maxintervall=3600 also theoretisch bis zu 60 - bei 48h also bis zu 2880. Real sind das weniger aber so ca 30 sind es schon. Und sobald beim Download auch nur 2 Files kommen können, muss simc aufräumen. Ist reine Glückssache.
Es hängt von den Zusammenspiel der Komponenten und deren Timing zusammen. Wenn du einen Daily Diff verarbeitest und dann in einem zweiten Lauf den nächsten, ist alles “ganz einfach” - ich liebe aber keine einfachen Lösungen
Ich möchte jedenfalls nicht den täglichen Update-Lauf anschmeissen und dann den Rechner die nächsten 6-8 Stunden nicht anfassen dürfen - oder bei einem Stromausfall von vorne anfangen müssen (da war doch was, gell?)
Machen mer’s kurz: mit simc geht es immer, ohne simc manchmal nicht.
danke für den Hinweis! Und um die Frage zu beantworten: Weil das alles so unsäglich dokumentiert ist. Statt diesem Fall den jeder wissen will findet man alles mögliche im Wiki. Zwei Befehle fürs Setup, einer fürs Update, das ist schon alles! Aber was solls, ich kann ja im Forum fragen