diff --git a/tensorflow/core/kernels/data/experimental/snapshot_dataset_op.cc b/tensorflow/core/kernels/data/experimental/snapshot_dataset_op.cc index 336c602dfca..d10bfe2881f 100644 --- a/tensorflow/core/kernels/data/experimental/snapshot_dataset_op.cc +++ b/tensorflow/core/kernels/data/experimental/snapshot_dataset_op.cc @@ -224,18 +224,19 @@ Status WriteMetadataFile(const string& hash_dir, string metadata_filename = absl::StrCat(hash_dir, "/", kSnapshotFilename); TF_RETURN_IF_ERROR(Env::Default()->RecursivelyCreateDir(hash_dir)); - Status exists = Env::Default()->FileExists(metadata_filename); - if (exists.ok()) { - TF_RETURN_IF_ERROR(Env::Default()->DeleteFile(metadata_filename)); - } + std::string tmp_filename = + absl::StrCat(metadata_filename, "-tmp-", random::New64()); std::unique_ptr file; - TF_RETURN_IF_ERROR(Env::Default()->NewWritableFile(metadata_filename, &file)); + TF_RETURN_IF_ERROR(Env::Default()->NewWritableFile(tmp_filename, &file)); auto writer = absl::make_unique(file.get()); TF_RETURN_IF_ERROR(writer->WriteRecord(metadata.SerializeAsString())); TF_RETURN_IF_ERROR(writer->Close()); + TF_RETURN_IF_ERROR( + Env::Default()->RenameFile(tmp_filename, metadata_filename)); + return Status::OK(); }