Archivo del servidor FTP que se bloquea durante la carga

1

Una aplicación sondea regularmente un directorio para los archivos de entrada csv que llegan por FTP, por lo que hay un servidor FTP (actualmente Filezilla Server) ejecutándose en esa computadora.

El problema es que si un archivo está en medio de ser cargado cuando la aplicación decide sondear la ubicación, entonces el archivo está bloqueado y todo tipo de errores antiestéticos se lanzan sobre la aplicación, arruinando la experiencia del usuario.

Ahora, asumiendo que no puedo modificar la aplicación para esperar, ¿hay algo que se pueda hacer al respecto? p.ej. ¿El servidor mueve o renombra automáticamente el archivo una vez que se completa la carga? ¿O esperar a que se complete la carga antes de guardar el archivo? ¿O hay otros servidores que ofrecen soluciones como esta?

colmde
fuente
2
"mover o renombrar automáticamente el archivo una vez que se completa la carga": normalmente necesita que el cliente envíe los comandos adecuados y que el servidor los comprenda. FTP como protocolo soporta borrar, renombrar ; ver DELE, RNFR, RNTO. Pero esto se origina en el lado del cliente; Estás buscando una solución que funcione en el servidor. Por eso mi comentario no es una respuesta. Esto huele a Problema XY . Es bueno que hayas descrito una imagen más amplia. Tal vez usted considere este enfoque del lado del cliente.
Kamil Maciorowski
He visto esto antes con archivos grandes que son muchos conciertos donde algo en el servidor toca o mueve un archivo parcialmente cargado antes de que se complete la carga. Errores como " No se puede crear un archivo remoto "y" Copiando archivos al lado remoto falló ". Sé que los límites de almacenamiento / cuotas pueden causar esto también, pero he visto que esto ocurre cuando algo en el servidor se mete con el archivo parcialmente cargado.
Pimp Juice IT
Considere subir al servidor a través de una conexión WAN más lenta, etc. como filename.tmp o algo diferente, el proceso no se tocará y luego, una vez que se haya cargado por completo, ejecute el comando rename / mv para cambiar el nombre del archivo cargado al 100% al nombre de archivo que debe ser. Además, considere la posibilidad de cargar en una subcarpeta / tmp y luego, una vez cargada, vaya al directorio de carga raíz o lo que sea. La carga a través de la WAN más lenta generalmente toma más tiempo, por lo que quizás el comando de cambio de nombre o movimiento local sea mucho más rápido y evite este problema.
Pimp Juice IT
@KamilMaciorowski: pensé en hacerlo bien, pero ¿será el cambio de nombre instantáneo, en el sentido de que el archivo se desbloqueará tan pronto como se complete el cambio de nombre? Lo pregunto porque a veces la carga tarda varios segundos entre el archivo que se crea y el que se publica, incluso si se trata de un archivo muy pequeño, como de 30 a 40 bytes. También he editado la pregunta, para que su comentario sea más que una respuesta.
colmde
No lo sé, rara vez uso FTP. Si yo fuera tú solo lo probaría.
Kamil Maciorowski

Respuestas:

0

Recomendaría el enfoque donde su aplicación no sondea la ubicación que usó otro proceso (servidor FTP en este caso) para escribir. En su lugar, establezca el proceso en archivos rnfr / rnto (operación atómica) después de que lleguen a los lugares que su aplicación sondea ... Debe intentar tomar readlock en el archivo y, si falla, omítalo hasta el próximo intento. Otro enfoque es utilizar un archivo de marcador que llegará por última vez en el lote de archivos y señales para que la aplicación de sondeo pueda comenzar a procesar archivos CSV.

Mikhail Melamud
fuente