Pergunta, problema

Gostaria de preservar o espaço em disco, como posso consolidar e compartilhar o armazenamento de arquivos de dados do CRX?

Nota: o mesmo método pode ser aplicado a instâncias do CQ5 WCM versão 5.2.1

Resposta, Resolução

Uma maneira de preservar o espaço em disco em seu ambiente é compartilhar o diretório do armazenamento de dados do CRX em um compartilhamento de rede entre várias instalações do CRX.

AVISO: esse processo exige que você mova o diretório do armazenamento de dados para uma unidade de rede compartilhada. Se você estiver movendo o diretório do armazenamento de dados de uma pasta local para um diretório de rede compartilhado, haverá uma perda considerável de desempenho. Considere isso antes de implementar este processo e pondere os benefícios.

Primeiro de tudo, o que é o armazenamento de dados?

O armazenamento de dados é usado pelo CRX para armazenar grandes valores binários. Normalmente, todos os dados de nó e propriedade são armazenados em um gerenciador de persistência, mas, para binários grandes, por exemplo, o tratamento especial pode melhorar o desempenho e reduzir o uso do disco.

Como combinar o armazenamento de dados entre várias instâncias do CRX

Considere um cenário em que você tem duas instâncias do CRX, A e B (não importa se são de criação ou de publicação). A está instalada em /opt/day/crxA e B está instalada em /opt/day/crxB. Em uma instalação padrão sem cluster do CRX, o armazenamento de dados é armazenado em <path to instance>/crx-quickstart/repository/shared/repository/datastore.

Observe que o caminho do diretório "compartilhado" pode ser diferente se você configurou um diretório "compartilhado" do cluster. O armazenamento de dados é armazenado em <shared path>/repository/datastore.

Instruções: copie e consolide/combine os arquivos dos armazenamentos de dados da instância A e da instância B, por exemplo (se A e B estão em dois servidores físicos diferentes e usam um compartilhamento de rede comum /mnt/nfsshare1):

no servidor A
%> cp -R /opt/day/crxA/crx-quickstart/repository/shared/repository/datastore/mnt/nfsshare1/combined-datastore

no servidor B
%> cp -R/opt/day/crxB/crx-quickstart/repository/shared/repository/datastore/mnt/nfsshare1/combined-datastore

Configure repository.xml para apontar para o novo caminho do armazenamento de dados para a instância A e B. Abra o repository.xml na instância A e altere o caminho compartilhado do armazenamento de dados (/opt/day/cq5A/crx-quickstart/server/runtime/0/crx/WEB-INF/repository.xml)

<DataStore class="org.apache.jackrabbit.core.data.FileDataStore"> <param name="path" value="/mnt/nfsshare1/combined-datastore"/> <param name="minRecordLength" value="4096"/> </DataStore>

Como executar a coleta de lixo do armazenamento de dados quando o armazenamento de dados é compartilhado por várias instâncias do CRX

AVISO: isso se aplica somente à versão CRX1.4.2 ou versões 1.4.1 com patch, já que a coleta de lixo do armazenamento de dados só funciona corretamente na versão 1.4.1 após a aplicação de um hotfix do CRX (entre em contato com o suporte para saber mais). Teste isso em um ambiente de desenvolvimento antes de implementar em produção.

Quando várias instâncias do CRX usam o mesmo armazenamento de dados: primeiro chame gc.scan() na instância A, depois em B e assim por diante. No final, chame gc.deleteUnused() na instância A:

Este é o código de inicialização:

import org.apache.jackrabbit.core.data.GarbageCollector; //... GarbageCollector gc; SessionImpl si = (SessionImpl)session; gc = si.createDataStoreGarbageCollector(); // opcional (se quiser implementar uma barra de progresso/resultado): gc.setScanEventListener(this);

Este é o pseudocódigo mostrando a ordem de como as varreduras da coleta de lixo devem ser executadas nas diferentes instâncias (este exemplo supõe um cluster de três instâncias: A, B e C):

gcA.scan(); gcB.scan(); gcC.scan(); gcA.stopScan(); gcA.deleteUnused(); gcB.stopScan(); gcC.stopScan();

Um método alternativo é:

  1. Anote o tempo atual = X
  2. Execute gc.scan() em cada repositório
  3. Exclua manualmente os arquivos com a data da última modificação anterior a X

Saiba mais aqui: http://wiki.apache.org/jackrabbit/DataStore#Running_Data_Store_Garbage_Collection_.28Jackrabbit_1.x.29

Versões afetadas

CRX 1.4.2.X

[1] http://wiki.apache.org/jackrabbit/DataStore