Converter um Folder do SAPL para BTreeFolder2

Como converter as pastas do SAPL de Folder para BTreeFolder2.

O SAPL da CMNH continha milhares de documentos no ZODB armazenados em pastas do tipo "Folder". Tais pastas do tipo "Folder" são ineficientes para armazenar grandes quantidades de itens, o que deixava o nosso SAPL muito lento: receber uma proposição, por exemplo, levava em torno de 10 minutos de espera. A solução implantada consistiu em converter as pastas do tipo "Folder" em pastas do tipo "BTreeFolder2", que não apresentaram o referido problema de ineficiência durante os testes.

http://listas.interlegis.gov.br/pipermail/gitec/2013-March/040680.html

https://pypi.python.org/pypi/Products.BTreeFolder2

Problemas

Esse procedimento não é capaz de tratar proposições em formato XML, somente proposições anexadas como arquivos. Não investiguei a fundo mas, provavelmente, o problema tem relação com mover um item do tipo SDE-Document com subitens e deixá-los órfãos temporariamente durante o procedimento de mover de uma pasta para outra.

Procedimento

Para converter as pastas do tipo "Folder" em pastas do tipo "BTreeFolder2":

  1. Atenção: esse procedimento praticamente duplica o tamanho da base de dados do SAPL no Zope (arquivo DocumentosSapl.fs). Assegure-se de ter espaço livre em disco suficiente antes de iniciar o procedimento:
    ls -lh /var/interlegis/SAPL-2.5/instances/sapl25/var/DocumentosSapl.fs
    df -h /var/interlegis/SAPL-2.5/instances/sapl25/var/DocumentosSapl.fs
    
  2. manter aberto um terminal para rodar comandos, preparado com as seguintes variáveis de ambiente. Esse terminal deve ficar aberto até o final do procedimento. Caso seja fechado, basta abrir e configurar novamente:
    export PYTHONPATH=/var/interlegis/SAPL-2.5/Zope-2.9/lib/python/
    export PATH=$PATH:/var/interlegis/SAPL-2.5/Zope-2.9/bin/
    
  3. entrar na ZMI: http://sapl:8080/manage
    1. criar nova pasta do tipo "Folder", com id = tmp, em sapl_documentos: http://sapl:8080/sapl/sapl_documentos/manage_main
    2. importar o arquivo pastas_btreefolder2.zexp para a pasta tmp criada na etapa anterior: http://sapl:8080/sapl/sapl_documentos/tmp/manage_main
      O arquivo pastas_btreefolder2.zexp contém as seguintes pastas do tipo "BTreeFolder2", vazias e com as permissões configuradas para funcionar com o SAPL: administrativo, ata_sessao, materia, norma_juridica, oradores, oradores_expediente, proposicao. Ao invés de importar o arquivo pastas_btreefolder2.zexp, pode-se criar manualmente as pastas, observando que sejam do tipo "BTreeFolder2" e aplicando as mesmas permissões das pastas originais de sapl_documentos.
    3. ir para a pasta sapl_documentos/tmp/pastas_btreefolder2, selecionar todas as pastas do tipo "BTreeFolder2" e acionar o botão "Cut": http://sapl:8080/sapl/sapl_documentos/tmp/pastas_btreefolder2/manage_main
    4. ir para a pasta sapl_documentos e acionar o botão "Paste". Isso criará pastas com o prefixo "copy_of_": http://sapl:8080/sapl/sapl_documentos/manage_main
    5. adicionar a permissão "manager" para o usuário "sapladm". Isso é necessário para rodar o script copiar.py em uma próxima etapa. http://sapl:8080/sapl/acl_users/manage_users?name=sapladm&submit=Edit
  4. desligar o SAPL:
    sudo /var/interlegis/SAPL-2.5/instances/sapl25/bin/shutdownsapl.sh
    
  5. rodar o script copiar.py para copiar os itens das pastas do tipo "Folder" para as pastas do tipo "BTreeFolder2":
    sudo -u zope /var/interlegis/SAPL-2.5/instances/sapl25/bin/zopectl run copiar.py > log
    
    Esse script pode demorar para rodar. Acompanhe o andamento através do arquivo log.
  6. conferir o resumo da execução da etapa anterior:
    grep INFO log
    
    [INFO] administrativo: 2013-05-03 08:37:53.885946 - 2013-05-03 08:38:01.969158 => 789 / 0:00:08.083212 
    [INFO] ata_sessao: 2013-05-03 08:38:01.969259 - 2013-05-03 08:38:05.333974 => 53 / 0:00:03.364715 
    [INFO] materia: 2013-05-03 08:38:05.334058 - 2013-05-03 08:47:22.017787 => 33222 / 0:09:16.683729 
    [INFO] norma_juridica: 2013-05-03 08:47:22.027399 - 2013-05-03 08:52:21.055374 => 7270 / 0:04:59.027975 
    [INFO] oradores: 2013-05-03 08:52:21.055476 - 2013-05-03 08:52:21.589781 => 11 / 0:00:00.534305 
    [INFO] oradores_expediente: 2013-05-03 08:52:21.589862 - 2013-05-03 08:52:21.615121 => 0 / 0:00:00.025259 
    [INFO] proposicao: 2013-05-03 08:52:21.615158 - 2013-05-03 08:58:07.775773 => 22104 / 0:05:46.160615
    
    Formato do log: [INFO] nome da pasta: hora de início - hora de fim => quantidade de documentos copiados / duração da operação de cópia
  7. ligar o SAPL:
    sudo /var/interlegis/SAPL-2.5/instances/sapl25/bin/startsapl.sh
    
  8. entrar na ZMI: http://sapl:8080/manage
    1. olhar as pastas com documentos importados. Não precisa fazer nada, apenas se familiarizar com elas. http://sapl:8080/sapl/sapl_documentos/manage_main
    2. remover a permissão "manager" do usuário "sapladm": http://sapl:8080/sapl/acl_users/manage_users?name=sapladm&submit=Edit
    3. na pasta sapl_documentos: http://sapl:8080/sapl/sapl_documentos/manage_main
      1. remover as pastas do tipo "Folder" antigas, elas foram substituídas pelas novas pastas do tipo "BTreeFolder2", com prefixo copy_of_
      2. renomear as pastas com prefixo copy_of_, retirando o prefixo copy_of_
      3. remover a pasta tmp
    4. fazer pack na base "documentos"
  9. criar um ZCatalog com id=Catalog em sapl/sapl_documentos/norma_juridica, e configurá-lo conforme http://colab.interlegis.leg.br/wiki/HOWTOTextIndexNG2
  10. criar um ZCatalog com id=Catalog em sapl/sapl_documentos/materia, mas não configurá-lo
Última modificação 7 anos atrás Última modificação em 20/05/2013 16:26:20

Anexos (2)

Download de todos os anexos como .zip

 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.