Han sido algunos meses ocupados mientras trabajamos para fusionar Postgres-XL con la última y mejor versión de PostgreSQL. Postgres-XL es una bifurcación de código abierto de PostgreSQL que proporciona una plataforma escalable para OLTP y Business Intelligence. La versión actual de Postgres-XL se basa en PostgreSQL 9.2, por lo que carece de todas las mejoras realizadas en PostgreSQL durante los últimos tres años.
2ndQuadrant y otras empresas están trabajando para llevar la escalabilidad distribuida al núcleo de PostgreSQL, así como en la creación de herramientas y extensiones fuera del núcleo. Como parte de eso, Postgres-XL tiene una serie de funciones que nos gustaría traer de vuelta al núcleo de PostgreSQL, por lo que 2ndQuadrant ha asumido la tarea de actualizar la base de código de Postgres-XL a la última versión de PostgreSQL como primer paso. Después de más de 3 meses de trabajo, PostgreSQL 9.5 aún se encuentra en etapa alfa, por lo que queríamos brindar un informe de progreso sobre cómo avanza el trabajo. También necesito decir las palabras mágicas:este trabajo en curso en Postgres-XL es parte del proyecto AXLE, financiado por la Unión Europea bajo el acuerdo de subvención 318633.
Preparación para la Fusión
Dado que tanto PostgreSQL como Postgres-XL usan GIT como sistema de control de código fuente, hace que el proceso de combinación sea mucho más simple, ya que GIT proporciona muchas herramientas para ayudar en el proceso. Pero tan pronto como intentamos la fusión, enfrentamos el primer obstáculo.
Nos dimos cuenta de que el repositorio actual de Postgres-XL se basa en una versión anterior menor 9.2 de PostgreSQL. Eso significa que hubo confirmaciones y cambios en la rama maestra de Postgres-XL que nunca se realizaron en la rama maestra de PostgreSQL o tenían ID de confirmación diferentes. Así que la fusión con la rama maestra de PostgreSQL generó muchos más conflictos de los que hubiéramos esperado. Entonces, la primera tarea que debemos realizar fue reorganizar el repositorio de Postgres-XL 9.2 en un punto de confirmación posterior. Obviamente, esto requería pisar con cuidado, asegurándose de que nada se rompiera durante el proceso. Una vez que hicimos la reorganización básica, también fusionamos todas las correcciones de errores y mejoras de Postgres-XL, creamos una rama estable de Postgres-XL 9.2 y fusionamos la rama 9.2 con la última versión secundaria de PostgreSQL 9.2 disponible.
Desafíos enfrentados durante la fusión
La fusión real con la rama maestra de PostgreSQL tampoco fue una tarea fácil. Tenga en cuenta que saltamos 3 versiones principales de PostgreSQL, lo que casi representó 3 años de trabajo de desarrollo. Afortunadamente, git-mergetool es muy útil para fusiones a gran escala. Puede usar su editor favorito (vimdiff en nuestro caso) para ver bien los conflictos de fusión y resolverlos. Si bien algunos de los conflictos son sencillos y requieren ajustes menores, muchos requieren una lectura y comprensión cuidadosas del código. Si bien no es trivial admitir todas las funciones nuevas, tratamos de preservar tanto como sea posible y hemos tenido bastante éxito.
El otro gran desafío fue fusionar los cambios de documentación. Dado que el proyecto Postgres-XL había creado una copia de la documentación SGML existente, la fusión de GIT con la rama maestra no produjo ninguna actualización de la copia. Esta fusión manual requerida. Para garantizar que esto no sea necesario nuevamente en fusiones futuras, ahora realizamos los cambios en la documentación en el lugar.
¿Qué sigue?
Hay muchas cosas que deben completarse antes de que podamos lanzar Postgres-XL 9.5 al público en general:
- Mejore la cobertura de la prueba de regresión para Postgres-XL
- Corregir errores y agregar soporte para nuevas funciones
- Realice pruebas y ajustes de rendimiento sistemáticos
- Cree la rama Postgres-XL 9.5 y fusione con la última rama estable de PostgreSQL 9.5
Todavía no estamos listos para la revisión de Postgres-XL, pero esperamos que Postgres-XL 9.5 Beta esté listo casi al mismo tiempo que PostgreSQL 9.5 Beta.
Busque la próxima publicación de mi blog dentro de aproximadamente un mes para la próxima actualización.