Allow overwrites during rename. This is required for doing atomic puts. #210
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
To implement atomic writes/puts, you need to write to a temporary file (non-atomic operation) and then rename the temporary file to the destination in a single (atomic) operation. Since rename does not currently support this (i.e. if the destination file already exists rename will fail and thus a delete and then rename is required, which is not atomic), added an option to pass the
renameoptions="overwrite"
to the WebHDFS rename API. This is received by this code here: https://github.com/apache/hadoop/blob/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/web/resources/NamenodeWebHdfsMethods.java#L749Which in turn calls: https://github.com/apache/hadoop/blob/trunk/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java#L545
Which is documented as being atomic.
Haven't updated or run any hdfs tests - this is tested and works though in my own code base.