[SOLUCIONADO] Error al Autorizar un documento con adjuntos pesados.

Hola Comunidad! El inconveniente que estamos teniendo, es que al querer autorizar (cerrar) un documento que tiene alrededor de 16Mb en archivos adjuntos, el sistema aborta la autorización quedando el documento pendiente de autorización. (con un solo documento de 8Mb autoriza normalmente)

Al mirar los logs del container de docs.api me encuentro que el problema pareciera ser que se soluciona (no estoy seguro) incrementando el valor del memory_limit del php.ini, pero el inconveniente que tengo es que no puedo hacer esa modificación sea efectiva por estar el php.ini dentro del contenedor.

El log del error en el container docs.api es el siguiente:
Allowed memory size of 134217728 bytes exhausted (tried to allocate 22677248 bytes) in /usr/local/app/vendor/siu/rdi/RDILib/conectores/CMIS_ATOM/cmis_repository_wrapper.php on line 413

El valor del memory_limit actualmente es 128 Mb, lo modifico por un valor mayor, pero cuando reinicio el servidor, esa modificación no persiste…

Al documento lo recupero (lo vuelvo a estado borrador) siguiendo lo comentado en el siguiente post:
http://foro.comunidad.siu.edu.ar/index.php?topic=20359.msg90497

Pero sigo sin poder solucionar el problema (sea incrementando el memory_limit del php del docs.api, o sea en otro lado)

Hola Diego que tal!

Dejando de lado otras cuestiones, te respondo por lo puntual del contenedor.

El cambio supongo que lo hiciste personalizando el archivo php.ini adentro del contenedor en ejecución, no? En un ambiente de contenedores, con docker-swarm como orquestador, esto no funciona así. Los contenedores son stateless o sin estado. Es decir, al reiniciar, todo lo que no sea parte de la imagen se pierde porque en general se lanza una nueva instancia del contenedor.

Si quisieras que desde su creación te tome un valor distinto para memory_limit por ej, tendrías que hacer una de las dos opciones:

  • construir una nueva imagen, basandote en la original, personalizando el php.ini en cuestión
  • en el momento de correr el contenedor (ya sea con docker run … o dentro de una definición de un service con docker swarm) tendrías que sobreescribir el php.ini con uno externo.

Espero sea de utilidad.

Gracias Sergio! Con esa información pude solucionar el problema. Ahora se pueden cerrar (autorizar) documentos con adjuntos mas grandes.

Transcribo los pasos por si a alguien le pasa lo mismo con los adjuntos:

1) Me copié desde el container hacia el host, el archivo a modificar:

docker cp (container docs_api):/etc/php7/php.ini /(path_local)/php.ini

2) Modifiqué el valor del memory_limit en ese archivo
Para nuestros requerimientos este valor es suficiente (por ahora)

memory_limit = 1024M

3) Modifiqué el archivo [prod/arai/docs.yml] dentro de services: → api: →


	volumes:
	  - /(path_local)/php.ini:/etc/php7/php.ini

4) Bajé los contenedores del stack de docs


	docker stack rm docs
	docker ps -a | grep docs_ | awk '{print $1}'  | xargs docker stop

5) Volví a desplegar el stack de docs

	
	cd prod/arai
	docker stack deploy --with-registry-auth -c docs.yml docs

Bárbaro Diego.

Sólo un comentario, tengan en cuenta que “montar como volumen un archivo” no funciona si operan en más de un nodo SWARM (a priori, de acuerdo al esquema que mostras). La solución a esto sería:

  • transformar tu configuración a un “docker config” tal y como se hace con el archivo certificado.crt por ejemplo.
  • menos eficiente, pero funcional, que el volumen esté mapeado en un filesystem compartido…

Saludos y gracias por compartir tu solución!