This is an automated email from the ASF dual-hosted git repository.
dataroaring pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 1c353098fb0 [enhance](FileWriter) Prevent multiple invocation to
FileWriter's close function (#34890)
1c353098fb0 is described below
commit 1c353098fb0f1b5544f89017b26a57d12822569f
Author: AlexYue <[email protected]>
AuthorDate: Wed May 15 17:20:29 2024 +0800
[enhance](FileWriter) Prevent multiple invocation to FileWriter's close
function (#34890)
---
be/src/io/cache/fs_file_cache_storage.cpp | 4 +++-
be/src/io/fs/benchmark/base_benchmark.h | 2 +-
be/src/olap/rowset/beta_rowset_writer.cpp | 5 +++--
be/src/olap/rowset/segcompaction.cpp | 2 +-
be/src/vec/core/block_spill_writer.h | 6 +++++-
be/src/vec/sink/writer/vfile_result_writer.cpp | 3 ++-
6 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/be/src/io/cache/fs_file_cache_storage.cpp
b/be/src/io/cache/fs_file_cache_storage.cpp
index 2b12abf48df..18c26fa05d4 100644
--- a/be/src/io/cache/fs_file_cache_storage.cpp
+++ b/be/src/io/cache/fs_file_cache_storage.cpp
@@ -144,7 +144,9 @@ Status FSFileCacheStorage::finalize(const FileCacheKey&
key) {
file_writer = std::move(iter->second);
_key_to_writer.erase(iter);
}
- RETURN_IF_ERROR(file_writer->close());
+ if (file_writer->state() != FileWriter::State::CLOSED) {
+ RETURN_IF_ERROR(file_writer->close());
+ }
std::string dir = get_path_in_local_cache(key.hash,
key.meta.expiration_time);
std::string true_file = get_path_in_local_cache(dir, key.offset,
key.meta.type);
return fs->rename(file_writer->path(), true_file);
diff --git a/be/src/io/fs/benchmark/base_benchmark.h
b/be/src/io/fs/benchmark/base_benchmark.h
index 8f263b80d93..4c75b3ff9e8 100644
--- a/be/src/io/fs/benchmark/base_benchmark.h
+++ b/be/src/io/fs/benchmark/base_benchmark.h
@@ -177,7 +177,7 @@ public:
}
remaining_size -= size;
}
- if (status.ok() && writer != nullptr) {
+ if (status.ok() && writer != nullptr && writer->state() !=
FileWriter::State::CLOSED) {
status = writer->close();
}
diff --git a/be/src/olap/rowset/beta_rowset_writer.cpp
b/be/src/olap/rowset/beta_rowset_writer.cpp
index f323441640d..5029a406b8a 100644
--- a/be/src/olap/rowset/beta_rowset_writer.cpp
+++ b/be/src/olap/rowset/beta_rowset_writer.cpp
@@ -854,7 +854,8 @@ Status
BetaRowsetWriter::_create_segment_writer_for_segcompaction(
file_writer.get(), _num_segcompacted, _context.tablet_schema,
_context.tablet,
_context.data_dir, _context.max_rows_per_segment, writer_options,
_context.mow_context,
_context.fs);
- if (_segcompaction_worker->get_file_writer() != nullptr) {
+ if (auto& seg_writer = _segcompaction_worker->get_file_writer();
+ seg_writer != nullptr && seg_writer->state() !=
io::FileWriter::State::CLOSED) {
RETURN_IF_ERROR(_segcompaction_worker->get_file_writer()->close());
}
_segcompaction_worker->get_file_writer().reset(file_writer.release());
@@ -921,7 +922,7 @@ Status BaseBetaRowsetWriter::add_segment(uint32_t
segment_id, const SegmentStati
if (_context.mow_context != nullptr) {
// ensure that the segment file writing is complete
auto* file_writer = _seg_files.get(segment_id);
- if (file_writer) {
+ if (file_writer && file_writer->state() !=
io::FileWriter::State::CLOSED) {
RETURN_IF_ERROR(file_writer->close());
}
RETURN_IF_ERROR(_generate_delete_bitmap(segment_id));
diff --git a/be/src/olap/rowset/segcompaction.cpp
b/be/src/olap/rowset/segcompaction.cpp
index be19c74cf9c..fd45956d362 100644
--- a/be/src/olap/rowset/segcompaction.cpp
+++ b/be/src/olap/rowset/segcompaction.cpp
@@ -281,7 +281,7 @@ Status
SegcompactionWorker::_do_compact_segments(SegCompactionCandidatesSharedPt
RETURN_IF_ERROR(
_writer->flush_segment_writer_for_segcompaction(&writer,
total_index_size, key_bounds));
- if (_file_writer != nullptr) {
+ if (_file_writer != nullptr && _file_writer->state() !=
io::FileWriter::State::CLOSED) {
RETURN_IF_ERROR(_file_writer->close());
}
diff --git a/be/src/vec/core/block_spill_writer.h
b/be/src/vec/core/block_spill_writer.h
index 4785258c156..86533a99966 100644
--- a/be/src/vec/core/block_spill_writer.h
+++ b/be/src/vec/core/block_spill_writer.h
@@ -47,7 +47,11 @@ public:
_init_profile();
}
- ~BlockSpillWriter() { static_cast<void>(close()); }
+ ~BlockSpillWriter() {
+ if (nullptr != file_writer_ && file_writer_->state() !=
io::FileWriter::State::CLOSED) {
+ std::ignore = file_writer_->close();
+ }
+ }
Status open();
diff --git a/be/src/vec/sink/writer/vfile_result_writer.cpp
b/be/src/vec/sink/writer/vfile_result_writer.cpp
index d8f6cfa5747..de916c4c2ea 100644
--- a/be/src/vec/sink/writer/vfile_result_writer.cpp
+++ b/be/src/vec/sink/writer/vfile_result_writer.cpp
@@ -32,6 +32,7 @@
#include "io/file_factory.h"
#include "io/fs/broker_file_system.h"
#include "io/fs/file_system.h"
+#include "io/fs/file_writer.h"
#include "io/fs/hdfs_file_system.h"
#include "io/fs/local_file_system.h"
#include "io/fs/s3_file_system.h"
@@ -239,7 +240,7 @@ Status VFileResultWriter::_close_file_writer(bool done) {
// and _current_written_bytes will less than
_vfile_writer->written_len()
COUNTER_UPDATE(_written_data_bytes, _vfile_writer->written_len());
_vfile_writer.reset(nullptr);
- } else if (_file_writer_impl) {
+ } else if (_file_writer_impl && _file_writer_impl->state() !=
io::FileWriter::State::CLOSED) {
RETURN_IF_ERROR(_file_writer_impl->close());
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]