Translate

miércoles, 15 de febrero de 2012

Actualizando Alfresco

Muchas instalaciones de Alfresco de las que he visto son bastante estáticas, y quizás uno de los motivos principales es que si las cosas funcionan no se tocan. Otro de los motivos suele ser que hay desarrollos involucrados en la instalación que se deberian validar contra la nueva versión (aunque la experiencia me demuestra que desarrollos hechos para 2.0c han seguido funcionando en versiones 3.4d no está de más asegurarse).

Antes de nada nos deberemos plantear nuestros motivos para hacer actualizar Alfresco. ¿ Hay bugs en nuestra versión que queremos resolver ? (changelog de versiones 3.4.3 en adelante)  ¿ Queremos alguna funcionalidad nueva ? (release notes para community)

Una vez decidida la actualización es la hora de ver sobre que versiones deberemos pasar para llegar a la que queremos. Alfresco suele diferenciar entre versiones menores y mayores y siempre es recomendable pasar a la última versión menor antes de hacer un salto a una mayor aunque el diagrama para la versión 4.0 muestra actualizaciones directas desde 3.1 en adelante:
Una vez tenemos claro nuestro escenario conviene hacerse varias preguntas:
  • ¿ Mis logs estan libres de errores "desconocidos" ? Deberiamos ver que la instalación en funcionamiento no esta dando errores de forma continuada ya que la actualización puede agravar el problema si no lo tenemos controlado.
  • ¿ Tengo algún tipo de personalización que deberia probar? se incluyen modificaciones en apariencia, modelo de datos, desarrollos, ficheros AMP.
  • ¿ Deberia actualizar algún componente ? JDK, Servidor de aplicaciones, conector de base de datos... Intentaremos ir conforme el stack oficial para enterprise ya que son versiones testeadas. Tener muy en cuenta que desde las versiones Community 3.2 se dejó de soportar oficialmente Oracle y SQL Server aunque existen proyectos de la comunidad para darles el soporte.
  • ¿ Voy a disponer de una copia de mi instancia de Alfresco para realizar las copias ? El disponer de una copia con datos, aunque no estén actualizados nos puede ahorrar muchos dolores de cabeza y vueltas atrás en producción.
  • ¿ Mi usuario de base de datos tiene permisos para borrar y crear tablas ?
  • ¿ He tocado algo dentro del directorio de deploy ? Deberia mover toda mi configuración al directorio extension
  • ¿ Estoy en una versión 3.1 o anterior ? Deberé unificar toda mi configuración del fichero custom-repository.properties en el fichero alfresco-global.properties

Alfresco provee de un mecanismo sencillo de actualización que basicamente se centra un leer el nuevo war y parchear la base de datos a la nueva versión. Por este mismo mecanismo no se debe tocar nunca el contenido desplegado de Alfresco y se debe usar el directorio de extension que nos ayuda a tener toda la configuración centralizada en un directorio.

Lo ideal si tenemos tiempo y espacio sería tener una copia con datos y trabajar primero sobre esa ya que será el entorno más parecido al escenario final. Manos a la obra:

  1. Pararemos Alfresco y realizaremos una copia en frio (ver la entrada de Backup)
  2. Instalaremos la nueva versión de Alfresco en una nueva ubicación, con una base de datos límpia y con un nuevo repositorio (directorio alf_data). Yo suelo nombrar a las instalaciones segun la versión, por ejemplo teniendo la versión 3.3g en /opt/alfresco33g y la 4.0 en /opt/alfresco40, lo mismo aplica para las bases de datos
  3. Verificaremos que la instalación limpia funciona correctamente y la pararemos
  4. Revisaremos los ficheros de configuración anteriores y llevaremos la configuración a los de la nueva versión. No se deben reutilizar los ficheros porque pueden aparecer nuevos parámetros que quedarán sin configurar. Además también deberemos incluir en este punto todos los desarrollos y personalizaciones. Esta tarea se puede hacer de manera previa al proceso de actualización y así minizaremos el downtime. Si configuramos en este punto la base de datos db.url  y hibernate.default_schema (Oracle) y el repositorio de la versión anterior dir.root en el próximo reinicio se ejecutará la actualización. Si queremos hacer alguna prueba más dejar estos dos puntos para el final.
  5. Reiniciar alfresco y monitorizar el fichero log
Empezaremos a ver como Alfresco detecta la nueva versión y empieza a aplicar parches. Este proceso es bastante rápido, en mi portátil ha tardado menos de 3 minutos en arrancar (no he reindexado contenido). Tras la actualización el log muestra el siguiente mensaje indicando la versión original y la nueva.

2012-02-15 13:07:45,445 INFO [service.descriptor.DescriptorService] [main] Alfresco started (Community). Current version: 4.0.0 (4003) schema 5.025. Originally installed version: 3.3.0 (g 2860) schema 4.100.

