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?
fuente
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.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.Respuestas:
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.
fuente