This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-4.0 by this push:
     new 9868f0c5f67 branch-4.0: [fix] remove useless const_cast and explain 
const_cast(3) #56441 (#57331)
9868f0c5f67 is described below

commit 9868f0c5f67b2c1948a449a526c9605424c6ffb6
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Mon Oct 27 09:26:00 2025 +0800

    branch-4.0: [fix] remove useless const_cast and explain const_cast(3) 
#56441 (#57331)
    
    Cherry-picked from #56441
    
    Co-authored-by: admiring_xm <[email protected]>
---
 be/src/olap/rowset/segment_v2/bloom_filter.h       |  2 +-
 .../segment_v2/inverted_index_fs_directory.cpp     | 22 +++++++++++-----------
 .../segment_v2/inverted_index_fs_directory.h       |  8 ++++----
 .../rowset/segment_v2/inverted_index_writer.cpp    |  4 ++--
 be/src/olap/rowset/segment_v2/ngram_bloom_filter.h |  4 +---
 be/src/olap/rowset/segment_v2/page_io.cpp          |  1 +
 be/src/olap/rowset/segment_v2/segment_writer.cpp   |  4 ++--
 be/src/olap/rowset/segment_v2/segment_writer.h     |  2 +-
 .../rowset/segment_v2/vertical_segment_writer.cpp  |  4 ++--
 .../rowset/segment_v2/vertical_segment_writer.h    |  2 +-
 .../rowset/segment_v2/block_bloom_filter_test.cpp  |  2 +-
 11 files changed, 27 insertions(+), 28 deletions(-)

diff --git a/be/src/olap/rowset/segment_v2/bloom_filter.h 
b/be/src/olap/rowset/segment_v2/bloom_filter.h
index ab33bd4a51b..d9df2e323fd 100644
--- a/be/src/olap/rowset/segment_v2/bloom_filter.h
+++ b/be/src/olap/rowset/segment_v2/bloom_filter.h
@@ -194,7 +194,7 @@ public:
     /// Bloom filters must have equal size and seed.
     virtual bool contains(const BloomFilter& bf_) const { return true; };
 
-    virtual char* data() const { return _data; }
+    virtual const char* data() const { return _data; }
 
     size_t num_bytes() const { return _num_bytes; }
 
