Vauxoo / docker-odoo-image

Base docker image for instances
GNU General Public License v2.0
18 stars 29 forks source link

[odoo-shippable] Script de inicio custom para postgresql #114

Closed moylop260 closed 8 years ago

moylop260 commented 8 years ago

@LuisAlejandro dice:

Hola, buenos días.

Estoy tratando de entender el propósito de este script de inicio custom que colocamos en odoo-shippable.

https://github.com/Vauxoo/docker-odoo-image/blob/master/odoo-shippable/files/etc_initd_postgresql

Según entiendo es para evitar que dos clusters de diferentes versiones de postgresql corran al mismo tiempo. Vi algunos ejemplos en donde la instalación de dos versiones de postgresql fallaba si las modificaciones de ese script no estaban presentes, lo que me hace entender su importancia.

https://travis-ci.org/zenitraM/test-travis/builds/113662868#L195
https://travis-ci.org/mgaitan/preciosa#L195
https://travis-ci.org/rochoa/test-travis/builds/113438047#L151

Sin embargo, desde el punto de vista de la imagen es una mala práctica sobreescribir un script que provee un paquete de esa manera, por lo que estoy tratando de buscar una alternativa para lograr el mismo efecto de una manera más limpia.

Si lo que se quiere es que solo se levante el cluster de una sola version cada vez que se hace "service postgresql restart", entonces eso se puede lograr editando el archivo:

/etc/postgresql/<version>/<cluster>/start.conf

De cada version-cluster, colocar "manual" en los version-cluster que no queremos arrancar automaticamente, y colocar "auto" en el que querramos que arranque automaticamente con el inicio/reiunicio del servicio.

¿Que les parece?
moylop260 commented 8 years ago

@LuisAlejandro Es correcto, los objetivos aquí son:

Todo esto, con la finalidad de que, los comandos de los CI sean los más limpios posibles, como si estuviera solo una versión de postgresql instalada, pero pudiendo usar varias versiones, si no, tendríamos que cambiar muchos .travis.yml y algunos scripts de MQT.

moylop260 commented 8 years ago

@nhomar dice: Yo creo qeu podemos ya dejar PSQL 9.5 no más- Ese cambio según yo, fué temporal cuando nos migramos 9.3 - 9.5 No sé que opina Moy y Tulio?

Realmente no fue un cambio temporal, aplica para cualquier versión que se tenga en la imagen, hoy es 9.3->9.5 Mañana será 9.5->9.6 y tendremos el mismo problema. Esto fue copiado de la imagen base quay.io/travisci/travis-python Después de que reportaron los usuarios de t2d que tenían los mismos problemas de aquí:

https://travis-ci.org/zenitraM/test-travis/builds/113662868#L195 https://travis-ci.org/mgaitan/preciosa#L195 https://travis-ci.org/rochoa/test-travis/builds/113438047#L151

Por lo que sí sería bueno tener el control de este tipo de contingencias.

ruiztulio commented 8 years ago

Creo que deberíamos dejar las dos versiones por ahora, pues aún tenemos instancias con 9.3, los nuevos se etsán instalando con 9.5 de una vez.

:+1: @moylop260

La variable de entorno que estábamos usando para manejar la versión podría ser útil en este caso "desactiva todas menos ${PSQL_VERSION}" o "instala ${PSQL_VERSION} nada más"

Aunque creo que la primera de las dos opciones que puse es la más viable, ya que al momento de ejecutar los tests la imagen de shippable ya está construída.

nhomar commented 8 years ago

Tulio y Moy aqui son los bosses... soy un simple espectador, si creen se deben quedar las dos, creo que la base lógica de moy me hace mucho sentido, y creo que tulio la soporta.

Saludos.

PS: Eso hasta ahora no nos ha traido ningún problema ya que solo se usa en los CI en producción tenemos una sola (la usada en producción) cuando se arma otro cluster (que ha sucedido) este queda apagado, y los clusters se arman a mano, así que no creo que nos afecte en producción.

Espero te sirva Luis.

2016-05-10 12:45 GMT-05:00 Tulio Ruiz notifications@github.com:

Creo que deberíamos dejar las dos versiones por ahora, pues aún tenemos instancias con 9.3, los nuevos se etsán instalando con 9.5 de una vez.

[image: :+1:] @moylop260 https://github.com/moylop260

La variable de entorno https://github.com/Vauxoo/docker-odoo-image/blob/master/odoo-shippable/Dockerfile#L45 que estábamos usando para manejar la versión podría ser útil en este caso "desactiva todas menos ${PSQL_VERSION}" o "instala ${PSQL_VERSION} nada más"

