Questions & Answers

SOLVED
mscholz3
I'm new here

Vollgenierung vermeiden (Delta-Generierung

Jump to solution

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

0 Kudos
1 Solution

Accepted Solutions
mbergmann
Crownpeak employee

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

View solution in original post

0 Kudos
5 Replies
mbergmann
Crownpeak employee

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

0 Kudos

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 Smiley Happy

Liebe GrรผรŸe

Marcel

0 Kudos
NMc
Crownpeak employee
Crownpeak employee

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

0 Kudos

Hallo Michael,

das mit der Auftragsvariabel hat klappt super geklappt!

Vielen Dank nochmal fรผr deinen Tipp!

Liebe GrรผรŸe

Marcel

0 Kudos

Die Variable "#deltaGeneration.last_execution" gibt es รผberging nun als Konstante:

DeltaGeneration.DELTA_GENERATION_LAST_EXECUTION

(in "de.espirit.firstspirit.access.schedule.DeltaGeneration")

0 Kudos

Type a product name