Un detalle con un comando de AWS CLI

Tengo un script BASH en una instancia de SageMaker de AWS que descargan de un bucket arreglos Numpy representando los valores de una termografía. Para esto hago uso del subcomando sync de S3. Otro script se encargará de tomar aquellos archivos descargados para hacerlos pasar por una red neuronal convolucional que se encarga de identificar «ciertas zonas de interés.»

Se entiende entonces que es importante identificar aquellos archivos descargados (los nuevos que no han sido procesados) para evitar gastar tiempo y recursos de procesamiento innecesariamente. Por ello, cuando noté que ciertos arreglos eran descargados repetidamente, existiendo ya en el filesystem de la instancia, era algo que debía revisar. Sobre los archivos (sus metadatos) no encontré nada que explicara el problema; un bug no parecía ser pues al menos el comportamiento era consistente, es decir, no era aleatorio y sí repetitivo.

Revisando la salida a pantalla del comando AWS CLI, observaba algo como (donde bucket y path, son meros comodines por cuestiones de confidencialidad):

...
download: s3://bucket/5d48bac40275194013ef6f8b/2019-08-19/5d54735b12d56e6b55af0668_308614367_1566239517//file-name.npy to path/5d48bac40275194013ef6f8b/2019-08-19/5d54735b12d56e6b55af0668_308614367_1566239517/file-name.npy
...

tardé en notar esas dobles diagonales (resaltadas en rojo), en parte por la longitud de los nombres de las rutas y archivos, camuflada en parte también por su cercanía con ese «7» al final del nombre del directorio. Aunque consideré que era algo extraño porque ese script ya tenía tiempo usándolo sin notar algo así, supuse podría ser «un detalle» en el armado de los nombres o rutas que después podría revisar. Un error adicional era suponer que, al igual que en Unix, esto no tendría mayor problema (es decir un directorio de nombre nulo no es posible que exista y dos o más diagonales consecutivas equivales a una sola).


Sin embargo, resulta que en S3 sí hay una diferencia con esto último, ya que es posible tener un directorio con nombre nulo (ver imagen arriba). ¿Qué es lo que aquí pasaba? La suma de estas dos últimas cosas y algo más: los archivos se descargaban, en la instancia el directorio nulo se desechaba, y los archivos de este substituían a los del nivel inmediato superior (en este caso pero igual podían sólo haberse agregado, que hubiera ayudado a identificar el problema más rápidamente). Como la ruta nunca se recreaba, estos eran nuevamente descargados en el siguiente sync.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.