Ralf Hendel, Geschäftsführer
Drupal Enthusiast und Freizeit-Pianist.

Panorama

Die "git-merge Katastrophe": wie sich singularer Code verhindern lässt

Im Netz findet sich bislang noch recht wenig über einen Sonderfall, der bei git unter sehr ungünstigen Umständen auftreten kann: die sogenannte "Merge Katastrophe".

Aufgrund der zunehmenden Verbreitung von git sollte man jedoch darauf vorbereitet sein.

Git ist ein Tool zur Quellcode-Versionsverwaltung, das sich vielseitig für konkurrierende Team-Entwicklung wie auch einfach für Backups eignet.

Verschiedene Quellcode-Äste lassen sich in sogenannte "Branches" auszweigen und durch "Merges" wieder zusammen führen. Beim "Merge" werden die Code-Bestandteile zusammengeführt. Für eine übersichtliche Verwaltung der einzelnen Branches gibt es unterschiedliche Merge-Tools, die man zur Hilfe nehmen kann, wenn beim Code manuelle Entscheidungen zu treffen sind, welche Bestandteile übernommen werden sollen.

Während eines Projekt entstehen häufig sich wild verästelnde und sich kreuzende Pfade. Wie so etwas in der Praxis aussehen kann, haben wir in dem Motiv abgebildet. In aller Regel stellt das kein besonderes Problem dar. In seltenen Fällen aber schon. Aber wenn doch, dann gleich gewaltig...

Entstehung irreversibler Code-Singularitäten bei der Merge-Katastrophe

Das Problem sind die sich kreuzenden Pfade. Wenn just in dem Moment, in dem zwei sich kreuzende Pfade gemergt werden, die entsprechenden Code-Prozeduren im Rechner aufgerufen werden, spricht man von "Merge-Katastrophe".

In diesem Moment existieren im Prozesser zwei unterschiedliche Code-Versionen, die auf den selben Transistoren unterschiedliche Zustände annehmen. Vergleichbare Effekte kennen wir von Quanten-Computern. Dort werden die Codes allerdings auf verschiedenen Quanten-Prozessoren ausgeführt. In unserem Fall entsteht eine Art schwarzes Loch, eine "Code-Singularität".

Das Problem dieser Singularitäten besteht darin, dass sie sich nicht mehr auflösen lassen. Der Code besitzt zwei Zustände gleichzeitig und der Prozess ist irreversibel.

Schwarze Löcher im Prozessor und auf Festplatten

Wie auch bei physikalischen schwarzen Löchern lässt sich die Ausbreitung von Code-Singularitäten nicht aufhalten. Mit der Größe des Lochs nimmt auch seine Gefräßigkeit zu. Ab ca. fünf Kilobyte Größe breiten sich Singularitäten nicht nur auf Datei-Ebene aus, sondern können sich auch quasi viral über Netzwerke fortpflanzen. Hier hilft nur die gesamte in-Quarantäne-Stellung der befallenen IT-Infrastruktur.

Das schlimmste, was man machen kann, ist auf frühere Commits zurück zugehen. Dadurch werden die unterschiedlichen Verästelung quasi gewaltsam übereinander gepresst und damit singular. Das ist, als wollte man brennendes Wasser mit Öl löschen.

Wenn dieser Fall auftritt, sollte man Festplatte und Prozessor unmittelbar ausbauen und das Bundesamt für Strahlenschutz informieren. Bis zur Abholung sollten die Teile gut gekühlt gelagert werden. Eine Gesundheitsgefahr für Mensch und Umwelt besteht bei Kontakt mit den Teilen jedoch nicht.

Forscher am MIT haben herausgefunden, dass sich die Ausbreitungsgeschwindigkeit erst bei Temperaturen um den absoluten Nullpunkt gegen Null drosseln lässt.

Die derzeit beste Methode, befallene Hardware zu entsorgen, besteht darin, sie in Salzstöcken zusammen mit Atommüll zu verklappen. Die freiwerdende Energie beim Zerfallsprozess der radioaktiven Isotope kann dazu genutzt werden, die Platten weiter herabgekühlt zu halten.

Die ungelöste Frage der Festplatten-Endlagerung ist übrigens auch der wahre Grund, warum die Bergung des Atommülls aus der Asse nach offiziellen Angaben nicht möglich sein soll.

Wann gibt es endlich Sicherheits-Updates?

Bei der IGA, der internationalen git-Association, ist dieses Problem natürlich längst bekannt.

Zurzeit arbeiten die Entwickler an einer Merge-Antizipations-Lösung, die Merges verhindert, sofern Katastrophen eintreten könnten. In der Praxis bedeutet das, nur mit maximal zwei Quellcode-Branches pro Projekt arbeiten zu können.

Vorbeugend rät die Association sicherheitshalber dazu, auf Datensicherungen ganz zu verzichten.

Die Association empfiehlt außerdem dringend, Produktiv-Systeme während Merges und Code-Deployments abzuschalten.

In Zusammenarbeit mit den Entwicklern von drush soll der Befehl drush shutdown in den Befehlsstandard aufgenommen werden. Ausgesuchte große Provider bieten Ihren Kunden bereits jetzt schon Exklusiv-Tarife an mit Unterstützung von "drush shutdown" bei Site-Aliasen: per drush @sitealias shutdown datacenter -f lässt sich das gesamte Rechenzentrum remote herunterfahren.

Die Tarife sind allerdings sehr teuer, da die kostspieligen Versicherungspolicen für Schadensersatzaufwände der anderen Kunden bereits mit eingepreist sind.

Kommentare

torsten - 12. November 2012 - 18:14
einzig eine Anspielung auf den 11.11. könnte ich gelten lassen...
dawehner - 11. November 2012 - 20:38
Bei dem Versuch die große Merge-Katastrophe zu erklären, kamen Wissenschaftler zu der traurigen Erkenntnis, dass nach einer bestimmten Zeit git commits automatisch zu Singularitäten zerfallen können. Der Grund hierfür ist wohl eine kleine Brechung der Symmetrie zwischen GIT und TIG beim initialen Commit, so dass wir eigentlich unsere Existenz den Singularitäten zu verdanken haben. Eine andere Theorie besagt übrigens, dass bei jeder Singularität ein neuer git clone auftaucht und die beiden Code-Versionen völlig unabhängig weiterleben. Großartiger Artikel!