Symptome

lredy bBeim Starten funktioniert das CRX-Repository wie erwartet. Allerdings wird jegliche Inhaltsänderung innerhalb von Lucene nicht indiziert. Im Fehlerprotokoll werden die Einträge aufgezeichnet:

INFO [org.apache.jackrabbit.core.RepositoryImpl] (WorkspaceJanitor) Beende Arbeitsbereich 'myworkspace', der seit 5064 ms inaktiv istINFO [org.apache.jackrabbit.core.RepositoryImpl] (WorkspaceJanitor) Fahre Arbeitsbereich 'myworkspace' herunter... INFO [org.apache.jackrabbit.core.RepositoryImpl] (WorkspaceJanitor) Der Arbeitsbereich 'myworkspace' wurde heruntergefahren FEHLER [org.apache.jackrabbit.core.RepositoryImpl] (ajp-10.2.0.101-12152-20) Arbeitsbereich 'myworkspace' kann nicht initialisiert werden

Ursache

Folgende Bedingungen müssen erfüllt sein, damit das Problem auftritt:

  1. Das Repository wird mit einem maxIdleTime konfiguriert
  2. Der betroffene Arbeitsbereich ist nicht der Standard-Arbeitsbereich
  3. Die initialisierung des Index dauert länger als maxIdleTime.
  4. Die CRX-Version ist 1.4.x

Der nicht standardmäßige Arbeitsbereich wird gestartet, wenn er zum ersten Mal aufgerufen wird (erste Anmeldung in diesem Arbeitsbereich). Der Standard-Arbeitsbereich wird bei der Startzeit des Repositorys gestartet. Nicht standardmäßige Arbeitsbereiche können nach einer konfigurierbaren Leerlaufzeit gelöscht (heruntergefahren) werden (z. B. bedeutet dies, dass nur System-/interne Sitzungen in diesem Arbeitsbereich angemeldet sind). Der Standardwert in CRX beträgt 5 Sekunden.

Einige Komponenten eines Arbeitsbereichs werden beim Start des Arbeitsbereichs sofort initialisiert, während andere bei Bedarf initialisiert werden. Das Repository legt eine Flagge für die Arbeitsbereichinstanz fest, nachdem die unmittelbar initialisierten Komponenten gestartet wurden. Der Hintergrund-Thread, der überprüft, ob ein Arbeitsbereich verworfen werden kann, prüftdie Flagge und die Zeit, zu der das letzte Mal auf den Arbeitsbereich zugegriffen wurde. Beim Start kann dies zu einem Problem werden, da der Index träge initialisiert wird. Wenn der Start des Index mehr Zeit in Anspruch nimmt als maxIdleTime, denkt der Hintergrund-Überprüfungthread, dass der Arbeitsbereich untätig ist und fährt ihn herunter, während die Indizierung noch immer startet. Diese Race-Bedingung wurde in CRX 2.0 behoben.

Lösung

Dies bedeutet, dass das Problem in CRX 2.0 behoben ist. Die Lösung bei CRX 1.4.x besteht entweder darin, (1) die maxIdleTime im Repository auf 0 (HINWEIS: der Standardwert in CRX 1.4.2 beträgt 5 Sekunden) ODER (2) den Standard-Arbeitsbereich in repository.xml auf 'myworkspace' (HINWEIS: der Standardwert in CRX 1.4.2 ist 'crx.default') festzulegen.

Der Effekt ist unabhängig davon, welche Option Sie wählen, derselbe – der myworkspace Arbeitsbereich wird nach einer bestimmten Leerlaufzeit nicht geschlossen.

Es gibt jedoch einen Unterschied, obwohl nur der Standard-Arbeitsbereich sofort beim Start des Repositorys initialisiert wird, werden alle anderen nur beim ersten Zugriff (erste Anmeldung beim Arbeitsbereich) initialisiert. Dies bedeutet auch, dass ein anfänglicher Index oder Re-Index nur beim ersten Zugriff für alle nicht standardmäßigen Arbeitsbereiche ausgelöst wird.

Der Index muss neu erstellt werden, um für alle nicht indizierten Knoten korrigiert zu werden, während das Problem auftritt. Die offiziell unterstützte und empfohlene Methode zum Beheben des Index ist, ihn neu zu erstellen.

Gilt für

CRX 1.4.x

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie