ModelBasedImportConfiguration.handleModelPartChanged() wird aus dem Thread des Commits gerufen, in dem das Modell geändert wird. Die Methode löscht den Inhalt seiner Caches und befüllt sie neu. In der Zwischenzeit kann der Consumer in seinem Thread Changesets einspielen. Dabei befragt er die gerade im Neuaufbau befindlichen Caches nach den Typen, die er importieren soll. Da die Caches teilweise leer sind, enthalten die den Typ nicht. Das wird interpretiert als: "Diese Typen werden nicht importiert." Dadurch gehen diese Änderungen verloren. Später kommen dann darauf aufbauende Änderungen. Diese können aufgrund der Inkonsistenz nicht mehr eingespielt werden. TL-Sync ist damit dauerhaft kaputt und überträgt nichts mehr.
Lösung
Die öffentlichen Methoden von ModelBasedImportConfiguration und ModelBasedExportConfiguration wurden synchronized gemacht. Das ist zum einen die Methode notifyUpdate. In dieser wird der Cache geleert und neu befüllt. Und zum anderen sind das diejenigen Methoden, die den Cache verwenden.
Wie in den Kommentaren erklärt, ist das keine vollständige Lösung. Das verbleibende Problem existiert aber nur für Anwendungen, in denen zur Laufzeit der Teil des Modelles geändert wird, der für TL-Sync relevant ist. Und das passiert bisher in fast keiner Anwendung.
Test
Kein Test, da das im Vergleich zur Lösung unverhältnismäßig aufwendig wäre. Es müsste eine längere Reihe von Übertragungen mittels TL-Sync vorgenommen werden. Während dessen müsste das Modell geändert werden. Und selbst dann ist es Zufall, ob der Test fehlschlägt oder "Glück hat" und durchläuft.