Mon problème peut provenir de mon incompréhension avec la cohérence globale du stockage google, mais comme je n'ai pas rencontré ce problème jusqu'à récemment (mi-novembre) et maintenant il semble facilement reproductible, je voulait des éclaircissements. Le problème a commencé à se produire dans un morceau de code spark s'exécutant sur le moteur de calcul en utilisant bdutil mais je peux reproduire à partir de la ligne de commande avec gsutil.GCS - Cohérence globale avec suppression + renommer
Mon code est en train de supprimer un chemin de destination, puis de renommer immédiatement un chemin source comme chemin de destination. Avec la cohérence globale je m'attendrais puisque le chemin de destination n'existe plus, le src serait renommé à la destination, mais à la place le src est imbriqué dans la destination comme si la destination existe encore et ce n'est pas cohérent.
Le code Hadoop à reproduire ressemble:
fs.delete(new Path(dest), true)
fs.rename(new Path(src), new Path(dest))
ligne de commande Je reproduis avec:
gsutil -m rm -r gs://mybucket/dest
gsutil -m cp -r gs://mybucket/src gs://mybucket/dest
Si la raison est parce que les opérations de liste sont finalement cohérentes et la mise en œuvre de FileSystem est l'utilisation liste des opérations pour déterminer si la destination existe toujours, alors je comprends, et alors est-il une solution recommandée pour s'assurer que la destination n'existe plus avant de renommer?
Merci, Luc
Merci. Je pense que je vais redessiner le flux de données, donc je crée toujours un nouveau "répertoire" avec un horodatage dans le nom, plutôt que de tenter de remplacer un "répertoire" existant – lukeforehand