- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Vollgenierung vermeiden (Delta-Generierung
Hallo Cummunity,
wir sind dabei die Einfรผhrung der Delta-Generierung zu planen. Beim damaligen Einfรผhren des Systems gab es die Delta-Generierung noch nicht.
Diese Delta-Generierung wurde bereits auf einer Entwicklungsumgebung von einem externen FirstSpirit-Experten eingerichtet und per Content-Transport fรผr das Produktiv-System zur Verfรผgung gestellt.
Laut Externer ist zuvor eine Vollgenerierung des Produktiv-Systems vonnรถten, um das Delta zu berechnen.
Das Problem ist, dass eine Vollgenerierung auf dem Produktiv-System mehrere Tag in Anspruch nimmt und das System signifikant verlangsamt.
Ist eine Vollgenerierung unumgรคnglich oder lรคsst sich FirstSpirit ggf. auch anderweitig dazu bewegen, initial das Delta zur letzten Generierung zu ermitteln?
Weitere Informationen:
Bisher werden lediglich Teilprojektgenerierungen durchgefรผhrt.
>hmm, also es lief doch schon mal eine Vollgenerierung oder wie kommt man darauf, dass diese mehrere tage dauern kรถnnte?
Im letzten Release haben wir eine Vollgenerierung durchgefรผhrt. Diese ging รผber 14 Stunden und ist bedingt durch den Festplattenspeicher abgebrochen. In dieser Zeit war das System komplett ausgelastet und konnte kaum bis gar nicht genutzt werden. Darum wollen wir eine Vollgenerierung auf dem Produktivsystem mรถglichst vermeiden.
Wir haben bereits dem FS-Support unser Problem geschildert. Der Support hat uns auf ein Skript hier in der Community verwiesen, mit dem man "ordnerweise" Vollgenieren kann: Delta-Generation
Das Problem ist nur, dass wir das Skript nicht wirklich einsetzten kรถnnen, da schon eine Datenquelle (News) unmengen an Daten besitzt. Alleine diese Datenquelle mittels Skript einzeln zu vollzugenerierung wรผrde wahrscheinlich zu lange dauern.
Gibt es da nicht vllt. einen anderen Trick um die Vollgenerierung zu vermeiden?
Vielleicht in der Datenbank das Delta manuell setzten? (Wenn die erste Delta-Generierung ein paar Stunden laufen mรผsste, wรคre das kein
Liebe Grรผรe
Marcel
(Delta-Generierung
- Labels:
-
Developers
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Marcel,
grundsรคtzlich ist es so, dass sich die Delta-Generierung den Zeitpunkt bzw. genauer die Revision der letzten Delta-Generierung im Auftrag merkt. Das passiert รผber die Auftragsvariable #deltaGeneration.last_execution. Wird diese Variable nicht gefunden, wird von einer Vollgenerierung ausgegangen.
Man kann nun allerdings diese Information "manipulieren", indem man die Variable durch ein Skript im Auftrag selbst auf eine bestimmte Revision setzt:
context.setVariable("#deltaGeneration.last_execution", revisionId);
revisionId ist dabei vom Typ "long".
Auftragsvariablen haben im Gegensatz zu Properties die Eigenschaft, dass sie am jeweiligen Auftrag persistiert werden, d.h. beim nรคchsten Lauf desselben ( ! ) Auftrages wieder mit dem zuletzt gesetzten Wert verfรผgbar sind.
Ihr mรผsstet also letztlich schauen / entscheiden, welche Revision ihr als "bereits generiert" betrachten wollt und kรถnnt dann die Variable entsprechend setzen. Das geht allerdings nicht "von auรen", sondern nur "innerhalb" des Auftrages. Am einfachsten wรคre wohl schlicht, temporรคr alle anderen Tasks zu deaktivieren und nur diesen einen "Manipulations-Task" aktiv zu lassen. Der muss danach natรผrlich wieder deaktiviert werden.
Ein paar Tipps: Da die Variable pro Auftrag gilt, mรผsst ihr je nach Projekt- bzw. Auftrags-Struktur noch weitere Anpassungen vornehmen. Auรerdem รผberschreibt die Deltagenerierung die zuletzt generierte Revision gleich zu Beginn. Falls ihr unter bestimmten Umstรคnden das Deployment nicht durchfรผhrt (z.B. abhรคngig von der Anzahl der Generierungsfehler), solltet ihr euch die #deltaGeneration.last_execution vor dem Aufruf der Deltagenerierung im Auftrag merken und sie in diesen Fรคllen wieder zurรผcksetzen. An die Variable kommt man per context.getVariable("#deltaGeneration.last_execution"). Falls ihr auch Auftrรคge fรผr sog. "historische Generierungen" habt, sind diese auch entsprechend anzupassen.
Ob das bei euch alles direkt so funktioniert, kann ich allerdings nicht sagen - es kann sein, dass ihr noch weitere Anpassungen vornehmen mรผsst abhรคngig davon, wie eure Auftrรคge aussehen. Also unbedingt vorher testen ๐
Viele Grรผรe
Michael
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Marcel,
grundsรคtzlich ist es so, dass sich die Delta-Generierung den Zeitpunkt bzw. genauer die Revision der letzten Delta-Generierung im Auftrag merkt. Das passiert รผber die Auftragsvariable #deltaGeneration.last_execution. Wird diese Variable nicht gefunden, wird von einer Vollgenerierung ausgegangen.
Man kann nun allerdings diese Information "manipulieren", indem man die Variable durch ein Skript im Auftrag selbst auf eine bestimmte Revision setzt:
context.setVariable("#deltaGeneration.last_execution", revisionId);
revisionId ist dabei vom Typ "long".
Auftragsvariablen haben im Gegensatz zu Properties die Eigenschaft, dass sie am jeweiligen Auftrag persistiert werden, d.h. beim nรคchsten Lauf desselben ( ! ) Auftrages wieder mit dem zuletzt gesetzten Wert verfรผgbar sind.
Ihr mรผsstet also letztlich schauen / entscheiden, welche Revision ihr als "bereits generiert" betrachten wollt und kรถnnt dann die Variable entsprechend setzen. Das geht allerdings nicht "von auรen", sondern nur "innerhalb" des Auftrages. Am einfachsten wรคre wohl schlicht, temporรคr alle anderen Tasks zu deaktivieren und nur diesen einen "Manipulations-Task" aktiv zu lassen. Der muss danach natรผrlich wieder deaktiviert werden.
Ein paar Tipps: Da die Variable pro Auftrag gilt, mรผsst ihr je nach Projekt- bzw. Auftrags-Struktur noch weitere Anpassungen vornehmen. Auรerdem รผberschreibt die Deltagenerierung die zuletzt generierte Revision gleich zu Beginn. Falls ihr unter bestimmten Umstรคnden das Deployment nicht durchfรผhrt (z.B. abhรคngig von der Anzahl der Generierungsfehler), solltet ihr euch die #deltaGeneration.last_execution vor dem Aufruf der Deltagenerierung im Auftrag merken und sie in diesen Fรคllen wieder zurรผcksetzen. An die Variable kommt man per context.getVariable("#deltaGeneration.last_execution"). Falls ihr auch Auftrรคge fรผr sog. "historische Generierungen" habt, sind diese auch entsprechend anzupassen.
Ob das bei euch alles direkt so funktioniert, kann ich allerdings nicht sagen - es kann sein, dass ihr noch weitere Anpassungen vornehmen mรผsst abhรคngig davon, wie eure Auftrรคge aussehen. Also unbedingt vorher testen ๐
Viele Grรผรe
Michael
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Michael,
vielen Dank fรผr die schnelle Antwort!
Nach Neujahr werden wir auf jeden Fall versuchen deinen Vorschlag umzusetzen!
Dir schon mal ein schรถnes Weihnachtsfest
Liebe Grรผรe
Marcel
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Marcel,
benรถtigst Du noch weitere Hilfe oder haben Dir die Antworten von Michael bereits geholfen?
In diesem Fall wรคre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere
Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lรถsung
gefunden haben, wรคre es nett, wenn Du diese hier bereitstellst.
Viele Grรผรe
Nico
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Michael,
das mit der Auftragsvariabel hat klappt super geklappt!
Vielen Dank nochmal fรผr deinen Tipp!
Liebe Grรผรe
Marcel
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Die Variable "#deltaGeneration.last_execution" gibt es รผberging nun als Konstante:
DeltaGeneration.DELTA_GENERATION_LAST_EXECUTION
(in "de.espirit.firstspirit.access.schedule.DeltaGeneration")