diff --git a/be/src/olap/rowset/segment_v2/inverted_index_fs_directory.cpp 
b/be/src/olap/rowset/segment_v2/inverted_index_fs_directory.cpp
index f7412ca5a3e..936dda66e85 100644
--- a/be/src/olap/rowset/segment_v2/inverted_index_fs_directory.cpp
+++ b/be/src/olap/rowset/segment_v2/inverted_index_fs_directory.cpp
@@ -738,12 +738,12 @@ bool DorisRAMFSDirectory::list(std::vector<std::string>* 
names) const {
 
 bool DorisRAMFSDirectory::fileExists(const char* name) const {
     std::lock_guard<std::mutex> wlock(_this_lock);
-    return filesMap->exists((char*)name);
+    return filesMap->exists(name);
 }
 
 int64_t DorisRAMFSDirectory::fileModified(const char* name) const {
     std::lock_guard<std::mutex> wlock(_this_lock);
-    auto* f = filesMap->get((char*)name);
+    auto* f = filesMap->get(name);
     DBUG_EXECUTE_IF("DorisRAMFSDirectory::fileModified_file_not_found", { f = 
nullptr; })
     if (f == nullptr) {
         _CLTHROWA(CL_ERR_IO, fmt::format("NOT FOUND File {}.", name).c_str());
@@ -755,7 +755,7 @@ void DorisRAMFSDirectory::touchFile(const char* name) {
     lucene::store::RAMFile* file = nullptr;
     {
         std::lock_guard<std::mutex> wlock(_this_lock);
-        file = filesMap->get((char*)name);
+        file = filesMap->get(name);
         DBUG_EXECUTE_IF("DorisRAMFSDirectory::touchFile_file_not_found", { 
file = nullptr; })
         if (file == nullptr) {
             _CLTHROWA(CL_ERR_IO, fmt::format("NOT FOUND File {}.", 
name).c_str());
@@ -775,7 +775,7 @@ void DorisRAMFSDirectory::touchFile(const char* name) {
 
 int64_t DorisRAMFSDirectory::fileLength(const char* name) const {
     std::lock_guard<std::mutex> wlock(_this_lock);
-    auto* f = filesMap->get((char*)name);
+    auto* f = filesMap->get(name);
     DBUG_EXECUTE_IF("DorisRAMFSDirectory::fileLength_file_not_found", { f = 
nullptr; })
     if (f == nullptr) {
         _CLTHROWA(CL_ERR_IO, fmt::format("NOT FOUND File {}.", name).c_str());
@@ -786,7 +786,7 @@ int64_t DorisRAMFSDirectory::fileLength(const char* name) 
const {
 bool DorisRAMFSDirectory::openInput(const char* name, 
lucene::store::IndexInput*& ret,
                                     CLuceneError& error, int32_t bufferSize) {
     std::lock_guard<std::mutex> wlock(_this_lock);
-    auto* file = filesMap->get((char*)name);
+    auto* file = filesMap->get(name);
     DBUG_EXECUTE_IF("DorisRAMFSDirectory::openInput_file_not_found", { file = 
nullptr; })
     if (file == nullptr) {
         error.set(CL_ERR_IO,
@@ -805,7 +805,7 @@ void DorisRAMFSDirectory::close() {
 
 bool DorisRAMFSDirectory::doDeleteFile(const char* name) {
     std::lock_guard<std::mutex> wlock(_this_lock);
-    auto itr = filesMap->find((char*)name);
+    auto itr = filesMap->find(name);
     if (itr != filesMap->end()) {
         SCOPED_LOCK_MUTEX(this->THIS_LOCK);
         sizeInBytes -= itr->second->sizeInBytes;
@@ -821,15 +821,15 @@ bool DorisRAMFSDirectory::deleteDirectory() {
 
 void DorisRAMFSDirectory::renameFile(const char* from, const char* to) {
     std::lock_guard<std::mutex> wlock(_this_lock);
-    auto itr = filesMap->find((char*)from);
+    auto itr = filesMap->find(from);
 
     /* DSR:CL_BUG_LEAK:
     ** If a file named $to already existed, its old value was leaked.
     ** My inclination would be to prevent this implicit deletion with an
     ** exception, but it happens routinely in CLucene's internals (e.g., during
     ** IndexWriter.addIndexes with the file named 'segments'). */
-    if (filesMap->exists((char*)to)) {
-        auto itr1 = filesMap->find((char*)to);
+    if (filesMap->exists(to)) {
+        auto itr1 = filesMap->find(to);
         SCOPED_LOCK_MUTEX(this->THIS_LOCK);
         sizeInBytes -= itr1->second->sizeInBytes;
         filesMap->removeitr(itr1);
@@ -855,8 +855,8 @@ lucene::store::IndexOutput* 
DorisRAMFSDirectory::createOutput(const char* name)
     std::lock_guard<std::mutex> wlock(_this_lock);
 
     // get the actual pointer to the output name
-    char* n = nullptr;
-    auto itr = filesMap->find(const_cast<char*>(name));
+    const char* n = nullptr;
+    auto itr = filesMap->find(name);
     DBUG_EXECUTE_IF("DorisRAMFSDirectory::createOutput_itr_filesMap_end",
                     { itr = filesMap->end(); })
     if (itr != filesMap->end()) {
diff --git a/be/src/olap/rowset/segment_v2/inverted_index_fs_directory.h 
b/be/src/olap/rowset/segment_v2/inverted_index_fs_directory.h
index 7f799807a6e..ec606e52911 100644
--- a/be/src/olap/rowset/segment_v2/inverted_index_fs_directory.h
+++ b/be/src/olap/rowset/segment_v2/inverted_index_fs_directory.h
@@ -102,10 +102,10 @@ private:
 
 class CLUCENE_EXPORT DorisRAMFSDirectory : public DorisFSDirectory {
 protected:
-    using FileMap =
-            lucene::util::CLHashMap<char*, lucene::store::RAMFile*, 
lucene::util::Compare::Char,
-                                    lucene::util::Equals::Char, 
lucene::util::Deletor::acArray,
-                                    
lucene::util::Deletor::Object<lucene::store::RAMFile>>;
+    using FileMap = lucene::util::CLHashMap<const char*, 
lucene::store::RAMFile*,
+                                            lucene::util::Compare::Char, 
lucene::util::Equals::Char,
+                                            lucene::util::Deletor::cacArray,
+                                            
lucene::util::Deletor::Object<lucene::store::RAMFile>>;
 
     // unlike the java Hashtable, FileMap is not synchronized, and all access 
must be protected by a lock
     FileMap* filesMap;
diff --git a/be/src/olap/rowset/segment_v2/inverted_index_writer.cpp 
b/be/src/olap/rowset/segment_v2/inverted_index_writer.cpp
index 13aa3356f2d..1f5d8ab561d 100644
--- a/be/src/olap/rowset/segment_v2/inverted_index_writer.cpp
+++ b/be/src/olap/rowset/segment_v2/inverted_index_writer.cpp
@@ -542,7 +542,7 @@ Status 
InvertedIndexColumnWriter<field_type>::add_array_values(size_t field_size
             return Status::InternalError("field or index writer is null in 
inverted index writer");
         }
         for (int i = 0; i < count; ++i) {
-            auto* item_data_ptr = 
const_cast<CollectionValue*>(values)->mutable_data();
+            const auto* item_data_ptr = values->data();
             std::vector<std::string> strings;
 
             for (size_t j = 0; j < values->length(); ++j) {
@@ -561,7 +561,7 @@ Status 
InvertedIndexColumnWriter<field_type>::add_array_values(size_t field_size
         }
     } else if constexpr (field_is_numeric_type(field_type)) {
         for (int i = 0; i < count; ++i) {
-            auto* item_data_ptr = 
const_cast<CollectionValue*>(values)->mutable_data();
+            const auto* item_data_ptr = values->data();
 
             for (size_t j = 0; j < values->length(); ++j) {
                 const auto* p = reinterpret_cast<const 
CppType*>(item_data_ptr);
diff --git a/be/src/olap/rowset/segment_v2/ngram_bloom_filter.h 
b/be/src/olap/rowset/segment_v2/ngram_bloom_filter.h
index f2ba94c5629..f2be8feae98 100644
--- a/be/src/olap/rowset/segment_v2/ngram_bloom_filter.h
+++ b/be/src/olap/rowset/segment_v2/ngram_bloom_filter.h
@@ -41,9 +41,7 @@ public:
     void add_bytes(const char* data, size_t len) override;
     bool contains(const BloomFilter& bf_) const override;
     Status init(const char* buf, size_t size, HashStrategyPB strategy) 
override;
-    char* data() const override {
-        return reinterpret_cast<char*>(const_cast<uint64_t*>(filter.data()));
-    }
+    const char* data() const override { return reinterpret_cast<const 
char*>(filter.data()); }
     size_t size() const override { return _size; }
     void add_hash(uint64_t) override {}
     bool test_hash(uint64_t hash) const override { return true; }
diff --git a/be/src/olap/rowset/segment_v2/page_io.cpp 
b/be/src/olap/rowset/segment_v2/page_io.cpp
index b1874f565a2..2af8dd756f1 100644
--- a/be/src/olap/rowset/segment_v2/page_io.cpp
+++ b/be/src/olap/rowset/segment_v2/page_io.cpp
@@ -176,6 +176,7 @@ Status PageIO::read_and_decompress_page_(const 
PageReadOptions& opts, PageHandle
     if (opts.verify_checksum) {
         uint32_t expect = decode_fixed32_le((uint8_t*)page_slice.data + 
page_slice.size - 4);
         uint32_t actual = crc32c::Value(page_slice.data, page_slice.size - 4);
+        // here const_cast is used for testing.
         InjectionContext ctx = {&actual, const_cast<PageReadOptions*>(&opts)};
         (void)ctx;
         
TEST_INJECTION_POINT_CALLBACK("PageIO::read_and_decompress_page:crc_failure_inj",
 &ctx);
diff --git a/be/src/olap/rowset/segment_v2/segment_writer.cpp 
b/be/src/olap/rowset/segment_v2/segment_writer.cpp
index a3a11ff93aa..bd9d49116f8 100644
--- a/be/src/olap/rowset/segment_v2/segment_writer.cpp
+++ b/be/src/olap/rowset/segment_v2/segment_writer.cpp
@@ -375,7 +375,7 @@ void SegmentWriter::_maybe_invalid_row_cache(const 
std::string& key) {
     }
 }
 
-void SegmentWriter::_serialize_block_to_row_column(vectorized::Block& block) {
+void SegmentWriter::_serialize_block_to_row_column(const vectorized::Block& 
block) {
     if (block.rows() == 0) {
         return;
     }
@@ -697,7 +697,7 @@ Status SegmentWriter::append_block(const vectorized::Block* 
block, size_t row_po
     // or it's schema change write(since column data type maybe changed, so we 
should reubild)
     if (_opts.write_type == DataWriteType::TYPE_DIRECT ||
         _opts.write_type == DataWriteType::TYPE_SCHEMA_CHANGE) {
-        _serialize_block_to_row_column(*const_cast<vectorized::Block*>(block));
+        _serialize_block_to_row_column(*block);
     }
 
     _olap_data_convertor->set_source_content(block, row_pos, num_rows);
diff --git a/be/src/olap/rowset/segment_v2/segment_writer.h 
b/be/src/olap/rowset/segment_v2/segment_writer.h
index b5c99bbafa9..d7f58dfe5dd 100644
--- a/be/src/olap/rowset/segment_v2/segment_writer.h
+++ b/be/src/olap/rowset/segment_v2/segment_writer.h
@@ -192,7 +192,7 @@ private:
     void set_min_max_key(const Slice& key);
     void set_min_key(const Slice& key);
     void set_max_key(const Slice& key);
-    void _serialize_block_to_row_column(vectorized::Block& block);
+    void _serialize_block_to_row_column(const vectorized::Block& block);
     Status _generate_primary_key_index(
             const std::vector<const KeyCoder*>& primary_key_coders,
             const std::vector<vectorized::IOlapColumnDataAccessor*>& 
primary_key_columns,
diff --git a/be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp 
b/be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp
index faeab025760..a591bd199f8 100644
--- a/be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp
+++ b/be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp
@@ -355,7 +355,7 @@ void VerticalSegmentWriter::_maybe_invalid_row_cache(const 
std::string& key) con
     }
 }
 
-void VerticalSegmentWriter::_serialize_block_to_row_column(vectorized::Block& 
block) {
+void VerticalSegmentWriter::_serialize_block_to_row_column(const 
vectorized::Block& block) {
     if (block.rows() == 0) {
         return;
     }
@@ -941,7 +941,7 @@ Status VerticalSegmentWriter::write_batch() {
         _opts.write_type == DataWriteType::TYPE_SCHEMA_CHANGE) {
         for (auto& data : _batched_blocks) {
             // TODO: maybe we should pass range to this method
-            
_serialize_block_to_row_column(*const_cast<vectorized::Block*>(data.block));
+            _serialize_block_to_row_column(*data.block);
         }
     }
 
diff --git a/be/src/olap/rowset/segment_v2/vertical_segment_writer.h 
b/be/src/olap/rowset/segment_v2/vertical_segment_writer.h
index 294756788c4..bc2b770ce30 100644
--- a/be/src/olap/rowset/segment_v2/vertical_segment_writer.h
+++ b/be/src/olap/rowset/segment_v2/vertical_segment_writer.h
@@ -162,7 +162,7 @@ private:
     void _set_min_max_key(const Slice& key);
     void _set_min_key(const Slice& key);
     void _set_max_key(const Slice& key);
-    void _serialize_block_to_row_column(vectorized::Block& block);
+    void _serialize_block_to_row_column(const vectorized::Block& block);
     Status _probe_key_for_mow(std::string key, std::size_t segment_pos, bool 
have_input_seq_column,
                               bool have_delete_sign,
                               const std::vector<RowsetSharedPtr>& 
specified_rowsets,
diff --git a/be/test/olap/rowset/segment_v2/block_bloom_filter_test.cpp 
b/be/test/olap/rowset/segment_v2/block_bloom_filter_test.cpp
index e4db2828666..d1a27e4259b 100644
--- a/be/test/olap/rowset/segment_v2/block_bloom_filter_test.cpp
+++ b/be/test/olap/rowset/segment_v2/block_bloom_filter_test.cpp
@@ -87,7 +87,7 @@ TEST_F(BlockBloomFilterTest, Normal) {
     EXPECT_TRUE(bf2->test_bytes(nullptr, 1));
 
     bf->reset();
-    char* data = bf->data();
+    const char* data = bf->data();
     // data is reset to 0
     for (int i = 0; i < bf->size(); ++i) {
         EXPECT_EQ(*data, 0);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to