Durante este proceso de actualización puede ser recomendable hacer una reindexación del repositorio estableciendo en alfresco-global.properties el parámetro

index.recovery.mode=FULL

NOTA: en este proceso se ha mantenido la indexación con lucene. Si queremos empezar a usar SOLR primero deberemos actualizar con lucene para que se ejecuten algunos scripts y una vez se haya actualizado se puede migrar a SOLR.

Información obtenida de:
http://wiki.alfresco.com/wiki/General_Upgrade_Process
http://docs.alfresco.com/4.0/index.jsp

11 comentarios:

  1. Gracias Raúl por aportar a este procedimiento vital.
    Comento que ayer hice un upgrade 3.4d a 4.0d, en frio. Dejé Lucene desactivado en 4.0d. Alf reindexó el repositorio en Solr (~ 70.000 docs) en 25 minutos.

    ResponderEliminar
  2. hola luis, cual es el procedimiento que seguiste, yo trate de hacer lo mismo y me tiro un error al momento de levantar

    Saludos

    Pedro

    ResponderEliminar
  3. Hola Pedro,

    haría falta ver el error para ver que puede haber fallado

    ResponderEliminar
  4. Hola Raul
    me puedes dar tu email. necesito una consultoria remota de alfresco

    Saludos
    lvillamar@gmail.com

    ResponderEliminar
  5. Hola, qué tal, tengo un problema:
    Estoy actualizando desde 3.2r a 4.0b.
    he seguido los pasos hasta el 4, pero donde tú mencionas que la nueva versión va a detectar que la base de datos es más antigua y la actualiza automáticamente, a mí simplemente hace caso omiso de eso y termina con un error porque no puede encontrar cierto campo en una tabla. Te comparto un pedacito del mensaje. Saludos.

    2013-01-03 14:31:50,924 ERROR [web.context.ContextLoader] [main] Context initialization failed
    org.alfresco.error.AlfrescoRuntimeException: 00030000 Workflow deployment failed
    at org.alfresco.repo.workflow.WorkflowDeployer.init(WorkflowDeployer.java:347)
    at org.alfresco.repo.workflow.WorkflowDeployer$1.doWork(WorkflowDeployer.java:465)
    at org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:519)
    at org.alfresco.repo.workflow.WorkflowDeployer.onBootstrap(WorkflowDeployer.java:461)

    ...

    org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
    Caused by: org.springframework.jdbc.BadSqlGrammarException:
    ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'node.node_deleted' in 'field list'
    ### The error may involve alfresco.node.select_NodeByNodeRef-Inline
    ### The error occurred while setting parameters
    ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'node.node_deleted' in 'field list'

    ResponderEliminar
    Respuestas
    1. Hola Edgar,

      Habria que repasar el log del primer arranque desde el principio y ver si efectivamente como dices 'pasa'. Si ocurre esto puede ser que la configuración no es correcta en algún punto. Revisa que el shared.loader no esté vacio http://wiki.alfresco.com/wiki/Install_Tomcat6

      Por lo pronto deberas recuperar la copia del backup de la bbdd y del alfresco y volver a intentarlo, por qué no con una 4.0d ?

      Eliminar
  6. puedes hacer un video de como hacer una actualizacion?

    ResponderEliminar
  7. Muy bueno el articulo.
    Yo actualice alfresco a la versión 4.0.d y si bien durante el proceso no tuve mayores inconvenientes tengo un problema con el sistema que utiliza este repositorio (es el único sistema que lo utiliza).
    Les dejo un estracto de log del error:

    2013-06-27 10:39:28,445 ERROR [STDERR] cl.exe.alfresco.client.support.AlfrescoAdapterException
    2013-06-27 10:39:28,446 ERROR [STDERR] at cl.exe.alfresco.client.AlfrescoAdapter.writeContentInSpace(AlfrescoAdapter.java:251)
    2013-06-27 10:39:28,446 ERROR [STDERR] at cl.exe.wfdoc.repositorio.ContentManagerService.storeContentBinary(ContentManagerService.java:55)
    2013-06-27 10:39:28,446 ERROR [STDERR] at cl.exe.wfdoc.repositorio.Repositorio.almacenarArchivo(Repositorio.java:279)
    2013-06-27 10:39:28,447 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    2013-06-27 10:39:28,447 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    2013-06-27 10:39:28,447 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    2013-06-27 10:39:28,447 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:616)

    ResponderEliminar
  8. Hola Tarawiel,

    Creo que falta mas información sobre la traza, te recomiendo que pongas la traza completa en los foros de Alfresco porque allí ,a parte de mi, te podrá contestar mas gente

    ResponderEliminar