Aunque creo que la primera de las dos opciones que puse es la más viable, ya que al momento de ejecutar los tests la imagen de shippable ya está construída.

— You are receiving this because you were mentioned. Reply to this email directly or view it on GitHub https://github.com/Vauxoo/docker-odoo-image/issues/114#issuecomment-218235116

Nhomar Hernandez CEO Vauxoo. Site: http://vauxoo.com Twitter: @nhomar Blog: http://nhomar.com Github User: https://github.com/nhomar Odoo Gold Partner Skype: nhomar00 (Envia mail previo no lo superviso siempre). HangOut: nhomar@vauxoo.com Móvil Venezuela: +58 4144110269 Móvil México: +52 1 4773933942

LuisAlejandro commented 8 years ago

Pregunto, ¿es aceptable el siguiente comportamiento?

1) Que la versión especificada en PSQL_VERSION sea la afectada por los comandos:

service postgresql [start|stop|restart]
/etc/init.d/postgresql [start|stop|restart]

2) Que para las demás versiones de PostgreSQL instaladas el método para iniciarlas o pararlas sea:

pg_ctlcluster [VERSION] [CLUSTER] [start|stop|restart]

P. ej.:

pg_ctlcluster 9.3 main start

Si este comportamiento es adecuado, entonces puedo remover el script de inicio custom. La solución sería editar el archivo /etc/postgresql/9.3/main/start.conf y colocar manual. De esta forma el script de inicio controlaría solo la versión 9.5, mientras que la 9.3 habría que manipularla manualmente con el comando provisto.

moylop260 commented 8 years ago

@LuisAlejandro

Check all points of my last https://github.com/Vauxoo/docker-odoo-image/issues/114#issuecomment-218176951

If you change a command to start/stop postgresql then you will need:

If really we need this change then we will need to add this changes in the roadmap.

LuisAlejandro commented 8 years ago

@moylop260

No, i wouldn't want to do that, it has no justification.

So, current behaviour is this one, right?

To start 9.5: PSQL_VERSION=9.5 service postgresql start

To start 9.3: PSQL_VERSION=9.3 service postgresql start

LuisAlejandro commented 8 years ago

I found a way to retain the same behavior:

Overwrite the get_versions function by appending a piece of code in the init.d-functions which is the one that defines the version(s) to start.

Less intrusive than overwriting the init script. What do you think?

moylop260 commented 8 years ago

Overwrite the get_versions function by appending a piece of code in the init.d-functions which is the one that defines the version(s) to start.

+1

Your tests cases are:

test case result
Start container with -e PSQL_VERSION=9.3
/etc/init.d/postgresql restart && psql template1 -c "select version();" | grep 9.3
Show the result 9.3
Start container with -e PSQL_VERSION=9.5
/etc/init.d/postgresql restart && psql template1 -c "select version();" | grep 9.5
Show the result 9.5
Start container with -e PSQL_VERSION=9.3
/etc/init.d/postgresql start && /etc/init.d/postgresql start 9.5
Show error refused because other version is running
Start container with -e PSQL_VERSION=9.3
/etc/init.d/postgresql start && /etc/init.d/postgresql stop
Stop the current version running
Start container with -e PSQL_VERSION=9.3
/etc/init.d/postgresql start 9.5 && /etc/init.d/postgresql stop
Stop the current version running

If you can add this test cases in a unitests should be cool!

LuisAlejandro commented 8 years ago

!!! Thanks

LuisAlejandro commented 8 years ago

I'm going to leave the unittests for #111, though.

luisg123v commented 6 years ago

@moylop260 I don't know if this worked, but it seems to not work anymore:

$ pg_lsclusters 
Ver Cluster Port Status Owner Data directory               Log file
9.3 main    5432 down   odoo  /var/lib/postgresql/9.3/main pg_log/postgresql.log
9.5 main    5432 down   odoo  /var/lib/postgresql/9.5/main pg_log/postgresql.log
9.6 main    5432 down   odoo  /var/lib/postgresql/9.6/main pg_log/postgresql.log
10  main    5432 down   odoo  /var/lib/postgresql/10/main  pg_log/postgresql.log
$ echo $PSQL_VERSION 
9.5
$ service  postgresql  start 
 * Starting PostgreSQL 9.3 database server                                                                    [ OK ]
$

Debugging a little, I noticed the value of the variable $PSQL_VERSION is not retrievable in the init scripts, neither in /etc/init.d/postgresql, nor /usr/share/postgresql-common/init.d-functions.

If I try to print the variable inside those scripts, nothing is printed, like if it was undefined.

luisg123v commented 6 years ago

I reported a new issue on https://github.com/Vauxoo/docker-odoo-image/issues/298, to address my last comment.