Problema

Dopo aver eseguito il cleanup delle revisioni offline (conosciuto anche come compattazione del tar offline) in AEM 6.3, la seguente eccezione può essere trovata nel log degli errori:

05.10.2017 16:45:20.437 *ERROR* [FelixStartLevel] org.apache.jackrabbit.oak-segment-tar [org.apache.jackrabbit.oak.segment.SegmentNodeStoreService(208)] The activate method has thrown an exception (java.lang.IllegalStateException: This builder does not exist: null)java.lang.IllegalStateException: This builder does not exist: null

L'istanza non si avvia, e l'esecuzione di un controllo del repository (strumento "oak-run check") non rileva questa corruzione. La riparazione non è possibile in quanto i dati sono stati cancellati dalla il cleanup delle revisioni offline.

Se la registrazione dei log è stata attivata durante il cleanup delle revisioni offline, fai attenzione al messaggio:

10:43:19.886 WARN [TarMK disk space check [/crx-quickstart/repository/segmentstore]] FileStore.java:701 Available disk space (14.6 GB) is too low, current repository size is approx. 59.4 GB

Se questo messaggio è seguito dal messaggio:

10:43:19.889 INFO [main] LoggingGCMonitor.java:45 TarMK GC #0: compaction succeeded in 2.034 min (122066 ms), after 0 cycles.

questo significa che l'errore si è verificato, il repository si è corrotto e deve essere ripristinato da un backup.

Se il messaggio invece legge:

11:01:27.312 WARN  [main] LoggingGCMonitor.java:50          TarMK GC #0: compaction cancelled: Not enough disk space.

questo significa che l'errore non si è verificato e il repository non è corrotto. (Il cleanup delle revisioni offline non è stato completato con successo in quanto non era disponibile abbastanza spazio su disco).

Ambiente

AEM 6.3 con Oak 1.6 (e relativa versione oak-run).

Versioni interessate

Oak 1.6.0, Oak 1.6.1, Oak 1.6.2, Oak 1.6.3, Oak 1.6.4, Oak 1.6.5, Oak 1.6.6, Oak 1.6.7

Non interessate

Oak 1.0.x, Oak 1.2.x, Oak 1.4.x, Oak 1.7.x, Oak 1.8.x e versioni successive. Il cleanup delle revisioni online non è influenzato da queste problematiche.

Causa

Il cleanup delle revisioni offline controlla lo spazio su disco disponibile durante la sua esecuzione.  Si annulla quando non è presente abbastanza spazio su disco.  Una condizione di errore non viene gestita correttamente da questo processo, causando una corruzione irrecuperabile e potenzialmente grave del repository.

Questo errore è tracciato in OAK-7050:

Il cleanup delle revisioni offline può danneggiare il repository in alcuni casi: quando il cleanup delle revisioni offline viene annullato da CancelCompactionSupplier, il valore di ritorno corrispondente non viene passato correttamente lungo la catena di chiamata, causando l'impostazione di uno stato principale compatto incompleto (anziché essere scartato).

La cancellazione viene attivata silenziosamente quando lo spazio su disco disponibile è inferiore al 25% della dimensione effettiva del repository.

Risoluzione

Come misura preventiva, assicurarsi che ci sia sempre spazio su disco sufficiente quando si esegue il cleanup delle revisioni offline con una versione di Oak interessata da questo problema.

Prima di iniziare la compattazione, deve esserci abbastanza spazio libero per immagazzinare il doppio della dimensione attuale del repository.  Durante l'esecuzione della compattazione, lo spazio su disco rimanente non deve mai scendere al di sotto del 25% della dimensione attuale del repository.

Nella documentazione ufficiale, è possibile trovare queste linee guida:


Quali sono i requisiti minimi di spazio su disco e di memoria heap quando si esegue il cleanup delle revisioni online?

Lo spazio su disco è costantemente monitorato durante il cleanup delle revisioni online. Se lo spazio su disco disponibile scende al di sotto di un valore critico, il processo verrà annullato. Il valore critico è pari al 25% dello spazio occupato dal repository sul disco corrente e non è configurabile.

Si raccomanda allocare uno spazio su disco almeno due o tre volte più grande della dimensione del repository, compresa la crescita stimata.


OAK-7050 è stato riparato nella versione 1.6.8 oak-run, la cui uscita è prevista per l'8 gennaio 2018.  Questa versionedi oak-run dovrebbe essere utilizzata su AEM 6.3 per l'esecuzione del cleanup delle revisioni offline.

Se hai la necessità di eseguire il cleanup delle revisioni offline prima del rilascio di Oak 1.6.8 e non puoi garantire di avere spazio su disco disponibile 2 volte superiore alla dimensione del repository, puoi scaricare una build anticipata qui.

Non c'è bisogno di aggiornare nulla sul lato AEM, dato che l'aggiornamento agisce solo sullo strumento oak-run

Nota:

Come raccomandazione, utilizza sempre la versione di oak-run che corrisponde alla versione di Oak nella rispettiva istanza AEM.

Per affrontare questo problema, si consiglia di:

  1. Aggiornare tutte le istanze a Oak 1.6.8 una volta rilasciata la corrispondente HF e da lì continuare ad utilizzare la versione corrispondente di oak-run.
  2. Fino a quando l'aggiornamento a Oak 1.6.8 non è completato, utilizza oak-run 1.6.8 (o oak-run-1.6.7-R1817912.jar dal link precedente fino al rilascio della versione 1.6.8) per la compattazione offline e utilizza la versione corrispondente di oak-run per tutti gli altri comandi.

Questo prodotto è concesso in licenza in base alla licenza di Attribuzione-Non commerciale-Condividi allo stesso modo 3.0 Unported di Creative Commons.  I post su Twitter™ e Facebook non sono coperti dai termini di Creative Commons.

Note legali   |   Informativa sulla privacy online