Skip to content

[Enhancement](recyclebin) Optimize lock granularity in CatalogRecycleBin - #3

Closed
morrySnow wants to merge 1033 commits into
masterfrom
recycle-lock
Closed

morrySnow wants to merge 1033 commits into
masterfrom
recycle-lock

Conversation

@morrySnow

Copy link
Copy Markdown
Owner

Problem

All methods in CatalogRecycleBin.java use synchronized (single monitor lock), creating extremely coarse lock granularity. When erasePartition() runs slowly with many partitions, other synchronized methods block waiting for the lock. Callers like recyclePartition() hold TABLE WRITE LOCK while waiting, causing cascading blocking that can bring down the entire Doris metadata service.

Solution

Two complementary optimizations:

1. Replace synchronized with ReentrantReadWriteLock

  • Lock-free (8 methods): Simple ConcurrentHashMap lookups (isRecyclePartition, getRecycleTimeById, etc.)
  • Read lock (4 methods): Read-only iterations (allTabletsInRecycledStatus, getInfo, write, etc.)
  • Write lock (11 methods): Map mutations (recycleDatabase/Table/Partition, recover*, clearAll)

2. Microbatch Erase Pattern (Critical)

Refactored all 12 erase methods to process items one at a time with lock release between items:

  • Inside write lock (per item): cleanup RPCs + map removal + edit log write
  • Release lock between items: other operations can proceed

This reduces lock hold time from O(N × T) (all items) to O(T) (one item) per acquisition.

Data Structure Changes

Changed 4 internal maps from HashMap to ConcurrentHashMap to enable lock-free reads.

Bug Fixes (found during self-review)

  1. NPE in getIdListToEraseByRecycleTime: Used getOrDefault to handle stale IDs that may be concurrently removed between snapshot and processing
  2. DdlException in cascade erase: Added try-catch in eraseDatabaseInstantly/eraseTableInstantly for partitions/tables concurrently erased by daemon

Testing

  • All 24 existing unit tests pass
  • Added 3 new concurrency tests:
    • testConcurrentReadsDoNotBlock — 10 concurrent reader threads
    • testConcurrentRecycleAndRead — writer + 5 readers simultaneously
    • testMicrobatchEraseReleasesLockBetweenItems — verifies recyclePartition succeeds during erase

deardeng and others added 30 commits February 14, 2026 10:51
…n cloud (apache#59539)

1. Starting from the getBackendId of the replica, implement a sliding
window approach (in TabletAccessStats.java) to count read and write
operations over the last hour. The accuracy of this count isn't
critical, as the aim is to indicate relative activity levels.

2. Display these statistics in the SHOW TABLETS FROM TABLE and SHOW
TABLET {tabletId} commands.
```
show tablet 1767773242851\G
***************************[ 1. row ]***************************
...
AccessCount1H  | 1107
LastAccessTime | 1767782384995
...
```

3. Integrate with the existing balancing strategy:
- For each scheduling operation, identify active databases, tables, and
partitions from the active tablets. Schedule operations first on the
most active databases, tables, and partitions.
- When selecting tablets from the source BE, modify the previous random
selection to prioritize non-active tablets for scheduling, keeping
active tablets as stable as possible on the source.
… is fully populated (apache#60749)

Related PR: apache#59990

Problem Summary:

Move setTransactionStatus(COMMITTED) to after idToTableCommitInfos
population in both commitTransaction methods. This prevents
PublishVersionDaemon from seeing COMMITTED status with empty commit
info, as it checks status without synchronized(transactionState) lock.
…pache#59747)

### What problem does this PR solve?

Issue Number: close #xxx

Related PR: apache#59394

Problem Summary:
The search DSL should only recognize uppercase `AND`, `OR`, `NOT` as
boolean operators in search lucene boolean mode. Previously, lowercase
`and`, `or`, `not` were also treated as operators, which does not
conform to the specification.

This PR makes the boolean operators case-sensitive:
- Only uppercase `AND`, `OR`, `NOT` are recognized as operators
- Lowercase `and`, `or`, `not` are now treated as regular search terms
- Using lowercase operators in DSL will result in a parse error

### Release note

Make search DSL boolean operators (AND/OR/NOT) case-sensitive in lucene
boolean mode.
apache#60758)

Make followed_by_shuffled_operator() virtual and override it in hash
join and set operators to correctly report shuffle requirements.
For multi-child operators (hash join, set operations), the method now
returns true if the operator itself is shuffled (and not colocated),
ensuring proper global shuffle behavior in local exchange.

  Changes:
  - Make followed_by_shuffled_operator() virtual in base OperatorX class
- Override in HashJoinBuildSinkOperatorX and HashJoinProbeOperatorX to
return is_shuffled_operator() && !is_colocated_operator()
- Override in PartitionedHashJoinProbeOperatorX and
PartitionedHashJoinSinkOperatorX to delegate to inner operator
- Override in SetProbeSinkOperatorX and SetSinkOperatorX to return
!_is_colocate

This fixes incorrect data distribution when shuffled join/set operators
are used in pipelines with local exchange.
…ception (apache#60754)

### What problem does this PR solve?

Issue Number: close apache#60746


Problem Summary:

### Release note

None

### Check List (For Author)

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [ ] Unit Test
    - [ ] Manual test (add detailed scripts or steps below)
    - [x] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
        - [ ] Previous test can cover this change.
        - [ ] No code files have been changed.
        - [x] Other reason <!-- Add your reason?  -->
        hard to reproduce

- Behavior changed:
    - [x] No.
    - [ ] Yes. <!-- Explain the behavior change -->

- Does this need documentation?
    - [x] No.
- [ ] Yes. <!-- Add document PR link here. eg:
apache/doris-website#1214 -->

### Check List (For Reviewer who merge this PR)

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
…rs (apache#60756)

### What problem does this PR solve?

Related apache#60768

Introduce a symmetric JNI writer mechanism that complements the existing
JNI scanner framework, enabling custom file writers to be implemented in
Java and invoked through JNI from the C++ query executor.

Key changes:
- Add VJniFormatTransformer for delegating writes to Java via JNI
- Extend TTVFTableSink with writer_type and writer_class fields
- Add JniWriter base class and LocalFileJniWriter reference
implementation
- Integrate with file_format_transformer factory routing logic

The implementation follows the same patterns as JniScanner for
consistency:
- Reuses class loading mechanism (Jni::Util::get_jni_scanner_class)
- Mirrors constructor signature: (int batchSize, Map<String,String>
params)
- Supports schema caching and performance instrumentation
### What problem does this PR solve?

Issue Number: close #xxx

Related PR: apache#60347 

Problem Summary:

Before:
```text
Doris> select now() day_hour;
ERROR 1105 (HY000): errCode = 2, detailMessage = 
extraneous input 'day_hour' expecting {<EOF>, ';'}(line 1, pos 13)
```

After:
```text
Doris> select now() day_hour;
+---------------------+
| day_hour            |
+---------------------+
| 2026-02-16 02:31:36 |
+---------------------+
```

### Release note

None

### Check List (For Author)

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [ ] Unit Test
    - [ ] Manual test (add detailed scripts or steps below)
    - [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
        - [ ] Previous test can cover this change.
        - [ ] No code files have been changed.
        - [ ] Other reason <!-- Add your reason?  -->

- Behavior changed:
    - [x] No.
    - [ ] Yes. <!-- Explain the behavior change -->

- Does this need documentation?
    - [x] No.
- [ ] Yes. <!-- Add document PR link here. eg:
apache/doris-website#1214 -->

### Check List (For Reviewer who merge this PR)

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
…sing and fix ES compatibility issues (apache#60654)

### What problem does this PR solve?

Problem Summary:

The `search()` function's DSL parser had multiple ES compatibility
issues and used a two-phase parsing approach (manual pre-parse + ANTLR)
that was error-prone. This PR refactors the parser and fixes several
bugs:

1. **SearchDslParser refactoring**: Consolidated from two-phase (manual
pre-parse + ANTLR) to single-phase ANTLR parsing. The ANTLR grammar now
handles all DSL syntax directly, eliminating the fragile manual
pre-parse layer. This fixes issues with operator precedence, grouping,
and edge cases.

2. **ANTLR grammar improvements**: Updated `SearchLexer.g4` and
`SearchParser.g4` to properly handle quoted phrases, field-qualified
expressions, prefix/wildcard/regexp patterns, range queries, and boolean
operators with correct precedence.

3. **minimum_should_match pipeline**: Added `default_operator` and
`minimum_should_match` fields to `TSearchParam` thrift, passing them
from FE `SearchPredicate` through to BE `function_search`. When
`minimum_should_match > 0`, uses `OccurBooleanQuery` for proper
Lucene-style boolean query semantics.

4. **Wildcard/Prefix/Regexp case-sensitivity**: Wildcard and PREFIX
patterns are now lowercased when the index has `parser +
lower_case=true` (matching ES query_string normalizer behavior). REGEXP
patterns are NOT lowercased (matching ES regex behavior where patterns
bypass analysis).

5. **MATCH_ALL_DOCS support**: Added `MATCH_ALL_DOCS` clause type for
standalone `*` queries and pure NOT query rewrites. Enhanced `AllQuery`
with deferred `max_doc` from `context.segment_num_rows` and nullable
field support via `NullableScorer`.

6. **BE fixes**:
- `regexp_weight._max_expansions`: Changed from 50 to 0 (unlimited) to
prevent PREFIX queries from missing documents
- `occur_boolean_weight`: Fixed swap→append bug when all SHOULD clauses
must match, preserving existing MUST scorers
- Variant subcolumn `index_properties` propagation for proper analyzer
selection
- `lower_case` default handling: inverted index `lower_case` defaults to
`"true"` when a parser is configured
…-based indexes (apache#60782)

### What problem does this PR solve?

Issue Number: close #xxx

Related PR: apache#60654

Problem Summary:

Follow-up fix for apache#60654 (SearchDslParser refactoring).

When FE resolves a variant subcolumn field pattern to a specific
analyzer-based index and sends its `index_properties` via
`TSearchFieldBinding`, the BE `FieldReaderResolver` was using
`EQUAL_QUERY` for TERM clauses. This caused `select_best_reader` to pick
the `STRING_TYPE` reader (untokenized index directory) instead of the
`FULLTEXT` reader, so tokenized search terms would never match.

**Root cause**: For variant subcolumns with analyzer-based indexes,
`EQUAL_QUERY` opens the wrong (untokenized) index directory. The query
type needs to be upgraded to `MATCH_ANY_QUERY` so `select_best_reader`
picks the correct FULLTEXT reader.

**Fix**: In `FieldReaderResolver::resolve()`, when the field is a
variant subcolumn and the FE-provided `index_properties` indicate an
analyzer-based index (`should_analyzer()` returns true), automatically
upgrade `EQUAL_QUERY` to `MATCH_ANY_QUERY` before calling
`select_best_reader`. Also reuse the `fb_it` iterator to avoid a
redundant map lookup.
…mode (apache#60784)

### What problem does this PR solve?

Issue Number: close 

Problem Summary:

When using `search('*', ...)` with multi-field options (`fields`
parameter), the query fails with:
```
only inverted index queries are supported
```

The root cause is in `SearchDslParser.java`: the multi-field parsing
methods (`parseDslMultiFieldMode` and `parseDslMultiFieldLuceneMode`)
collect field bindings by calling `collectFieldNames()` on the expanded
AST. When the query is `*` (match all), the AST node is `MATCH_ALL_DOCS`
which has no field set — by design it matches all documents regardless
of field. This caused `collectFieldNames` to return an empty set,
resulting in no field bindings. Without field bindings,
`RewriteSearchToSlots` couldn't create slot references, so the search
expression was never pushed down to the inverted index path, and BE fell
back to `execute_impl()` which returns the error.

**Fix**: After `collectFieldNames()`, if the result is empty, fall back
to using the original `fields` list as field bindings. This ensures the
push-down mechanism works for `MATCH_ALL_DOCS` queries.

**Reproducing queries** (from bug report):
```sql
select count(*) from wikipedia where search('*', '{"fields":["title", "content"], "type": "best_fields", "default_operator":"AND","mode":"lucene", "minimum_should_match": 0}');

select count(*) from wikipedia where search('*', '{"default_field": "title", "default_operator":"AND","mode":"lucene", "minimum_should_match": 0}');
```
…m2) (apache#60786)

### What problem does this PR solve?

Issue Number: close #N/A

Problem Summary:

The `search()` function did not support ES `query_string` field-grouped
syntax where all terms inside parentheses inherit the field prefix:

```sql
-- Previously failed with syntax error
SELECT * FROM t WHERE search('title:(rock OR jazz)', '{"fields":["title","content"]}');
```

ES semantics:
| Input | Expansion |
|-------|-----------|
| `title:(rock OR jazz)` | `(title:rock OR title:jazz)` |
| `title:(rock jazz)` with `default_operator:AND` | `(+title:rock
+title:jazz)` |
| `title:(rock OR jazz) AND music` with `fields:[title,content]` |
`(title:rock OR title:jazz) AND (title:music OR content:music)` |
| `title:("rock and roll" OR jazz)` | `(title:"rock and roll" OR
title:jazz)` |

### Root cause

The ANTLR grammar `SearchParser.g4` defined `fieldQuery : fieldPath
COLON searchValue` where `searchValue` only accepts leaf values (TERM,
QUOTED, etc.), not a parenthesized sub-clause. So `title:(` caused a
syntax error.

### Solution

**Grammar** (`SearchParser.g4`):
- Add `fieldGroupQuery : fieldPath COLON LPAREN clause RPAREN` rule
- Add it as alternative in `atomClause` before `fieldQuery`

**Visitor** (`SearchDslParser.java`):
- Add `markExplicitFieldRecursive()` helper — marks all leaf nodes in a
group as `explicitField=true` to prevent `MultiFieldExpander` from
re-expanding them across unintended fields
- Modify `visitBareQuery()` in both `QsAstBuilder` and
`QsLuceneModeAstBuilder` to use `currentFieldName` as field group
context when set
- Add `visitFieldGroupQuery()` to both AST builders: sets field context,
visits inner clause, marks all leaves explicit
- Update `visitAtomClause()` and `collectTermsFromNotClause()` to handle
…pache#60540)

### What problem does this PR solve?
Problem Summary:

support write iceberg table with sort-order, the write data have been
local sorted, and have add lower/upper_bounds metadata. so the iceberg
plan could use it to prune datafile.
**Notes**: this is only a local sort, not global sort. so if you are
more parallel about iceberg writer, you many see overlapping of
lower/upper_bounds between files.
if you need a global sort, maybe could add order by cluster in the
insert SQL.

you could create table, and then alter table eg:
```
CREATE TABLE test_table2 (
    id INT,
    name STRING,
    score DOUBLE,
    create_time datetime
)
ORDER BY (
    id ASC NULLS FIRST,           
    score DESC NULLS LAST)         
PROPERTIES (
  'write-format'='ORC'
); 
```
…must be a constant. (apache#60643)

The implementation of width_bucket requires the fourth argument to be
constant but did not enforce this; a regular column can be passed in,
however width_bucket will only use the first row.
before
```sql
mysql> SELECT k1, v1, v2, v3, width_bucket(v1, date('2023-11-18'), date('2027-11-18'), v4) AS w FROM width_bucket_test ORDER BY k1;
+------+------------+-----------+--------+------+
| k1   | v1         | v2        | v3     | w    |
+------+------------+-----------+--------+------+
|    1 | 2022-11-18 |    290000 | 290000 |    0 |
|    2 | 2023-11-18 |    320000 | 320000 |    1 |
|    3 | 2024-11-18 | 399999.99 | 399999 |    1 |
|    4 | 2025-11-18 |    400000 | 400000 |    1 |
|    5 | 2026-11-18 |    470000 | 470000 |    1 |
|    6 | 2027-11-18 |    510000 | 510000 |    2 |
|    7 | 2028-11-18 |    610000 | 610000 |    2 |
|    8 | NULL       |      NULL |   NULL | NULL |
+------+------------+-----------+--------+------+
```
now
```sql
mysql>  SELECT k1, v1, v2, v3, width_bucket(v1, date('2023-11-18'), date('2027-11-18'), v4) AS w FROM width_bucket_test ORDER BY k1;
ERROR 1105 (HY000): errCode = 2, detailMessage = The fourth argument of WidthBucket must be a constant.
```
…ay_map are used together. (apache#60693)

array_map constructs a temporary block but incorrectly passed the
selector.
```
 4# 0x000056376DFC5EC5 in /home/work/unlimit_teamcity/TeamCity/Agents/20260211180011agent_172.17.0.220_1/work/60183217f6ee2a9c/output/be/lib/doris_be
 5# 0x000056376DFB777A in /home/work/unlimit_teamcity/TeamCity/Agents/20260211180011agent_172.17.0.220_1/work/60183217f6ee2a9c/output/be/lib/doris_be
 6# google::LogMessage::SendToLog() in /home/work/unlimit_teamcity/TeamCity/Agents/20260211180011agent_172.17.0.220_1/work/60183217f6ee2a9c/output/be/lib/doris_be
 7# google::LogMessage::Flush() in /home/work/unlimit_teamcity/TeamCity/Agents/20260211180011agent_172.17.0.220_1/work/60183217f6ee2a9c/output/be/lib/doris_be
 8# google::LogMessageFatal::~LogMessageFatal() in /home/work/unlimit_teamcity/TeamCity/Agents/20260211180011agent_172.17.0.220_1/work/60183217f6ee2a9c/output/be/lib/doris_be
 9# doris::vectorized::VExpr::filter_column_with_selector(doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn> const&, doris::vectorized::PODArray<unsigned int, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul> const*, unsigned long) at ../src/vec/exprs/vexpr.h:269
10# doris::vectorized::VSlotRef::execute_column(doris::vectorized::VExprContext*, doris::vectorized::Block const*, doris::vectorized::PODArray<unsigned int, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul>*, unsigned long, doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn>&) const at /root/doris/be/build_ASAN/../src/vec/exprs/vslot_ref.cpp:96
11# doris::vectorized::VCastExpr::execute_column(doris::vectorized::VExprContext*, doris::vectorized::Block const*, doris::vectorized::PODArray<unsigned int, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul>*, unsigned long, doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn>&) const at /root/doris/be/build_ASAN/../src/vec/exprs/vcast_expr.cpp:117
12# doris::vectorized::VectorizedFnCall::_do_execute(doris::vectorized::VExprContext*, doris::vectorized::Block const*, doris::vectorized::PODArray<unsigned int, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul>*, unsigned long, doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn>&, doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn>*) const at /root/doris/be/build_ASAN/../src/vec/exprs/vectorized_fn_call.cpp:242
13# doris::vectorized::VectorizedFnCall::execute_column(doris::vectorized::VExprContext*, doris::vectorized::Block const*, doris::vectorized::PODArray<unsigned int, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul>*, unsigned long, doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn>&) const at /root/doris/be/build_ASAN/../src/vec/exprs/vectorized_fn_call.cpp:302
14# doris::vectorized::VectorizedFnCall::_do_execute(doris::vectorized::VExprContext*, doris::vectorized::Block const*, doris::vectorized::PODArray<unsigned int, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul>*, unsigned long, doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn>&, doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn>*) const at /root/doris/be/build_ASAN/../src/vec/exprs/vectorized_fn_call.cpp:242
15# doris::vectorized::VectorizedFnCall::execute_column(doris::vectorized::VExprContext*, doris::vectorized::Block const*, doris::vectorized::PODArray<unsigned int, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul>*, unsigned long, doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn>&) const at /root/doris/be/build_ASAN/../src/vec/exprs/vectorized_fn_call.cpp:302
16# doris::vectorized::VLambdaFunctionExpr::execute_column(doris::vectorized::VExprContext*, doris::vectorized::Block const*, doris::vectorized::PODArray<unsigned int, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul>*, unsigned long, doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn>&) const at ../src/vec/exprs/vlambda_function_expr.h:48
17# doris::vectorized::ArrayMapFunction::execute(doris::vectorized::VExprContext*, doris::vectorized::Block const*, doris::vectorized::PODArray<unsigned int, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul>*, unsigned long, doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn>&, std::shared_ptr<doris::vectorized::IDataType const> const&, std::vector<std::shared_ptr<doris::vectorized::VExpr>, std::allocator<std::shared_ptr<doris::vectorized::VExpr> > > const&) const at /root/doris/be/build_ASAN/../src/vec/exprs/lambda_function/varray_map_function.cpp:288
18# doris::vectorized::VLambdaFunctionCallExpr::execute_column(doris::vectorized::VExprContext*, doris::vectorized::Block const*, doris::vectorized::PODArray<unsigned int, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul>*, unsigned long, doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn>&) const at ../src/vec/exprs/vlambda_function_call_expr.h:69
19# doris::vectorized::VectorizedFnCall::_do_execute(doris::vectorized::VExprContext*, doris::vectorized::Block const*, doris::vectorized::PODArray<unsigned int, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul>*, unsigned long, doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn>&, doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn>*) const at /root/doris/be/build_ASAN/../src/vec/exprs/vectorized_fn_call.cpp:242
20# doris::vectorized::VectorizedFnCall::execute_column(doris::vectorized::VExprContext*, doris::vectorized::Block const*, doris::vectorized::PODArray<unsigned int, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul>*, unsigned long, doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn>&) const at /root/doris/be/build_ASAN/../src/vec/exprs/vectorized_fn_call.cpp:302
21# doris::vectorized::VectorizedFnCall::_do_execute(doris::vectorized::VExprContext*, doris::vectorized::Block const*, doris::vectorized::PODArray<unsigned int, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul>*, unsigned long, doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn>&, doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn>*) const at /root/doris/be/build_ASAN/../src/vec/exprs/vectorized_fn_call.cpp:242
22# doris::vectorized::VectorizedFnCall::execute_column(doris::vectorized::VExprContext*, doris::vectorized::Block const*, doris::vectorized::PODArray<unsigned int, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul>*, unsigned long, doris::COW<doris::vectorized::IColumn>::immutable_ptr<doris::vectorized::IColumn>&) const at /root/doris/be/build_ASAN/../src/vec/exprs/vectorized_fn_call.cpp:302
23# doris::vectorized::VExprContext::short_circuit_execute_conjuncts(std::vector<std::shared_ptr<doris::vectorized::VExprContext>, std::allocator<std::shared_ptr<doris::vectorized::VExprContext> > > const&, bool, doris::vectorized::Block const*, doris::vectorized::PODArray<unsigned char, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul>*, bool*) at /root/doris/be/build_ASAN/../src/vec/exprs/vexpr_context.cpp:265
24# doris::vectorized::VExprContext::execute_conjuncts(std::vector<std::shared_ptr<doris::vectorized::VExprContext>, std::allocator<std::shared_ptr<doris::vectorized::VExprContext> > > const&, std::vector<doris::vectorized::PODArray<unsigned char, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul>*, std::allocator<doris::vectorized::PODArray<unsigned char, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul>*> > const*, bool, doris::vectorized::Block const*, doris::vectorized::PODArray<unsigned char, 4096ul, doris::Allocator<false, false, false, doris::DefaultMemoryAllocator, false>, 16ul, 15ul>*, bool*) in /home/work/unlimit_teamcity/TeamCity/Agents/20260211180011agent_172.17.0.220_1/work/60183217f6ee2a9c/output/be/lib/doris_be
25# doris::vectorized::VExprContext::execute_conjuncts_and_filter_block(std::vector<std::shared_ptr<doris::vectorized::VExprContext>, std::allocator<std::shared_ptr<doris::vectorized::VExprContext> > > const&, doris::vectorized::Block*, std::vector<unsigned int, std::allocator<unsigned int> >&, int) at /root/doris/be/build_ASAN/../src/vec/exprs/vexpr_context.cpp:410
26# doris::vectorized::VExprContext::filter_block(std::vector<std::shared_ptr<doris::vectorized::VExprContext>, std::allocator<std::shared_ptr<doris::vectorized::VExprContext> > > const&, doris::vectorized::Block*, unsigned long) at /root/doris/be/build_ASAN/../src/vec/exprs/vexpr_context.cpp:217
27# doris::vectorized::Scanner::_filter_output_block(doris::vectorized::Block*) at /root/doris/be/build_ASAN/../src/vec/exec/scan/scanner.cpp:176
28# doris::vectorized::Scanner::get_block(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /root/doris/be/build_ASAN/../src/vec/exec/scan/scanner.cpp:153
29# doris::vectorized::Scanner::get_block_after_projects(doris::RuntimeState*, doris::vectorized::Block*, bool*) in /home/work/unlimit_teamcity/TeamCity/Agents/20260211180011agent_172.17.0.220_1/work/60183217f6ee2a9c/output/be/lib/doris_be
30# doris::vectorized::ScannerScheduler::_scanner_scan(std::shared_ptr<doris::vectorized::ScannerContext>, std::shared_ptr<doris::vectorized::ScanTask>) at /root/doris/be/build_ASAN/../src/vec/exec/scan/scanner_scheduler.cpp:177
31# std::_Function_handler<bool (), doris::vectorized::ScannerScheduler::submit(std::shared_ptr<doris::vectorized::ScannerContext>, std::shared_ptr<doris::vectorized::ScanTask>)::$_0::operator()() const::{lambda()#1}>::_M_invoke(std::_Any_data const&) at /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_function.h:292
32# doris::vectorized::ScannerSplitRunner::process_for(std::chrono::duration<long, std::ratio<1l, 1000000000l> >) at /root/doris/be/build_ASAN/../src/vec/exec/scan/scanner_scheduler.cpp:415
33# doris::vectorized::PrioritizedSplitRunner::process() in /home/work/unlimit_teamcity/TeamCity/Agents/20260211180011agent_172.17.0.220_1/work/60183217f6ee2a9c/output/be/lib/doris_be
34# doris::vectorized::TimeSharingTaskExecutor::_dispatch_thread() at /root/doris/be/build_ASAN/../src/vec/exec/executor/time_sharing/time_sharing_task_executor.cpp:568
35# doris::Thread::supervise_thread(void*) at /root/doris/be/build_ASAN/../src/util/thread.cpp:461
36# asan_thread_start(void*) in /home/work/unlimit_teamcity/TeamCity/Agents/20260211180011agent_172.17.0.220_1/work/60183217f6ee2a9c/output/be/lib/doris_be
37# start_thread at /build/glibc-SzIz7B/glibc-2.31/nptl/pthread_create.c:478
38# __clone at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97
```
…60764)

Refactor require_bucket_distribution to be propagated through the plan
tree instead of being accumulated as a class member variable.

  Problem:
The _require_bucket_distribution flag was accumulated globally across
the entire plan tree, which caused incorrect partition expression
selection for BUCKET_HASH_SHUFFLE in branches that shouldn't require
bucket distribution.

  Solution:
- Remove _require_bucket_distribution member variable from
PipelineFragmentContext
- Add require_bucket_distribution parameter to _create_tree_helper() and
_create_operator()
- Compute current_require_bucket_distribution per-subtree based on
whether the current operator is colocated and uses hash exchange
- Simplify _build_operators_for_set_operation_node() by removing
unnecessary parameters

This ensures bucket distribution requirements are correctly propagated
down each branch of the plan tree independently, similar to how
followed_by_shuffled_operator is handled.
…ent cluster (apache#60652)

Fix:
- Add cluster membership check in getCachedBackend() to invalidate
cached backends that no longer belong to the expected cluster, which can
happen during auto-scaling.
…ache#60522)

When running FE in console mode (start_fe.sh --console), the fe.out log
file was not generated because stdout/stderr were not redirected to the
log file.

The root cause is that the log4j console appender was configured with
target="SYSTEM_OUT", which sends log4j logs to stdout. This makes it
impossible to separate log4j logs from JVM stdout output at the shell
level.

Fix:
1. Change log4j console appender target from SYSTEM_OUT to SYSTEM_ERR in
Log4jConfig.java, so that log4j logs go to stderr (displayed on
terminal) instead of stdout. This also matches the env var name
DORIS_LOG_TO_STDERR.
2. Redirect stdout to fe.out in start_fe.sh console mode, consistent
with daemon mode behavior. The fe.out file now only contains JVM native
output, not log4j formatted logs.
…new_union_iterator (apache#60772)

This PR ensures merge/union iterators use an explicit output schema
projection and copy only the requested columns, preventing column count
mismatches when delete-predicate columns are read in addition to return
columns.

BetaRowsetReader now builds an `output_schema` from return_columns and
passes it to merge/union iterators, VMergeIteratorContext copies using
the output schema (not the incorrect _iter->schema())

Consider the following table:

```sql
CREATE TABLE tbl (
  k INT NOT NULL,
  v1 INT NOT NULL,
  v2 INT NOT NULL
) DUPLICATE KEY(k) ...;
```

And a delete predicate applied to a non-key column:

```sql
DELETE FROM tbl WHERE v1 = 1;
```

When executing ORDER BY k LIMIT n, Doris has a Top-N optimization. Even
though the query is SELECT *, the engine initially avoids scanning all
columns. It constructs a minimal intermediate schema containing only the
sort keys (k) and the internal `__DORIS_ROWID_COL__` to perform the
merge and sorting efficiently. (_col_ids = {0, 3}, ==> _num_columns =
2). However, because a delete predicate exists on column v1, the
BetaRowsetReader add v1 to this intermediate schema to evaluate and
filter out deleted rows during the scan. (_col_ids = {0, 3, 1}, note
that column v1 (index=1) is appended to this schema ==> _num_columns =
3)

The previous implementation of VMergeIteratorContext::copy_rows used the
incorrect _num_columns value, resulting in an array out-of-bounds access
and causing BE coredumped.

Detailed reproduction steps are follows:

1. modify conf/be.conf

```
write_buffer_size = 8
```

2. execute the following sql

```sql
CREATE TABLE tbl1
(
    k INT NOT NULL,
    v1 INT NOT NULL,
    v2 INT NOT NULL
)
DUPLICATE KEY(k)
DISTRIBUTED BY HASH(k) BUCKETS 5
PROPERTIES(
    "replication_num" = "1"

);
CREATE TABLE tbl2
(
    k INT NOT NULL,
    v1 INT NOT NULL,
    v2 INT NOT NULL
)
DUPLICATE KEY(k)
DISTRIBUTED BY HASH(k) BUCKETS 1
PROPERTIES(
    "replication_num" = "1"
);

INSERT INTO tbl1 VALUES (1, 1, 1),(2, 2, 2),(3, 3, 3),(4, 4, 4),(5, 5, 5);
INSERT INTO tbl2 SELECT * FROM tbl1;
SELECT * FROM tbl2 ORDER BY k limit 100; -- ok

DELETE FROM tbl2 WHERE v1 = 100;
SELECT * FROM tbl2 ORDER BY k limit 100; -- coredump
```

Co-authored-by: yiguolei <[email protected]>

### What problem does this PR solve?

Issue Number: close #xxx

Related PR: #xxx

Problem Summary:

### Release note

None

### Check List (For Author)

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [ ] Unit Test
    - [ ] Manual test (add detailed scripts or steps below)
    - [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
        - [ ] Previous test can cover this change.
        - [ ] No code files have been changed.
        - [ ] Other reason <!-- Add your reason?  -->

- Behavior changed:
    - [ ] No.
    - [ ] Yes. <!-- Explain the behavior change -->

- Does this need documentation?
    - [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
apache/doris-website#1214 -->

### Check List (For Reviewer who merge this PR)

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
Add a queue_time_ms column to table __internal_schema.audit_log to track
per-query queueing behavior and elapsed time.
…h() function (apache#60790)

### What problem does this PR solve?

Problem Summary:

This PR adds searcher cache reuse and a DSL result cache for the
`search()` function to improve query performance on repeated search
queries against the same segments.

**Key changes:**

1. **DSL result cache**: Caches the final roaring bitmap per (segment,
DSL) pair so repeated identical `search()` queries skip Lucene execution
entirely. Uses length-prefix key encoding to avoid hash collisions.

2. **Deep-copy bitmap semantics**: Bitmaps are deep-copied on both cache
read and write to prevent `mask_out_null()` from polluting cached
entries.

3. **Type-safe cache accessor**: Replaces raw `void*` return with a
template `get_value<T>()` that uses `static_assert` to ensure T derives
from `LRUCacheValueBase`.

4. **Session-level cache toggle**: Adds
`enable_search_function_query_cache` session variable (default: true) to
allow disabling the cache per query via `SET_VAR`.

5. **Const-correctness fix**: Removes unsafe `const_cast` in
`build_dsl_signature` by copying TSearchParam before Thrift
serialization.

6. **Defensive improvements**: Adds null check for `result_bitmap` on
cache hit, logging for serialization fallback and cache bypass paths.

### Release note

Add DSL result cache for search() function to skip repeated Lucene
execution on identical queries.
…y results (apache#60793)

### What problem does this PR solve?

Related PR: apache#60782

Problem Summary:
When `search()` DSL uses wildcard patterns (e.g. `*ith`, `sm*th`,
`sm?th`) on variant subcolumns with analyzer-based indexes
(field_pattern), the queries return empty results even though regular
TERM search works correctly.

**Root cause:** In `FieldReaderResolver::resolve()`, only `EQUAL_QUERY`
was upgraded to `MATCH_ANY_QUERY` for variant subcolumns with
analyzer-based indexes. `WILDCARD_QUERY` was not upgraded, so
`select_best_reader()` picked the `STRING_TYPE` reader instead of
`FULLTEXT`. `WildcardWeight` then enumerated terms from the wrong
(untokenized) index directory, finding no matches.

**Fix:** Extend the query type upgrade condition to also cover
`WILDCARD_QUERY`, so wildcard patterns correctly use the FULLTEXT index
on variant subcolumns. Also fix a misleading comment in
`inverted_index_iterator.cpp` where `is_equal_query()` was described as
handling WILDCARD/REGEXP but actually only checks `EQUAL_QUERY`.
morrySnow and others added 18 commits March 13, 2026 14:37
## Background

`ClusterNamespace` is a legacy artifact from the multi-tenancy era. In
earlier versions, Apache Doris implemented multi-tenancy by prefixing
database names with a cluster name using `:` as a separator. This
functionality has since been completely removed, but the
`ClusterNamespace` class and related legacy code remained.

## Changes

- Remove all `ClusterNamespace.getNameFromFullName()` calls (~122 call
sites), replacing each with its original argument
- Remove all `import org.apache.doris.cluster.ClusterNamespace`
statements
- Delete `ClusterNamespace.java`
- Clean up dead code left behind (no-op self-assignments, stale comments
like "should be removed in 3.0", empty `removeClusterPrefix()` methods)
- Fix import ordering to satisfy checkstyle

Co-authored-by: Copilot <[email protected]>
…rite (apache#61224)

### What problem does this PR solve?
SumLiteralRewrite transforms SUM(expr +/- literal) into SUM(expr) +/-
literal * COUNT(expr). When type coercion has introduced an implicit
widening cast (e.g. CAST(smallint_col AS INT)), the rewritten SUM/COUNT
still operates on the wider type, forcing unnecessary wider data reads.

This is redundant because SUM always returns BIGINT for any integer
input (TINYINT/SMALLINT/INT/BIGINT). Strip implicit widening integer
casts in extractSumLiteral() so the aggregate operates on the original
narrow column directly.

This benefits ClickBench Q29-style queries where SUM(col), SUM(col+1),
SUM(col+2) share a narrow integer column — after stripping the cast,
SUM(col+1) and SUM(col+2) reuse the existing SUM(col).
…educe memory (apache#61318)

### What problem does this PR solve?

Issue Number: close #xxx

Related PR: #xxx

Problem Summary:

Reduce FE memory by 
1. moving top-N table stats filtering from PrometheusMetricVisitor into
CloudTabletStatMgr so it's computed once per stat cycle instead of per
Prometheus scrape,
2. removing the unused beToTablets field from InfightTask to avoid
retaining a large map reference
3. changing InfightTablet.tabletId from Long to long to avoid boxing
overhead.

### Release note

None

### Check List (For Author)

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [ ] Unit Test
    - [ ] Manual test (add detailed scripts or steps below)
    - [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
        - [ ] Previous test can cover this change.
        - [ ] No code files have been changed.
        - [ ] Other reason <!-- Add your reason?  -->

- Behavior changed:
    - [ ] No.
    - [ ] Yes. <!-- Explain the behavior change -->

- Does this need documentation?
    - [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
apache/doris-website#1214 -->

### Check List (For Reviewer who merge this PR)

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
…) (apache#61327)

Issue Number: close #xxx

Related PR: #xxx

Problem Summary:

None

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [ ] Unit Test
    - [ ] Manual test (add detailed scripts or steps below)
    - [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
- [ ] Previous test can cover this change. - [ ] No code files have been
changed. - [ ] Other reason <!-- Add your reason? -->

- Behavior changed:
    - [ ] No.
    - [ ] Yes. <!-- Explain the behavior change -->

- Does this need documentation?
    - [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
apache/doris-website#1214 -->

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->

### What problem does this PR solve?

Issue Number: close #xxx

Related PR: #xxx

Problem Summary:

### Release note

None

### Check List (For Author)

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [ ] Unit Test
    - [ ] Manual test (add detailed scripts or steps below)
    - [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
        - [ ] Previous test can cover this change.
        - [ ] No code files have been changed.
        - [ ] Other reason <!-- Add your reason?  -->

- Behavior changed:
    - [ ] No.
    - [ ] Yes. <!-- Explain the behavior change -->

- Does this need documentation?
    - [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
apache/doris-website#1214 -->

### Check List (For Reviewer who merge this PR)

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
…t cases (apache#61333)

### What problem does this PR solve?

The result of `array_union` does not guarantee element order, so the
outputs of its related test cases are also unstable.
Use `array_sort` to make the results deterministic.

Related PR: #xxx

Problem Summary:

### Release note

None

### Check List (For Author)

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [ ] Unit Test
    - [ ] Manual test (add detailed scripts or steps below)
    - [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
        - [ ] Previous test can cover this change.
        - [ ] No code files have been changed.
        - [ ] Other reason <!-- Add your reason?  -->

- Behavior changed:
    - [ ] No.
    - [ ] Yes. <!-- Explain the behavior change -->

- Does this need documentation?
    - [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
apache/doris-website#1214 -->

### Check List (For Reviewer who merge this PR)

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
## What

This PR removes several redundant FE-side test dependencies.

## Why

A quick dependency audit under `fe/` found a few dependencies that are
declared but not actually used:
- `hamcrest` in multiple FE modules
- JUnit 5 test dependencies in `fe-extension-loader`, which currently
has no test sources

Keeping these unused dependencies increases dependency surface and
maintenance cost without bringing value.
…failures (apache#61334)

before it may silently fail. now try it best to return the status if
failed.
…le agg to constant (apache#61183)

### What problem does this PR solve?
- SimpleAggCacheMgr: singleton async cache backed by internal SQL
queries for exact MIN/MAX column stats and row counts. Uses a two-level
freshness check — visibleVersionTime (cheap local read) as a fast
filter, falling back to getVisibleVersion() (potentially RPC in cloud
mode) only when times match — to avoid unnecessary RPCs while still
detecting same-millisecond concurrent writes. The cache loader captures
version and versionTime both before and after executing the internal SQL
to guard against writes that complete during query execution.

- RewriteSimpleAggToConstantRule: Nereids rewrite rule that fires on
LogicalAggregate over LogicalOlapScan, checks DUP_KEYS model, no GROUP
BY, supported agg functions, and replaces with LogicalOneRowRelation
containing constant literals.

- Bug fix — TRUNCATE TABLE did not reset TableAttributes.visibleVersion:
truncateTableInternal() replaced partition data but never called
olapTable.resetVisibleVersion(). This left
TableAttributes.visibleVersionTime unchanged, so the SimpleAggCacheMgr
(and any other version-time-keyed logic) would see a cache hit and
return pre-truncate values instead of the correct post-truncate result
(e.g. count(*) = 5 instead of 0). The fix adds
olapTable.resetVisibleVersion() inside truncateTableInternal(), which
bumps both visibleVersion back to TABLE_INIT_VERSION and
visibleVersionTime to System.currentTimeMillis(). This applies to both
the live execution path and the journal-replay path since both go
through truncateTableInternal.

- Unit test with mock cache covering 6 positive and 8 negative cases.

- Regression tests:

-- Cache warmup polling, positive/negative explain checks, correctness
assertions, and disable-rule verification.
-- truncate_version_reset: verifies that after TRUNCATE TABLE, count(*)
returns 0 (not a stale cached value), and that subsequent inserts are
counted correctly.
…gregate (apache#60996)

Add a new built-in scalar function to_hll(bigint) that constructs an HLL
value from a BIGINT directly, bypassing any hash — the bigint is fed
as-is into HyperLogLog::update(uint64_t).

Changes:
- BE (vec/functions/function_hll.cpp): implement struct ToHll with
Status-returning execute/vector/vector_nullable methods; register as
FunctionAlwaysNotNullable<ToHll, true> so InvalidArgument status is
propagated on negative input.
- BE test (be/test/vec/function/function_hll_test.cpp): add unit test
function_hll_test.function_to_hll_test covering values 0, 1, 2, 100.
- FE Nereids (scalar/ToHll.java): new ScalarFunction with signature
BIGINT -> HLL.
- FE catalog (BuiltinScalarFunctions.java): register to_hll.
- FE visitor (ScalarFunctionVisitor.java): add visitToHll visitor hook.
### What problem does this PR solve?

Issue Number: apache#61099

Related PR: N/A

Problem Summary:
- Avoid deadlock when external catalog refresh invalidates cache while
another thread initializes the same catalog through a cache loader.
- Add a unit test to reproduce the lock inversion and verify both worker
threads also exit cleanly after the fix.
… framework (apache#61141)

### What problem does this PR solve?

Refactor the JDBC data source scanning architecture to integrate with
the
unified FileScanner/JniReader framework, replacing the standalone
ExternalScanNode-based JDBC scan path.

#### Motivation

The JDBC scan path was independently implemented with its own operator
(JDBCScanLocalState), scanner (JdbcScanner), and JNI connector
(JniConnector
→ BaseJdbcExecutor hierarchy), while other JNI-based data sources
(Paimon,
Hudi, MaxCompute, TrinoConnector) already use the unified FileScanner →
JniReader → JniScanner path. This caused code duplication, maintenance
burden,
and architectural inconsistency.

#### Changes

1. BE: Split JniConnector into two focused classes:
- JniReader: JNI lifecycle management (open/read/close), base class for
all JNI readers (PaimonJniReader, HudiJniReader, JdbcJniReader, etc.)
   - JniDataBridge: Stateless data exchange between C++ Blocks and Java
     shared memory via JNI

2. Java: Introduce Strategy Pattern for database-specific type handling:
- JdbcTypeHandler interface with DefaultTypeHandler base implementation
   - Per-database handlers: MySQLTypeHandler, OracleTypeHandler,
     PostgreSQLTypeHandler, ClickHouseTypeHandler, SQLServerTypeHandler,
DB2TypeHandler, SapHanaTypeHandler, TrinoTypeHandler, GbaseTypeHandler
   - JdbcTypeHandlerFactory for handler selection
   - JdbcJniScanner (extends JniScanner) for read path
   - JdbcJniWriter (extends JniWriter) for write path
   - Old BaseJdbcExecutor subclasses marked @deprecated but preserved

3. FE: Migrate JdbcScanNode from ExternalScanNode to FileQueryScanNode:
   - JdbcScanNode now extends FileQueryScanNode
   - Introduces JdbcSplit (extends FileSplit) to carry JDBC params
   - Uses TFileScanRange with FORMAT_JNI and table_format_type="jdbc"
   - Adds jdbc_params field to TTableFormatFileDesc in Thrift
   - Adapts PhysicalPlanTranslator.visitPhysicalJdbcScan() accordingly

4. BE: Add JdbcJniReader and integrate into FileScanner:
- JdbcJniReader handles special types (bitmap, HLL, quantile_state,
JSONB)
     via string-based intermediary and CAST
   - FileScanner._get_next_reader() adds "jdbc" table_format_type branch
   - JdbcUtils utility for JDBC driver URL resolution
   - Existing JdbcScanner preserved as transitional (deprecated)

All predicate push-down logic (createJdbcFilters, getJdbcQueryStr, etc.)
is preserved from the original JdbcScanNode implementation.
… quorum success (apache#60953)

## Summary

When using majority write (quorum success), BE does not distinguish
between replicas
with continuous versions and replicas with version gaps
(`lastFailedVersion >= 0`).
This causes inconsistency with FE's commit check, which correctly
excludes
version-gap replicas from success counting.

## Bad Case

Consider 3 replicas on nodes 1, 2, 3 with `load_required_replica_num =
2`:

1. **First write**: nodes 1,2 succeed, node 3 fails → overall success.
   Node 3 now has a version gap (`lastFailedVersion >= 0`).
2. **Second write**: nodes 1,3 succeed, node 2 fails →
   - **BE** counts 2 successes (nodes 1,3), considers it quorum success.
- **FE** commit only counts node 1 as success (node 3 has version gap),
     so `successReplicaNum = 1 < 2`, commit fails.
- This wastes resources since BE already returned success to the client
     but FE rejects the transaction.

The correct behavior for the second write:
- nodes 1,3 succeed → should **FAIL** (node 3 has version gap, only node
1 counts)
- nodes 1,2 succeed → should **SUCCEED** (both have continuous versions)

## Solution

Pass per-tablet version-gap backend information from FE to BE via a new
thrift field
`map<tablet_id, list<backend_id>> tablet_version_gap_backends` in
`TOlapTablePartition`.

On the BE side, when counting successful replicas for majority write in
both
`VTabletWriter` (V1) and `VTabletWriterV2`, exclude version-gap backends
from
the `finished_tablets_replica` counter. This makes BE's quorum check
consistent
with FE's commit check.

### Changes

- **Descriptors.thrift**: Add `tablet_version_gap_backends` field to
`TOlapTablePartition`
- **OlapTable.java**: Add `getPartitionVersionGapBackends()` to compute
gap backends per tablet
- **OlapTableSink.java**: Populate the new field when building partition
info
- **tablet_info.h/cpp**: Parse and store gap backends from thrift
- **vtablet_writer.cpp**: Exclude gap backends in `_quorum_success`
- **vtablet_writer_v2.cpp**: Exclude gap backends in `_quorum_success`
and `_create_commit_info`
…y data (apache#61236)

### What problem does this PR solve?

When an Elasticsearch field is mapped as keyword/text but the actual
data stored is an array (which is valid in ES),
Doris was throwing: 'Expected value of type: STRING; but found type:
Array'

This fix serializes the array to a JSON string representation instead of
throwing an error,
which is consistent with how other non-string types (Numbers, Objects)
are already handled.

Fixed two code paths in es_scroll_parser.cpp:
1. fill_columns() - main _source parsing path
2. handle_value() - array element processing path

Also added regression test and test data for this scenario.
@github-actions

Copy link
Copy Markdown

sh-checker report

To get the full details, please check in the job output.

shellcheck errors

'shellcheck ' returned error 1 finding the following syntactical issues:

----------

In bin/flight_record_fe.sh line 47:
FE_PID=$(${JAVA_HOME}/bin/jps | grep DorisFE | awk '{print $1}')
         ^----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
FE_PID=$("${JAVA_HOME}"/bin/jps | grep DorisFE | awk '{print $1}')


In bin/profile_fe.sh line 47:
FE_PID=$(${JAVA_HOME}/bin/jps | grep DorisFE | awk '{print $1}')
         ^----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
FE_PID=$("${JAVA_HOME}"/bin/jps | grep DorisFE | awk '{print $1}')


In build-support/clang-format.sh line 43:
    export PATH=$(brew --prefix llvm@16)/bin:$PATH
           ^--^ SC2155 (warning): Declare and assign separately to avoid masking return values.
                                             ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    export PATH=$(brew --prefix llvm@16)/bin:${PATH}


In build.sh line 253:
            BUILD_SPARK_DPP=1
            ^-------------^ SC2034 (warning): BUILD_SPARK_DPP appears unused. Verify use (or export if used externally).


In build.sh line 494:
if [[ "$(echo "${DISABLE_BUILD_JINDOFS}" | tr '[:lower:]' '[:upper:]')" == "ON" ]]; then
               ^----------------------^ SC2154 (warning): DISABLE_BUILD_JINDOFS is referenced but not assigned.


In build.sh line 565:
FEAT+=($([[ -n "${WITH_TDE_DIR}" ]] && echo "+TDE" || echo "-TDE"))
       ^-- SC2207 (warning): Prefer mapfile or read -a to split command output (or quote to avoid splitting).


In build.sh line 566:
FEAT+=($([[ "${ENABLE_HDFS_STORAGE_VAULT:-OFF}" == "ON" ]] && echo "+HDFS_STORAGE_VAULT" || echo "-HDFS_STORAGE_VAULT"))
       ^-- SC2207 (warning): Prefer mapfile or read -a to split command output (or quote to avoid splitting).


In build.sh line 567:
FEAT+=($([[ ${BUILD_UI} -eq 1 ]] && echo "+UI" || echo "-UI"))
       ^-- SC2207 (warning): Prefer mapfile or read -a to split command output (or quote to avoid splitting).


In build.sh line 568:
FEAT+=($([[ "${BUILD_AZURE}" == "ON" ]] && echo "+AZURE_BLOB,+AZURE_STORAGE_VAULT" || echo "-AZURE_BLOB,-AZURE_STORAGE_VAULT"))
       ^-- SC2207 (warning): Prefer mapfile or read -a to split command output (or quote to avoid splitting).


In build.sh line 569:
FEAT+=($([[ ${BUILD_HIVE_UDF} -eq 1 ]] && echo "+HIVE_UDF" || echo "-HIVE_UDF"))
       ^-- SC2207 (warning): Prefer mapfile or read -a to split command output (or quote to avoid splitting).


In build.sh line 570:
FEAT+=($([[ ${BUILD_BE_JAVA_EXTENSIONS} -eq 1 ]] && echo "+BE_JAVA_EXTENSIONS" || echo "-BE_JAVA_EXTENSIONS"))
       ^-- SC2207 (warning): Prefer mapfile or read -a to split command output (or quote to avoid splitting).


In build.sh line 572:
export DORIS_FEATURE_LIST=$(IFS=','; echo "${FEAT[*]}")
       ^----------------^ SC2155 (warning): Declare and assign separately to avoid masking return values.


In build.sh line 654:
    echo "-- Use ccache: ${CMAKE_USE_CCACHE}"
                         ^-----------------^ SC2154 (warning): CMAKE_USE_CCACHE is referenced but not assigned (did you mean 'CMAKE_USE_CCACHE_C'?).
                         ^-----------------^ SC2153 (info): Possible misspelling: CMAKE_USE_CCACHE may not be assigned. Did you mean CMAKE_USE_CCACHE_C?


In build.sh line 728:
        -DENABLE_HDFS_STORAGE_VAULT=${ENABLE_HDFS_STORAGE_VAULT:-ON} \
                                    ^-- SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        -DENABLE_HDFS_STORAGE_VAULT="${ENABLE_HDFS_STORAGE_VAULT:-ON}" \


In build.sh line 795:
            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests -Dcheckstyle.skip=true ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS}  -gs "${USER_SETTINGS_MVN_REPO}" -T 1C
                                                                                                                                                ^----------------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests -Dcheckstyle.skip=true ${MVN_OPT:+${MVN_OPT}} "${DEPENDENCIES_MVN_OPTS}"  -gs "${USER_SETTINGS_MVN_REPO}" -T 1C


In build.sh line 797:
            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests -Dcheckstyle.skip=true ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS}  -T 1C
                                                                                                                                                ^----------------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests -Dcheckstyle.skip=true ${MVN_OPT:+${MVN_OPT}} "${DEPENDENCIES_MVN_OPTS}"  -T 1C


In build.sh line 801:
            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS}  -gs "${USER_SETTINGS_MVN_REPO}" -T 1C
                                                                                                                         ^----------------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests ${MVN_OPT:+${MVN_OPT}} "${DEPENDENCIES_MVN_OPTS}"  -gs "${USER_SETTINGS_MVN_REPO}" -T 1C


In build.sh line 803:
            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS}  -T 1C
                                                                                                                         ^----------------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests ${MVN_OPT:+${MVN_OPT}} "${DEPENDENCIES_MVN_OPTS}"  -T 1C


In build.sh line 861:
    if [ "${TARGET_SYSTEM}" = "Darwin" ] || [ "${TARGET_SYSTEM}" = "Linux" ]; then
       ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
                                            ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
    if [[ "${TARGET_SYSTEM}" = "Darwin" ]] || [[ "${TARGET_SYSTEM}" = "Linux" ]]; then


In build.sh line 1023:
        if [[ "${TARGET_SYSTEM}" == 'Linux' ]] && [[ "$TARGET_ARCH" == 'x86_64' ]]; then
                                                      ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        if [[ "${TARGET_SYSTEM}" == 'Linux' ]] && [[ "${TARGET_ARCH}" == 'x86_64' ]]; then


In build.sh line 1027:
        elif [[ "${TARGET_SYSTEM}" == 'Linux' ]] && [[ "$TARGET_ARCH" == 'aarch64' ]]; then
                                                        ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        elif [[ "${TARGET_SYSTEM}" == 'Linux' ]] && [[ "${TARGET_ARCH}" == 'aarch64' ]]; then


In cloud/script/build_fdb.sh line 17:
#!/bin/bash
^-- SC1128 (error): The shebang must be on the first line. Delete blanks and move comments.


In cloud/script/build_fdb.sh line 221:
if [ "$FDB_ENABLE_JAVA" = "true" ]; then
   ^-----------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^--------------^ SC2154 (warning): FDB_ENABLE_JAVA is referenced but not assigned.
      ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${FDB_ENABLE_JAVA}" = "true" ]]; then


In cloud/script/build_fdb.sh line 224:
if [ "$FDB_ENABLE_GO" = "true" ]; then
   ^---------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^------------^ SC2154 (warning): FDB_ENABLE_GO is referenced but not assigned.
      ^------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${FDB_ENABLE_GO}" = "true" ]]; then


In cloud/script/build_fdb.sh line 227:
if [ "$FDB_ENABLE_SWIFT" = "true" ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^---------------^ SC2154 (warning): FDB_ENABLE_SWIFT is referenced but not assigned.
      ^---------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${FDB_ENABLE_SWIFT}" = "true" ]]; then


In cloud/script/build_fdb.sh line 230:
if [ "$FDB_ENABLE_RUBY" = "true" ]; then
   ^-----------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^--------------^ SC2154 (warning): FDB_ENABLE_RUBY is referenced but not assigned.
      ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${FDB_ENABLE_RUBY}" = "true" ]]; then


In cloud/script/build_fdb.sh line 243:
if [ "$USE_JEMALLOC" = true ]; then
   ^------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${USE_JEMALLOC}" = true ]]; then


In cloud/script/build_fdb.sh line 249:
if [ "$USE_LTO" = true ]; then
   ^-------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${USE_LTO}" = true ]]; then


In cloud/script/build_fdb.sh line 255:
if [ "$FULL_DEBUG_SYMBOLS" = true ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${FULL_DEBUG_SYMBOLS}" = true ]]; then


In cloud/script/build_fdb.sh line 259:
if [ "$BUILD_DOCUMENTATION" = true ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_DOCUMENTATION}" = true ]]; then


In cloud/script/build_fdb.sh line 263:
if [ "$WITH_ROCKSDB" = true ]; then
   ^------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${WITH_ROCKSDB}" = true ]]; then


In cloud/script/build_fdb.sh line 267:
if [ "$WITH_GRPC" = true ]; then
   ^---------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${WITH_GRPC}" = true ]]; then


In cloud/script/build_fdb.sh line 272:
if [ "$BUILD_AWS_BACKUP" = true ]; then
   ^----------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^---------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_AWS_BACKUP}" = true ]]; then


In cloud/script/build_fdb.sh line 276:
if [ "$BUILD_AZURE_BACKUP" = true ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_AZURE_BACKUP}" = true ]]; then


In cloud/script/build_fdb.sh line 281:
if [ "$BUILD_C_BINDING" = true ]; then
   ^---------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_C_BINDING}" = true ]]; then


In cloud/script/build_fdb.sh line 285:
if [ "$BUILD_PYTHON_BINDING" = true ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_PYTHON_BINDING}" = true ]]; then


In cloud/script/build_fdb.sh line 289:
if [ "$BUILD_JAVA_BINDING" = true ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_JAVA_BINDING}" = true ]]; then


In cloud/script/build_fdb.sh line 293:
if [ "$BUILD_GO_BINDING" = true ]; then
   ^----------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^---------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_GO_BINDING}" = true ]]; then


In cloud/script/build_fdb.sh line 297:
if [ "$BUILD_SWIFT_BINDING" = true ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_SWIFT_BINDING}" = true ]]; then


In cloud/script/build_fdb.sh line 301:
if [ "$BUILD_RUBY_BINDING" = true ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_RUBY_BINDING}" = true ]]; then


In cloud/script/build_fdb.sh line 308:
echo "  Version:      $VERSION"
                      ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Version:      ${VERSION}"


In cloud/script/build_fdb.sh line 309:
echo "  Build Dir:    $BUILD_DIR"
                      ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Build Dir:    ${BUILD_DIR}"


In cloud/script/build_fdb.sh line 310:
echo "  Source Dir:   $SRC_DIR"
                      ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Source Dir:   ${SRC_DIR}"


In cloud/script/build_fdb.sh line 311:
echo "  Docker Image: $DOCKER_IMAGE"
                      ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Docker Image: ${DOCKER_IMAGE}"


In cloud/script/build_fdb.sh line 312:
echo "  Update Repo:  $UPDATE_REPO"
                      ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Update Repo:  ${UPDATE_REPO}"


In cloud/script/build_fdb.sh line 316:
echo "  JEMALLOC:       $USE_JEMALLOC"
                        ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  JEMALLOC:       ${USE_JEMALLOC}"


In cloud/script/build_fdb.sh line 317:
echo "  LTO:            $USE_LTO"
                        ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  LTO:            ${USE_LTO}"


In cloud/script/build_fdb.sh line 318:
echo "  Debug Symbols:  $FULL_DEBUG_SYMBOLS"
                        ^-----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Debug Symbols:  ${FULL_DEBUG_SYMBOLS}"


In cloud/script/build_fdb.sh line 319:
echo "  Documentation:  $BUILD_DOCUMENTATION"
                        ^------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Documentation:  ${BUILD_DOCUMENTATION}"


In cloud/script/build_fdb.sh line 320:
echo "  RocksDB:        $WITH_ROCKSDB"
                        ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  RocksDB:        ${WITH_ROCKSDB}"


In cloud/script/build_fdb.sh line 321:
echo "  gRPC:           $WITH_GRPC"
                        ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  gRPC:           ${WITH_GRPC}"


In cloud/script/build_fdb.sh line 322:
echo "  AWS Backup:     $BUILD_AWS_BACKUP"
                        ^---------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  AWS Backup:     ${BUILD_AWS_BACKUP}"


In cloud/script/build_fdb.sh line 323:
echo "  Azure Backup:   $BUILD_AZURE_BACKUP"
                        ^-----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Azure Backup:   ${BUILD_AZURE_BACKUP}"


In cloud/script/build_fdb.sh line 327:
echo "  C:      $BUILD_C_BINDING"
                ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  C:      ${BUILD_C_BINDING}"


In cloud/script/build_fdb.sh line 328:
echo "  Python: $BUILD_PYTHON_BINDING"
                ^-------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Python: ${BUILD_PYTHON_BINDING}"


In cloud/script/build_fdb.sh line 329:
echo "  Java:   $BUILD_JAVA_BINDING"
                ^-----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Java:   ${BUILD_JAVA_BINDING}"


In cloud/script/build_fdb.sh line 330:
echo "  Go:     $BUILD_GO_BINDING"
                ^---------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Go:     ${BUILD_GO_BINDING}"


In cloud/script/build_fdb.sh line 331:
echo "  Swift:  $BUILD_SWIFT_BINDING"
                ^------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Swift:  ${BUILD_SWIFT_BINDING}"


In cloud/script/build_fdb.sh line 332:
echo "  Ruby:   $BUILD_RUBY_BINDING"
                ^-----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Ruby:   ${BUILD_RUBY_BINDING}"


In cloud/script/build_fdb.sh line 336:
echo "$CMAKE_OPTIONS" | tr ' ' '\n' | grep -v '^$' | sed 's/^/  /'
      ^------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "${CMAKE_OPTIONS}" | tr ' ' '\n' | grep -v '^$' | sed 's/^/  /'


In cloud/script/build_fdb.sh line 341:
docker pull "$DOCKER_IMAGE"
             ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
docker pull "${DOCKER_IMAGE}"


In cloud/script/build_fdb.sh line 344:
if [ -d "$SRC_DIR" ]; then
   ^---------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
         ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ -d "${SRC_DIR}" ]]; then


In cloud/script/build_fdb.sh line 346:
    if [ "$UPDATE_REPO" = true ]; then
       ^-----------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
          ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    if [[ "${UPDATE_REPO}" = true ]]; then


In cloud/script/build_fdb.sh line 348:
        cd "$SRC_DIR"
            ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        cd "${SRC_DIR}"


In cloud/script/build_fdb.sh line 357:
    git clone "$REPO_URL" "$SRC_DIR"
               ^-------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                           ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    git clone "${REPO_URL}" "${SRC_DIR}"


In cloud/script/build_fdb.sh line 361:
echo -e "${YELLOW}Checking out version: $VERSION${NC}"
                                        ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo -e "${YELLOW}Checking out version: ${VERSION}${NC}"


In cloud/script/build_fdb.sh line 362:
cd "$SRC_DIR"
    ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
cd "${SRC_DIR}"


In cloud/script/build_fdb.sh line 363:
git checkout "$VERSION"
              ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
git checkout "${VERSION}"


In cloud/script/build_fdb.sh line 367:
mkdir -p "$BUILD_DIR"
          ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
mkdir -p "${BUILD_DIR}"


In cloud/script/build_fdb.sh line 372:
    -v "$(pwd)/$SRC_DIR:/foundationdb/src:ro" \
               ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    -v "$(pwd)/${SRC_DIR}:/foundationdb/src:ro" \


In cloud/script/build_fdb.sh line 373:
    -v "$(pwd)/$BUILD_DIR:/foundationdb/build" \
               ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    -v "$(pwd)/${BUILD_DIR}:/foundationdb/build" \


In cloud/script/build_fdb.sh line 374:
    "$DOCKER_IMAGE" \
     ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    "${DOCKER_IMAGE}" \


In cloud/script/build_fdb.sh line 378:
        CC=clang CXX=clang++ LD=lld cmake -B build -D USE_LD=LLD -D USE_LIBCXX=1 -G Ninja $CMAKE_OPTIONS /foundationdb/src && \
                                                                                          ^------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        CC=clang CXX=clang++ LD=lld cmake -B build -D USE_LD=LLD -D USE_LIBCXX=1 -G Ninja ${CMAKE_OPTIONS} /foundationdb/src && \


In cloud/script/build_fdb.sh line 384:
echo "Artifacts location: $(pwd)/$BUILD_DIR"
                                 ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "Artifacts location: $(pwd)/${BUILD_DIR}"


In cloud/script/run_all_tests.sh line 175:
exit ${ret}
     ^----^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.

Did you mean: 
exit "${ret}"


In cloud/script/start.sh line 59:
  source "${custom_start}" 
         ^---------------^ SC1090 (warning): ShellCheck can't follow non-constant source. Use a directive to specify location.


In docker/thirdparties/docker-compose/common/hive-configure.sh line 22:
export CORE_CONF_fs_defaultFS=${CORE_CONF_fs_defaultFS:-hdfs://`hostname -f`:8020}
                                                               ^-----------^ SC2006 (style): Use $(...) notation instead of legacy backticks `...`.

Did you mean: 
export CORE_CONF_fs_defaultFS=${CORE_CONF_fs_defaultFS:-hdfs://$(hostname -f):8020}


In docker/thirdparties/docker-compose/common/hive-configure.sh line 29:
  local entry="<property><name>$name</name><value>${value}</value></property>"
                               ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  local entry="<property><name>${name}</name><value>${value}</value></property>"


In docker/thirdparties/docker-compose/common/hive-configure.sh line 30:
  local escapedEntry=$(echo $entry | sed 's/\//\\\//g')
        ^----------^ SC2155 (warning): Declare and assign separately to avoid masking return values.
                            ^----^ SC2086 (info): Double quote to prevent globbing and word splitting.
                            ^----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  local escapedEntry=$(echo "${entry}" | sed 's/\//\\\//g')


In docker/thirdparties/docker-compose/common/hive-configure.sh line 31:
  sed -i "/<\/configuration>/ s/.*/${escapedEntry}\n&/" $path
                                                        ^---^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                                        ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  sed -i "/<\/configuration>/ s/.*/${escapedEntry}\n&/" "${path}"


In docker/thirdparties/docker-compose/common/hive-configure.sh line 42:
    echo "Configuring $module"
                      ^-----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    echo "Configuring ${module}"


In docker/thirdparties/docker-compose/common/hive-configure.sh line 43:
    for c in `printenv | perl -sne 'print "$1 " if m/^${envPrefix}_(.+?)=.*/' -- -envPrefix=$envPrefix`; do 
             ^-- SC2006 (style): Use $(...) notation instead of legacy backticks `...`.
                                                                                            ^--------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                                                                            ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    for c in $(printenv | perl -sne 'print "$1 " if m/^${envPrefix}_(.+?)=.*/' -- -envPrefix="${envPrefix}"); do 


In docker/thirdparties/docker-compose/common/hive-configure.sh line 44:
        name=`echo ${c} | perl -pe 's/___/-/g; s/__/_/g; s/_/./g'`
             ^-- SC2006 (style): Use $(...) notation instead of legacy backticks `...`.
                   ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        name=$(echo "${c}" | perl -pe 's/___/-/g; s/__/_/g; s/_/./g')


In docker/thirdparties/docker-compose/common/hive-configure.sh line 47:
        echo " - Setting $name=$  "
                         ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        echo " - Setting ${name}=$  "


In docker/thirdparties/docker-compose/common/hive-configure.sh line 48:
        addProperty $path $name "$value"
                    ^---^ SC2086 (info): Double quote to prevent globbing and word splitting.
                    ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                          ^---^ SC2086 (info): Double quote to prevent globbing and word splitting.
                          ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                 ^----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        addProperty "${path}" "${name}" "${value}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 26:
    // clear output file
    ^-- SC1127 (error): Was this intended as a comment? Use # in sh.


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 27:
    echo "" > "$output_file"
               ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    echo "" > "${output_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 31:
        if [ -n "$type_value" ]; then
           ^------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
                 ^---------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        if [[ -n "${type_value}" ]]; then


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 32:
            echo "{\"index\": {\"_index\": \"$index_name\", \"_type\": \"$type_value\", \"_id\": \"${id_prefix}${id}\"}}"  >> "$output_file"
                                             ^---------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                         ^---------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                                                                               ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
            echo "{\"index\": {\"_index\": \"${index_name}\", \"_type\": \"${type_value}\", \"_id\": \"${id_prefix}${id}\"}}"  >> "${output_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 34:
            echo "{\"index\": {\"_index\": \"$index_name\", \"_id\": \"${id_prefix}${id}\"}}"  >> "$output_file"
                                             ^---------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                                                   ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
            echo "{\"index\": {\"_index\": \"${index_name}\", \"_id\": \"${id_prefix}${id}\"}}"  >> "${output_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 36:
        echo "$line"  >> "$output_file"
              ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                          ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        echo "${line}"  >> "${output_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 38:
    done < "$data_file"
            ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    done < "${data_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 79:
generate_bulk_request "composite_type_array" "doc" "item_" "$array_data_file" "$bulk_request_file"
                                                            ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                               ^----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
generate_bulk_request "composite_type_array" "doc" "item_" "${array_data_file}" "${bulk_request_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 80:
curl -X POST "http://${ES_5_HOST}:9200/_bulk" --data-binary "@$bulk_request_file" -H "Content-Type: application/json"
                                                              ^----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
curl -X POST "http://${ES_5_HOST}:9200/_bulk" --data-binary "@${bulk_request_file}" -H "Content-Type: application/json"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 119:
generate_bulk_request "composite_type_array" "doc" "item_" "$array_data_file" "$bulk_request_file"
                                                            ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                               ^----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
generate_bulk_request "composite_type_array" "doc" "item_" "${array_data_file}" "${bulk_request_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 120:
curl -X POST "http://${ES_6_HOST}:9200/_bulk" --data-binary "@$bulk_request_file" -H "Content-Type: application/json"
                                                              ^----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
curl -X POST "http://${ES_6_HOST}:9200/_bulk" --data-binary "@${bulk_request_file}" -H "Content-Type: application/json"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 126:
curl "http://${ES_7_HOST}:9200/test1" -H "Content-Type:application/json" -X PUT -d "@/mnt/scripts/index/es7_test1.json"
             ^----------^ SC2154 (warning): ES_7_HOST is referenced but not assigned.


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 172:
generate_bulk_request "composite_type_array" "_doc" "item_" "$array_data_file" "$bulk_request_file"
                                                             ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                                ^----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
generate_bulk_request "composite_type_array" "_doc" "item_" "${array_data_file}" "${bulk_request_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 173:
curl -X POST "http://${ES_7_HOST}:9200/_bulk" --data-binary "@$bulk_request_file" -H "Content-Type: application/json"
                                                              ^----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
curl -X POST "http://${ES_7_HOST}:9200/_bulk" --data-binary "@${bulk_request_file}" -H "Content-Type: application/json"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 179:
curl "http://${ES_8_HOST}:9200/test1" -H "Content-Type:application/json" -X PUT -d "@/mnt/scripts/index/es7_test1.json"
             ^----------^ SC2154 (warning): ES_8_HOST is referenced but not assigned.


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 215:
generate_bulk_request "composite_type_array" "" "item_" "$array_data_file" "$bulk_request_file"
                                                         ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                            ^----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
generate_bulk_request "composite_type_array" "" "item_" "${array_data_file}" "${bulk_request_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 216:
curl -X POST "http://${ES_8_HOST}:9200/_bulk" --data-binary "@$bulk_request_file" -H "Content-Type: application/json"
                                                              ^----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
curl -X POST "http://${ES_8_HOST}:9200/_bulk" --data-binary "@${bulk_request_file}" -H "Content-Type: application/json"


In docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh line 24:
    [ -e "$file" ] || continue
    ^------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
          ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    [[ -e "${file}" ]] || continue


In docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh line 25:
    tar -xzvf "$file" -C "$AUX_LIB"
               ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                          ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    tar -xzvf "${file}" -C "${AUX_LIB}"


In docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh line 38:
while ! $(nc -z localhost "${HMS_PORT:-9083}"); do
        ^-- SC2091 (warning): Remove surrounding $() to avoid executing output (or use eval if intentional).


In docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh line 42:
if [[ ${NEED_LOAD_DATA} = "0" ]]; then
      ^---------------^ SC2154 (warning): NEED_LOAD_DATA is referenced but not assigned.


In docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh line 49:
if [[ ${enablePaimonHms} == "true" ]]; then
      ^----------------^ SC2154 (warning): enablePaimonHms is referenced but not assigned.


In docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh line 54:
    echo "Script: create_paimon_table.hql executed in $EXECUTION_TIME seconds"
                                                      ^-------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    echo "Script: create_paimon_table.hql executed in ${EXECUTION_TIME} seconds"


In docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh line 64:
find "${DATA_DIR}" -type f -name "run.sh" -print0 | xargs -0 -n 1 -P "${LOAD_PARALLEL}" -I {} bash -ec '
                                                                      ^--------------^ SC2154 (warning): LOAD_PARALLEL is referenced but not assigned.
                                                                                                       ^-- SC2016 (info): Expressions don't expand in single quotes, use double quotes for that.


In docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh line 119:
ls /mnt/scripts/create_preinstalled_scripts/*.hql | xargs -n 1 -P "${LOAD_PARALLEL}" -I {} bash -ec '
^-- SC2011 (warning): Use 'find .. -print0 | xargs -0 ..' or 'find .. -exec .. +' to allow non-alphanumeric filenames.
                                                                                                    ^-- SC2016 (info): Expressions don't expand in single quotes, use double quotes for that.


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 22:
find ${CUR_DIR}/data -type f -name "*.tar.gz" -print0 | \
     ^--------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
find "${CUR_DIR}"/data -type f -name "*.tar.gz" -print0 | \


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 23:
xargs -0 -n1 -P"${LOAD_PARALLEL}" bash -c '
                ^--------------^ SC2154 (warning): LOAD_PARALLEL is referenced but not assigned.
                                          ^-- SC2016 (info): Expressions don't expand in single quotes, use double quotes for that.


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 33:
    cd ${CUR_DIR}/
       ^--------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    cd "${CUR_DIR}"/


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 34:
    curl -O https://${s3BucketName}.${s3Endpoint}/regression/datalake/pipeline_data/tpch1.db.tar.gz
                    ^-------------^ SC2154 (warning): s3BucketName is referenced but not assigned.
                    ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                    ^-----------^ SC2154 (warning): s3Endpoint is referenced but not assigned.
                                    ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    curl -O https://"${s3BucketName}"."${s3Endpoint}"/regression/datalake/pipeline_data/tpch1.db.tar.gz


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 45:
    cd ${CUR_DIR}/
       ^--------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    cd "${CUR_DIR}"/


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 46:
    curl -O https://${s3BucketName}.${s3Endpoint}/regression/datalake/pipeline_data/tvf_data.tar.gz
                    ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                    ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    curl -O https://"${s3BucketName}"."${s3Endpoint}"/regression/datalake/pipeline_data/tvf_data.tar.gz


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 58:
    curl -O https://${s3BucketName}.${s3Endpoint}/regression/datalake/pipeline_data/multi_catalog/test_complex_types/data.tar.gz
                    ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                    ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    curl -O https://"${s3BucketName}"."${s3Endpoint}"/regression/datalake/pipeline_data/multi_catalog/test_complex_types/data.tar.gz


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 70:
    curl -O https://${s3BucketName}.${s3Endpoint}/regression/datalake/pipeline_data/multi_catalog/test_compress_partitioned/data.tar.gz
                    ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                    ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    curl -O https://"${s3BucketName}"."${s3Endpoint}"/regression/datalake/pipeline_data/multi_catalog/test_compress_partitioned/data.tar.gz


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 82:
    curl -O https://${s3BucketName}.${s3Endpoint}/regression/datalake/pipeline_data/multi_catalog/test_wide_table/data.tar.gz
                    ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                    ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    curl -O https://"${s3BucketName}"."${s3Endpoint}"/regression/datalake/pipeline_data/multi_catalog/test_wide_table/data.tar.gz


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 94:
    curl -O https://${s3BucketName}.${s3Endpoint}/regression/datalake/pipeline_data/test_hdfs_tvf_compression/test_data.tar.gz
                    ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                    ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    curl -O https://"${s3BucketName}"."${s3Endpoint}"/regression/datalake/pipeline_data/test_hdfs_tvf_compression/test_data.tar.gz


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 106:
    curl -O https://${s3BucketName}.${s3Endpoint}/regression/datalake/pipeline_data/test_tvf/data.tar.gz
                    ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                    ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    curl -O https://"${s3BucketName}"."${s3Endpoint}"/regression/datalake/pipeline_data/test_tvf/data.tar.gz


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 118:
    curl -O https://${s3BucketName}.${s3Endpoint}/regression/datalake/pipeline_data/multi_catalog/logs1_parquet/data.tar.gz
                    ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                    ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    curl -O https://"${s3BucketName}"."${s3Endpoint}"/regression/datalake/pipeline_data/multi_catalog/logs1_parquet/data.tar.gz


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 144:
cd ${CUR_DIR}/auxlib
   ^--------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
cd "${CUR_DIR}"/auxlib


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 85:
METASTORE_HOST=$(echo "${HIVE_METASTORE_URIS}" | sed 's|thrift://||' | cut -d: -f1)
                       ^--------------------^ SC2154 (warning): HIVE_METASTORE_URIS is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 90:
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
      ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
        ^----------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.
        ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                         ^----------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.
                         ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
while [[ "${RETRY_COUNT}" -lt "${MAX_RETRIES}" ]]; do


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 103:
    if [ $RETRY_COUNT -eq 0 ]; then
       ^--------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
         ^----------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.
         ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    if [[ "${RETRY_COUNT}" -eq 0 ]]; then


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 111:
  if [ $((RETRY_COUNT % 10)) -eq 0 ]; then
     ^-----------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
  if [[ $((RETRY_COUNT % 10)) -eq 0 ]]; then


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 117:
if [ $RETRY_COUNT -ge $MAX_RETRIES ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
     ^----------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.
     ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                      ^----------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.
                      ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${RETRY_COUNT}" -ge "${MAX_RETRIES}" ]]; then


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 127:
    <value>${S3_ENDPOINT}</value>
           ^------------^ SC2154 (warning): S3_ENDPOINT is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 131:
    <value>${MINIO_ROOT_USER}</value>
           ^----------------^ SC2154 (warning): MINIO_ROOT_USER is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 135:
    <value>${MINIO_ROOT_PASSWORD}</value>
           ^--------------------^ SC2154 (warning): MINIO_ROOT_PASSWORD is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 165:
    <value>s3a://${HUDI_BUCKET}/warehouse</value>
                 ^------------^ SC2154 (warning): HUDI_BUCKET is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 171:
HUDI_BUNDLE_JAR_FILE=$(download_jar "hudi-spark3.5-bundle_2.12" "${HUDI_BUNDLE_VERSION}" "${HUDI_BUNDLE_URL}")
                                                                 ^--------------------^ SC2154 (warning): HUDI_BUNDLE_VERSION is referenced but not assigned.
                                                                                          ^----------------^ SC2154 (warning): HUDI_BUNDLE_URL is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 176:
HADOOP_AWS_JAR=$(download_jar "hadoop-aws" "${HADOOP_AWS_VERSION}" "${HADOOP_AWS_URL}")
                                            ^-------------------^ SC2154 (warning): HADOOP_AWS_VERSION is referenced but not assigned.
                                                                    ^---------------^ SC2154 (warning): HADOOP_AWS_URL is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 181:
AWS_SDK_BUNDLE_JAR=$(download_jar "aws-java-sdk-bundle" "${AWS_SDK_BUNDLE_VERSION}" "${AWS_SDK_BUNDLE_URL}")
                                                         ^-----------------------^ SC2154 (warning): AWS_SDK_BUNDLE_VERSION is referenced but not assigned.
                                                                                     ^-------------------^ SC2154 (warning): AWS_SDK_BUNDLE_URL is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 185:
POSTGRESQL_JDBC_JAR=$(download_jar "postgresql" "${POSTGRESQL_JDBC_VERSION}" "${POSTGRESQL_JDBC_URL}")
                                                 ^------------------------^ SC2154 (warning): POSTGRESQL_JDBC_VERSION is referenced but not assigned.
                                                                              ^--------------------^ SC2154 (warning): POSTGRESQL_JDBC_URL is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 209:
  ${SPARK_HOME}/bin/spark-sql \
  ^-----------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.

Did you mean: 
  "${SPARK_HOME}"/bin/spark-sql \


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 229:
touch ${SUCCESS_FILE}
      ^-------------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.

Did you mean: 
touch "${SUCCESS_FILE}"


In docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh line 19:
source /usr/local/common/hive-configure.sh
       ^-- SC1091 (info): Not following: /usr/local/common/hive-configure.sh: openBinaryFile: does not exist (No such file or directory)


In docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh line 20:
source /usr/local/common/event-hook.sh
       ^-----------------------------^ SC1091 (info): Not following: /usr/local/common/event-hook.sh: openBinaryFile: does not exist (No such file or directory)


In docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh line 34:
if [ "$1" == "1" ]; then
   ^-------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
if [[ "$1" == "1" ]]; then


In docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh line 36:
elif [ "$1" == "2" ]; then
     ^-------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
elif [[ "$1" == "2" ]]; then


In docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh line 74:
if [ $i -eq 60 ]; then
   ^-----------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
     ^-- SC2086 (info): Double quote to prevent globbing and word splitting.
     ^-- SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${i}" -eq 60 ]]; then


In docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh line 81:
if [ "$1" == "1" ]; then
   ^-------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
if [[ "$1" == "1" ]]; then


In docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh line 83:
elif [ "$1" == "2" ]; then
     ^-------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
elif [[ "$1" == "2" ]]; then


In docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh line 90:
if [[ ${enablePaimonHms} == "true" ]]; then
      ^----------------^ SC2154 (warning): enablePaimonHms is referenced but not assigned.


In docker/thirdparties/docker-compose/kerberos/health-checks/supervisorctl-check.sh line 34:
if [ "$FAILED" == "" ]; then
   ^-----------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${FAILED}" == "" ]]; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 27:
echo "[polaris-init] Waiting for Polaris health check at http://$HOST:$PORT/q/health ..."
                                                                ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                      ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "[polaris-init] Waiting for Polaris health check at http://${HOST}:${PORT}/q/health ..."


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 28:
for i in $(seq 1 120); do
^-^ SC2034 (warning): i appears unused. Verify use (or export if used externally).


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 29:
  if curl -sSf "http://$HOST:8182/q/health" >/dev/null; then
                       ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  if curl -sSf "http://${HOST}:8182/q/health" >/dev/null; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 38:
  -X POST "http://$HOST:$PORT/api/catalog/v1/oauth/tokens" \
                  ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                        ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -X POST "http://${HOST}:${PORT}/api/catalog/v1/oauth/tokens" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 40:
  -d "grant_type=client_credentials&client_id=$USER&client_secret=$PASS&scope=PRINCIPAL_ROLE:ALL")
                                              ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                  ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -d "grant_type=client_credentials&client_id=${USER}&client_secret=${PASS}&scope=PRINCIPAL_ROLE:ALL")


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 43:
TOKEN=$(printf "%s" "$TOKEN_JSON" | sed -n 's/.*"access_token"\s*:\s*"\([^"]*\)".*/\1/p')
                     ^---------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
TOKEN=$(printf "%s" "${TOKEN_JSON}" | sed -n 's/.*"access_token"\s*:\s*"\([^"]*\)".*/\1/p')


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 45:
if [ -z "$TOKEN" ]; then
         ^----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [ -z "${TOKEN}" ]; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 46:
  echo "[polaris-init] ERROR: Failed to obtain OAuth token. Response: $TOKEN_JSON" >&2
                                                                      ^---------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  echo "[polaris-init] ERROR: Failed to obtain OAuth token. Response: ${TOKEN_JSON}" >&2


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 50:
echo "[polaris-init] Creating catalog '$CATALOG' with base '$BASE_LOCATION' ..."
                                       ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                            ^------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "[polaris-init] Creating catalog '${CATALOG}' with base '${BASE_LOCATION}' ..."


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 53:
  "name": "$CATALOG",
           ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  "name": "${CATALOG}",


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 56:
    "default-base-location": "$BASE_LOCATION",
                              ^------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    "default-base-location": "${BASE_LOCATION}",


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 66:
    "allowedLocations": ["$BASE_LOCATION"]
                          ^------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    "allowedLocations": ["${BASE_LOCATION}"]


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 74:
  -X POST "http://$HOST:$PORT/api/management/v1/catalogs" \
                  ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                        ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -X POST "http://${HOST}:${PORT}/api/management/v1/catalogs" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 75:
  -H "Authorization: Bearer $TOKEN" \
                            ^----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -H "Authorization: Bearer ${TOKEN}" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 77:
  -d "$CREATE_PAYLOAD")
      ^-------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -d "${CREATE_PAYLOAD}")


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 79:
if [ "$HTTP_CODE" = "201" ]; then
      ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [ "${HTTP_CODE}" = "201" ]; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 81:
elif [ "$HTTP_CODE" = "409" ]; then
        ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
elif [ "${HTTP_CODE}" = "409" ]; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 84:
  echo "[polaris-init] Create catalog failed (HTTP $HTTP_CODE):"
                                                   ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  echo "[polaris-init] Create catalog failed (HTTP ${HTTP_CODE}):"


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 89:
echo "[polaris-init] Setting up permissions for catalog '$CATALOG' ..."
                                                         ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "[polaris-init] Setting up permissions for catalog '${CATALOG}' ..."


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 94:
  -X PUT "http://$HOST:$PORT/api/management/v1/catalogs/$CATALOG/catalog-roles/catalog_admin/grants" \
                 ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                       ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                        ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -X PUT "http://${HOST}:${PORT}/api/management/v1/catalogs/${CATALOG}/catalog-roles/catalog_admin/grants" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 95:
  -H "Authorization: Bearer $TOKEN" \
                            ^----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -H "Authorization: Bearer ${TOKEN}" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 99:
if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ]; then
      ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                   ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [ "${HTTP_CODE}" != "200" ] && [ "${HTTP_CODE}" != "201" ]; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 100:
  echo "[polaris-init] Warning: Failed to create catalog admin grants (HTTP $HTTP_CODE)"
                                                                            ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  echo "[polaris-init] Warning: Failed to create catalog admin grants (HTTP ${HTTP_CODE})"


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 107:
  -X POST "http://$HOST:$PORT/api/management/v1/principal-roles" \
                  ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                        ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -X POST "http://${HOST}:${PORT}/api/management/v1/principal-roles" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 108:
  -H "Authorization: Bearer $TOKEN" \
                            ^----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -H "Authorization: Bearer ${TOKEN}" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 112:
if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ] && [ "$HTTP_CODE" != "409" ]; then
      ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                   ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [ "${HTTP_CODE}" != "200" ] && [ "${HTTP_CODE}" != "201" ] && [ "${HTTP_CODE}" != "409" ]; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 113:
  echo "[polaris-init] Warning: Failed to create data engineer role (HTTP $HTTP_CODE)"
                                                                          ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  echo "[polaris-init] Warning: Failed to create data engineer role (HTTP ${HTTP_CODE})"


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 120:
  -X PUT "http://$HOST:$PORT/api/management/v1/principal-roles/data_engineer/catalog-roles/$CATALOG" \
                 ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                       ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                                           ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -X PUT "http://${HOST}:${PORT}/api/management/v1/principal-roles/data_engineer/catalog-roles/${CATALOG}" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 121:
  -H "Authorization: Bearer $TOKEN" \
                            ^----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -H "Authorization: Bearer ${TOKEN}" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 125:
if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ]; then
      ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                   ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [ "${HTTP_CODE}" != "200" ] && [ "${HTTP_CODE}" != "201" ]; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 126:
  echo "[polaris-init] Warning: Failed to connect roles (HTTP $HTTP_CODE)"
                                                              ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  echo "[polaris-init] Warning: Failed to connect roles (HTTP ${HTTP_CODE})"


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 133:
  -X PUT "http://$HOST:$PORT/api/management/v1/principals/root/principal-roles" \
                 ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                       ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -X PUT "http://${HOST}:${PORT}/api/management/v1/principals/root/principal-roles" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 134:
  -H "Authorization: Bearer $TOKEN" \
                            ^----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -H "Authorization: Bearer ${TOKEN}" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 138:
if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ]; then
      ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                   ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [ "${HTTP_CODE}" != "200" ] && [ "${HTTP_CODE}" != "201" ]; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 139:
  echo "[polaris-init] Warning: Failed to assign data engineer role to root (HTTP $HTTP_CODE)"
                                                                                  ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  echo "[polaris-init] Warning: Failed to assign data engineer role to root (HTTP ${HTTP_CODE})"


In docker/thirdparties/docker-compose/ranger/ranger-admin/ranger-entrypoint.sh line 24:
cd $RANGER_HOME
   ^----------^ SC2154 (warning): RANGER_HOME is referenced but not assigned.
   ^----------^ SC2086 (info): Double quote to prevent globbing and word splitting.
   ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
cd "${RANGER_HOME}"


In docker/thirdparties/docker-compose/ranger/script/install_doris_ranger_plugins.sh line 16:
#!/bin/bash
^-- SC1128 (error): The shebang must be on the first line. Delete blanks and move comments.


In docker/thirdparties/docker-compose/ranger/script/install_doris_ranger_plugins.sh line 19:
if [ ! -d "${RANGER_HOME}/ews/webapp/WEB-INF/classes/ranger-plugins/doris" ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
           ^------------^ SC2154 (warning): RANGER_HOME is referenced but not assigned.

Did you mean: 
if [[ ! -d "${RANGER_HOME}/ews/webapp/WEB-INF/classes/ranger-plugins/doris" ]]; then


In docker/thirdparties/docker-compose/ranger/script/install_doris_service_def.sh line 15:
#!/bin/bash
^-- SC1128 (error): The shebang must be on the first line. Delete blanks and move comments.


In docker/thirdparties/run-thirdparties-docker.sh line 55:
export IP_HOST=$(ip -4 addr show scope global | awk '/inet / {print $2}' | cut -d/ -f1 | head -n 1)
       ^-----^ SC2155 (warning): Declare and assign separately to avoid masking return values.


In docker/thirdparties/run-thirdparties-docker.sh line 132:
    echo ${COMPONENTS}
         ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    echo "${COMPONENTS}"


In docker/thirdparties/run-thirdparties-docker.sh line 164:
RUN_OCENABASE=0
^-----------^ SC2034 (warning): RUN_OCENABASE appears unused. Verify use (or export if used externally).


In docker/thirdparties/run-thirdparties-docker.sh line 353:
        local backup_dir=/home/work/pipline/backup_center
              ^--------^ SC2034 (warning): backup_dir appears unused. Verify use (or export if used externally).


In docker/thirdparties/run-thirdparties-docker.sh line 358:
            echo "docker exec "${container_id}" bash -c echo '/opt/bitnami/kafka/bin/kafka-topics.sh --create --bootstrap-server '${ip_host}:19193' --topic '${topic}'"
                               ^-------------^ SC2027 (warning): The surrounding quotes actually unquote this. Remove or escape them.
                               ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
            echo "docker exec ""${container_id}"" bash -c echo '/opt/bitnami/kafka/bin/kafka-topics.sh --create --bootstrap-server '${ip_host}:19193' --topic '${topic}'"


In docker/thirdparties/run-thirdparties-docker.sh line 380:
    sudo docker compose -p ${CONTAINER_UID}hive2 -f "${ROOT}"/docker-compose/hive/hive-2x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-2x.env down
                           ^--------------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.

Did you mean: 
    sudo docker compose -p "${CONTAINER_UID}"hive2 -f "${ROOT}"/docker-compose/hive/hive-2x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-2x.env down


In docker/thirdparties/run-thirdparties-docker.sh line 382:
        sudo docker compose -p ${CONTAINER_UID}hive2 -f "${ROOT}"/docker-compose/hive/hive-2x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-2x.env up --build --remove-orphans -d --wait
                               ^--------------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.

Did you mean: 
        sudo docker compose -p "${CONTAINER_UID}"hive2 -f "${ROOT}"/docker-compose/hive/hive-2x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-2x.env up --build --remove-orphans -d --wait


In docker/thirdparties/run-thirdparties-docker.sh line 394:
    sudo docker compose -p ${CONTAINER_UID}hive3 -f "${ROOT}"/docker-compose/hive/hive-3x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-3x.env down
                           ^--------------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.

Did you mean: 
    sudo docker compose -p "${CONTAINER_UID}"hive3 -f "${ROOT}"/docker-compose/hive/hive-3x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-3x.env down


In docker/thirdparties/run-thirdparties-docker.sh line 396:
        sudo docker compose -p ${CONTAINER_UID}hive3 -f "${ROOT}"/docker-compose/hive/hive-3x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-3x.env up --build --remove-orphans -d --wait
                               ^--------------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.

Did you mean: 
        sudo docker compose -p "${CONTAINER_UID}"hive3 -f "${ROOT}"/docker-compose/hive/hive-3x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-3x.env up --build --remove-orphans -d --wait


In docker/thirdparties/run-thirdparties-docker.sh line 444:
    . "${HUDI_DIR}"/hudi.env
      ^--------------------^ SC1091 (info): Not following: ./hudi.env: openBinaryFile: does not exist (No such file or directory)


In docker/thirdparties/run-thirdparties-docker.sh line 488:
        mv *.tbl ../lakesoul/test_files/tpch/data
           ^-- SC2035 (info): Use ./*glob* or -- *glob* so names with dashes won't become options.


In docker/thirdparties/run-thirdparties-docker.sh line 490:
        export TPCH_DATA=$(realpath lakesoul/test_files/tpch/data)
               ^-------^ SC2155 (warning): Declare and assign separately to avoid masking return values.


In docker/thirdparties/run-thirdparties-docker.sh line 506:
        . "${ROOT}"/docker-compose/kerberos/kerberos${i}_settings.env
          ^-- SC1090 (warning): ShellCheck can't follow non-constant source. Use a directive to specify location.
                                                    ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        . "${ROOT}"/docker-compose/kerberos/kerberos"${i}"_settings.env


In docker/thirdparties/run-thirdparties-docker.sh line 507:
        envsubst <"${ROOT}"/docker-compose/kerberos/hadoop-hive.env.tpl >"${ROOT}"/docker-compose/kerberos/hadoop-hive-${i}.env
                                                                                                                       ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        envsubst <"${ROOT}"/docker-compose/kerberos/hadoop-hive.env.tpl >"${ROOT}"/docker-compose/kerberos/hadoop-hive-"${i}".env


In docker/thirdparties/run-thirdparties-docker.sh line 508:
        envsubst <"${ROOT}"/docker-compose/kerberos/conf/my.cnf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/my.cnf
                                                                                                                     ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        envsubst <"${ROOT}"/docker-compose/kerberos/conf/my.cnf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos"${i}"/my.cnf


In docker/thirdparties/run-thirdparties-docker.sh line 509:
        envsubst <"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/kdc.conf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/kdc.conf
                                                                 ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                                                                                                                    ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        envsubst <"${ROOT}"/docker-compose/kerberos/conf/kerberos"${i}"/kdc.conf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos"${i}"/kdc.conf


In docker/thirdparties/run-thirdparties-docker.sh line 510:
        envsubst <"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/krb5.conf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/krb5.conf
                                                                 ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                                                                                                                     ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        envsubst <"${ROOT}"/docker-compose/kerberos/conf/kerberos"${i}"/krb5.conf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos"${i}"/krb5.conf


In docker/thirdparties/run-thirdparties-docker.sh line 546:
    . "${POLARIS_DIR}/polaris_settings.env"
      ^-- SC1091 (info): Not following: ./polaris_settings.env: openBinaryFile: does not exist (No such file or directory)


In docker/thirdparties/run-thirdparties-docker.sh line 595:
if [[ "$NEED_LOAD_DATA" -eq 1 ]]; then
       ^-------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${NEED_LOAD_DATA}" -eq 1 ]]; then


In docker/thirdparties/run-thirdparties-docker.sh line 601:
if [[ $need_prepare_hive_data -eq 1 ]]; then
      ^---------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ ${need_prepare_hive_data} -eq 1 ]]; then


In docker/thirdparties/run-thirdparties-docker.sh line 712:
    wait "${pids[$compose]}" || status=$?
                 ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    wait "${pids[${compose}]}" || status=$?


In docker/thirdparties/run-thirdparties-docker.sh line 713:
    if [ $status -ne 0 ] && [ $compose != "db2" ]; then
       ^---------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
         ^-----^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.
         ^-----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                            ^-------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
                              ^------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                              ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    if [[ "${status}" -ne 0 ]] && [[ "${compose}" != "db2" ]]; then


In docker/thirdparties/run-thirdparties-docker.sh line 714:
        echo "docker $compose started failed with status $status"
                     ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                         ^-----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        echo "docker ${compose} started failed with status ${status}"


In docker/thirdparties/run-thirdparties-docker.sh line 716:
        cat start_${compose}.log || true
                  ^--------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        cat start_"${compose}".log || true


In env.sh line 369:
    CMAKE_USE_CCACHE_C="-DCMAKE_C_COMPILER_LAUNCHER=ccache"
    ^----------------^ SC2034 (warning): CMAKE_USE_CCACHE_C appears unused. Verify use (or export if used externally).


In hooks/setup_worktree.sh line 21:
cp "$ROOT_WORKSPACE_PATH/custom_env.sh" custom_env.sh
    ^------------------^ SC2154 (warning): ROOT_WORKSPACE_PATH is referenced but not assigned.
    ^------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
cp "${ROOT_WORKSPACE_PATH}/custom_env.sh" custom_env.sh


In hooks/setup_worktree.sh line 24:
cp -r "$ROOT_WORKSPACE_PATH/thirdparty/installed" thirdparty/
       ^------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
cp -r "${ROOT_WORKSPACE_PATH}/thirdparty/installed" thirdparty/


In hooks/setup_worktree.sh line 27:
cp -f "$ROOT_WORKSPACE_PATH/build.sh" build.sh
       ^------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
cp -f "${ROOT_WORKSPACE_PATH}/build.sh" build.sh


In regression-test/pipeline/cloud_p0/run.sh line 55:
    set -e
    ^----^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 56:
    shopt -s inherit_errexit
    ^----------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 58:
    cd "${teamcity_build_checkoutDir}" || return 1
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                          ^------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 59:
    {
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 60:
        echo # add a new line to prevent two config items from being combined, which will cause the error "No signature of method"
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 61:
        echo "ak='${s3SourceAk}'"
        ^-----------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 62:
        echo "sk='${s3SourceSk}'"
        ^-----------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 63:
        echo "hwYunAk='${hwYunAk:-}'"
        ^---------------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 64:
        echo "hwYunSk='${hwYunSk:-}'"
        ^---------------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 65:
        echo "txYunAk='${txYunAk:-}'"
        ^---------------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 66:
        echo "txYunSk='${txYunSk:-}'"
        ^---------------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 67:
        echo "regressionAliyunStsRegion='${regressionAliyunStsRegion:-cn-hongkong}'"
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 68:
        echo "regressionAliyunStsRoleArn='${regressionAliyunStsRoleArn:-}'"
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 70:
    cp -f "${teamcity_build_checkoutDir}"/regression-test/pipeline/cloud_p0/conf/regression-conf-custom.groovy \
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 73:
    sed -i "s/^CONTAINER_UID=\"doris--\"/CONTAINER_UID=\"doris-external--\"/" "${teamcity_build_checkoutDir}"/docker/thirdparties/custom_settings.env
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 74:
    sed -i "s/oss-cn-hongkong.aliyuncs.com/oss-cn-hongkong-internal.aliyuncs.com/" "${teamcity_build_checkoutDir}"/docker/thirdparties/custom_settings.env
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 75:
    if bash "${teamcity_build_checkoutDir}"/docker/thirdparties/run-thirdparties-docker.sh --stop; then echo; fi
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
       ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                                                                                        ^--^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 76:
    if bash "${teamcity_build_checkoutDir}"/docker/thirdparties/run-thirdparties-docker.sh -c kafka; then echo; else echo "ERROR: start kafka docker failed"; fi
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
       ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                                                                                          ^--^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                                                                                                     ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 77:
    JAVA_HOME="$(find /usr/lib/jvm -maxdepth 1 -type d -name 'java-8-*' | sed -n '1p')"
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                 ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 78:
    export JAVA_HOME
    ^--------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 79:
    if "${teamcity_build_checkoutDir}"/run-regression-test.sh \
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
       ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 87:
        echo
        ^--^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 89:
        bash "${teamcity_build_checkoutDir}"/regression-test/pipeline/common/get-or-set-tmp-env.sh 'set' "export need_collect_log=true"
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 93:
        summary=$(
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 94:
            grep -aoE 'Test ([0-9]+) suites, failed ([0-9]+) suites, fatal ([0-9]+) scripts, skipped ([0-9]+) scripts' \
            ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 97:
        set -x
        ^----^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 98:
        test_suites=$(echo "${summary}" | cut -d ' ' -f 2)
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                      ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 99:
        failed_suites=$(echo "${summary}" | cut -d ' ' -f 5)
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 100:
        fatal_scripts=$(echo "${summary}" | cut -d ' ' -f 8)
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 101:
        if [[ ${test_suites} -gt 0 && ${failed_suites} -le ${failed_suites_threshold:=100} && ${fatal_scripts} -eq 0 ]]; then
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
           ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 102:
            echo "INFO: regression test result meet (test_suites>0 && failed_suites<=${failed_suites_threshold} && fatal_scripts=0)"
            ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 104:
            return 1
            ^------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 55:
    set -e
    ^----^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 56:
    shopt -s inherit_errexit
    ^----------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 58:
    cd "${teamcity_build_checkoutDir}" || return 1
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                          ^------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 59:
    {
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 60:
        echo # add a new line to prevent two config items from being combined, which will cause the error "No signature of method"
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 61:
        echo "ak='${s3SourceAk}'"
        ^-----------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 62:
        echo "sk='${s3SourceSk}'"
        ^-----------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 63:
        echo "hwYunAk='${hwYunAk:-}'"
        ^---------------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 64:
        echo "hwYunSk='${hwYunSk:-}'"
        ^---------------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 65:
        echo "txYunAk='${txYunAk:-}'"
        ^---------------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 66:
        echo "txYunSk='${txYunSk:-}'"
        ^---------------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 68:
    cp -f "${teamcity_build_checkoutDir}"/regression-test/pipeline/vault_p0/conf/regression-conf-custom.groovy \
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 72:
    sed -i "s/^CONTAINER_UID=\"doris--\"/CONTAINER_UID=\"doris-external--\"/" "${teamcity_build_checkoutDir}"/docker/thirdparties/custom_settings.env
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 73:
    sed -i "s/oss-cn-hongkong.aliyuncs.com/oss-cn-hongkong-internal.aliyuncs.com/" "${teamcity_build_checkoutDir}"/docker/thirdparties/custom_settings.env
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 74:
    if bash "${teamcity_build_checkoutDir}"/docker/thirdparties/run-thirdparties-docker.sh -c minio ||
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
       ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 75:
        bash "${teamcity_build_checkoutDir}"/docker/thirdparties/run-thirdparties-docker.sh -c minio; then
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 76:
        echo "INFO: start minio docker success"
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 78:
        echo "ERROR: start minio docker twice failed" && return 1
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                                         ^------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 82:
    docker_compose_hdfs_yaml='
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 116:
    if echo "${docker_compose_hdfs_yaml}" >docker-compose.yaml && docker-compose up -d; then echo; else echo "ERROR: start hdfs docker failed"; fi
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
       ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                                                  ^------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                                                                             ^--^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                                                                                        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 117:
    JAVA_HOME="$(find /usr/lib/jvm -maxdepth 1 -type d -name 'java-8-*' | sed -n '1p')"
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                 ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 118:
    export JAVA_HOME
    ^--------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 119:
    if "${teamcity_build_checkoutDir}"/run-regression-test.sh \
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
       ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 127:
        echo
        ^--^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 129:
        bash "${teamcity_build_checkoutDir}"/regression-test/pipeline/common/get-or-set-tmp-env.sh 'set' "export need_collect_log=true"
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 133:
        summary=$(
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 134:
            grep -aoE 'Test ([0-9]+) suites, failed ([0-9]+) suites, fatal ([0-9]+) scripts, skipped ([0-9]+) scripts' \
            ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 137:
        set -x
        ^----^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 138:
        test_suites=$(echo "${summary}" | cut -d ' ' -f 2)
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                      ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 139:
        failed_suites=$(echo "${summary}" | cut -d ' ' -f 5)
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 140:
        fatal_scripts=$(echo "${summary}" | cut -d ' ' -f 8)
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 141:
        if [[ ${test_suites} -gt 0 && ${failed_suites} -le ${failed_suites_threshold:=100} && ${fatal_scripts} -eq 0 ]]; then
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
           ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 142:
            echo "INFO: regression test result meet (test_suites>0 && failed_suites<=${failed_suites_threshold} && fatal_scripts=0)"
            ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 144:
            return 1
            ^------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In run-be-ut.sh line 150:
    WITH_TDE_DIR        -- ${WITH_TDE_DIR}
                           ^-------------^ SC2154 (warning): WITH_TDE_DIR is referenced but not assigned.


In run-be-ut.sh line 242:
echo "-- Use ccache: ${CMAKE_USE_CCACHE}"
                     ^-----------------^ SC2154 (warning): CMAKE_USE_CCACHE is referenced but not assigned (did you mean 'CMAKE_USE_CCACHE_C'?).
                     ^-----------------^ SC2153 (info): Possible misspelling: CMAKE_USE_CCACHE may not be assigned. Did you mean CMAKE_USE_CCACHE_C?


In run-cloud-ut.sh line 199:
    -DENABLE_HDFS_STORAGE_VAULT=${ENABLE_HDFS_STORAGE_VAULT:-ON} \
                                ^-- SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    -DENABLE_HDFS_STORAGE_VAULT="${ENABLE_HDFS_STORAGE_VAULT:-ON}" \


In run-cloud-ut.sh line 204:
    "${CMAKE_USE_CCACHE}" \
     ^-----------------^ SC2154 (warning): CMAKE_USE_CCACHE is referenced but not assigned (did you mean 'CMAKE_USE_CCACHE_C'?).
     ^-----------------^ SC2153 (info): Possible misspelling: CMAKE_USE_CCACHE may not be assigned. Did you mean CMAKE_USE_CCACHE_C?


In thirdparty/build-thirdparty.sh line 1386:
    -DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS -Wno-elaborated-enum-base" \
                       ^--------------^ SC2154 (warning): CMAKE_CXX_FLAGS is referenced but not assigned.
                       ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -Wno-elaborated-enum-base" \


In thirdparty/build-thirdparty.sh line 1977:
    cp -r ${TP_SOURCE_DIR}/${JINDOFS_SOURCE}/* "${TP_INSTALL_DIR}/jindofs_libs/"
          ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                           ^---------------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.

Did you mean: 
    cp -r "${TP_SOURCE_DIR}"/"${JINDOFS_SOURCE}"/* "${TP_INSTALL_DIR}/jindofs_libs/"


In thirdparty/build-thirdparty.sh line 2042:
    if [ -d "arrow_ep-install/lib" ]; then
       ^---------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
    if [[ -d "arrow_ep-install/lib" ]]; then


In thirdparty/build-thirdparty.sh line 2050:
            if [ -f "arrow_ep-install/lib/${paimon_arrow_dep}" ]; then
               ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
            if [[ -f "arrow_ep-install/lib/${paimon_arrow_dep}" ]]; then


In thirdparty/build-thirdparty.sh line 2059:
    if [ -f "release/libroaring_bitmap.a" ]; then
       ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
    if [[ -f "release/libroaring_bitmap.a" ]]; then


In thirdparty/build-thirdparty.sh line 2064:
    if [ -f "release/libxxhash.a" ]; then
       ^--------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
    if [[ -f "release/libxxhash.a" ]]; then


In thirdparty/build-thirdparty.sh line 2069:
    if [ -f "fmt_ep-install/lib/libfmt.a" ]; then
       ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
    if [[ -f "fmt_ep-install/lib/libfmt.a" ]]; then


In thirdparty/build-thirdparty.sh line 2074:
    if [ -f "tbb_ep-install/lib/libtbb.a" ]; then
       ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
    if [[ -f "tbb_ep-install/lib/libtbb.a" ]]; then


In thirdparty/build-thirdparty.sh line 2197:
                rm -rf "${TP_SOURCE_DIR}/${RAGEL_SOURCE}"
                       ^-- SC2115 (warning): Use "${var:?}" to ensure this never expands to / .


In thirdparty/build-thirdparty.sh line 2241:
                    rm -rf "${TP_SOURCE_DIR}/${dep_dir}"
                           ^---------------------------^ SC2115 (warning): Use "${var:?}" to ensure this never expands to / .


In thirdparty/build-thirdparty.sh line 2276:
        rm -rf "${TP_SOURCE_DIR}/${src_dir}"
               ^---------------------------^ SC2115 (warning): Use "${var:?}" to ensure this never expands to / .


In thirdparty/download-prebuild-thirdparty.sh line 30:
if [ -z "$VERSION" ]; then
   ^---------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
         ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ -z "${VERSION}" ]]; then


In thirdparty/download-prebuild-thirdparty.sh line 41:
case "$OS" in
      ^-^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
case "${OS}" in


In thirdparty/download-prebuild-thirdparty.sh line 49:
    echo "Unsupported OS: $OS"
                          ^-^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    echo "Unsupported OS: ${OS}"


In thirdparty/download-prebuild-thirdparty.sh line 57:
case "$ARCH" in
      ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
case "${ARCH}" in


In thirdparty/download-prebuild-thirdparty.sh line 65:
    echo "Unsupported architecture: $ARCH"
                                    ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    echo "Unsupported architecture: ${ARCH}"


In thirdparty/download-prebuild-thirdparty.sh line 73:
case "$VERSION" in
      ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
case "${VERSION}" in


In thirdparty/download-prebuild-thirdparty.sh line 87:
    echo "Unsupported version: $VERSION"
                               ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    echo "Unsupported version: ${VERSION}"


In thirdparty/download-prebuild-thirdparty.sh line 97:
if [ "$PLATFORM" = "darwin" ]; then
   ^------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${PLATFORM}" = "darwin" ]]; then


In thirdparty/download-prebuild-thirdparty.sh line 100:
  if [ "$ARCH" = "arm64" ]; then
     ^-------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
        ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  if [[ "${ARCH}" = "arm64" ]]; then


In thirdparty/download-prebuild-thirdparty.sh line 101:
    case "$VERSION" in
    ^-- SC2249 (info): Consider adding a default *) case, even if it just exits with error.
          ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    case "${VERSION}" in


In thirdparty/download-prebuild-thirdparty.sh line 125:
echo "Detected platform : $PLATFORM"
                          ^-------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "Detected platform : ${PLATFORM}"


In thirdparty/download-prebuild-thirdparty.sh line 126:
echo "Detected arch     : $ARCH"
                          ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "Detected arch     : ${ARCH}"


In thirdparty/download-prebuild-thirdparty.sh line 127:
echo "Version           : $VERSION"
                          ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "Version           : ${VERSION}"


In thirdparty/download-prebuild-thirdparty.sh line 128:
echo "Downloading       : $URL"
                          ^--^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "Downloading       : ${URL}"


In thirdparty/download-prebuild-thirdparty.sh line 135:
  curl -fL -o "$FILENAME" "$URL"
               ^-------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                           ^--^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  curl -fL -o "${FILENAME}" "${URL}"


In thirdparty/download-prebuild-thirdparty.sh line 137:
  wget -O "$FILENAME" "$URL"
           ^-------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                       ^--^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  wget -O "${FILENAME}" "${URL}"


In thirdparty/download-prebuild-thirdparty.sh line 145:
echo "  $(pwd)/$FILENAME"
               ^-------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  $(pwd)/${FILENAME}"


In thirdparty/download-thirdparty.sh line 714:
    cd $TP_SOURCE_DIR/$CCTZ_SOURCE
       ^------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
       ^------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                      ^----------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.
                      ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    cd "${TP_SOURCE_DIR}"/"${CCTZ_SOURCE}"


In thirdparty/download-thirdparty.sh line 715:
    if [[ ! -f "$PATCHED_MARK" ]] ; then
                ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    if [[ ! -f "${PATCHED_MARK}" ]] ; then


In thirdparty/download-thirdparty.sh line 720:
        touch "$PATCHED_MARK"
               ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        touch "${PATCHED_MARK}"


In tools/lzo/build.sh line 1:
# Licensed to the Apache Software Foundation (ASF) under one
^-- SC2148 (error): Tips depend on target shell and yours is unknown. Add a shebang or a 'shell' directive.


In tools/lzo/build.sh line 20:
g++ -o lzo_writer lzo_writer.cpp -I. -Isrc -I${DORIS_THIRDPARTY}/installed/include -L${DORIS_THIRDPARTY}/installed/lib -llzo2 -std=c++17
                                             ^-----------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                                                                     ^-----------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
g++ -o lzo_writer lzo_writer.cpp -I. -Isrc -I"${DORIS_THIRDPARTY}"/installed/include -L"${DORIS_THIRDPARTY}"/installed/lib -llzo2 -std=c++17

For more information:
  https://www.shellcheck.net/wiki/SC1127 -- Was this intended as a comment? U...
  https://www.shellcheck.net/wiki/SC1128 -- The shebang must be on the first ...
  https://www.shellcheck.net/wiki/SC2148 -- Tips depend on target shell and y...
----------

You can address the above issues in one of three ways:
1. Manually correct the issue in the offending shell script;
2. Disable specific issues by adding the comment:
  # shellcheck disable=NNNN
above the line that contains the issue, where NNNN is the error code;
3. Add '-e NNNN' to the SHELLCHECK_OPTS setting in your .yml action file.



shfmt errors

'shfmt ' returned error 1 finding the following formatting issues:

----------
--- bin/start_be.sh.orig
+++ bin/start_be.sh
@@ -442,45 +442,45 @@
     local param="$1"
 
     case "${param}" in
-        "--add-opens="* | "--add-exports="* | "--add-reads="* | "--add-modules="*)
-            # --add-opens=java.base/sun.util.calendar=ALL-UNNAMED
-            # Extract module/package path as key: --add-opens=java.base/sun.util.calendar
-            echo "${param%=*}"
-            ;;
-        -XX:+* | -XX:-*)
-            # -XX:+HeapDumpOnOutOfMemoryError or -XX:-OmitStackTraceInFastThrow
-            # Extract flag name for pattern matching: -XX:[+-]FlagName
-            local flag_name="${param#-XX:?}"
-            echo "-XX:[+-]${flag_name}"
-            ;;
-        -XX:*=*)
-            # -XX:HeapDumpPath=/path or -XX:OnOutOfMemoryError="cmd"
-            # Extract key before '=': -XX:HeapDumpPath
-            echo "${param%%=*}"
-            ;;
-        -D*=*)
-            # -Dfile.encoding=UTF-8
-            # Extract property name: -Dfile.encoding
-            echo "${param%%=*}"
-            ;;
-        -D*)
-            # -Dfoo (boolean property without value)
-            echo "${param}"
-            ;;
-        -Xms* | -Xmx* | -Xmn* | -Xss*)
-            # -Xmx8192m, -Xms8192m, -Xmn2g, -Xss512k
-            # Extract the prefix: -Xmx, -Xms, -Xmn, -Xss
-            echo "${param}" | sed -E 's/^(-Xm[sxn]|-Xss).*/\1/'
-            ;;
-        -Xlog:*)
-            # -Xlog:gc*:file:decorators
-            # Use prefix as key
-            echo "-Xlog:"
-            ;;
-        *)
-            # For other options, use the full parameter as key
-            echo "${param}"
-            ;;
+    "--add-opens="* | "--add-exports="* | "--add-reads="* | "--add-modules="*)
+        # --add-opens=java.base/sun.util.calendar=ALL-UNNAMED
+        # Extract module/package path as key: --add-opens=java.base/sun.util.calendar
+        echo "${param%=*}"
+        ;;
+    -XX:+* | -XX:-*)
+        # -XX:+HeapDumpOnOutOfMemoryError or -XX:-OmitStackTraceInFastThrow
+        # Extract flag name for pattern matching: -XX:[+-]FlagName
+        local flag_name="${param#-XX:?}"
+        echo "-XX:[+-]${flag_name}"
+        ;;
+    -XX:*=*)
+        # -XX:HeapDumpPath=/path or -XX:OnOutOfMemoryError="cmd"
+        # Extract key before '=': -XX:HeapDumpPath
+        echo "${param%%=*}"
+        ;;
+    -D*=*)
+        # -Dfile.encoding=UTF-8
+        # Extract property name: -Dfile.encoding
+        echo "${param%%=*}"
+        ;;
+    -D*)
+        # -Dfoo (boolean property without value)
+        echo "${param}"
+        ;;
+    -Xms* | -Xmx* | -Xmn* | -Xss*)
+        # -Xmx8192m, -Xms8192m, -Xmn2g, -Xss512k
+        # Extract the prefix: -Xmx, -Xms, -Xmn, -Xss
+        echo "${param}" | sed -E 's/^(-Xm[sxn]|-Xss).*/\1/'
+        ;;
+    -Xlog:*)
+        # -Xlog:gc*:file:decorators
+        # Use prefix as key
+        echo "-Xlog:"
+        ;;
+    *)
+        # For other options, use the full parameter as key
+        echo "${param}"
+        ;;
     esac
 }
 
--- bin/start_fe.sh.orig
+++ bin/start_fe.sh
@@ -210,45 +210,45 @@
     local param="$1"
 
     case "${param}" in
-        "--add-opens="* | "--add-exports="* | "--add-reads="* | "--add-modules="*)
-            # --add-opens=java.base/sun.util.calendar=ALL-UNNAMED
-            # Extract module/package path as key: --add-opens=java.base/sun.util.calendar
-            echo "${param%=*}"
-            ;;
-        -XX:+* | -XX:-*)
-            # -XX:+HeapDumpOnOutOfMemoryError or -XX:-OmitStackTraceInFastThrow
-            # Extract flag name for pattern matching: -XX:[+-]FlagName
-            local flag_name="${param#-XX:?}"
-            echo "-XX:[+-]${flag_name}"
-            ;;
-        -XX:*=*)
-            # -XX:HeapDumpPath=/path or -XX:OnOutOfMemoryError="cmd"
-            # Extract key before '=': -XX:HeapDumpPath
-            echo "${param%%=*}"
-            ;;
-        -D*=*)
-            # -Dfile.encoding=UTF-8
-            # Extract property name: -Dfile.encoding
-            echo "${param%%=*}"
-            ;;
-        -D*)
-            # -Dfoo (boolean property without value)
-            echo "${param}"
-            ;;
-        -Xms* | -Xmx* | -Xmn* | -Xss*)
-            # -Xmx8192m, -Xms8192m, -Xmn2g, -Xss512k
-            # Extract the prefix: -Xmx, -Xms, -Xmn, -Xss
-            echo "${param}" | sed -E 's/^(-Xm[sxn]|-Xss).*/\1/'
-            ;;
-        -Xlog:*)
-            # -Xlog:gc*:file:decorators
-            # Use prefix as key
-            echo "-Xlog:"
-            ;;
-        *)
-            # For other options, use the full parameter as key
-            echo "${param}"
-            ;;
+    "--add-opens="* | "--add-exports="* | "--add-reads="* | "--add-modules="*)
+        # --add-opens=java.base/sun.util.calendar=ALL-UNNAMED
+        # Extract module/package path as key: --add-opens=java.base/sun.util.calendar
+        echo "${param%=*}"
+        ;;
+    -XX:+* | -XX:-*)
+        # -XX:+HeapDumpOnOutOfMemoryError or -XX:-OmitStackTraceInFastThrow
+        # Extract flag name for pattern matching: -XX:[+-]FlagName
+        local flag_name="${param#-XX:?}"
+        echo "-XX:[+-]${flag_name}"
+        ;;
+    -XX:*=*)
+        # -XX:HeapDumpPath=/path or -XX:OnOutOfMemoryError="cmd"
+        # Extract key before '=': -XX:HeapDumpPath
+        echo "${param%%=*}"
+        ;;
+    -D*=*)
+        # -Dfile.encoding=UTF-8
+        # Extract property name: -Dfile.encoding
+        echo "${param%%=*}"
+        ;;
+    -D*)
+        # -Dfoo (boolean property without value)
+        echo "${param}"
+        ;;
+    -Xms* | -Xmx* | -Xmn* | -Xss*)
+        # -Xmx8192m, -Xms8192m, -Xmn2g, -Xss512k
+        # Extract the prefix: -Xmx, -Xms, -Xmn, -Xss
+        echo "${param}" | sed -E 's/^(-Xm[sxn]|-Xss).*/\1/'
+        ;;
+    -Xlog:*)
+        # -Xlog:gc*:file:decorators
+        # Use prefix as key
+        echo "-Xlog:"
+        ;;
+    *)
+        # For other options, use the full parameter as key
+        echo "${param}"
+        ;;
     esac
 }
 
--- bin/start_file_cache_microbench.sh.orig
+++ bin/start_file_cache_microbench.sh
@@ -115,7 +115,6 @@
     exit 1
 fi
 
-
 JEMALLOC_CONF="percpu_arena:percpu,background_thread:true,metadata_thp:auto,muzzy_decay_ms:5000,dirty_decay_ms:5000,oversize_threshold:0,prof:true,lg_prof_interval:30,lg_prof_sample:19,prof_final:false,prof_active:true"
 JEMALLOC_PROF_PRFIX="jeprofile_doris_cloud"
 
--- build-support/clang-format.sh.orig
+++ build-support/clang-format.sh
@@ -36,7 +36,7 @@
         echo "Error: Homebrew is missing. Please install it first due to we use Homebrew to manage the tools which are needed to build the project."
         exit 1
     fi
-    if ! brew list llvm@16 > /dev/null 2>&1; then
+    if ! brew list llvm@16 >/dev/null 2>&1; then
         echo "Error: Please install llvm@16 firt due to we use it to format code."
         exit 1
     fi
--- build.sh.orig
+++ build.sh
@@ -264,11 +264,11 @@
         --be-cdc-client)
             BUILD_BE_CDC_CLIENT=1
             shift
-            ;;    
+            ;;
         --exclude-obs-dependencies)
             BUILD_OBS_DEPENDENCIES=0
             shift
-            ;; 
+            ;;
         --exclude-cos-dependencies)
             BUILD_COS_DEPENDENCIES=0
             shift
@@ -280,7 +280,7 @@
         --disable-dynamic-arch)
             ENABLE_DYNAMIC_ARCH='OFF'
             shift
-            ;;           
+            ;;
         --clean)
             CLEAN=1
             shift
@@ -329,7 +329,7 @@
         BUILD_META_TOOL='ON'
         BUILD_FILE_CACHE_MICROBENCH_TOOL='OFF'
         BUILD_INDEX_TOOL='ON'
-	    BUILD_TASK_EXECUTOR_SIMULATOR='OFF'
+        BUILD_TASK_EXECUTOR_SIMULATOR='OFF'
         BUILD_HIVE_UDF=1
         BUILD_BE_JAVA_EXTENSIONS=1
         BUILD_BE_CDC_CLIENT=1
@@ -569,7 +569,10 @@
 FEAT+=($([[ ${BUILD_HIVE_UDF} -eq 1 ]] && echo "+HIVE_UDF" || echo "-HIVE_UDF"))
 FEAT+=($([[ ${BUILD_BE_JAVA_EXTENSIONS} -eq 1 ]] && echo "+BE_JAVA_EXTENSIONS" || echo "-BE_JAVA_EXTENSIONS"))
 
-export DORIS_FEATURE_LIST=$(IFS=','; echo "${FEAT[*]}")
+export DORIS_FEATURE_LIST=$(
+    IFS=','
+    echo "${FEAT[*]}"
+)
 echo "Feature List: ${DORIS_FEATURE_LIST}"
 
 # Clean and build generated code
@@ -788,19 +791,19 @@
     if [[ "${BUILD_COS_DEPENDENCIES}" -eq 0 ]]; then
         DEPENDENCIES_MVN_OPTS+=" -Dcos.dependency.scope=provided "
     fi
-    
+
     if [[ "${DISABLE_JAVA_CHECK_STYLE}" = "ON" ]]; then
         # Allowed user customer set env param USER_SETTINGS_MVN_REPO means settings.xml file path
         if [[ -n ${USER_SETTINGS_MVN_REPO} && -f ${USER_SETTINGS_MVN_REPO} ]]; then
-            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests -Dcheckstyle.skip=true ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS}  -gs "${USER_SETTINGS_MVN_REPO}" -T 1C
+            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests -Dcheckstyle.skip=true ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS} -gs "${USER_SETTINGS_MVN_REPO}" -T 1C
         else
-            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests -Dcheckstyle.skip=true ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS}  -T 1C
+            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests -Dcheckstyle.skip=true ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS} -T 1C
         fi
     else
         if [[ -n ${USER_SETTINGS_MVN_REPO} && -f ${USER_SETTINGS_MVN_REPO} ]]; then
-            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS}  -gs "${USER_SETTINGS_MVN_REPO}" -T 1C
+            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS} -gs "${USER_SETTINGS_MVN_REPO}" -T 1C
         else
-            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS}  -T 1C
+            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS} -T 1C
         fi
     fi
     cd "${DORIS_HOME}"
@@ -859,12 +862,12 @@
     mkdir -p "${DORIS_OUTPUT}/fe/plugins/java_extensions/"
 
     if [ "${TARGET_SYSTEM}" = "Darwin" ] || [ "${TARGET_SYSTEM}" = "Linux" ]; then
-      mkdir -p "${DORIS_OUTPUT}/fe/arthas"
-      rm -rf "${DORIS_OUTPUT}/fe/arthas/*"
-      unzip -o "${DORIS_OUTPUT}/fe/lib/arthas-packaging-*.jar" arthas-bin.zip -d "${DORIS_OUTPUT}/fe/arthas/"
-      unzip -o "${DORIS_OUTPUT}/fe/arthas/arthas-bin.zip" -d "${DORIS_OUTPUT}/fe/arthas/"
-      rm "${DORIS_OUTPUT}/fe/arthas/math-game.jar"
-      rm "${DORIS_OUTPUT}/fe/arthas/arthas-bin.zip"
+        mkdir -p "${DORIS_OUTPUT}/fe/arthas"
+        rm -rf "${DORIS_OUTPUT}/fe/arthas/*"
+        unzip -o "${DORIS_OUTPUT}/fe/lib/arthas-packaging-*.jar" arthas-bin.zip -d "${DORIS_OUTPUT}/fe/arthas/"
+        unzip -o "${DORIS_OUTPUT}/fe/arthas/arthas-bin.zip" -d "${DORIS_OUTPUT}/fe/arthas/"
+        rm "${DORIS_OUTPUT}/fe/arthas/math-game.jar"
+        rm "${DORIS_OUTPUT}/fe/arthas/arthas-bin.zip"
     fi
 fi
 
@@ -982,15 +985,15 @@
         module_proj_jar="${DORIS_HOME}/fe/be-java-extensions/${extensions_module}/target/${extensions_module}-project.jar"
         mkdir "${BE_JAVA_EXTENSIONS_DIR}"/"${extensions_module}"
         echo "Copy Be Extensions ${extensions_module} jar to ${BE_JAVA_EXTENSIONS_DIR}/${extensions_module}"
-     if [[ "${extensions_module}" == "${HADOOP_DEPS_NAME}" ]]; then
-          
+        if [[ "${extensions_module}" == "${HADOOP_DEPS_NAME}" ]]; then
+
             BE_HADOOP_HDFS_DIR="${DORIS_OUTPUT}/be/lib/hadoop_hdfs/"
             echo "Copy Be Extensions hadoop deps jars to ${BE_HADOOP_HDFS_DIR}"
             rm -rf "${BE_HADOOP_HDFS_DIR}"
             mkdir "${BE_HADOOP_HDFS_DIR}"
             HADOOP_DEPS_JAR_DIR="${DORIS_HOME}/fe/be-java-extensions/${HADOOP_DEPS_NAME}/target"
             echo "HADOOP_DEPS_JAR_DIR: ${HADOOP_DEPS_JAR_DIR}"
-            if  [[ "${BUILD_BE_JAVA_EXTENSIONS}" -eq 1 && ! -d "${HADOOP_DEPS_JAR_DIR}/lib" ]]; then
+            if [[ "${BUILD_BE_JAVA_EXTENSIONS}" -eq 1 && ! -d "${HADOOP_DEPS_JAR_DIR}/lib" ]]; then
                 echo "WARN: lib directory missing (likely due to Maven cache). Regenerating..."
                 pushd "${DORIS_HOME}/fe/be-java-extensions/${HADOOP_DEPS_NAME}"
                 "${MVN_CMD}" dependency:copy-dependencies -DskipTests -Dcheckstyle.skip=true
@@ -1015,7 +1018,7 @@
                 cp -r "${DORIS_HOME}/fe/be-java-extensions/${extensions_module}/target/lib" "${BE_JAVA_EXTENSIONS_DIR}/${extensions_module}/"
             fi
         fi
-    done        
+    done
 
     # copy jindofs jars, only support for Linux x64 or arm
     if [[ "${BUILD_JINDOFS}" == "ON" ]]; then
--- cloud/script/build_fdb.sh.orig
+++ cloud/script/build_fdb.sh
@@ -53,7 +53,7 @@
 
 # Print help message
 show_help() {
-    cat << EOF
+    cat <<EOF
 Usage: $0 [OPTIONS]
 
 Build FoundationDB using Docker.
@@ -110,110 +110,110 @@
 # Parse command line arguments
 while [[ $# -gt 0 ]]; do
     case $1 in
-        -v)
-            VERSION="$2"
-            shift 2
-            ;;
-        -o)
-            BUILD_DIR="$2"
-            shift 2
-            ;;
-        -i)
-            DOCKER_IMAGE="$2"
-            shift 2
-            ;;
-        -s)
-            SRC_DIR="$2"
-            shift 2
-            ;;
-        -u)
-            UPDATE_REPO=false
-            shift
-            ;;
-        --aws)
-            BUILD_AWS_BACKUP=true
-            shift
-            ;;
-        --azure)
-            BUILD_AZURE_BACKUP=true
-            shift
-            ;;
-        --no-jemalloc)
-            USE_JEMALLOC=false
-            shift
-            ;;
-        --no-lto)
-            USE_LTO=false
-            shift
-            ;;
-        --no-debug-syms)
-            FULL_DEBUG_SYMBOLS=false
-            shift
-            ;;
-        --no-docs)
-            BUILD_DOCUMENTATION=false
-            shift
-            ;;
-        --no-rocksdb)
-            WITH_ROCKSDB=false
-            shift
-            ;;
-        --no-grpc)
-            WITH_GRPC=false
-            shift
-            ;;
-        --debug-syms)
-            FULL_DEBUG_SYMBOLS=true
-            shift
-            ;;
-        --docs)
-            BUILD_DOCUMENTATION=true
-            shift
-            ;;
-        --rocksdb)
-            WITH_ROCKSDB=true
-            shift
-            ;;
-        --grpc)
-            WITH_GRPC=true
-            shift
-            ;;
-        --java)
-            BUILD_JAVA_BINDING=true
-            shift
-            ;;
-        --go)
-            BUILD_GO_BINDING=true
-            shift
-            ;;
-        --swift)
-            BUILD_SWIFT_BINDING=true
-            shift
-            ;;
-        --ruby)
-            BUILD_RUBY_BINDING=true
-            shift
-            ;;
-        --all-bindings)
-            BUILD_JAVA_BINDING=true
-            BUILD_GO_BINDING=true
-            BUILD_SWIFT_BINDING=true
-            BUILD_RUBY_BINDING=true
-            shift
-            ;;
-        --minimal-bindings)
-            BUILD_PYTHON_BINDING=false
-            shift
-            ;;
-        -h)
-            show_help
-            exit 0
-            ;;
-        *)
-            echo -e "${RED}Unknown option: $1${NC}" >&2
-            show_help
-            exit 1
-            ;;
+    -v)
+        VERSION="$2"
+        shift 2
+        ;;
+    -o)
+        BUILD_DIR="$2"
+        shift 2
+        ;;
+    -i)
+        DOCKER_IMAGE="$2"
+        shift 2
+        ;;
+    -s)
+        SRC_DIR="$2"
+        shift 2
+        ;;
+    -u)
+        UPDATE_REPO=false
+        shift
+        ;;
+    --aws)
+        BUILD_AWS_BACKUP=true
+        shift
+        ;;
+    --azure)
+        BUILD_AZURE_BACKUP=true
+        shift
+        ;;
+    --no-jemalloc)
+        USE_JEMALLOC=false
+        shift
+        ;;
+    --no-lto)
+        USE_LTO=false
+        shift
+        ;;
+    --no-debug-syms)
+        FULL_DEBUG_SYMBOLS=false
+        shift
+        ;;
+    --no-docs)
+        BUILD_DOCUMENTATION=false
+        shift
+        ;;
+    --no-rocksdb)
+        WITH_ROCKSDB=false
+        shift
+        ;;
+    --no-grpc)
+        WITH_GRPC=false
+        shift
+        ;;
+    --debug-syms)
+        FULL_DEBUG_SYMBOLS=true
+        shift
+        ;;
+    --docs)
+        BUILD_DOCUMENTATION=true
+        shift
+        ;;
+    --rocksdb)
+        WITH_ROCKSDB=true
+        shift
+        ;;
+    --grpc)
+        WITH_GRPC=true
+        shift
+        ;;
+    --java)
+        BUILD_JAVA_BINDING=true
+        shift
+        ;;
+    --go)
+        BUILD_GO_BINDING=true
+        shift
+        ;;
+    --swift)
+        BUILD_SWIFT_BINDING=true
+        shift
+        ;;
+    --ruby)
+        BUILD_RUBY_BINDING=true
+        shift
+        ;;
+    --all-bindings)
+        BUILD_JAVA_BINDING=true
+        BUILD_GO_BINDING=true
+        BUILD_SWIFT_BINDING=true
+        BUILD_RUBY_BINDING=true
+        shift
+        ;;
+    --minimal-bindings)
+        BUILD_PYTHON_BINDING=false
+        shift
+        ;;
+    -h)
+        show_help
+        exit 0
+        ;;
+    *)
+        echo -e "${RED}Unknown option: $1${NC}" >&2
+        show_help
+        exit 1
+        ;;
     esac
 done
 
--- cloud/script/start.sh.orig
+++ cloud/script/start.sh
@@ -54,9 +54,9 @@
 fi
 # echo "$@" "daemonized=${daemonized}"}
 
-custom_start="${DORIS_HOME}/bin/custom_start.sh" 
+custom_start="${DORIS_HOME}/bin/custom_start.sh"
 if [[ -f "${custom_start}" ]]; then
-  source "${custom_start}" 
+    source "${custom_start}"
 fi
 enable_hdfs=${enable_hdfs:-1}
 process_name="${process_name:-doris_cloud}"
--- docker/thirdparties/docker-compose/common/event-hook.sh.orig
+++ docker/thirdparties/docker-compose/common/event-hook.sh
--- docker/thirdparties/docker-compose/common/hive-configure.sh.orig
+++ docker/thirdparties/docker-compose/common/hive-configure.sh
@@ -19,16 +19,16 @@
 # Referenced from [docker-hive](https://github.com/big-data-europe/docker-hive)
 
 # Set some sensible defaults
-export CORE_CONF_fs_defaultFS=${CORE_CONF_fs_defaultFS:-hdfs://`hostname -f`:8020}
+export CORE_CONF_fs_defaultFS=${CORE_CONF_fs_defaultFS:-hdfs://$(hostname -f):8020}
 
 function addProperty() {
-  local path=$1
-  local name=$2
-  local value=$3
+    local path=$1
+    local name=$2
+    local value=$3
 
-  local entry="<property><name>$name</name><value>${value}</value></property>"
-  local escapedEntry=$(echo $entry | sed 's/\//\\\//g')
-  sed -i "/<\/configuration>/ s/.*/${escapedEntry}\n&/" $path
+    local entry="<property><name>$name</name><value>${value}</value></property>"
+    local escapedEntry=$(echo $entry | sed 's/\//\\\//g')
+    sed -i "/<\/configuration>/ s/.*/${escapedEntry}\n&/" $path
 }
 
 function configure() {
@@ -38,10 +38,10 @@
 
     local var
     local value
-    
+
     echo "Configuring $module"
-    for c in `printenv | perl -sne 'print "$1 " if m/^${envPrefix}_(.+?)=.*/' -- -envPrefix=$envPrefix`; do 
-        name=`echo ${c} | perl -pe 's/___/-/g; s/__/_/g; s/_/./g'`
+    for c in $(printenv | perl -sne 'print "$1 " if m/^${envPrefix}_(.+?)=.*/' -- -envPrefix=$envPrefix); do
+        name=$(echo ${c} | perl -pe 's/___/-/g; s/__/_/g; s/_/./g')
         var="${envPrefix}_${c}"
         value=${!var}
         echo " - Setting $name=$  "
--- docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh.orig
+++ docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh
@@ -24,18 +24,18 @@
     local output_file=$5
 
     // clear output file
-    echo "" > "$output_file"
+    echo "" >"$output_file"
 
     local id=1
     while IFS= read -r line; do
         if [ -n "$type_value" ]; then
-            echo "{\"index\": {\"_index\": \"$index_name\", \"_type\": \"$type_value\", \"_id\": \"${id_prefix}${id}\"}}"  >> "$output_file"
+            echo "{\"index\": {\"_index\": \"$index_name\", \"_type\": \"$type_value\", \"_id\": \"${id_prefix}${id}\"}}" >>"$output_file"
         else
-            echo "{\"index\": {\"_index\": \"$index_name\", \"_id\": \"${id_prefix}${id}\"}}"  >> "$output_file"
+            echo "{\"index\": {\"_index\": \"$index_name\", \"_id\": \"${id_prefix}${id}\"}}" >>"$output_file"
         fi
-        echo "$line"  >> "$output_file"
+        echo "$line" >>"$output_file"
         id=$((id + 1))
-    done < "$data_file"
+    done <"$data_file"
 }
 
 array_data_file="/mnt/scripts/data/composite_type_array_bulk.json"
--- docker/thirdparties/docker-compose/hive/scripts/data/default/account_fund/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/default/account_fund/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/default/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/default/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/default/hive01/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/default/hive01/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/default/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/default/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/default/sale_table/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/default/sale_table/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/default/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/default/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/default/string_table/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/default/string_table/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/default/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/default/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/default/student/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/default/student/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/default/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/default/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/default/test1/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/default/test1/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/default/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/default/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/default/test2/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/default/test2/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/default/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/default/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/default/test_hive_doris/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/default/test_hive_doris/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/default/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/default/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/datev2_csv/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/datev2_csv/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}/create_table.hql"
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/datev2_orc/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/datev2_orc/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/datev2_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/datev2_parquet/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_config_test/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_config_test/run.sh
@@ -11,4 +11,3 @@
 hive -f "${CUR_DIR}"/create_table.hql
 
 hadoop fs -rm -r /user/doris/suites/default/hive_ignore_absent_partitions_table/country=India
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type2/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type2/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type3/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type3/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type_delimiter/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type_delimiter/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type_delimiter2/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type_delimiter2/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type_delimiter3/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type_delimiter3/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_all_types/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_all_types/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_delimiter/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_delimiter/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_nestedarray/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_nestedarray/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_upper_case_orc/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_upper_case_orc/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_upper_case_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_upper_case_parquet/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/logs1_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/logs1_parquet/run.sh
@@ -9,4 +9,3 @@
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/one_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/one_partition/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}/create_table.hql"
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/orc_nested_types/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/orc_nested_types/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/orc_partitioned_columns/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/orc_partitioned_columns/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/orc_partitioned_one_column/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/orc_partitioned_one_column/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/orc_predicate/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/orc_predicate/run.sh
@@ -5,5 +5,3 @@
 
 # create table
 hive -f "${CUR_DIR}"/orc_predicate_table.hql
-
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/par_fields_in_file_orc/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/par_fields_in_file_orc/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/par_fields_in_file_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/par_fields_in_file_parquet/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_bigint/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_bigint/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_boolean/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_boolean/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_char/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_char/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_date/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_date/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_decimal/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_decimal/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_double/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_double/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_float/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_float/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_int/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_int/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_smallint/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_smallint/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_string/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_string/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_timestamp/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_timestamp/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_tinyint/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_tinyint/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_varchar/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_varchar/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_bloom_filter/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_bloom_filter/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_lz4_compression/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_lz4_compression/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_lzo_compression/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_lzo_compression/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_partitioned_columns/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_partitioned_columns/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_partitioned_one_column/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_partitioned_one_column/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_predicate_table/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_predicate_table/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/partition_location_1/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/partition_location_1/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/partition_location_2/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/partition_location_2/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/partition_manual_remove/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/partition_manual_remove/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_chinese_orc/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_chinese_orc/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_chinese_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_chinese_parquet/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_chinese_text/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_chinese_text/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_complex_types/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_complex_types/run.sh
@@ -9,4 +9,3 @@
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_compress_partitioned/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_compress_partitioned/run.sh
@@ -9,4 +9,3 @@
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_csv_format_error/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_csv_format_error/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}/create_table.hql"
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_date_string_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_date_string_partition/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}/create_table.hql"
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_hive_same_db_table_name/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_hive_same_db_table_name/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_hive_special_char_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_hive_special_char_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_mixed_par_locations_orc/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_mixed_par_locations_orc/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_mixed_par_locations_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_mixed_par_locations_parquet/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_multi_langs_orc/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_multi_langs_orc/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_multi_langs_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_multi_langs_parquet/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_multi_langs_text/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_multi_langs_text/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_special_orc_formats/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_special_orc_formats/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_truncate_char_or_varchar_columns_orc/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_truncate_char_or_varchar_columns_orc/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_truncate_char_or_varchar_columns_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_truncate_char_or_varchar_columns_parquet/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_truncate_char_or_varchar_columns_text/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_truncate_char_or_varchar_columns_text/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_wide_table/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_wide_table/run.sh
@@ -9,4 +9,3 @@
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/text_partitioned_columns/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/text_partitioned_columns/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/text_partitioned_one_column/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/text_partitioned_one_column/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/timestamp_with_time_zone/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/timestamp_with_time_zone/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/two_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/two_partition/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}/create_table.hql"
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/type_change_orc/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/type_change_orc/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/type_change_origin/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/type_change_origin/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/type_change_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/type_change_parquet/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/bigint_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/bigint_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/char_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/char_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/date_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/date_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/decimal_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/decimal_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/double_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/double_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/float_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/float_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/int_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/int_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/smallint_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/smallint_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/string_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/string_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/tinyint_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/tinyint_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/varchar_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/varchar_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/regression/crdmm_data/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/regression/crdmm_data/run.sh
@@ -3,11 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/regression/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/regression/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
-
--- docker/thirdparties/docker-compose/hive/scripts/data/regression/serde_prop/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/regression/serde_prop/run.sh
@@ -5,5 +5,3 @@
 
 # create table
 hive -f "${CUR_DIR}"/some_serde_table.hql
-
-
--- docker/thirdparties/docker-compose/hive/scripts/data/statistics/statistics/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/statistics/statistics/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/statistics/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/statistics/
 
 # create table
 hive -f "${CUR_DIR}/create_table.hql"
-
--- docker/thirdparties/docker-compose/hive/scripts/data/statistics/stats/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/statistics/stats/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/statistics/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/statistics/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/test/hive_test/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/test/hive_test/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/test/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/test/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/tpch_1000_parquet/part/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/tpch_1000_parquet/part/run.sh
@@ -19,4 +19,3 @@
 
 # # create table
 # hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh
@@ -18,7 +18,6 @@
 
 set -e -x
 
-
 AUX_LIB="/mnt/scripts/auxlib"
 for file in "${AUX_LIB}"/*.tar.gz; do
     [ -e "$file" ] || continue
@@ -33,7 +32,6 @@
 # start metastore
 nohup /opt/hive/bin/hive --service metastore &
 
-
 # wait metastore start
 while ! $(nc -z localhost "${HMS_PORT:-9083}"); do
     sleep 5s
@@ -73,7 +71,6 @@
 hadoop_put_pids=()
 hadoop fs -mkdir -p /user/doris/
 
-
 ## put tpch1
 if [[ -z "$(ls /mnt/scripts/tpch1.db)" ]]; then
     echo "tpch1.db does not exist"
@@ -86,7 +83,6 @@
 hadoop fs -copyFromLocal -f /mnt/scripts/paimon1 /user/doris/ &
 hadoop_put_pids+=($!)
 
-
 ## put tvf_data
 if [[ -z "$(ls /mnt/scripts/tvf_data)" ]]; then
     echo "tvf_data does not exist"
@@ -99,7 +95,6 @@
 hadoop fs -copyFromLocal -f /mnt/scripts/preinstalled_data /user/doris/ &
 hadoop_put_pids+=($!)
 
-
 # wait put finish
 wait "${hadoop_put_pids[@]}"
 if [[ -z "$(hadoop fs -ls /user/doris/paimon1)" ]]; then
--- docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh
@@ -19,8 +19,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 # Extract all tar.gz files under the repo
-find ${CUR_DIR}/data -type f -name "*.tar.gz" -print0 | \
-xargs -0 -n1 -P"${LOAD_PARALLEL}" bash -c '
+find ${CUR_DIR}/data -type f -name "*.tar.gz" -print0 |
+    xargs -0 -n1 -P"${LOAD_PARALLEL}" bash -c '
   f="$0"
   echo "Extracting hive data $f"
   dir=$(dirname "$f")
@@ -145,4 +145,3 @@
 for jar in "${jars[@]}"; do
     curl -O "https://${s3BucketName}.${s3Endpoint}/regression/docker/hive3/${jar}"
 done
-
--- docker/thirdparties/docker-compose/hudi/scripts/init.sh.orig
+++ docker/thirdparties/docker-compose/hudi/scripts/init.sh
@@ -21,8 +21,8 @@
 # Remove SUCCESS file from previous run to ensure fresh initialization
 SUCCESS_FILE="/opt/hudi-scripts/SUCCESS"
 if [[ -f "${SUCCESS_FILE}" ]]; then
-  echo "Removing previous SUCCESS file to ensure fresh initialization..."
-  rm -f "${SUCCESS_FILE}"
+    echo "Removing previous SUCCESS file to ensure fresh initialization..."
+    rm -f "${SUCCESS_FILE}"
 fi
 
 SPARK_HOME=/opt/spark
@@ -34,50 +34,50 @@
 
 # Function to download a JAR file if it doesn't exist
 download_jar() {
-  local jar_name="$1"
-  local version="$2"
-  local url="$3"
-  local jar_file="${CACHE_DIR}/${jar_name}-${version}.jar"
-  
-  if [[ ! -f "${jar_file}" ]]; then
-    echo "Downloading ${jar_name} JAR ${version} from ${url} ..." >&2
-    local download_success=false
-    if command -v curl >/dev/null 2>&1; then
-      if curl -sSfL "${url}" -o "${jar_file}"; then
-        download_success=true
-      else
-        echo "Error: Failed to download ${jar_name} from ${url}" >&2
-      fi
-    elif command -v wget >/dev/null 2>&1; then
-      if wget -qO "${jar_file}" "${url}"; then
-        download_success=true
-      else
-        echo "Error: Failed to download ${jar_name} from ${url}" >&2
-      fi
-    else
-      echo "Error: Neither curl nor wget is available in hudi-spark container." >&2
-      exit 1
-    fi
-    
-    if [[ "${download_success}" == "false" ]]; then
-      echo "Error: Failed to download ${jar_name} JAR. Please check the URL: ${url}" >&2
-      exit 1
-    fi
-    
+    local jar_name="$1"
+    local version="$2"
+    local url="$3"
+    local jar_file="${CACHE_DIR}/${jar_name}-${version}.jar"
+
     if [[ ! -f "${jar_file}" ]]; then
-      echo "Error: Downloaded file ${jar_file} does not exist" >&2
-      exit 1
+        echo "Downloading ${jar_name} JAR ${version} from ${url} ..." >&2
+        local download_success=false
+        if command -v curl >/dev/null 2>&1; then
+            if curl -sSfL "${url}" -o "${jar_file}"; then
+                download_success=true
+            else
+                echo "Error: Failed to download ${jar_name} from ${url}" >&2
+            fi
+        elif command -v wget >/dev/null 2>&1; then
+            if wget -qO "${jar_file}" "${url}"; then
+                download_success=true
+            else
+                echo "Error: Failed to download ${jar_name} from ${url}" >&2
+            fi
+        else
+            echo "Error: Neither curl nor wget is available in hudi-spark container." >&2
+            exit 1
+        fi
+
+        if [[ "${download_success}" == "false" ]]; then
+            echo "Error: Failed to download ${jar_name} JAR. Please check the URL: ${url}" >&2
+            exit 1
+        fi
+
+        if [[ ! -f "${jar_file}" ]]; then
+            echo "Error: Downloaded file ${jar_file} does not exist" >&2
+            exit 1
+        fi
     fi
-  fi
-  echo "${jar_file}"
+    echo "${jar_file}"
 }
 
 # Function to link a JAR file to Spark jars directory
 link_jar() {
-  local jar_file="$1"
-  local jar_name="$2"
-  local version="$3"
-  ln -sf "${jar_file}" "${JARS_DIR}/${jar_name}-${version}.jar"
+    local jar_file="$1"
+    local jar_name="$2"
+    local version="$3"
+    ln -sf "${jar_file}" "${JARS_DIR}/${jar_name}-${version}.jar"
 }
 
 # Wait for Hive Metastore to be ready
@@ -88,35 +88,35 @@
 RETRY_COUNT=0
 
 while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
-  if command -v nc >/dev/null 2>&1; then
-    if nc -z "${METASTORE_HOST}" "${METASTORE_PORT}" 2>/dev/null; then
-      echo "Hive Metastore is ready at ${METASTORE_HOST}:${METASTORE_PORT}"
-      break
+    if command -v nc >/dev/null 2>&1; then
+        if nc -z "${METASTORE_HOST}" "${METASTORE_PORT}" 2>/dev/null; then
+            echo "Hive Metastore is ready at ${METASTORE_HOST}:${METASTORE_PORT}"
+            break
+        fi
+    elif command -v timeout >/dev/null 2>&1; then
+        if timeout 1 bash -c "cat < /dev/null > /dev/tcp/${METASTORE_HOST}/${METASTORE_PORT}" 2>/dev/null; then
+            echo "Hive Metastore is ready at ${METASTORE_HOST}:${METASTORE_PORT}"
+            break
+        fi
+    else
+        # Fallback: just wait a bit and assume it's ready
+        if [ $RETRY_COUNT -eq 0 ]; then
+            echo "Warning: nc or timeout command not available, skipping metastore readiness check"
+            sleep 10
+            break
+        fi
     fi
-  elif command -v timeout >/dev/null 2>&1; then
-    if timeout 1 bash -c "cat < /dev/null > /dev/tcp/${METASTORE_HOST}/${METASTORE_PORT}" 2>/dev/null; then
-      echo "Hive Metastore is ready at ${METASTORE_HOST}:${METASTORE_PORT}"
-      break
+
+    RETRY_COUNT=$((RETRY_COUNT + 1))
+    if [ $((RETRY_COUNT % 10)) -eq 0 ]; then
+        echo "Waiting for Hive Metastore... (${RETRY_COUNT}/${MAX_RETRIES})"
     fi
-  else
-    # Fallback: just wait a bit and assume it's ready
-    if [ $RETRY_COUNT -eq 0 ]; then
-      echo "Warning: nc or timeout command not available, skipping metastore readiness check"
-      sleep 10
-      break
-    fi
-  fi
-  
-  RETRY_COUNT=$((RETRY_COUNT + 1))
-  if [ $((RETRY_COUNT % 10)) -eq 0 ]; then
-    echo "Waiting for Hive Metastore... (${RETRY_COUNT}/${MAX_RETRIES})"
-  fi
-  sleep 2
+    sleep 2
 done
 
 if [ $RETRY_COUNT -ge $MAX_RETRIES ]; then
-  echo "Error: Hive Metastore did not become ready within $((MAX_RETRIES * 2)) seconds"
-  exit 1
+    echo "Error: Hive Metastore did not become ready within $((MAX_RETRIES * 2)) seconds"
+    exit 1
 fi
 
 # Write core-site for MinIO (S3A)
@@ -191,37 +191,37 @@
 TEMP_SQL_DIR="/tmp/hudi_sql"
 
 if [[ -d "${SCRIPTS_DIR}" ]]; then
-  mkdir -p "${TEMP_SQL_DIR}"
-  
-  # Process each SQL file: substitute environment variables and combine them
-  echo "Processing Hudi SQL scripts..."
-  for sql_file in $(find "${SCRIPTS_DIR}" -name '*.sql' | sort); do
-    echo "Processing ${sql_file}..."
-    # Use sed to replace environment variables in SQL files
-    # Replace ${HIVE_METASTORE_URIS} and ${HUDI_BUCKET} with actual values
-    sed "s|\${HIVE_METASTORE_URIS}|${HIVE_METASTORE_URIS}|g; s|\${HUDI_BUCKET}|${HUDI_BUCKET}|g" "${sql_file}" >> "${TEMP_SQL_DIR}/hudi_total.sql"
-    echo "" >> "${TEMP_SQL_DIR}/hudi_total.sql"
-  done
-  
-  # Run Spark SQL to execute all SQL scripts
-  echo "Executing Hudi SQL scripts..."
-  START_TIME=$(date +%s)
-  ${SPARK_HOME}/bin/spark-sql \
-    --master local[*] \
-    --name hudi-init \
-    --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \
-    --conf spark.sql.catalogImplementation=hive \
-    --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension \
-    --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog \
-    -f "${TEMP_SQL_DIR}/hudi_total.sql"
-  END_TIME=$(date +%s)
-  EXECUTION_TIME=$((END_TIME - START_TIME))
-  echo "Hudi SQL scripts executed in ${EXECUTION_TIME} seconds"
-  
-  # Clean up temporary SQL file
-  rm -f "${TEMP_SQL_DIR}/hudi_total.sql"
+    mkdir -p "${TEMP_SQL_DIR}"
+
+    # Process each SQL file: substitute environment variables and combine them
+    echo "Processing Hudi SQL scripts..."
+    for sql_file in $(find "${SCRIPTS_DIR}" -name '*.sql' | sort); do
+        echo "Processing ${sql_file}..."
+        # Use sed to replace environment variables in SQL files
+        # Replace ${HIVE_METASTORE_URIS} and ${HUDI_BUCKET} with actual values
+        sed "s|\${HIVE_METASTORE_URIS}|${HIVE_METASTORE_URIS}|g; s|\${HUDI_BUCKET}|${HUDI_BUCKET}|g" "${sql_file}" >>"${TEMP_SQL_DIR}/hudi_total.sql"
+        echo "" >>"${TEMP_SQL_DIR}/hudi_total.sql"
+    done
+
+    # Run Spark SQL to execute all SQL scripts
+    echo "Executing Hudi SQL scripts..."
+    START_TIME=$(date +%s)
+    ${SPARK_HOME}/bin/spark-sql \
+        --master local[*] \
+        --name hudi-init \
+        --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \
+        --conf spark.sql.catalogImplementation=hive \
+        --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension \
+        --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog \
+        -f "${TEMP_SQL_DIR}/hudi_total.sql"
+    END_TIME=$(date +%s)
+    EXECUTION_TIME=$((END_TIME - START_TIME))
+    echo "Hudi SQL scripts executed in ${EXECUTION_TIME} seconds"
+
+    # Clean up temporary SQL file
+    rm -f "${TEMP_SQL_DIR}/hudi_total.sql"
 else
-  echo "Warning: SQL scripts directory ${SCRIPTS_DIR} not found, skipping table initialization."
+    echo "Warning: SQL scripts directory ${SCRIPTS_DIR} not found, skipping table initialization."
 fi
 
 # Create success marker file to indicate initialization is complete
--- docker/thirdparties/docker-compose/iceberg/tools/save_docker.sh.orig
+++ docker/thirdparties/docker-compose/iceberg/tools/save_docker.sh
--- docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh.orig
+++ docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh
@@ -56,7 +56,6 @@
 curl -O https://s3BucketName.s3Endpoint/regression/docker/hive3/paimon-hive-connector-3.1-1.3-SNAPSHOT.jar
 curl -O https://s3BucketName.s3Endpoint/regression/docker/hive3/gcs-connector-hadoop3-2.2.24-shaded.jar
 
-
 /usr/local/hadoop-run.sh &
 
 # check healthy hear
@@ -86,7 +85,7 @@
     echo "Invalid index parameter. Exiting."
     exit 1
 fi
-hive  -f /usr/local/sql/create_kerberos_hive_table.sql
+hive -f /usr/local/sql/create_kerberos_hive_table.sql
 if [[ ${enablePaimonHms} == "true" ]]; then
     echo "Creating Paimon HMS catalog and table"
     hadoop fs -put /tmp/paimon_data/* /user/hive/warehouse/
--- docker/thirdparties/docker-compose/kerberos/health-checks/health.sh.orig
+++ docker/thirdparties/docker-compose/kerberos/health-checks/health.sh
@@ -29,6 +29,6 @@
 
 if test -d "${HEALTH_D}"; then
     for health_script in "${HEALTH_D}"/*; do
-        "${health_script}" &>> /var/log/container-health.log || exit 1
+        "${health_script}" &>>/var/log/container-health.log || exit 1
     done
 fi
--- docker/thirdparties/docker-compose/kerberos/health-checks/hive-health-check-2.sh.orig
+++ docker/thirdparties/docker-compose/kerberos/health-checks/hive-health-check-2.sh
--- docker/thirdparties/docker-compose/kerberos/health-checks/hive-health-check.sh.orig
+++ docker/thirdparties/docker-compose/kerberos/health-checks/hive-health-check.sh
--- docker/thirdparties/docker-compose/kerberos/health-checks/supervisorctl-check.sh.orig
+++ docker/thirdparties/docker-compose/kerberos/health-checks/supervisorctl-check.sh
@@ -32,9 +32,9 @@
 FAILED=$(supervisorctl status | grep -v RUNNING || true)
 
 if [ "$FAILED" == "" ]; then
-  echo "All services are running"
-  exit 0
+    echo "All services are running"
+    exit 0
 else
-  echo "Some of the services are failing: ${FAILED}"
-  exit 1
+    echo "Some of the services are failing: ${FAILED}"
+    exit 1
 fi
--- docker/thirdparties/docker-compose/polaris/init-catalog.sh.orig
+++ docker/thirdparties/docker-compose/polaris/init-catalog.sh
@@ -26,29 +26,30 @@
 
 echo "[polaris-init] Waiting for Polaris health check at http://$HOST:$PORT/q/health ..."
 for i in $(seq 1 120); do
-  if curl -sSf "http://$HOST:8182/q/health" >/dev/null; then
-    break
-  fi
-  sleep 2
+    if curl -sSf "http://$HOST:8182/q/health" >/dev/null; then
+        break
+    fi
+    sleep 2
 done
 
 echo "[polaris-init] Fetching OAuth token via client_credentials ..."
 # Try to obtain token using correct OAuth endpoint
 TOKEN_JSON=$(curl -sS \
-  -X POST "http://$HOST:$PORT/api/catalog/v1/oauth/tokens" \
-  -H 'Content-Type: application/x-www-form-urlencoded' \
-  -d "grant_type=client_credentials&client_id=$USER&client_secret=$PASS&scope=PRINCIPAL_ROLE:ALL")
+    -X POST "http://$HOST:$PORT/api/catalog/v1/oauth/tokens" \
+    -H 'Content-Type: application/x-www-form-urlencoded' \
+    -d "grant_type=client_credentials&client_id=$USER&client_secret=$PASS&scope=PRINCIPAL_ROLE:ALL")
 
 # Extract access_token field
 TOKEN=$(printf "%s" "$TOKEN_JSON" | sed -n 's/.*"access_token"\s*:\s*"\([^"]*\)".*/\1/p')
 
 if [ -z "$TOKEN" ]; then
-  echo "[polaris-init] ERROR: Failed to obtain OAuth token. Response: $TOKEN_JSON" >&2
-  exit 1
+    echo "[polaris-init] ERROR: Failed to obtain OAuth token. Response: $TOKEN_JSON" >&2
+    exit 1
 fi
 
 echo "[polaris-init] Creating catalog '$CATALOG' with base '$BASE_LOCATION' ..."
-CREATE_PAYLOAD=$(cat <<JSON
+CREATE_PAYLOAD=$(
+    cat <<JSON
 {
   "name": "$CATALOG",
   "type": "INTERNAL",
@@ -71,19 +72,19 @@
 
 # Try create; on 409 Conflict, treat as success
 HTTP_CODE=$(curl -sS -o /tmp/resp.json -w "%{http_code}" \
-  -X POST "http://$HOST:$PORT/api/management/v1/catalogs" \
-  -H "Authorization: Bearer $TOKEN" \
-  -H "Content-Type: application/json" \
-  -d "$CREATE_PAYLOAD")
+    -X POST "http://$HOST:$PORT/api/management/v1/catalogs" \
+    -H "Authorization: Bearer $TOKEN" \
+    -H "Content-Type: application/json" \
+    -d "$CREATE_PAYLOAD")
 
 if [ "$HTTP_CODE" = "201" ]; then
-  echo "[polaris-init] Catalog created."
+    echo "[polaris-init] Catalog created."
 elif [ "$HTTP_CODE" = "409" ]; then
-  echo "[polaris-init] Catalog already exists. Skipping."
+    echo "[polaris-init] Catalog already exists. Skipping."
 else
-  echo "[polaris-init] Create catalog failed (HTTP $HTTP_CODE):"
-  cat /tmp/resp.json || true
-  exit 1
+    echo "[polaris-init] Create catalog failed (HTTP $HTTP_CODE):"
+    cat /tmp/resp.json || true
+    exit 1
 fi
 
 echo "[polaris-init] Setting up permissions for catalog '$CATALOG' ..."
@@ -91,55 +92,54 @@
 # Create a catalog admin role grants
 echo "[polaris-init] Creating catalog admin role grants ..."
 HTTP_CODE=$(curl -sS -o /tmp/resp.json -w "%{http_code}" \
-  -X PUT "http://$HOST:$PORT/api/management/v1/catalogs/$CATALOG/catalog-roles/catalog_admin/grants" \
-  -H "Authorization: Bearer $TOKEN" \
-  -H "Content-Type: application/json" \
-  -d '{"grant":{"type":"catalog", "privilege":"CATALOG_MANAGE_CONTENT"}}')
+    -X PUT "http://$HOST:$PORT/api/management/v1/catalogs/$CATALOG/catalog-roles/catalog_admin/grants" \
+    -H "Authorization: Bearer $TOKEN" \
+    -H "Content-Type: application/json" \
+    -d '{"grant":{"type":"catalog", "privilege":"CATALOG_MANAGE_CONTENT"}}')
 
 if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ]; then
-  echo "[polaris-init] Warning: Failed to create catalog admin grants (HTTP $HTTP_CODE)"
-  cat /tmp/resp.json || true
+    echo "[polaris-init] Warning: Failed to create catalog admin grants (HTTP $HTTP_CODE)"
+    cat /tmp/resp.json || true
 fi
 
 # Create a data engineer role
 echo "[polaris-init] Creating data engineer role ..."
 HTTP_CODE=$(curl -sS -o /tmp/resp.json -w "%{http_code}" \
-  -X POST "http://$HOST:$PORT/api/management/v1/principal-roles" \
-  -H "Authorization: Bearer $TOKEN" \
-  -H "Content-Type: application/json" \
-  -d '{"principalRole":{"name":"data_engineer"}}')
+    -X POST "http://$HOST:$PORT/api/management/v1/principal-roles" \
+    -H "Authorization: Bearer $TOKEN" \
+    -H "Content-Type: application/json" \
+    -d '{"principalRole":{"name":"data_engineer"}}')
 
 if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ] && [ "$HTTP_CODE" != "409" ]; then
-  echo "[polaris-init] Warning: Failed to create data engineer role (HTTP $HTTP_CODE)"
-  cat /tmp/resp.json || true
+    echo "[polaris-init] Warning: Failed to create data engineer role (HTTP $HTTP_CODE)"
+    cat /tmp/resp.json || true
 fi
 
 # Connect the roles
 echo "[polaris-init] Connecting roles ..."
 HTTP_CODE=$(curl -sS -o /tmp/resp.json -w "%{http_code}" \
-  -X PUT "http://$HOST:$PORT/api/management/v1/principal-roles/data_engineer/catalog-roles/$CATALOG" \
-  -H "Authorization: Bearer $TOKEN" \
-  -H "Content-Type: application/json" \
-  -d '{"catalogRole":{"name":"catalog_admin"}}')
+    -X PUT "http://$HOST:$PORT/api/management/v1/principal-roles/data_engineer/catalog-roles/$CATALOG" \
+    -H "Authorization: Bearer $TOKEN" \
+    -H "Content-Type: application/json" \
+    -d '{"catalogRole":{"name":"catalog_admin"}}')
 
 if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ]; then
-  echo "[polaris-init] Warning: Failed to connect roles (HTTP $HTTP_CODE)"
-  cat /tmp/resp.json || true
+    echo "[polaris-init] Warning: Failed to connect roles (HTTP $HTTP_CODE)"
+    cat /tmp/resp.json || true
 fi
 
 # Give root the data engineer role
 echo "[polaris-init] Assigning data engineer role to root ..."
 HTTP_CODE=$(curl -sS -o /tmp/resp.json -w "%{http_code}" \
-  -X PUT "http://$HOST:$PORT/api/management/v1/principals/root/principal-roles" \
-  -H "Authorization: Bearer $TOKEN" \
-  -H "Content-Type: application/json" \
-  -d '{"principalRole": {"name":"data_engineer"}}')
+    -X PUT "http://$HOST:$PORT/api/management/v1/principals/root/principal-roles" \
+    -H "Authorization: Bearer $TOKEN" \
+    -H "Content-Type: application/json" \
+    -d '{"principalRole": {"name":"data_engineer"}}')
 
 if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ]; then
-  echo "[polaris-init] Warning: Failed to assign data engineer role to root (HTTP $HTTP_CODE)"
-  cat /tmp/resp.json || true
+    echo "[polaris-init] Warning: Failed to assign data engineer role to root (HTTP $HTTP_CODE)"
+    cat /tmp/resp.json || true
 fi
 
 echo "[polaris-init] Permissions setup completed."
 echo "[polaris-init] Done."
-
--- docker/thirdparties/docker-compose/ranger/script/install_doris_ranger_plugins.sh.orig
+++ docker/thirdparties/docker-compose/ranger/script/install_doris_ranger_plugins.sh
--- docker/thirdparties/docker-compose/ranger/script/install_doris_service_def.sh.orig
+++ docker/thirdparties/docker-compose/ranger/script/install_doris_service_def.sh
--- docker/thirdparties/run-thirdparties-docker.sh.orig
+++ docker/thirdparties/run-thirdparties-docker.sh
@@ -51,7 +51,7 @@
 STOP=0
 NEED_RESERVE_PORTS=0
 export NEED_LOAD_DATA=1
-export LOAD_PARALLEL=$(( $(getconf _NPROCESSORS_ONLN) / 2 ))
+export LOAD_PARALLEL=$(($(getconf _NPROCESSORS_ONLN) / 2))
 export IP_HOST=$(ip -4 addr show scope global | awk '/inet / {print $2}' | cut -d/ -f1 | head -n 1)
 
 if ! OPTS="$(getopt \
@@ -201,7 +201,7 @@
         RUN_MARIADB=1
     elif [[ "${element}"x == "db2"x ]]; then
         RUN_DB2=1
-    elif [[ "${element}"x == "oceanbase"x ]];then
+    elif [[ "${element}"x == "oceanbase"x ]]; then
         RUN_OCEANBASE=1
     elif [[ "${element}"x == "lakesoul"x ]]; then
         RUN_LAKESOUL=1
@@ -376,7 +376,7 @@
     . "${ROOT}"/docker-compose/hive/hive-2x_settings.env
     envsubst <"${ROOT}"/docker-compose/hive/hive-2x.yaml.tpl >"${ROOT}"/docker-compose/hive/hive-2x.yaml
     envsubst <"${ROOT}"/docker-compose/hive/hadoop-hive.env.tpl >"${ROOT}"/docker-compose/hive/hadoop-hive-2x.env
-    envsubst <"${ROOT}"/docker-compose/hive/hadoop-hive-2x.env.tpl >> "${ROOT}"/docker-compose/hive/hadoop-hive-2x.env
+    envsubst <"${ROOT}"/docker-compose/hive/hadoop-hive-2x.env.tpl >>"${ROOT}"/docker-compose/hive/hadoop-hive-2x.env
     sudo docker compose -p ${CONTAINER_UID}hive2 -f "${ROOT}"/docker-compose/hive/hive-2x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-2x.env down
     if [[ "${STOP}" -ne 1 ]]; then
         sudo docker compose -p ${CONTAINER_UID}hive2 -f "${ROOT}"/docker-compose/hive/hive-2x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-2x.env up --build --remove-orphans -d --wait
@@ -390,7 +390,7 @@
     . "${ROOT}"/docker-compose/hive/hive-3x_settings.env
     envsubst <"${ROOT}"/docker-compose/hive/hive-3x.yaml.tpl >"${ROOT}"/docker-compose/hive/hive-3x.yaml
     envsubst <"${ROOT}"/docker-compose/hive/hadoop-hive.env.tpl >"${ROOT}"/docker-compose/hive/hadoop-hive-3x.env
-    envsubst <"${ROOT}"/docker-compose/hive/hadoop-hive-3x.env.tpl >> "${ROOT}"/docker-compose/hive/hadoop-hive-3x.env
+    envsubst <"${ROOT}"/docker-compose/hive/hadoop-hive-3x.env.tpl >>"${ROOT}"/docker-compose/hive/hadoop-hive-3x.env
     sudo docker compose -p ${CONTAINER_UID}hive3 -f "${ROOT}"/docker-compose/hive/hive-3x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-3x.env down
     if [[ "${STOP}" -ne 1 ]]; then
         sudo docker compose -p ${CONTAINER_UID}hive3 -f "${ROOT}"/docker-compose/hive/hive-3x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-3x.env up --build --remove-orphans -d --wait
@@ -409,28 +409,27 @@
     if [[ "${STOP}" -ne 1 ]]; then
         if [[ ! -d "${ICEBERG_DIR}/data" ]]; then
             echo "${ICEBERG_DIR}/data does not exist"
-            cd "${ICEBERG_DIR}" \
-            && rm -f iceberg_data*.zip \
-            && wget -P "${ROOT}"/docker-compose/iceberg https://"${s3BucketName}.${s3Endpoint}"/regression/datalake/pipeline_data/iceberg_data_paimon_101.zip \
-            && sudo unzip iceberg_data_paimon_101.zip \
-            && sudo mv iceberg_data data \
-            && sudo rm -rf iceberg_data_paimon_101.zip
+            cd "${ICEBERG_DIR}" &&
+                rm -f iceberg_data*.zip &&
+                wget -P "${ROOT}"/docker-compose/iceberg https://"${s3BucketName}.${s3Endpoint}"/regression/datalake/pipeline_data/iceberg_data_paimon_101.zip &&
+                sudo unzip iceberg_data_paimon_101.zip &&
+                sudo mv iceberg_data data &&
+                sudo rm -rf iceberg_data_paimon_101.zip
             cd -
         else
             echo "${ICEBERG_DIR}/data exist, continue !"
         fi
 
-        if [[ ! -f "${ICEBERG_DIR}/data/input/jars/iceberg-aws-bundle-1.10.0.jar" ]]; then 
+        if [[ ! -f "${ICEBERG_DIR}/data/input/jars/iceberg-aws-bundle-1.10.0.jar" ]]; then
             echo "iceberg 1.10.0 jars does not exist"
-            cd "${ICEBERG_DIR}" \
-            && rm -f iceberg_1_10_0*.jars.tar.gz\
-            && wget -P "${ROOT}"/docker-compose/iceberg https://"${s3BucketName}.${s3Endpoint}"/regression/datalake/pipeline_data/iceberg_1_10_0.jars.tar.gz \
-            && sudo tar xzvf iceberg_1_10_0.jars.tar.gz -C "data/input/jars" \
-            && sudo rm -rf iceberg_1_10_0.jars.tar.gz
+            cd "${ICEBERG_DIR}" &&
+                rm -f iceberg_1_10_0*.jars.tar.gz && wget -P "${ROOT}"/docker-compose/iceberg https://"${s3BucketName}.${s3Endpoint}"/regression/datalake/pipeline_data/iceberg_1_10_0.jars.tar.gz &&
+                sudo tar xzvf iceberg_1_10_0.jars.tar.gz -C "data/input/jars" &&
+                sudo rm -rf iceberg_1_10_0.jars.tar.gz
             cd -
-        else 
+        else
             echo "iceberg 1.10.0 jars exist, continue !"
-        fi        
+        fi
 
         sudo docker compose -f "${ROOT}"/docker-compose/iceberg/iceberg.yaml --env-file "${ROOT}"/docker-compose/iceberg/iceberg.env up -d --wait
     fi
@@ -505,9 +504,9 @@
     for i in {1..2}; do
         . "${ROOT}"/docker-compose/kerberos/kerberos${i}_settings.env
         envsubst <"${ROOT}"/docker-compose/kerberos/hadoop-hive.env.tpl >"${ROOT}"/docker-compose/kerberos/hadoop-hive-${i}.env
-        envsubst <"${ROOT}"/docker-compose/kerberos/conf/my.cnf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/my.cnf
-        envsubst <"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/kdc.conf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/kdc.conf
-        envsubst <"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/krb5.conf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/krb5.conf
+        envsubst <"${ROOT}"/docker-compose/kerberos/conf/my.cnf.tpl >"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/my.cnf
+        envsubst <"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/kdc.conf.tpl >"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/kdc.conf
+        envsubst <"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/krb5.conf.tpl >"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/krb5.conf
     done
     sudo chmod a+w /etc/hosts
     sudo sed -i "1i${IP_HOST} hadoop-master" /etc/hosts
@@ -573,12 +572,12 @@
     echo "RUN_ICEBERG_REST"
     # iceberg-rest with multiple cloud storage backends
     ICEBERG_REST_DIR=${ROOT}/docker-compose/iceberg-rest
-    
+
     # generate iceberg-rest.yaml
     export CONTAINER_UID=${CONTAINER_UID}
     . "${ROOT}"/docker-compose/iceberg-rest/iceberg-rest_settings.env
     envsubst <"${ICEBERG_REST_DIR}/docker-compose.yaml.tpl" >"${ICEBERG_REST_DIR}/docker-compose.yaml"
-    
+
     sudo docker compose -f "${ICEBERG_REST_DIR}/docker-compose.yaml" down
     if [[ "${STOP}" -ne 1 ]]; then
         # Start all three REST catalogs (S3, OSS, COS)
@@ -606,102 +605,102 @@
 declare -A pids
 
 if [[ "${RUN_ES}" -eq 1 ]]; then
-    start_es > start_es.log  2>&1 &
+    start_es >start_es.log 2>&1 &
     pids["es"]=$!
 fi
 
 if [[ "${RUN_MYSQL}" -eq 1 ]]; then
-    start_mysql > start_mysql.log 2>&1 &
+    start_mysql >start_mysql.log 2>&1 &
     pids["mysql"]=$!
 fi
 
 if [[ "${RUN_PG}" -eq 1 ]]; then
-    start_pg > start_pg.log 2>&1 &
+    start_pg >start_pg.log 2>&1 &
     pids["pg"]=$!
 fi
 
 if [[ "${RUN_ORACLE}" -eq 1 ]]; then
-    start_oracle > start_oracle.log 2>&1 &
+    start_oracle >start_oracle.log 2>&1 &
     pids["oracle"]=$!
 fi
 
 if [[ "${RUN_DB2}" -eq 1 ]]; then
-    start_db2 > start_db2.log 2>&1 &
+    start_db2 >start_db2.log 2>&1 &
     pids["db2"]=$!
 fi
 
 if [[ "${RUN_OCEANBASE}" -eq 1 ]]; then
-    start_oceanbase > start_oceanbase.log 2>&1 &
+    start_oceanbase >start_oceanbase.log 2>&1 &
     pids["oceanbase"]=$!
 fi
 
 if [[ "${RUN_SQLSERVER}" -eq 1 ]]; then
-    start_sqlserver > start_sqlserver.log 2>&1 &
+    start_sqlserver >start_sqlserver.log 2>&1 &
     pids["sqlserver"]=$!
 fi
 
 if [[ "${RUN_CLICKHOUSE}" -eq 1 ]]; then
-    start_clickhouse > start_clickhouse.log 2>&1 &
+    start_clickhouse >start_clickhouse.log 2>&1 &
     pids["clickhouse"]=$!
 fi
 
 if [[ "${RUN_KAFKA}" -eq 1 ]]; then
-    start_kafka > start_kafka.log 2>&1 &
+    start_kafka >start_kafka.log 2>&1 &
     pids["kafka"]=$!
 fi
 
 if [[ "${RUN_HIVE2}" -eq 1 ]]; then
-    start_hive2 > start_hive2.log 2>&1 &
+    start_hive2 >start_hive2.log 2>&1 &
     pids["hive2"]=$!
 fi
 
 if [[ "${RUN_HIVE3}" -eq 1 ]]; then
-    start_hive3 > start_hive3.log 2>&1 &
+    start_hive3 >start_hive3.log 2>&1 &
     pids["hive3"]=$!
 fi
 
 if [[ "${RUN_ICEBERG}" -eq 1 ]]; then
-    start_iceberg > start_iceberg.log 2>&1 &
+    start_iceberg >start_iceberg.log 2>&1 &
     pids["iceberg"]=$!
 fi
 
 if [[ "${RUN_ICEBERG_REST}" -eq 1 ]]; then
-    start_iceberg_rest > start_iceberg_rest.log 2>&1 &
+    start_iceberg_rest >start_iceberg_rest.log 2>&1 &
     pids["iceberg-rest"]=$!
 fi
 
 if [[ "${RUN_HUDI}" -eq 1 ]]; then
-    start_hudi > start_hudi.log 2>&1 &
+    start_hudi >start_hudi.log 2>&1 &
     pids["hudi"]=$!
 fi
 
 if [[ "${RUN_MARIADB}" -eq 1 ]]; then
-    start_mariadb > start_mariadb.log 2>&1 &
+    start_mariadb >start_mariadb.log 2>&1 &
     pids["mariadb"]=$!
 fi
 
 if [[ "${RUN_LAKESOUL}" -eq 1 ]]; then
-    start_lakesoul > start_lakesoule.log 2>&1 &
+    start_lakesoul >start_lakesoule.log 2>&1 &
     pids["lakesoul"]=$!
 fi
 
 if [[ "${RUN_MINIO}" -eq 1 ]]; then
-    start_minio > start_minio.log 2>&1 &
+    start_minio >start_minio.log 2>&1 &
     pids["minio"]=$!
 fi
 
 if [[ "${RUN_POLARIS}" -eq 1 ]]; then
-    start_polaris > start_polaris.log 2>&1 &
+    start_polaris >start_polaris.log 2>&1 &
     pids["polaris"]=$!
 fi
 
 if [[ "${RUN_KERBEROS}" -eq 1 ]]; then
-    start_kerberos > start_kerberos.log 2>&1 &
+    start_kerberos >start_kerberos.log 2>&1 &
     pids["kerberos"]=$!
 fi
 
 if [[ "${RUN_RANGER}" -eq 1 ]]; then
-    start_ranger > start_ranger.log 2>&1 &
+    start_ranger >start_ranger.log 2>&1 &
     pids["ranger"]=$!
 fi
 echo "waiting all dockers starting done"
--- hooks/setup_worktree.sh.orig
+++ hooks/setup_worktree.sh
--- run-be-ut.sh.orig
+++ run-be-ut.sh
@@ -479,7 +479,6 @@
 profraw=${DORIS_TEST_BINARY_DIR}/doris_be_test.profraw
 profdata=${DORIS_TEST_BINARY_DIR}/doris_be_test.profdata
 
-
 if [[ ${GDB} -ge 1 ]]; then
     gdb --args "${test}" "${FILTER}"
     exit
--- run-regression-test.sh.orig
+++ run-regression-test.sh
@@ -180,7 +180,7 @@
         local cmd="$1"
         local max_attempts=3
         local attempt=1
-        
+
         while [[ ${attempt} -le ${max_attempts} ]]; do
             echo "Attempt ${attempt}/${max_attempts}: ${cmd}"
             if eval "${cmd}"; then
@@ -189,18 +189,21 @@
             else
                 echo "Command failed on attempt ${attempt}"
                 if [[ ${attempt} -lt ${max_attempts} ]]; then
-                    sleep $((attempt * 5))  # Linear backoff
+                    sleep $((attempt * 5)) # Linear backoff
                 fi
                 ((attempt++))
             fi
         done
-        
+
         echo "Command failed after ${max_attempts} attempts"
         return 1
     }
 
     # Build generated code
-    cd "${DORIS_HOME}/gensrc/thrift" || { echo "Failed to change directory"; exit 1; }
+    cd "${DORIS_HOME}/gensrc/thrift" || {
+        echo "Failed to change directory"
+        exit 1
+    }
     if ! make; then
         echo "Make command failed in ${DORIS_HOME}/gensrc/thrift"
         exit 1
@@ -209,45 +212,60 @@
     cp -rf "${DORIS_HOME}/gensrc/build/gen_java/org/apache/doris/thrift" "${FRAMEWORK_APACHE_DIR}/doris/"
 
     # Navigate to framework directory and build with retry
-    cd "${DORIS_HOME}/regression-test/framework" || { echo "Failed to change directory"; exit 1; }
-    
+    cd "${DORIS_HOME}/regression-test/framework" || {
+        echo "Failed to change directory"
+        exit 1
+    }
+
     # First try to download dependencies only
     echo "Downloading dependencies..."
-    dep_output_file="$(mktemp -t doris-dependencies-XXXXXX.txt)" || { echo "Failed to create temporary file for dependency output"; exit 1; }
+    dep_output_file="$(mktemp -t doris-dependencies-XXXXXX.txt)" || {
+        echo "Failed to create temporary file for dependency output"
+        exit 1
+    }
     execute_maven_with_retry "${MVN_CMD} dependency:resolve -B -DskipTests=true -Dmdep.prependGroupId=true -DoutputFile=${dep_output_file}" || {
         echo "Failed to download dependencies"
         exit 1
     }
-    
+
     # Then package with retry
     echo "Building package..."
     execute_maven_with_retry "${MVN_CMD} clean package -B -DskipTests=true -Dmaven.javadoc.skip=true" || {
         echo "Failed to build package"
         exit 1
     }
-    
-    cd "${DORIS_HOME}" || { echo "Failed to return to DORIS_HOME"; exit 1; }
 
+    cd "${DORIS_HOME}" || {
+        echo "Failed to return to DORIS_HOME"
+        exit 1
+    }
+
     mkdir -p "${OUTPUT_DIR}"/{lib,log}
     cp -r "${REGRESSION_TEST_BUILD_DIR}"/regression-test-*.jar "${OUTPUT_DIR}/lib"
 
     echo "===== BUILD JAVA_UDF_SRC TO GENERATE JAR ====="
     mkdir -p "${DORIS_HOME}"/regression-test/suites/javaudf_p0/jars
-    cd "${DORIS_HOME}"/regression-test/java-udf-src || { echo "Failed to change directory to java-udf-src"; exit 1; }
-    
+    cd "${DORIS_HOME}"/regression-test/java-udf-src || {
+        echo "Failed to change directory to java-udf-src"
+        exit 1
+    }
+
     # Build UDF with retry
     execute_maven_with_retry "${MVN_CMD} clean package -B -DskipTests=true -Dmaven.javadoc.skip=true" || {
         echo "Failed to build UDF package"
         exit 1
     }
-    
+
     cp target/java-udf-case-jar-with-dependencies.jar "${DORIS_HOME}"/regression-test/suites/javaudf_p0/jars/
     # be and fe dir is compiled output
     mkdir -p "${DORIS_HOME}"/output/fe/custom_lib/
     mkdir -p "${DORIS_HOME}"/output/be/custom_lib/
     cp target/java-udf-case-jar-with-dependencies.jar "${DORIS_HOME}"/output/fe/custom_lib/
     cp target/java-udf-case-jar-with-dependencies.jar "${DORIS_HOME}"/output/be/custom_lib/
-    cd "${DORIS_HOME}" || { echo "Failed to return to DORIS_HOME"; exit 1; }
+    cd "${DORIS_HOME}" || {
+        echo "Failed to return to DORIS_HOME"
+        exit 1
+    }
 fi
 
 # check java home
@@ -272,12 +290,12 @@
         SKIP_NEXT=0
         continue
     fi
-    
+
     if [[ "${arg}" == "-f" ]] || [[ "${arg}" == "--file" ]]; then
         SKIP_NEXT=1
         continue
     fi
-    
+
     NEW_ARGS+=("${arg}")
 done
 
@@ -286,7 +304,7 @@
     # Extract directory (parent path)
     # e.g., "regression-test/suites/shape_check/tpch_sf1000/shape/q1.groovy" -> "regression-test/suites/shape_check/tpch_sf1000/shape"
     FILE_DIR=$(dirname "${FILE_PATH}")
-    
+
     # Extract suite name (filename without .groovy or .sql extension)
     # e.g., "q1.groovy" -> "q1" or "q01.sql" -> "q01"
     FILE_NAME=$(basename "${FILE_PATH}")
@@ -294,9 +312,9 @@
     SUITE_NAME="${FILE_NAME%.groovy}"
     # Remove .sql extension if exists
     SUITE_NAME="${SUITE_NAME%.sql}"
-    
+
     echo "Converted -f ${FILE_PATH} to -d ${FILE_DIR} -s ${SUITE_NAME}"
-    
+
     # Add -d and -s to arguments
     NEW_ARGS+=("-d" "${FILE_DIR}" "-s" "${SUITE_NAME}")
 fi
--- thirdparty/build-thirdparty.sh.orig
+++ thirdparty/build-thirdparty.sh
@@ -520,7 +520,7 @@
 
     rm -rf CMakeCache.txt CMakeFiles/
     "${CMAKE_CMD}" ../ -G "${GENERATOR}" -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-      -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_POSITION_INDEPENDENT_CODE=On
+        -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_POSITION_INDEPENDENT_CODE=On
     # -DCMAKE_CXX_FLAGS="$warning_uninitialized"
 
     "${BUILD_SYSTEM}" -j "${PARALLEL}"
@@ -1307,7 +1307,7 @@
     rm -rf CMakeCache.txt CMakeFiles/
 
     "${CMAKE_CMD}" -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-     -G "${GENERATOR}" -DBUILD_SHARED_LIBS=FALSE -DFMT_TEST=OFF -DFMT_DOC=OFF -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" ..
+        -G "${GENERATOR}" -DBUILD_SHARED_LIBS=FALSE -DFMT_TEST=OFF -DFMT_DOC=OFF -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" ..
     "${BUILD_SYSTEM}" -j"${PARALLEL}"
     "${BUILD_SYSTEM}" install
 }
@@ -1383,10 +1383,10 @@
 
     # -Wno-elaborated-enum-base to make C++20 on MacOS happy
     "${CMAKE_CMD}" -G "${GENERATOR}" \
-    -DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS -Wno-elaborated-enum-base" \
-    -DBUILD_EXAMPLES=OFF \
-    -DBUILD_TOOLS=OFF \
-    -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DBUILD_TESTING=OFF ..
+        -DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS -Wno-elaborated-enum-base" \
+        -DBUILD_EXAMPLES=OFF \
+        -DBUILD_TOOLS=OFF \
+        -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DBUILD_TESTING=OFF ..
     "${BUILD_SYSTEM}" -j "${PARALLEL}" install
 }
 
@@ -1892,7 +1892,7 @@
     cd "${BUILD_DIR}"
 
     "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-    -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Release ..
+        -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Release ..
     MACHINE_TYPE="$(uname -m)"
     if [[ "${MACHINE_TYPE}" == "aarch64" || "${MACHINE_TYPE}" == 'arm64' ]]; then
         CFLAGS="--target=aarch64-linux-gnu -march=armv8-a+crc" NEON64_CFLAGS=" "
@@ -1922,10 +1922,10 @@
 
         # Add -ldl for clang compatibility (libcrypto.a requires dlopen/dlsym/dlclose/dlerror)
         "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-        -DCMAKE_CXX_FLAGS="-Wno-maybe-uninitialized" \
-        -DCMAKE_EXE_LINKER_FLAGS="-ldl" \
-        -DCMAKE_SHARED_LINKER_FLAGS="-ldl" \
-        -DDISABLE_RUST_IN_BUILD=ON -DVCPKG_MANIFEST_MODE=ON -DVCPKG_OVERLAY_PORTS="${azure_dir}/${AZURE_PORTS}" -DVCPKG_MANIFEST_DIR="${azure_dir}/${AZURE_MANIFEST_DIR}" -DWARNINGS_AS_ERRORS=FALSE -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Release ..
+            -DCMAKE_CXX_FLAGS="-Wno-maybe-uninitialized" \
+            -DCMAKE_EXE_LINKER_FLAGS="-ldl" \
+            -DCMAKE_SHARED_LINKER_FLAGS="-ldl" \
+            -DDISABLE_RUST_IN_BUILD=ON -DVCPKG_MANIFEST_MODE=ON -DVCPKG_OVERLAY_PORTS="${azure_dir}/${AZURE_PORTS}" -DVCPKG_MANIFEST_DIR="${azure_dir}/${AZURE_MANIFEST_DIR}" -DWARNINGS_AS_ERRORS=FALSE -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Release ..
         "${BUILD_SYSTEM}" -j "${PARALLEL}"
         "${BUILD_SYSTEM}" install
     fi
@@ -1941,7 +1941,7 @@
     cd "${BUILD_DIR}"
 
     "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-    -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DDRAGONBOX_INSTALL_TO_CHARS=ON ..
+        -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DDRAGONBOX_INSTALL_TO_CHARS=ON ..
 
     "${BUILD_SYSTEM}" -j "${PARALLEL}"
     "${BUILD_SYSTEM}" install
@@ -1987,7 +1987,7 @@
     cd "${BUILD_DIR}"
 
     "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-    -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Release ..
+        -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Release ..
     "${BUILD_SYSTEM}" -j "${PARALLEL}"
     "${BUILD_SYSTEM}" install
 
@@ -2011,7 +2011,7 @@
     fi
 
     CXXFLAGS="-Wno-nontrivial-memcall" \
-    "${CMAKE_CMD}" -C "${TP_DIR}/paimon-cpp-cache.cmake" \
+        "${CMAKE_CMD}" -C "${TP_DIR}/paimon-cpp-cache.cmake" \
         -G "${GENERATOR}" \
         -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
         -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" \
@@ -2170,104 +2170,104 @@
 
     # Map package name to the uppercase *_SOURCE variable name
     case "${pkg}" in
-        libevent)        src_var="LIBEVENT_SOURCE" ;;
-        openssl)         src_var="OPENSSL_SOURCE" ;;
-        thrift)          src_var="THRIFT_SOURCE" ;;
-        protobuf)        src_var="PROTOBUF_SOURCE" ;;
-        gflags)          src_var="GFLAGS_SOURCE" ;;
-        glog)            src_var="GLOG_SOURCE" ;;
-        gtest)           src_var="GTEST_SOURCE" ;;
-        rapidjson)       src_var="RAPIDJSON_SOURCE" ;;
-        snappy)          src_var="SNAPPY_SOURCE" ;;
-        gperftools)      src_var="GPERFTOOLS_SOURCE" ;;
-        zlib)            src_var="ZLIB_SOURCE" ;;
-        crc32c)          src_var="CRC32C_SOURCE" ;;
-        lz4)             src_var="LZ4_SOURCE" ;;
-        bzip)            src_var="BZIP_SOURCE" ;;
-        lzo2)            src_var="LZO2_SOURCE" ;;
-        zstd)            src_var="ZSTD_SOURCE" ;;
-        #boost)           src_var="BOOST_SOURCE" ;; // boost is used for mysql later
-        abseil)          src_var="ABSEIL_SOURCE" ;;
-        curl)            src_var="CURL_SOURCE" ;;
-        re2)             src_var="RE2_SOURCE" ;;
-        hyperscan)
-            # hyperscan also builds ragel, clean both
-            if [[ -n "${RAGEL_SOURCE}" && -d "${TP_SOURCE_DIR}/${RAGEL_SOURCE}" ]]; then
-                echo "Cleaning up source: ${RAGEL_SOURCE}"
-                rm -rf "${TP_SOURCE_DIR}/${RAGEL_SOURCE}"
+    libevent) src_var="LIBEVENT_SOURCE" ;;
+    openssl) src_var="OPENSSL_SOURCE" ;;
+    thrift) src_var="THRIFT_SOURCE" ;;
+    protobuf) src_var="PROTOBUF_SOURCE" ;;
+    gflags) src_var="GFLAGS_SOURCE" ;;
+    glog) src_var="GLOG_SOURCE" ;;
+    gtest) src_var="GTEST_SOURCE" ;;
+    rapidjson) src_var="RAPIDJSON_SOURCE" ;;
+    snappy) src_var="SNAPPY_SOURCE" ;;
+    gperftools) src_var="GPERFTOOLS_SOURCE" ;;
+    zlib) src_var="ZLIB_SOURCE" ;;
+    crc32c) src_var="CRC32C_SOURCE" ;;
+    lz4) src_var="LZ4_SOURCE" ;;
+    bzip) src_var="BZIP_SOURCE" ;;
+    lzo2) src_var="LZO2_SOURCE" ;;
+    zstd) src_var="ZSTD_SOURCE" ;;
+    #boost)           src_var="BOOST_SOURCE" ;; // boost is used for mysql later
+    abseil) src_var="ABSEIL_SOURCE" ;;
+    curl) src_var="CURL_SOURCE" ;;
+    re2) src_var="RE2_SOURCE" ;;
+    hyperscan)
+        # hyperscan also builds ragel, clean both
+        if [[ -n "${RAGEL_SOURCE}" && -d "${TP_SOURCE_DIR}/${RAGEL_SOURCE}" ]]; then
+            echo "Cleaning up source: ${RAGEL_SOURCE}"
+            rm -rf "${TP_SOURCE_DIR}/${RAGEL_SOURCE}"
+        fi
+        src_var="HYPERSCAN_SOURCE"
+        ;;
+    mysql) src_var="MYSQL_SOURCE" ;;
+    odbc) src_var="ODBC_SOURCE" ;;
+    leveldb) src_var="LEVELDB_SOURCE" ;;
+    brpc) src_var="BRPC_SOURCE" ;;
+    rocksdb) src_var="ROCKSDB_SOURCE" ;;
+    cyrus_sasl) src_var="CYRUS_SASL_SOURCE" ;;
+    librdkafka) src_var="LIBRDKAFKA_SOURCE" ;;
+    flatbuffers) src_var="FLATBUFFERS_SOURCE" ;;
+    arrow) src_var="ARROW_SOURCE" ;;
+    brotli) src_var="BROTLI_SOURCE" ;;
+    cares) src_var="CARES_SOURCE" ;;
+    grpc) src_var="GRPC_SOURCE" ;;
+    s2) src_var="S2_SOURCE" ;;
+    bitshuffle) src_var="BITSHUFFLE_SOURCE" ;;
+    croaringbitmap) src_var="CROARINGBITMAP_SOURCE" ;;
+    fmt) src_var="FMT_SOURCE" ;;
+    parallel_hashmap) src_var="PARALLEL_HASHMAP_SOURCE" ;;
+    orc) src_var="ORC_SOURCE" ;;
+    cctz) src_var="CCTZ_SOURCE" ;;
+    jemalloc_doris) src_var="JEMALLOC_DORIS_SOURCE" ;;
+    libunwind) src_var="LIBUNWIND_SOURCE" ;;
+    benchmark) src_var="BENCHMARK_SOURCE" ;;
+    simdjson) src_var="SIMDJSON_SOURCE" ;;
+    nlohmann_json) src_var="NLOHMANN_JSON_SOURCE" ;;
+    libbacktrace) src_var="LIBBACKTRACE_SOURCE" ;;
+    sse2neon) src_var="SSE2NEON_SOURCE" ;;
+    xxhash) src_var="XXHASH_SOURCE" ;;
+    concurrentqueue) src_var="CONCURRENTQUEUE_SOURCE" ;;
+    fast_float) src_var="FAST_FLOAT_SOURCE" ;;
+    hadoop_libs) src_var="HADOOP_LIBS_SOURCE" ;;
+    hadoop_libs_3_4) src_var="HADOOP_LIBS_3_4_SOURCE" ;;
+    avx2neon) src_var="AVX2NEON_SOURCE" ;;
+    libdeflate) src_var="LIBDEFLATE_SOURCE" ;;
+    streamvbyte) src_var="STREAMVBYTE_SOURCE" ;;
+    ali_sdk)
+        # ali_sdk internally builds jsoncpp and libuuid, clean all three
+        for dep_var in JSONCPP_SOURCE LIBUUID_SOURCE ALI_SDK_SOURCE; do
+            dep_dir="${!dep_var}"
+            if [[ -n "${dep_dir}" && -d "${TP_SOURCE_DIR}/${dep_dir}" ]]; then
+                echo "Cleaning up source: ${dep_dir}"
+                rm -rf "${TP_SOURCE_DIR}/${dep_dir}"
             fi
-            src_var="HYPERSCAN_SOURCE"
-            ;;
-        mysql)           src_var="MYSQL_SOURCE" ;;
-        odbc)            src_var="ODBC_SOURCE" ;;
-        leveldb)         src_var="LEVELDB_SOURCE" ;;
-        brpc)            src_var="BRPC_SOURCE" ;;
-        rocksdb)         src_var="ROCKSDB_SOURCE" ;;
-        cyrus_sasl)      src_var="CYRUS_SASL_SOURCE" ;;
-        librdkafka)      src_var="LIBRDKAFKA_SOURCE" ;;
-        flatbuffers)     src_var="FLATBUFFERS_SOURCE" ;;
-        arrow)           src_var="ARROW_SOURCE" ;;
-        brotli)          src_var="BROTLI_SOURCE" ;;
-        cares)           src_var="CARES_SOURCE" ;;
-        grpc)            src_var="GRPC_SOURCE" ;;
-        s2)              src_var="S2_SOURCE" ;;
-        bitshuffle)      src_var="BITSHUFFLE_SOURCE" ;;
-        croaringbitmap)  src_var="CROARINGBITMAP_SOURCE" ;;
-        fmt)             src_var="FMT_SOURCE" ;;
-        parallel_hashmap) src_var="PARALLEL_HASHMAP_SOURCE" ;;
-        orc)             src_var="ORC_SOURCE" ;;
-        cctz)            src_var="CCTZ_SOURCE" ;;
-        jemalloc_doris)  src_var="JEMALLOC_DORIS_SOURCE" ;;
-        libunwind)       src_var="LIBUNWIND_SOURCE" ;;
-        benchmark)       src_var="BENCHMARK_SOURCE" ;;
-        simdjson)        src_var="SIMDJSON_SOURCE" ;;
-        nlohmann_json)   src_var="NLOHMANN_JSON_SOURCE" ;;
-        libbacktrace)    src_var="LIBBACKTRACE_SOURCE" ;;
-        sse2neon)        src_var="SSE2NEON_SOURCE" ;;
-        xxhash)          src_var="XXHASH_SOURCE" ;;
-        concurrentqueue) src_var="CONCURRENTQUEUE_SOURCE" ;;
-        fast_float)      src_var="FAST_FLOAT_SOURCE" ;;
-        hadoop_libs)     src_var="HADOOP_LIBS_SOURCE" ;;
-        hadoop_libs_3_4) src_var="HADOOP_LIBS_3_4_SOURCE" ;;
-        avx2neon)        src_var="AVX2NEON_SOURCE" ;;
-        libdeflate)      src_var="LIBDEFLATE_SOURCE" ;;
-        streamvbyte)     src_var="STREAMVBYTE_SOURCE" ;;
-        ali_sdk)
-            # ali_sdk internally builds jsoncpp and libuuid, clean all three
-            for dep_var in JSONCPP_SOURCE LIBUUID_SOURCE ALI_SDK_SOURCE; do
-                dep_dir="${!dep_var}"
-                if [[ -n "${dep_dir}" && -d "${TP_SOURCE_DIR}/${dep_dir}" ]]; then
-                    echo "Cleaning up source: ${dep_dir}"
-                    rm -rf "${TP_SOURCE_DIR}/${dep_dir}"
-                fi
-            done
-            return
-            ;;
-        base64)          src_var="BASE64_SOURCE" ;;
-        azure)           src_var="AZURE_SOURCE" ;;
-        dragonbox)       src_var="DRAGONBOX_SOURCE" ;;
-        icu)             src_var="ICU_SOURCE" ;;
-        jindofs)         src_var="JINDOFS_SOURCE" ;;
-        pugixml)         src_var="PUGIXML_SOURCE" ;;
-        paimon_cpp)      src_var="PAIMON_CPP_SOURCE" ;;
-        aws_sdk)         src_var="AWS_SDK_SOURCE" ;;
-        lzma)            src_var="LZMA_SOURCE" ;;
-        xml2)            src_var="XML2_SOURCE" ;;
-        idn)             src_var="IDN_SOURCE" ;;
-        gsasl)           src_var="GSASL_SOURCE" ;;
-        krb5)            src_var="KRB5_SOURCE" ;;
-        hdfs3)           src_var="HDFS3_SOURCE" ;;
-        libdivide)       src_var="LIBDIVIDE_SOURCE" ;;
-        binutils)        src_var="BINUTILS_SOURCE" ;;
-        gettext)         src_var="GETTEXT_SOURCE" ;;
-        # Header-only files, skip cleanup
-        pdqsort|timsort|tsan_header|js_and_css)
-            return
-            ;;
-        *)
-            echo "Warning: no source mapping for package '${pkg}', skipping cleanup"
-            return
-            ;;
+        done
+        return
+        ;;
+    base64) src_var="BASE64_SOURCE" ;;
+    azure) src_var="AZURE_SOURCE" ;;
+    dragonbox) src_var="DRAGONBOX_SOURCE" ;;
+    icu) src_var="ICU_SOURCE" ;;
+    jindofs) src_var="JINDOFS_SOURCE" ;;
+    pugixml) src_var="PUGIXML_SOURCE" ;;
+    paimon_cpp) src_var="PAIMON_CPP_SOURCE" ;;
+    aws_sdk) src_var="AWS_SDK_SOURCE" ;;
+    lzma) src_var="LZMA_SOURCE" ;;
+    xml2) src_var="XML2_SOURCE" ;;
+    idn) src_var="IDN_SOURCE" ;;
+    gsasl) src_var="GSASL_SOURCE" ;;
+    krb5) src_var="KRB5_SOURCE" ;;
+    hdfs3) src_var="HDFS3_SOURCE" ;;
+    libdivide) src_var="LIBDIVIDE_SOURCE" ;;
+    binutils) src_var="BINUTILS_SOURCE" ;;
+    gettext) src_var="GETTEXT_SOURCE" ;;
+    # Header-only files, skip cleanup
+    pdqsort | timsort | tsan_header | js_and_css)
+        return
+        ;;
+    *)
+        echo "Warning: no source mapping for package '${pkg}', skipping cleanup"
+        return
+        ;;
     esac
 
     src_dir="${!src_var}"
--- thirdparty/download-prebuild-thirdparty.sh.orig
+++ thirdparty/download-prebuild-thirdparty.sh
@@ -28,8 +28,8 @@
 VERSION="$1"
 
 if [ -z "$VERSION" ]; then
-  echo "Usage: sh download-prebuild-thirdparty.sh <version>"
-  exit 1
+    echo "Usage: sh download-prebuild-thirdparty.sh <version>"
+    exit 1
 fi
 
 # ----------------------------
@@ -39,13 +39,13 @@
 ARCH="$(uname -m)"
 
 case "$OS" in
-  Darwin)
+Darwin)
     PLATFORM="darwin"
     ;;
-  Linux)
+Linux)
     PLATFORM="linux"
     ;;
-  *)
+*)
     echo "Unsupported OS: $OS"
     exit 1
     ;;
@@ -55,13 +55,13 @@
 # Detect ARCH
 # ----------------------------
 case "$ARCH" in
-  x86_64|amd64)
+x86_64 | amd64)
     ARCH="x86_64"
     ;;
-  arm64|aarch64)
+arm64 | aarch64)
     ARCH="arm64"
     ;;
-  *)
+*)
     echo "Unsupported architecture: $ARCH"
     exit 1
     ;;
@@ -71,19 +71,19 @@
 # Resolve base release tag
 # ----------------------------
 case "$VERSION" in
-  master|4.0)
+master | 4.0)
     RELEASE_TAG="automation"
     ;;
-  3.1)
+3.1)
     RELEASE_TAG="automation-3.1"
     ;;
-  3.0)
+3.0)
     RELEASE_TAG="automation-3.0"
     ;;
-  2.1)
+2.1)
     RELEASE_TAG="automation-2.1"
     ;;
-  *)
+*)
     echo "Unsupported version: $VERSION"
     exit 1
     ;;
@@ -95,26 +95,26 @@
 FILENAME=""
 
 if [ "$PLATFORM" = "darwin" ]; then
-  FILENAME="doris-thirdparty-prebuilt-darwin-${ARCH}.tar.xz"
+    FILENAME="doris-thirdparty-prebuilt-darwin-${ARCH}.tar.xz"
 else
-  if [ "$ARCH" = "arm64" ]; then
-    case "$VERSION" in
-      master|4.0)
-        FILENAME="doris-thirdparty-prebuild-arm64.tar.xz"
-        ;;
-      3.1)
-        FILENAME="doris-thirdparty-3.1-prebuild-arm64.tar.xz"
-        ;;
-      3.0)
-        FILENAME="doris-thirdparty-3.0-prebuild-arm64.tar.xz"
-        ;;
-      2.1)
-        FILENAME="doris-thirdparty-2.1-prebuild-arm64.tar.xz"
-        ;;
-    esac
-  else
-    FILENAME="doris-thirdparty-prebuilt-linux-x86_64.tar.xz"
-  fi
+    if [ "$ARCH" = "arm64" ]; then
+        case "$VERSION" in
+        master | 4.0)
+            FILENAME="doris-thirdparty-prebuild-arm64.tar.xz"
+            ;;
+        3.1)
+            FILENAME="doris-thirdparty-3.1-prebuild-arm64.tar.xz"
+            ;;
+        3.0)
+            FILENAME="doris-thirdparty-3.0-prebuild-arm64.tar.xz"
+            ;;
+        2.1)
+            FILENAME="doris-thirdparty-2.1-prebuild-arm64.tar.xz"
+            ;;
+        esac
+    else
+        FILENAME="doris-thirdparty-prebuilt-linux-x86_64.tar.xz"
+    fi
 fi
 
 # ----------------------------
@@ -132,15 +132,14 @@
 # Download
 # ----------------------------
 if command -v curl >/dev/null 2>&1; then
-  curl -fL -o "$FILENAME" "$URL"
+    curl -fL -o "$FILENAME" "$URL"
 elif command -v wget >/dev/null 2>&1; then
-  wget -O "$FILENAME" "$URL"
+    wget -O "$FILENAME" "$URL"
 else
-  echo "Error: curl or wget is required"
-  exit 1
+    echo "Error: curl or wget is required"
+    exit 1
 fi
 
 echo
 echo "Download completed:"
 echo "  $(pwd)/$FILENAME"
-
--- thirdparty/download-thirdparty.sh.orig
+++ thirdparty/download-thirdparty.sh
@@ -272,7 +272,7 @@
     GIT_URL_VAR="${TP_ARCH}_GIT_URL"
     GIT_TAG_VAR="${TP_ARCH}_GIT_TAG"
     SOURCE_VAR="${TP_ARCH}_SOURCE"
-    
+
     GIT_URL="${!GIT_URL_VAR}"
     GIT_TAG="${!GIT_TAG_VAR}"
     SOURCE_DIR="${TP_SOURCE_DIR}/${!SOURCE_VAR}"
@@ -407,7 +407,7 @@
             patch -p1 <"${TP_PATCH_DIR}/rocksdb-5.14.2.patch"
             if [[ "$(uname -s)" == "Darwin" ]]; then
                 patch -p1 <"${TP_PATCH_DIR}/rocksdb-mac-compile-fix.patch"
-            fi 
+            fi
             touch "${PATCHED_MARK}"
         fi
         cd -
@@ -710,9 +710,9 @@
     echo "Finished patching ${PAIMON_CPP_SOURCE}"
 fi
 
-if [[ " ${TP_ARCHIVES[*]} " =~ " CCTZ " ]] ; then
+if [[ " ${TP_ARCHIVES[*]} " =~ " CCTZ " ]]; then
     cd $TP_SOURCE_DIR/$CCTZ_SOURCE
-    if [[ ! -f "$PATCHED_MARK" ]] ; then
+    if [[ ! -f "$PATCHED_MARK" ]]; then
         for patch_file in "${TP_PATCH_DIR}"/cctz-*; do
             echo "patch ${patch_file}"
             patch -p1 --ignore-whitespace <"${patch_file}"
--- tools/coffeebench-tools/bin/run-queries.sh.orig
+++ tools/coffeebench-tools/bin/run-queries.sh
@@ -73,7 +73,6 @@
     usage
 fi
 
-
 check_prerequest() {
     local CMD=$1
     local NAME=$2
--- tools/tpcds-tools/bin/run-tpcds-queries.sh.orig
+++ tools/tpcds-tools/bin/run-tpcds-queries.sh
@@ -142,15 +142,15 @@
 run_query() {
     local query_file=$1
     local query_name=$2
-    
+
     if [[ ! -f "${query_file}" ]]; then
         return
     fi
-    
+
     local cold=0
     local hot1=0
     local hot2=0
-    
+
     echo -ne "${query_name}\t" | tee -a result.csv
     start=$(date +%s%3N)
     if ! output=$(mysql -h"${FE_HOST}" -u"${USER}" -P"${FE_QUERY_PORT}" -D"${DB}" --comments \
@@ -201,7 +201,7 @@
 for i in ${query_array[@]}; do
     # Run main query file
     run_query "${TPCDS_QUERIES_DIR}/query${i}.sql" "query${i}"
-    
+
     # Run variant query file if exists
     run_query "${TPCDS_QUERIES_DIR}/query${i}_1.sql" "query${i}_1"
 done
----------

You can reformat the above files to meet shfmt's requirements by typing:

  shfmt  -w filename


Replace coarse-grained synchronized methods with ReentrantReadWriteLock
and refactor erase methods to microbatch pattern to prevent cascading
lock blocking when erasePartition runs slowly with many partitions.

Key changes:
- Change HashMap to ConcurrentHashMap for 4 internal data maps
- Add ReentrantReadWriteLock with read/write lock helpers
- Convert 8 simple lookup methods to lock-free (ConcurrentHashMap ops)
- Convert 4 read-only iteration methods to use read lock
- Convert 11 recycle/recover/clear methods to use write lock
- Refactor 12 erase methods to microbatch pattern: process one item at
  a time with all operations (cleanup RPCs + map removal + edit log)
  inside write lock per item, releasing lock between items
- Handle stale IDs in getIdListToEraseByRecycleTime with getOrDefault
- Handle concurrent erase in cascade eraseDatabaseInstantly/
  eraseTableInstantly with try-catch for DdlException
- Add 3 concurrency unit tests validating concurrent reads, concurrent
  read+write, and microbatch lock release behavior

Co-authored-by: Copilot <[email protected]>
@github-actions

Copy link
Copy Markdown

sh-checker report

To get the full details, please check in the job output.

shellcheck errors

'shellcheck ' returned error 1 finding the following syntactical issues:

----------

In bin/flight_record_fe.sh line 47:
FE_PID=$(${JAVA_HOME}/bin/jps | grep DorisFE | awk '{print $1}')
         ^----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
FE_PID=$("${JAVA_HOME}"/bin/jps | grep DorisFE | awk '{print $1}')


In bin/profile_fe.sh line 47:
FE_PID=$(${JAVA_HOME}/bin/jps | grep DorisFE | awk '{print $1}')
         ^----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
FE_PID=$("${JAVA_HOME}"/bin/jps | grep DorisFE | awk '{print $1}')


In build-support/clang-format.sh line 43:
    export PATH=$(brew --prefix llvm@16)/bin:$PATH
           ^--^ SC2155 (warning): Declare and assign separately to avoid masking return values.
                                             ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    export PATH=$(brew --prefix llvm@16)/bin:${PATH}


In build.sh line 253:
            BUILD_SPARK_DPP=1
            ^-------------^ SC2034 (warning): BUILD_SPARK_DPP appears unused. Verify use (or export if used externally).


In build.sh line 494:
if [[ "$(echo "${DISABLE_BUILD_JINDOFS}" | tr '[:lower:]' '[:upper:]')" == "ON" ]]; then
               ^----------------------^ SC2154 (warning): DISABLE_BUILD_JINDOFS is referenced but not assigned.


In build.sh line 565:
FEAT+=($([[ -n "${WITH_TDE_DIR}" ]] && echo "+TDE" || echo "-TDE"))
       ^-- SC2207 (warning): Prefer mapfile or read -a to split command output (or quote to avoid splitting).


In build.sh line 566:
FEAT+=($([[ "${ENABLE_HDFS_STORAGE_VAULT:-OFF}" == "ON" ]] && echo "+HDFS_STORAGE_VAULT" || echo "-HDFS_STORAGE_VAULT"))
       ^-- SC2207 (warning): Prefer mapfile or read -a to split command output (or quote to avoid splitting).


In build.sh line 567:
FEAT+=($([[ ${BUILD_UI} -eq 1 ]] && echo "+UI" || echo "-UI"))
       ^-- SC2207 (warning): Prefer mapfile or read -a to split command output (or quote to avoid splitting).


In build.sh line 568:
FEAT+=($([[ "${BUILD_AZURE}" == "ON" ]] && echo "+AZURE_BLOB,+AZURE_STORAGE_VAULT" || echo "-AZURE_BLOB,-AZURE_STORAGE_VAULT"))
       ^-- SC2207 (warning): Prefer mapfile or read -a to split command output (or quote to avoid splitting).


In build.sh line 569:
FEAT+=($([[ ${BUILD_HIVE_UDF} -eq 1 ]] && echo "+HIVE_UDF" || echo "-HIVE_UDF"))
       ^-- SC2207 (warning): Prefer mapfile or read -a to split command output (or quote to avoid splitting).


In build.sh line 570:
FEAT+=($([[ ${BUILD_BE_JAVA_EXTENSIONS} -eq 1 ]] && echo "+BE_JAVA_EXTENSIONS" || echo "-BE_JAVA_EXTENSIONS"))
       ^-- SC2207 (warning): Prefer mapfile or read -a to split command output (or quote to avoid splitting).


In build.sh line 572:
export DORIS_FEATURE_LIST=$(IFS=','; echo "${FEAT[*]}")
       ^----------------^ SC2155 (warning): Declare and assign separately to avoid masking return values.


In build.sh line 726:
        "${CMAKE_USE_CCACHE}" \
         ^-----------------^ SC2154 (warning): CMAKE_USE_CCACHE is referenced but not assigned (did you mean 'CMAKE_USE_CCACHE_C'?).
         ^-----------------^ SC2153 (info): Possible misspelling: CMAKE_USE_CCACHE may not be assigned. Did you mean CMAKE_USE_CCACHE_C?


In build.sh line 728:
        -DENABLE_HDFS_STORAGE_VAULT=${ENABLE_HDFS_STORAGE_VAULT:-ON} \
                                    ^-- SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        -DENABLE_HDFS_STORAGE_VAULT="${ENABLE_HDFS_STORAGE_VAULT:-ON}" \


In build.sh line 795:
            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests -Dcheckstyle.skip=true ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS}  -gs "${USER_SETTINGS_MVN_REPO}" -T 1C
                                                                                                                                                ^----------------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests -Dcheckstyle.skip=true ${MVN_OPT:+${MVN_OPT}} "${DEPENDENCIES_MVN_OPTS}"  -gs "${USER_SETTINGS_MVN_REPO}" -T 1C


In build.sh line 797:
            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests -Dcheckstyle.skip=true ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS}  -T 1C
                                                                                                                                                ^----------------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests -Dcheckstyle.skip=true ${MVN_OPT:+${MVN_OPT}} "${DEPENDENCIES_MVN_OPTS}"  -T 1C


In build.sh line 801:
            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS}  -gs "${USER_SETTINGS_MVN_REPO}" -T 1C
                                                                                                                         ^----------------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests ${MVN_OPT:+${MVN_OPT}} "${DEPENDENCIES_MVN_OPTS}"  -gs "${USER_SETTINGS_MVN_REPO}" -T 1C


In build.sh line 803:
            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS}  -T 1C
                                                                                                                         ^----------------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests ${MVN_OPT:+${MVN_OPT}} "${DEPENDENCIES_MVN_OPTS}"  -T 1C


In build.sh line 861:
    if [ "${TARGET_SYSTEM}" = "Darwin" ] || [ "${TARGET_SYSTEM}" = "Linux" ]; then
       ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
                                            ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
    if [[ "${TARGET_SYSTEM}" = "Darwin" ]] || [[ "${TARGET_SYSTEM}" = "Linux" ]]; then


In build.sh line 1023:
        if [[ "${TARGET_SYSTEM}" == 'Linux' ]] && [[ "$TARGET_ARCH" == 'x86_64' ]]; then
                                                      ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        if [[ "${TARGET_SYSTEM}" == 'Linux' ]] && [[ "${TARGET_ARCH}" == 'x86_64' ]]; then


In build.sh line 1027:
        elif [[ "${TARGET_SYSTEM}" == 'Linux' ]] && [[ "$TARGET_ARCH" == 'aarch64' ]]; then
                                                        ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        elif [[ "${TARGET_SYSTEM}" == 'Linux' ]] && [[ "${TARGET_ARCH}" == 'aarch64' ]]; then


In cloud/script/build_fdb.sh line 17:
#!/bin/bash
^-- SC1128 (error): The shebang must be on the first line. Delete blanks and move comments.


In cloud/script/build_fdb.sh line 221:
if [ "$FDB_ENABLE_JAVA" = "true" ]; then
   ^-----------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^--------------^ SC2154 (warning): FDB_ENABLE_JAVA is referenced but not assigned.
      ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${FDB_ENABLE_JAVA}" = "true" ]]; then


In cloud/script/build_fdb.sh line 224:
if [ "$FDB_ENABLE_GO" = "true" ]; then
   ^---------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^------------^ SC2154 (warning): FDB_ENABLE_GO is referenced but not assigned.
      ^------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${FDB_ENABLE_GO}" = "true" ]]; then


In cloud/script/build_fdb.sh line 227:
if [ "$FDB_ENABLE_SWIFT" = "true" ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^---------------^ SC2154 (warning): FDB_ENABLE_SWIFT is referenced but not assigned.
      ^---------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${FDB_ENABLE_SWIFT}" = "true" ]]; then


In cloud/script/build_fdb.sh line 230:
if [ "$FDB_ENABLE_RUBY" = "true" ]; then
   ^-----------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^--------------^ SC2154 (warning): FDB_ENABLE_RUBY is referenced but not assigned.
      ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${FDB_ENABLE_RUBY}" = "true" ]]; then


In cloud/script/build_fdb.sh line 243:
if [ "$USE_JEMALLOC" = true ]; then
   ^------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${USE_JEMALLOC}" = true ]]; then


In cloud/script/build_fdb.sh line 249:
if [ "$USE_LTO" = true ]; then
   ^-------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${USE_LTO}" = true ]]; then


In cloud/script/build_fdb.sh line 255:
if [ "$FULL_DEBUG_SYMBOLS" = true ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${FULL_DEBUG_SYMBOLS}" = true ]]; then


In cloud/script/build_fdb.sh line 259:
if [ "$BUILD_DOCUMENTATION" = true ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_DOCUMENTATION}" = true ]]; then


In cloud/script/build_fdb.sh line 263:
if [ "$WITH_ROCKSDB" = true ]; then
   ^------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${WITH_ROCKSDB}" = true ]]; then


In cloud/script/build_fdb.sh line 267:
if [ "$WITH_GRPC" = true ]; then
   ^---------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${WITH_GRPC}" = true ]]; then


In cloud/script/build_fdb.sh line 272:
if [ "$BUILD_AWS_BACKUP" = true ]; then
   ^----------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^---------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_AWS_BACKUP}" = true ]]; then


In cloud/script/build_fdb.sh line 276:
if [ "$BUILD_AZURE_BACKUP" = true ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_AZURE_BACKUP}" = true ]]; then


In cloud/script/build_fdb.sh line 281:
if [ "$BUILD_C_BINDING" = true ]; then
   ^---------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_C_BINDING}" = true ]]; then


In cloud/script/build_fdb.sh line 285:
if [ "$BUILD_PYTHON_BINDING" = true ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_PYTHON_BINDING}" = true ]]; then


In cloud/script/build_fdb.sh line 289:
if [ "$BUILD_JAVA_BINDING" = true ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_JAVA_BINDING}" = true ]]; then


In cloud/script/build_fdb.sh line 293:
if [ "$BUILD_GO_BINDING" = true ]; then
   ^----------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^---------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_GO_BINDING}" = true ]]; then


In cloud/script/build_fdb.sh line 297:
if [ "$BUILD_SWIFT_BINDING" = true ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_SWIFT_BINDING}" = true ]]; then


In cloud/script/build_fdb.sh line 301:
if [ "$BUILD_RUBY_BINDING" = true ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${BUILD_RUBY_BINDING}" = true ]]; then


In cloud/script/build_fdb.sh line 308:
echo "  Version:      $VERSION"
                      ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Version:      ${VERSION}"


In cloud/script/build_fdb.sh line 309:
echo "  Build Dir:    $BUILD_DIR"
                      ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Build Dir:    ${BUILD_DIR}"


In cloud/script/build_fdb.sh line 310:
echo "  Source Dir:   $SRC_DIR"
                      ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Source Dir:   ${SRC_DIR}"


In cloud/script/build_fdb.sh line 311:
echo "  Docker Image: $DOCKER_IMAGE"
                      ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Docker Image: ${DOCKER_IMAGE}"


In cloud/script/build_fdb.sh line 312:
echo "  Update Repo:  $UPDATE_REPO"
                      ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Update Repo:  ${UPDATE_REPO}"


In cloud/script/build_fdb.sh line 316:
echo "  JEMALLOC:       $USE_JEMALLOC"
                        ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  JEMALLOC:       ${USE_JEMALLOC}"


In cloud/script/build_fdb.sh line 317:
echo "  LTO:            $USE_LTO"
                        ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  LTO:            ${USE_LTO}"


In cloud/script/build_fdb.sh line 318:
echo "  Debug Symbols:  $FULL_DEBUG_SYMBOLS"
                        ^-----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Debug Symbols:  ${FULL_DEBUG_SYMBOLS}"


In cloud/script/build_fdb.sh line 319:
echo "  Documentation:  $BUILD_DOCUMENTATION"
                        ^------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Documentation:  ${BUILD_DOCUMENTATION}"


In cloud/script/build_fdb.sh line 320:
echo "  RocksDB:        $WITH_ROCKSDB"
                        ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  RocksDB:        ${WITH_ROCKSDB}"


In cloud/script/build_fdb.sh line 321:
echo "  gRPC:           $WITH_GRPC"
                        ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  gRPC:           ${WITH_GRPC}"


In cloud/script/build_fdb.sh line 322:
echo "  AWS Backup:     $BUILD_AWS_BACKUP"
                        ^---------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  AWS Backup:     ${BUILD_AWS_BACKUP}"


In cloud/script/build_fdb.sh line 323:
echo "  Azure Backup:   $BUILD_AZURE_BACKUP"
                        ^-----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Azure Backup:   ${BUILD_AZURE_BACKUP}"


In cloud/script/build_fdb.sh line 327:
echo "  C:      $BUILD_C_BINDING"
                ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  C:      ${BUILD_C_BINDING}"


In cloud/script/build_fdb.sh line 328:
echo "  Python: $BUILD_PYTHON_BINDING"
                ^-------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Python: ${BUILD_PYTHON_BINDING}"


In cloud/script/build_fdb.sh line 329:
echo "  Java:   $BUILD_JAVA_BINDING"
                ^-----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Java:   ${BUILD_JAVA_BINDING}"


In cloud/script/build_fdb.sh line 330:
echo "  Go:     $BUILD_GO_BINDING"
                ^---------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Go:     ${BUILD_GO_BINDING}"


In cloud/script/build_fdb.sh line 331:
echo "  Swift:  $BUILD_SWIFT_BINDING"
                ^------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Swift:  ${BUILD_SWIFT_BINDING}"


In cloud/script/build_fdb.sh line 332:
echo "  Ruby:   $BUILD_RUBY_BINDING"
                ^-----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  Ruby:   ${BUILD_RUBY_BINDING}"


In cloud/script/build_fdb.sh line 336:
echo "$CMAKE_OPTIONS" | tr ' ' '\n' | grep -v '^$' | sed 's/^/  /'
      ^------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "${CMAKE_OPTIONS}" | tr ' ' '\n' | grep -v '^$' | sed 's/^/  /'


In cloud/script/build_fdb.sh line 341:
docker pull "$DOCKER_IMAGE"
             ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
docker pull "${DOCKER_IMAGE}"


In cloud/script/build_fdb.sh line 344:
if [ -d "$SRC_DIR" ]; then
   ^---------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
         ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ -d "${SRC_DIR}" ]]; then


In cloud/script/build_fdb.sh line 346:
    if [ "$UPDATE_REPO" = true ]; then
       ^-----------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
          ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    if [[ "${UPDATE_REPO}" = true ]]; then


In cloud/script/build_fdb.sh line 348:
        cd "$SRC_DIR"
            ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        cd "${SRC_DIR}"


In cloud/script/build_fdb.sh line 357:
    git clone "$REPO_URL" "$SRC_DIR"
               ^-------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                           ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    git clone "${REPO_URL}" "${SRC_DIR}"


In cloud/script/build_fdb.sh line 361:
echo -e "${YELLOW}Checking out version: $VERSION${NC}"
                                        ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo -e "${YELLOW}Checking out version: ${VERSION}${NC}"


In cloud/script/build_fdb.sh line 362:
cd "$SRC_DIR"
    ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
cd "${SRC_DIR}"


In cloud/script/build_fdb.sh line 363:
git checkout "$VERSION"
              ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
git checkout "${VERSION}"


In cloud/script/build_fdb.sh line 367:
mkdir -p "$BUILD_DIR"
          ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
mkdir -p "${BUILD_DIR}"


In cloud/script/build_fdb.sh line 372:
    -v "$(pwd)/$SRC_DIR:/foundationdb/src:ro" \
               ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    -v "$(pwd)/${SRC_DIR}:/foundationdb/src:ro" \


In cloud/script/build_fdb.sh line 373:
    -v "$(pwd)/$BUILD_DIR:/foundationdb/build" \
               ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    -v "$(pwd)/${BUILD_DIR}:/foundationdb/build" \


In cloud/script/build_fdb.sh line 374:
    "$DOCKER_IMAGE" \
     ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    "${DOCKER_IMAGE}" \


In cloud/script/build_fdb.sh line 378:
        CC=clang CXX=clang++ LD=lld cmake -B build -D USE_LD=LLD -D USE_LIBCXX=1 -G Ninja $CMAKE_OPTIONS /foundationdb/src && \
                                                                                          ^------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        CC=clang CXX=clang++ LD=lld cmake -B build -D USE_LD=LLD -D USE_LIBCXX=1 -G Ninja ${CMAKE_OPTIONS} /foundationdb/src && \


In cloud/script/build_fdb.sh line 384:
echo "Artifacts location: $(pwd)/$BUILD_DIR"
                                 ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "Artifacts location: $(pwd)/${BUILD_DIR}"


In cloud/script/run_all_tests.sh line 175:
exit ${ret}
     ^----^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.

Did you mean: 
exit "${ret}"


In cloud/script/start.sh line 59:
  source "${custom_start}" 
         ^---------------^ SC1090 (warning): ShellCheck can't follow non-constant source. Use a directive to specify location.


In docker/thirdparties/docker-compose/common/hive-configure.sh line 22:
export CORE_CONF_fs_defaultFS=${CORE_CONF_fs_defaultFS:-hdfs://`hostname -f`:8020}
                                                               ^-----------^ SC2006 (style): Use $(...) notation instead of legacy backticks `...`.

Did you mean: 
export CORE_CONF_fs_defaultFS=${CORE_CONF_fs_defaultFS:-hdfs://$(hostname -f):8020}


In docker/thirdparties/docker-compose/common/hive-configure.sh line 29:
  local entry="<property><name>$name</name><value>${value}</value></property>"
                               ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  local entry="<property><name>${name}</name><value>${value}</value></property>"


In docker/thirdparties/docker-compose/common/hive-configure.sh line 30:
  local escapedEntry=$(echo $entry | sed 's/\//\\\//g')
        ^----------^ SC2155 (warning): Declare and assign separately to avoid masking return values.
                            ^----^ SC2086 (info): Double quote to prevent globbing and word splitting.
                            ^----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  local escapedEntry=$(echo "${entry}" | sed 's/\//\\\//g')


In docker/thirdparties/docker-compose/common/hive-configure.sh line 31:
  sed -i "/<\/configuration>/ s/.*/${escapedEntry}\n&/" $path
                                                        ^---^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                                        ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  sed -i "/<\/configuration>/ s/.*/${escapedEntry}\n&/" "${path}"


In docker/thirdparties/docker-compose/common/hive-configure.sh line 42:
    echo "Configuring $module"
                      ^-----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    echo "Configuring ${module}"


In docker/thirdparties/docker-compose/common/hive-configure.sh line 43:
    for c in `printenv | perl -sne 'print "$1 " if m/^${envPrefix}_(.+?)=.*/' -- -envPrefix=$envPrefix`; do 
             ^-- SC2006 (style): Use $(...) notation instead of legacy backticks `...`.
                                                                                            ^--------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                                                                            ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    for c in $(printenv | perl -sne 'print "$1 " if m/^${envPrefix}_(.+?)=.*/' -- -envPrefix="${envPrefix}"); do 


In docker/thirdparties/docker-compose/common/hive-configure.sh line 44:
        name=`echo ${c} | perl -pe 's/___/-/g; s/__/_/g; s/_/./g'`
             ^-- SC2006 (style): Use $(...) notation instead of legacy backticks `...`.
                   ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        name=$(echo "${c}" | perl -pe 's/___/-/g; s/__/_/g; s/_/./g')


In docker/thirdparties/docker-compose/common/hive-configure.sh line 47:
        echo " - Setting $name=$  "
                         ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        echo " - Setting ${name}=$  "


In docker/thirdparties/docker-compose/common/hive-configure.sh line 48:
        addProperty $path $name "$value"
                    ^---^ SC2086 (info): Double quote to prevent globbing and word splitting.
                    ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                          ^---^ SC2086 (info): Double quote to prevent globbing and word splitting.
                          ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                 ^----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        addProperty "${path}" "${name}" "${value}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 27:
    echo "" > "$output_file"
               ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    echo "" > "${output_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 31:
        if [ -n "$type_value" ]; then
           ^------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
                 ^---------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        if [[ -n "${type_value}" ]]; then


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 32:
            echo "{\"index\": {\"_index\": \"$index_name\", \"_type\": \"$type_value\", \"_id\": \"${id_prefix}${id}\"}}"  >> "$output_file"
                                             ^---------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                         ^---------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                                                                               ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
            echo "{\"index\": {\"_index\": \"${index_name}\", \"_type\": \"${type_value}\", \"_id\": \"${id_prefix}${id}\"}}"  >> "${output_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 34:
            echo "{\"index\": {\"_index\": \"$index_name\", \"_id\": \"${id_prefix}${id}\"}}"  >> "$output_file"
                                             ^---------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                                                   ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
            echo "{\"index\": {\"_index\": \"${index_name}\", \"_id\": \"${id_prefix}${id}\"}}"  >> "${output_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 36:
        echo "$line"  >> "$output_file"
              ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                          ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        echo "${line}"  >> "${output_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 38:
    done < "$data_file"
            ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    done < "${data_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 79:
generate_bulk_request "composite_type_array" "doc" "item_" "$array_data_file" "$bulk_request_file"
                                                            ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                               ^----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
generate_bulk_request "composite_type_array" "doc" "item_" "${array_data_file}" "${bulk_request_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 80:
curl -X POST "http://${ES_5_HOST}:9200/_bulk" --data-binary "@$bulk_request_file" -H "Content-Type: application/json"
                                                              ^----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
curl -X POST "http://${ES_5_HOST}:9200/_bulk" --data-binary "@${bulk_request_file}" -H "Content-Type: application/json"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 119:
generate_bulk_request "composite_type_array" "doc" "item_" "$array_data_file" "$bulk_request_file"
                                                            ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                               ^----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
generate_bulk_request "composite_type_array" "doc" "item_" "${array_data_file}" "${bulk_request_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 120:
curl -X POST "http://${ES_6_HOST}:9200/_bulk" --data-binary "@$bulk_request_file" -H "Content-Type: application/json"
                                                              ^----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
curl -X POST "http://${ES_6_HOST}:9200/_bulk" --data-binary "@${bulk_request_file}" -H "Content-Type: application/json"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 126:
curl "http://${ES_7_HOST}:9200/test1" -H "Content-Type:application/json" -X PUT -d "@/mnt/scripts/index/es7_test1.json"
             ^----------^ SC2154 (warning): ES_7_HOST is referenced but not assigned.


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 172:
generate_bulk_request "composite_type_array" "_doc" "item_" "$array_data_file" "$bulk_request_file"
                                                             ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                                ^----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
generate_bulk_request "composite_type_array" "_doc" "item_" "${array_data_file}" "${bulk_request_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 173:
curl -X POST "http://${ES_7_HOST}:9200/_bulk" --data-binary "@$bulk_request_file" -H "Content-Type: application/json"
                                                              ^----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
curl -X POST "http://${ES_7_HOST}:9200/_bulk" --data-binary "@${bulk_request_file}" -H "Content-Type: application/json"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 182:
generate_bulk_request "test_keyword_array" "_doc" "item_" "$keyword_array_data_file" "$keyword_array_bulk_file"
                                                           ^----------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                                      ^----------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
generate_bulk_request "test_keyword_array" "_doc" "item_" "${keyword_array_data_file}" "${keyword_array_bulk_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 183:
curl -X POST "http://${ES_7_HOST}:9200/_bulk" --data-binary "@$keyword_array_bulk_file" -H "Content-Type: application/json"
                                                              ^----------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
curl -X POST "http://${ES_7_HOST}:9200/_bulk" --data-binary "@${keyword_array_bulk_file}" -H "Content-Type: application/json"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 187:
curl "http://${ES_8_HOST}:9200/test1" -H "Content-Type:application/json" -X PUT -d "@/mnt/scripts/index/es7_test1.json"
             ^----------^ SC2154 (warning): ES_8_HOST is referenced but not assigned.


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 223:
generate_bulk_request "composite_type_array" "" "item_" "$array_data_file" "$bulk_request_file"
                                                         ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                            ^----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
generate_bulk_request "composite_type_array" "" "item_" "${array_data_file}" "${bulk_request_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 224:
curl -X POST "http://${ES_8_HOST}:9200/_bulk" --data-binary "@$bulk_request_file" -H "Content-Type: application/json"
                                                              ^----------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
curl -X POST "http://${ES_8_HOST}:9200/_bulk" --data-binary "@${bulk_request_file}" -H "Content-Type: application/json"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 233:
generate_bulk_request "test_keyword_array" "" "item_" "$keyword_array_data_file" "$keyword_array_bulk_file"
                                                       ^----------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                                  ^----------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
generate_bulk_request "test_keyword_array" "" "item_" "${keyword_array_data_file}" "${keyword_array_bulk_file}"


In docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh line 234:
curl -X POST "http://${ES_8_HOST}:9200/_bulk" --data-binary "@$keyword_array_bulk_file" -H "Content-Type: application/json"
                                                              ^----------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
curl -X POST "http://${ES_8_HOST}:9200/_bulk" --data-binary "@${keyword_array_bulk_file}" -H "Content-Type: application/json"


In docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh line 24:
    [ -e "$file" ] || continue
    ^------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
          ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    [[ -e "${file}" ]] || continue


In docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh line 25:
    tar -xzvf "$file" -C "$AUX_LIB"
               ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                          ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    tar -xzvf "${file}" -C "${AUX_LIB}"


In docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh line 38:
while ! $(nc -z localhost "${HMS_PORT:-9083}"); do
        ^-- SC2091 (warning): Remove surrounding $() to avoid executing output (or use eval if intentional).


In docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh line 42:
if [[ ${NEED_LOAD_DATA} = "0" ]]; then
      ^---------------^ SC2154 (warning): NEED_LOAD_DATA is referenced but not assigned.


In docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh line 49:
if [[ ${enablePaimonHms} == "true" ]]; then
      ^----------------^ SC2154 (warning): enablePaimonHms is referenced but not assigned.


In docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh line 54:
    echo "Script: create_paimon_table.hql executed in $EXECUTION_TIME seconds"
                                                      ^-------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    echo "Script: create_paimon_table.hql executed in ${EXECUTION_TIME} seconds"


In docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh line 64:
find "${DATA_DIR}" -type f -name "run.sh" -print0 | xargs -0 -n 1 -P "${LOAD_PARALLEL}" -I {} bash -ec '
                                                                      ^--------------^ SC2154 (warning): LOAD_PARALLEL is referenced but not assigned.
                                                                                                       ^-- SC2016 (info): Expressions don't expand in single quotes, use double quotes for that.


In docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh line 119:
ls /mnt/scripts/create_preinstalled_scripts/*.hql | xargs -n 1 -P "${LOAD_PARALLEL}" -I {} bash -ec '
^-- SC2011 (warning): Use 'find .. -print0 | xargs -0 ..' or 'find .. -exec .. +' to allow non-alphanumeric filenames.
                                                                                                    ^-- SC2016 (info): Expressions don't expand in single quotes, use double quotes for that.


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 22:
find ${CUR_DIR}/data -type f -name "*.tar.gz" -print0 | \
     ^--------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
find "${CUR_DIR}"/data -type f -name "*.tar.gz" -print0 | \


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 23:
xargs -0 -n1 -P"${LOAD_PARALLEL}" bash -c '
                ^--------------^ SC2154 (warning): LOAD_PARALLEL is referenced but not assigned.
                                          ^-- SC2016 (info): Expressions don't expand in single quotes, use double quotes for that.


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 33:
    cd ${CUR_DIR}/
       ^--------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    cd "${CUR_DIR}"/


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 34:
    curl -O https://${s3BucketName}.${s3Endpoint}/regression/datalake/pipeline_data/tpch1.db.tar.gz
                    ^-------------^ SC2154 (warning): s3BucketName is referenced but not assigned.
                    ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                    ^-----------^ SC2154 (warning): s3Endpoint is referenced but not assigned.
                                    ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    curl -O https://"${s3BucketName}"."${s3Endpoint}"/regression/datalake/pipeline_data/tpch1.db.tar.gz


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 45:
    cd ${CUR_DIR}/
       ^--------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    cd "${CUR_DIR}"/


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 46:
    curl -O https://${s3BucketName}.${s3Endpoint}/regression/datalake/pipeline_data/tvf_data.tar.gz
                    ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                    ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    curl -O https://"${s3BucketName}"."${s3Endpoint}"/regression/datalake/pipeline_data/tvf_data.tar.gz


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 58:
    curl -O https://${s3BucketName}.${s3Endpoint}/regression/datalake/pipeline_data/multi_catalog/test_complex_types/data.tar.gz
                    ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                    ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    curl -O https://"${s3BucketName}"."${s3Endpoint}"/regression/datalake/pipeline_data/multi_catalog/test_complex_types/data.tar.gz


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 70:
    curl -O https://${s3BucketName}.${s3Endpoint}/regression/datalake/pipeline_data/multi_catalog/test_compress_partitioned/data.tar.gz
                    ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                    ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    curl -O https://"${s3BucketName}"."${s3Endpoint}"/regression/datalake/pipeline_data/multi_catalog/test_compress_partitioned/data.tar.gz


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 82:
    curl -O https://${s3BucketName}.${s3Endpoint}/regression/datalake/pipeline_data/multi_catalog/test_wide_table/data.tar.gz
                    ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                    ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    curl -O https://"${s3BucketName}"."${s3Endpoint}"/regression/datalake/pipeline_data/multi_catalog/test_wide_table/data.tar.gz


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 94:
    curl -O https://${s3BucketName}.${s3Endpoint}/regression/datalake/pipeline_data/test_hdfs_tvf_compression/test_data.tar.gz
                    ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                    ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    curl -O https://"${s3BucketName}"."${s3Endpoint}"/regression/datalake/pipeline_data/test_hdfs_tvf_compression/test_data.tar.gz


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 106:
    curl -O https://${s3BucketName}.${s3Endpoint}/regression/datalake/pipeline_data/test_tvf/data.tar.gz
                    ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                    ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    curl -O https://"${s3BucketName}"."${s3Endpoint}"/regression/datalake/pipeline_data/test_tvf/data.tar.gz


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 118:
    curl -O https://${s3BucketName}.${s3Endpoint}/regression/datalake/pipeline_data/multi_catalog/logs1_parquet/data.tar.gz
                    ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                    ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    curl -O https://"${s3BucketName}"."${s3Endpoint}"/regression/datalake/pipeline_data/multi_catalog/logs1_parquet/data.tar.gz


In docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh line 144:
cd ${CUR_DIR}/auxlib
   ^--------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
cd "${CUR_DIR}"/auxlib


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 85:
METASTORE_HOST=$(echo "${HIVE_METASTORE_URIS}" | sed 's|thrift://||' | cut -d: -f1)
                       ^--------------------^ SC2154 (warning): HIVE_METASTORE_URIS is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 90:
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
      ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
        ^----------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.
        ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                         ^----------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.
                         ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
while [[ "${RETRY_COUNT}" -lt "${MAX_RETRIES}" ]]; do


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 103:
    if [ $RETRY_COUNT -eq 0 ]; then
       ^--------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
         ^----------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.
         ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    if [[ "${RETRY_COUNT}" -eq 0 ]]; then


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 111:
  if [ $((RETRY_COUNT % 10)) -eq 0 ]; then
     ^-----------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
  if [[ $((RETRY_COUNT % 10)) -eq 0 ]]; then


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 117:
if [ $RETRY_COUNT -ge $MAX_RETRIES ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
     ^----------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.
     ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                      ^----------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.
                      ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${RETRY_COUNT}" -ge "${MAX_RETRIES}" ]]; then


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 127:
    <value>${S3_ENDPOINT}</value>
           ^------------^ SC2154 (warning): S3_ENDPOINT is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 131:
    <value>${MINIO_ROOT_USER}</value>
           ^----------------^ SC2154 (warning): MINIO_ROOT_USER is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 135:
    <value>${MINIO_ROOT_PASSWORD}</value>
           ^--------------------^ SC2154 (warning): MINIO_ROOT_PASSWORD is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 165:
    <value>s3a://${HUDI_BUCKET}/warehouse</value>
                 ^------------^ SC2154 (warning): HUDI_BUCKET is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 171:
HUDI_BUNDLE_JAR_FILE=$(download_jar "hudi-spark3.5-bundle_2.12" "${HUDI_BUNDLE_VERSION}" "${HUDI_BUNDLE_URL}")
                                                                 ^--------------------^ SC2154 (warning): HUDI_BUNDLE_VERSION is referenced but not assigned.
                                                                                          ^----------------^ SC2154 (warning): HUDI_BUNDLE_URL is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 176:
HADOOP_AWS_JAR=$(download_jar "hadoop-aws" "${HADOOP_AWS_VERSION}" "${HADOOP_AWS_URL}")
                                            ^-------------------^ SC2154 (warning): HADOOP_AWS_VERSION is referenced but not assigned.
                                                                    ^---------------^ SC2154 (warning): HADOOP_AWS_URL is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 181:
AWS_SDK_BUNDLE_JAR=$(download_jar "aws-java-sdk-bundle" "${AWS_SDK_BUNDLE_VERSION}" "${AWS_SDK_BUNDLE_URL}")
                                                         ^-----------------------^ SC2154 (warning): AWS_SDK_BUNDLE_VERSION is referenced but not assigned.
                                                                                     ^-------------------^ SC2154 (warning): AWS_SDK_BUNDLE_URL is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 185:
POSTGRESQL_JDBC_JAR=$(download_jar "postgresql" "${POSTGRESQL_JDBC_VERSION}" "${POSTGRESQL_JDBC_URL}")
                                                 ^------------------------^ SC2154 (warning): POSTGRESQL_JDBC_VERSION is referenced but not assigned.
                                                                              ^--------------------^ SC2154 (warning): POSTGRESQL_JDBC_URL is referenced but not assigned.


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 209:
  ${SPARK_HOME}/bin/spark-sql \
  ^-----------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.

Did you mean: 
  "${SPARK_HOME}"/bin/spark-sql \


In docker/thirdparties/docker-compose/hudi/scripts/init.sh line 229:
touch ${SUCCESS_FILE}
      ^-------------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.

Did you mean: 
touch "${SUCCESS_FILE}"


In docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh line 19:
source /usr/local/common/hive-configure.sh
       ^-- SC1091 (info): Not following: /usr/local/common/hive-configure.sh: openBinaryFile: does not exist (No such file or directory)


In docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh line 20:
source /usr/local/common/event-hook.sh
       ^-----------------------------^ SC1091 (info): Not following: /usr/local/common/event-hook.sh: openBinaryFile: does not exist (No such file or directory)


In docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh line 34:
if [ "$1" == "1" ]; then
   ^-------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
if [[ "$1" == "1" ]]; then


In docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh line 36:
elif [ "$1" == "2" ]; then
     ^-------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
elif [[ "$1" == "2" ]]; then


In docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh line 74:
if [ $i -eq 60 ]; then
   ^-----------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
     ^-- SC2086 (info): Double quote to prevent globbing and word splitting.
     ^-- SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${i}" -eq 60 ]]; then


In docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh line 81:
if [ "$1" == "1" ]; then
   ^-------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
if [[ "$1" == "1" ]]; then


In docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh line 83:
elif [ "$1" == "2" ]; then
     ^-------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
elif [[ "$1" == "2" ]]; then


In docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh line 90:
if [[ ${enablePaimonHms} == "true" ]]; then
      ^----------------^ SC2154 (warning): enablePaimonHms is referenced but not assigned.


In docker/thirdparties/docker-compose/kerberos/health-checks/supervisorctl-check.sh line 34:
if [ "$FAILED" == "" ]; then
   ^-----------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${FAILED}" == "" ]]; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 27:
echo "[polaris-init] Waiting for Polaris health check at http://$HOST:$PORT/q/health ..."
                                                                ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                      ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "[polaris-init] Waiting for Polaris health check at http://${HOST}:${PORT}/q/health ..."


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 28:
for i in $(seq 1 120); do
^-^ SC2034 (warning): i appears unused. Verify use (or export if used externally).


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 29:
  if curl -sSf "http://$HOST:8182/q/health" >/dev/null; then
                       ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  if curl -sSf "http://${HOST}:8182/q/health" >/dev/null; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 38:
  -X POST "http://$HOST:$PORT/api/catalog/v1/oauth/tokens" \
                  ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                        ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -X POST "http://${HOST}:${PORT}/api/catalog/v1/oauth/tokens" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 40:
  -d "grant_type=client_credentials&client_id=$USER&client_secret=$PASS&scope=PRINCIPAL_ROLE:ALL")
                                              ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                  ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -d "grant_type=client_credentials&client_id=${USER}&client_secret=${PASS}&scope=PRINCIPAL_ROLE:ALL")


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 43:
TOKEN=$(printf "%s" "$TOKEN_JSON" | sed -n 's/.*"access_token"\s*:\s*"\([^"]*\)".*/\1/p')
                     ^---------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
TOKEN=$(printf "%s" "${TOKEN_JSON}" | sed -n 's/.*"access_token"\s*:\s*"\([^"]*\)".*/\1/p')


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 45:
if [ -z "$TOKEN" ]; then
         ^----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [ -z "${TOKEN}" ]; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 46:
  echo "[polaris-init] ERROR: Failed to obtain OAuth token. Response: $TOKEN_JSON" >&2
                                                                      ^---------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  echo "[polaris-init] ERROR: Failed to obtain OAuth token. Response: ${TOKEN_JSON}" >&2


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 50:
echo "[polaris-init] Creating catalog '$CATALOG' with base '$BASE_LOCATION' ..."
                                       ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                            ^------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "[polaris-init] Creating catalog '${CATALOG}' with base '${BASE_LOCATION}' ..."


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 53:
  "name": "$CATALOG",
           ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  "name": "${CATALOG}",


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 56:
    "default-base-location": "$BASE_LOCATION",
                              ^------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    "default-base-location": "${BASE_LOCATION}",


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 66:
    "allowedLocations": ["$BASE_LOCATION"]
                          ^------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    "allowedLocations": ["${BASE_LOCATION}"]


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 74:
  -X POST "http://$HOST:$PORT/api/management/v1/catalogs" \
                  ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                        ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -X POST "http://${HOST}:${PORT}/api/management/v1/catalogs" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 75:
  -H "Authorization: Bearer $TOKEN" \
                            ^----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -H "Authorization: Bearer ${TOKEN}" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 77:
  -d "$CREATE_PAYLOAD")
      ^-------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -d "${CREATE_PAYLOAD}")


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 79:
if [ "$HTTP_CODE" = "201" ]; then
      ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [ "${HTTP_CODE}" = "201" ]; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 81:
elif [ "$HTTP_CODE" = "409" ]; then
        ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
elif [ "${HTTP_CODE}" = "409" ]; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 84:
  echo "[polaris-init] Create catalog failed (HTTP $HTTP_CODE):"
                                                   ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  echo "[polaris-init] Create catalog failed (HTTP ${HTTP_CODE}):"


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 89:
echo "[polaris-init] Setting up permissions for catalog '$CATALOG' ..."
                                                         ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "[polaris-init] Setting up permissions for catalog '${CATALOG}' ..."


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 94:
  -X PUT "http://$HOST:$PORT/api/management/v1/catalogs/$CATALOG/catalog-roles/catalog_admin/grants" \
                 ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                       ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                        ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -X PUT "http://${HOST}:${PORT}/api/management/v1/catalogs/${CATALOG}/catalog-roles/catalog_admin/grants" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 95:
  -H "Authorization: Bearer $TOKEN" \
                            ^----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -H "Authorization: Bearer ${TOKEN}" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 99:
if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ]; then
      ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                   ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [ "${HTTP_CODE}" != "200" ] && [ "${HTTP_CODE}" != "201" ]; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 100:
  echo "[polaris-init] Warning: Failed to create catalog admin grants (HTTP $HTTP_CODE)"
                                                                            ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  echo "[polaris-init] Warning: Failed to create catalog admin grants (HTTP ${HTTP_CODE})"


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 107:
  -X POST "http://$HOST:$PORT/api/management/v1/principal-roles" \
                  ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                        ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -X POST "http://${HOST}:${PORT}/api/management/v1/principal-roles" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 108:
  -H "Authorization: Bearer $TOKEN" \
                            ^----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -H "Authorization: Bearer ${TOKEN}" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 112:
if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ] && [ "$HTTP_CODE" != "409" ]; then
      ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                   ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [ "${HTTP_CODE}" != "200" ] && [ "${HTTP_CODE}" != "201" ] && [ "${HTTP_CODE}" != "409" ]; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 113:
  echo "[polaris-init] Warning: Failed to create data engineer role (HTTP $HTTP_CODE)"
                                                                          ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  echo "[polaris-init] Warning: Failed to create data engineer role (HTTP ${HTTP_CODE})"


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 120:
  -X PUT "http://$HOST:$PORT/api/management/v1/principal-roles/data_engineer/catalog-roles/$CATALOG" \
                 ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                       ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                                                           ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -X PUT "http://${HOST}:${PORT}/api/management/v1/principal-roles/data_engineer/catalog-roles/${CATALOG}" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 121:
  -H "Authorization: Bearer $TOKEN" \
                            ^----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -H "Authorization: Bearer ${TOKEN}" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 125:
if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ]; then
      ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                   ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [ "${HTTP_CODE}" != "200" ] && [ "${HTTP_CODE}" != "201" ]; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 126:
  echo "[polaris-init] Warning: Failed to connect roles (HTTP $HTTP_CODE)"
                                                              ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  echo "[polaris-init] Warning: Failed to connect roles (HTTP ${HTTP_CODE})"


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 133:
  -X PUT "http://$HOST:$PORT/api/management/v1/principals/root/principal-roles" \
                 ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                       ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -X PUT "http://${HOST}:${PORT}/api/management/v1/principals/root/principal-roles" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 134:
  -H "Authorization: Bearer $TOKEN" \
                            ^----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  -H "Authorization: Bearer ${TOKEN}" \


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 138:
if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ]; then
      ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                   ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [ "${HTTP_CODE}" != "200" ] && [ "${HTTP_CODE}" != "201" ]; then


In docker/thirdparties/docker-compose/polaris/init-catalog.sh line 139:
  echo "[polaris-init] Warning: Failed to assign data engineer role to root (HTTP $HTTP_CODE)"
                                                                                  ^--------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  echo "[polaris-init] Warning: Failed to assign data engineer role to root (HTTP ${HTTP_CODE})"


In docker/thirdparties/docker-compose/ranger/ranger-admin/ranger-entrypoint.sh line 24:
cd $RANGER_HOME
   ^----------^ SC2154 (warning): RANGER_HOME is referenced but not assigned.
   ^----------^ SC2086 (info): Double quote to prevent globbing and word splitting.
   ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
cd "${RANGER_HOME}"


In docker/thirdparties/docker-compose/ranger/script/install_doris_ranger_plugins.sh line 16:
#!/bin/bash
^-- SC1128 (error): The shebang must be on the first line. Delete blanks and move comments.


In docker/thirdparties/docker-compose/ranger/script/install_doris_ranger_plugins.sh line 19:
if [ ! -d "${RANGER_HOME}/ews/webapp/WEB-INF/classes/ranger-plugins/doris" ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
           ^------------^ SC2154 (warning): RANGER_HOME is referenced but not assigned.

Did you mean: 
if [[ ! -d "${RANGER_HOME}/ews/webapp/WEB-INF/classes/ranger-plugins/doris" ]]; then


In docker/thirdparties/docker-compose/ranger/script/install_doris_service_def.sh line 15:
#!/bin/bash
^-- SC1128 (error): The shebang must be on the first line. Delete blanks and move comments.


In docker/thirdparties/run-thirdparties-docker.sh line 55:
export IP_HOST=$(ip -4 addr show scope global | awk '/inet / {print $2}' | cut -d/ -f1 | head -n 1)
       ^-----^ SC2155 (warning): Declare and assign separately to avoid masking return values.


In docker/thirdparties/run-thirdparties-docker.sh line 132:
    echo ${COMPONENTS}
         ^-----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    echo "${COMPONENTS}"


In docker/thirdparties/run-thirdparties-docker.sh line 164:
RUN_OCENABASE=0
^-----------^ SC2034 (warning): RUN_OCENABASE appears unused. Verify use (or export if used externally).


In docker/thirdparties/run-thirdparties-docker.sh line 353:
        local backup_dir=/home/work/pipline/backup_center
              ^--------^ SC2034 (warning): backup_dir appears unused. Verify use (or export if used externally).


In docker/thirdparties/run-thirdparties-docker.sh line 358:
            echo "docker exec "${container_id}" bash -c echo '/opt/bitnami/kafka/bin/kafka-topics.sh --create --bootstrap-server '${ip_host}:19193' --topic '${topic}'"
                               ^-------------^ SC2027 (warning): The surrounding quotes actually unquote this. Remove or escape them.
                               ^-------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
            echo "docker exec ""${container_id}"" bash -c echo '/opt/bitnami/kafka/bin/kafka-topics.sh --create --bootstrap-server '${ip_host}:19193' --topic '${topic}'"


In docker/thirdparties/run-thirdparties-docker.sh line 380:
    sudo docker compose -p ${CONTAINER_UID}hive2 -f "${ROOT}"/docker-compose/hive/hive-2x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-2x.env down
                           ^--------------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.

Did you mean: 
    sudo docker compose -p "${CONTAINER_UID}"hive2 -f "${ROOT}"/docker-compose/hive/hive-2x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-2x.env down


In docker/thirdparties/run-thirdparties-docker.sh line 382:
        sudo docker compose -p ${CONTAINER_UID}hive2 -f "${ROOT}"/docker-compose/hive/hive-2x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-2x.env up --build --remove-orphans -d --wait
                               ^--------------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.

Did you mean: 
        sudo docker compose -p "${CONTAINER_UID}"hive2 -f "${ROOT}"/docker-compose/hive/hive-2x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-2x.env up --build --remove-orphans -d --wait


In docker/thirdparties/run-thirdparties-docker.sh line 394:
    sudo docker compose -p ${CONTAINER_UID}hive3 -f "${ROOT}"/docker-compose/hive/hive-3x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-3x.env down
                           ^--------------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.

Did you mean: 
    sudo docker compose -p "${CONTAINER_UID}"hive3 -f "${ROOT}"/docker-compose/hive/hive-3x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-3x.env down


In docker/thirdparties/run-thirdparties-docker.sh line 396:
        sudo docker compose -p ${CONTAINER_UID}hive3 -f "${ROOT}"/docker-compose/hive/hive-3x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-3x.env up --build --remove-orphans -d --wait
                               ^--------------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.

Did you mean: 
        sudo docker compose -p "${CONTAINER_UID}"hive3 -f "${ROOT}"/docker-compose/hive/hive-3x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-3x.env up --build --remove-orphans -d --wait


In docker/thirdparties/run-thirdparties-docker.sh line 444:
    . "${HUDI_DIR}"/hudi.env
      ^--------------------^ SC1091 (info): Not following: ./hudi.env: openBinaryFile: does not exist (No such file or directory)


In docker/thirdparties/run-thirdparties-docker.sh line 488:
        mv *.tbl ../lakesoul/test_files/tpch/data
           ^-- SC2035 (info): Use ./*glob* or -- *glob* so names with dashes won't become options.


In docker/thirdparties/run-thirdparties-docker.sh line 490:
        export TPCH_DATA=$(realpath lakesoul/test_files/tpch/data)
               ^-------^ SC2155 (warning): Declare and assign separately to avoid masking return values.


In docker/thirdparties/run-thirdparties-docker.sh line 506:
        . "${ROOT}"/docker-compose/kerberos/kerberos${i}_settings.env
          ^-- SC1090 (warning): ShellCheck can't follow non-constant source. Use a directive to specify location.
                                                    ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        . "${ROOT}"/docker-compose/kerberos/kerberos"${i}"_settings.env


In docker/thirdparties/run-thirdparties-docker.sh line 507:
        envsubst <"${ROOT}"/docker-compose/kerberos/hadoop-hive.env.tpl >"${ROOT}"/docker-compose/kerberos/hadoop-hive-${i}.env
                                                                                                                       ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        envsubst <"${ROOT}"/docker-compose/kerberos/hadoop-hive.env.tpl >"${ROOT}"/docker-compose/kerberos/hadoop-hive-"${i}".env


In docker/thirdparties/run-thirdparties-docker.sh line 508:
        envsubst <"${ROOT}"/docker-compose/kerberos/conf/my.cnf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/my.cnf
                                                                                                                     ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        envsubst <"${ROOT}"/docker-compose/kerberos/conf/my.cnf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos"${i}"/my.cnf


In docker/thirdparties/run-thirdparties-docker.sh line 509:
        envsubst <"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/kdc.conf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/kdc.conf
                                                                 ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                                                                                                                    ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        envsubst <"${ROOT}"/docker-compose/kerberos/conf/kerberos"${i}"/kdc.conf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos"${i}"/kdc.conf


In docker/thirdparties/run-thirdparties-docker.sh line 510:
        envsubst <"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/krb5.conf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/krb5.conf
                                                                 ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                                                                                                                     ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        envsubst <"${ROOT}"/docker-compose/kerberos/conf/kerberos"${i}"/krb5.conf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos"${i}"/krb5.conf


In docker/thirdparties/run-thirdparties-docker.sh line 546:
    . "${POLARIS_DIR}/polaris_settings.env"
      ^-- SC1091 (info): Not following: ./polaris_settings.env: openBinaryFile: does not exist (No such file or directory)


In docker/thirdparties/run-thirdparties-docker.sh line 595:
if [[ "$NEED_LOAD_DATA" -eq 1 ]]; then
       ^-------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${NEED_LOAD_DATA}" -eq 1 ]]; then


In docker/thirdparties/run-thirdparties-docker.sh line 601:
if [[ $need_prepare_hive_data -eq 1 ]]; then
      ^---------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ ${need_prepare_hive_data} -eq 1 ]]; then


In docker/thirdparties/run-thirdparties-docker.sh line 712:
    wait "${pids[$compose]}" || status=$?
                 ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    wait "${pids[${compose}]}" || status=$?


In docker/thirdparties/run-thirdparties-docker.sh line 713:
    if [ $status -ne 0 ] && [ $compose != "db2" ]; then
       ^---------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
         ^-----^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.
         ^-----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                            ^-------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
                              ^------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                              ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    if [[ "${status}" -ne 0 ]] && [[ "${compose}" != "db2" ]]; then


In docker/thirdparties/run-thirdparties-docker.sh line 714:
        echo "docker $compose started failed with status $status"
                     ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                                                         ^-----^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        echo "docker ${compose} started failed with status ${status}"


In docker/thirdparties/run-thirdparties-docker.sh line 716:
        cat start_${compose}.log || true
                  ^--------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        cat start_"${compose}".log || true


In env.sh line 369:
    CMAKE_USE_CCACHE_C="-DCMAKE_C_COMPILER_LAUNCHER=ccache"
    ^----------------^ SC2034 (warning): CMAKE_USE_CCACHE_C appears unused. Verify use (or export if used externally).


In hooks/setup_worktree.sh line 21:
cp "$ROOT_WORKSPACE_PATH/custom_env.sh" custom_env.sh
    ^------------------^ SC2154 (warning): ROOT_WORKSPACE_PATH is referenced but not assigned.
    ^------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
cp "${ROOT_WORKSPACE_PATH}/custom_env.sh" custom_env.sh


In hooks/setup_worktree.sh line 24:
cp -r "$ROOT_WORKSPACE_PATH/thirdparty/installed" thirdparty/
       ^------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
cp -r "${ROOT_WORKSPACE_PATH}/thirdparty/installed" thirdparty/


In hooks/setup_worktree.sh line 27:
cp -f "$ROOT_WORKSPACE_PATH/build.sh" build.sh
       ^------------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
cp -f "${ROOT_WORKSPACE_PATH}/build.sh" build.sh


In regression-test/pipeline/cloud_p0/run.sh line 55:
    set -e
    ^----^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 56:
    shopt -s inherit_errexit
    ^----------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 58:
    cd "${teamcity_build_checkoutDir}" || return 1
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                          ^------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 59:
    {
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 60:
        echo # add a new line to prevent two config items from being combined, which will cause the error "No signature of method"
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 61:
        echo "ak='${s3SourceAk}'"
        ^-----------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 62:
        echo "sk='${s3SourceSk}'"
        ^-----------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 63:
        echo "hwYunAk='${hwYunAk:-}'"
        ^---------------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 64:
        echo "hwYunSk='${hwYunSk:-}'"
        ^---------------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 65:
        echo "txYunAk='${txYunAk:-}'"
        ^---------------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 66:
        echo "txYunSk='${txYunSk:-}'"
        ^---------------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 67:
        echo "regressionAliyunStsRegion='${regressionAliyunStsRegion:-cn-hongkong}'"
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 68:
        echo "regressionAliyunStsRoleArn='${regressionAliyunStsRoleArn:-}'"
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 70:
    cp -f "${teamcity_build_checkoutDir}"/regression-test/pipeline/cloud_p0/conf/regression-conf-custom.groovy \
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 73:
    sed -i "s/^CONTAINER_UID=\"doris--\"/CONTAINER_UID=\"doris-external--\"/" "${teamcity_build_checkoutDir}"/docker/thirdparties/custom_settings.env
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 74:
    sed -i "s/oss-cn-hongkong.aliyuncs.com/oss-cn-hongkong-internal.aliyuncs.com/" "${teamcity_build_checkoutDir}"/docker/thirdparties/custom_settings.env
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 75:
    if bash "${teamcity_build_checkoutDir}"/docker/thirdparties/run-thirdparties-docker.sh --stop; then echo; fi
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
       ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                                                                                        ^--^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 76:
    if bash "${teamcity_build_checkoutDir}"/docker/thirdparties/run-thirdparties-docker.sh -c kafka; then echo; else echo "ERROR: start kafka docker failed"; fi
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
       ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                                                                                          ^--^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                                                                                                     ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 77:
    JAVA_HOME="$(find /usr/lib/jvm -maxdepth 1 -type d -name 'java-8-*' | sed -n '1p')"
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                 ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 78:
    export JAVA_HOME
    ^--------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 79:
    if "${teamcity_build_checkoutDir}"/run-regression-test.sh \
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
       ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 87:
        echo
        ^--^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 89:
        bash "${teamcity_build_checkoutDir}"/regression-test/pipeline/common/get-or-set-tmp-env.sh 'set' "export need_collect_log=true"
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 93:
        summary=$(
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 94:
            grep -aoE 'Test ([0-9]+) suites, failed ([0-9]+) suites, fatal ([0-9]+) scripts, skipped ([0-9]+) scripts' \
            ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 97:
        set -x
        ^----^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 98:
        test_suites=$(echo "${summary}" | cut -d ' ' -f 2)
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                      ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 99:
        failed_suites=$(echo "${summary}" | cut -d ' ' -f 5)
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 100:
        fatal_scripts=$(echo "${summary}" | cut -d ' ' -f 8)
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 101:
        if [[ ${test_suites} -gt 0 && ${failed_suites} -le ${failed_suites_threshold:=100} && ${fatal_scripts} -eq 0 ]]; then
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
           ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 102:
            echo "INFO: regression test result meet (test_suites>0 && failed_suites<=${failed_suites_threshold} && fatal_scripts=0)"
            ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/cloud_p0/run.sh line 104:
            return 1
            ^------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 55:
    set -e
    ^----^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 56:
    shopt -s inherit_errexit
    ^----------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 58:
    cd "${teamcity_build_checkoutDir}" || return 1
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                          ^------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 59:
    {
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 60:
        echo # add a new line to prevent two config items from being combined, which will cause the error "No signature of method"
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 61:
        echo "ak='${s3SourceAk}'"
        ^-----------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 62:
        echo "sk='${s3SourceSk}'"
        ^-----------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 63:
        echo "hwYunAk='${hwYunAk:-}'"
        ^---------------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 64:
        echo "hwYunSk='${hwYunSk:-}'"
        ^---------------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 65:
        echo "txYunAk='${txYunAk:-}'"
        ^---------------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 66:
        echo "txYunSk='${txYunSk:-}'"
        ^---------------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 68:
    cp -f "${teamcity_build_checkoutDir}"/regression-test/pipeline/vault_p0/conf/regression-conf-custom.groovy \
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 72:
    sed -i "s/^CONTAINER_UID=\"doris--\"/CONTAINER_UID=\"doris-external--\"/" "${teamcity_build_checkoutDir}"/docker/thirdparties/custom_settings.env
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 73:
    sed -i "s/oss-cn-hongkong.aliyuncs.com/oss-cn-hongkong-internal.aliyuncs.com/" "${teamcity_build_checkoutDir}"/docker/thirdparties/custom_settings.env
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 74:
    if bash "${teamcity_build_checkoutDir}"/docker/thirdparties/run-thirdparties-docker.sh -c minio ||
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
       ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 75:
        bash "${teamcity_build_checkoutDir}"/docker/thirdparties/run-thirdparties-docker.sh -c minio; then
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 76:
        echo "INFO: start minio docker success"
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 78:
        echo "ERROR: start minio docker twice failed" && return 1
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                                         ^------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 82:
    docker_compose_hdfs_yaml='
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 116:
    if echo "${docker_compose_hdfs_yaml}" >docker-compose.yaml && docker-compose up -d; then echo; else echo "ERROR: start hdfs docker failed"; fi
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
       ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                                                  ^------------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                                                                             ^--^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                                                                                                        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 117:
    JAVA_HOME="$(find /usr/lib/jvm -maxdepth 1 -type d -name 'java-8-*' | sed -n '1p')"
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                 ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 118:
    export JAVA_HOME
    ^--------------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 119:
    if "${teamcity_build_checkoutDir}"/run-regression-test.sh \
    ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
       ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 127:
        echo
        ^--^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 129:
        bash "${teamcity_build_checkoutDir}"/regression-test/pipeline/common/get-or-set-tmp-env.sh 'set' "export need_collect_log=true"
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 133:
        summary=$(
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 134:
            grep -aoE 'Test ([0-9]+) suites, failed ([0-9]+) suites, fatal ([0-9]+) scripts, skipped ([0-9]+) scripts' \
            ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 137:
        set -x
        ^----^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 138:
        test_suites=$(echo "${summary}" | cut -d ' ' -f 2)
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                      ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 139:
        failed_suites=$(echo "${summary}" | cut -d ' ' -f 5)
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 140:
        fatal_scripts=$(echo "${summary}" | cut -d ' ' -f 8)
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
                        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 141:
        if [[ ${test_suites} -gt 0 && ${failed_suites} -le ${failed_suites_threshold:=100} && ${fatal_scripts} -eq 0 ]]; then
        ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).
           ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 142:
            echo "INFO: regression test result meet (test_suites>0 && failed_suites<=${failed_suites_threshold} && fatal_scripts=0)"
            ^-- SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In regression-test/pipeline/vault_p0/run.sh line 144:
            return 1
            ^------^ SC2317 (info): Command appears to be unreachable. Check usage (or ignore if invoked indirectly).


In run-be-ut.sh line 150:
    WITH_TDE_DIR        -- ${WITH_TDE_DIR}
                           ^-------------^ SC2154 (warning): WITH_TDE_DIR is referenced but not assigned.


In run-cloud-ut.sh line 199:
    -DENABLE_HDFS_STORAGE_VAULT=${ENABLE_HDFS_STORAGE_VAULT:-ON} \
                                ^-- SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    -DENABLE_HDFS_STORAGE_VAULT="${ENABLE_HDFS_STORAGE_VAULT:-ON}" \


In run-cloud-ut.sh line 204:
    "${CMAKE_USE_CCACHE}" \
     ^-----------------^ SC2154 (warning): CMAKE_USE_CCACHE is referenced but not assigned (did you mean 'CMAKE_USE_CCACHE_C'?).
     ^-----------------^ SC2153 (info): Possible misspelling: CMAKE_USE_CCACHE may not be assigned. Did you mean CMAKE_USE_CCACHE_C?


In thirdparty/build-thirdparty.sh line 1386:
    -DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS -Wno-elaborated-enum-base" \
                       ^--------------^ SC2154 (warning): CMAKE_CXX_FLAGS is referenced but not assigned.
                       ^--------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -Wno-elaborated-enum-base" \


In thirdparty/build-thirdparty.sh line 1977:
    cp -r ${TP_SOURCE_DIR}/${JINDOFS_SOURCE}/* "${TP_INSTALL_DIR}/jindofs_libs/"
          ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                           ^---------------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.

Did you mean: 
    cp -r "${TP_SOURCE_DIR}"/"${JINDOFS_SOURCE}"/* "${TP_INSTALL_DIR}/jindofs_libs/"


In thirdparty/build-thirdparty.sh line 2042:
    if [ -d "arrow_ep-install/lib" ]; then
       ^---------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
    if [[ -d "arrow_ep-install/lib" ]]; then


In thirdparty/build-thirdparty.sh line 2050:
            if [ -f "arrow_ep-install/lib/${paimon_arrow_dep}" ]; then
               ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
            if [[ -f "arrow_ep-install/lib/${paimon_arrow_dep}" ]]; then


In thirdparty/build-thirdparty.sh line 2059:
    if [ -f "release/libroaring_bitmap.a" ]; then
       ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
    if [[ -f "release/libroaring_bitmap.a" ]]; then


In thirdparty/build-thirdparty.sh line 2064:
    if [ -f "release/libxxhash.a" ]; then
       ^--------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
    if [[ -f "release/libxxhash.a" ]]; then


In thirdparty/build-thirdparty.sh line 2069:
    if [ -f "fmt_ep-install/lib/libfmt.a" ]; then
       ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
    if [[ -f "fmt_ep-install/lib/libfmt.a" ]]; then


In thirdparty/build-thirdparty.sh line 2074:
    if [ -f "tbb_ep-install/lib/libtbb.a" ]; then
       ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
    if [[ -f "tbb_ep-install/lib/libtbb.a" ]]; then


In thirdparty/build-thirdparty.sh line 2197:
                rm -rf "${TP_SOURCE_DIR}/${RAGEL_SOURCE}"
                       ^-- SC2115 (warning): Use "${var:?}" to ensure this never expands to / .


In thirdparty/build-thirdparty.sh line 2241:
                    rm -rf "${TP_SOURCE_DIR}/${dep_dir}"
                           ^---------------------------^ SC2115 (warning): Use "${var:?}" to ensure this never expands to / .


In thirdparty/build-thirdparty.sh line 2276:
        rm -rf "${TP_SOURCE_DIR}/${src_dir}"
               ^---------------------------^ SC2115 (warning): Use "${var:?}" to ensure this never expands to / .


In thirdparty/download-prebuild-thirdparty.sh line 30:
if [ -z "$VERSION" ]; then
   ^---------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
         ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ -z "${VERSION}" ]]; then


In thirdparty/download-prebuild-thirdparty.sh line 41:
case "$OS" in
      ^-^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
case "${OS}" in


In thirdparty/download-prebuild-thirdparty.sh line 49:
    echo "Unsupported OS: $OS"
                          ^-^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    echo "Unsupported OS: ${OS}"


In thirdparty/download-prebuild-thirdparty.sh line 57:
case "$ARCH" in
      ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
case "${ARCH}" in


In thirdparty/download-prebuild-thirdparty.sh line 65:
    echo "Unsupported architecture: $ARCH"
                                    ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    echo "Unsupported architecture: ${ARCH}"


In thirdparty/download-prebuild-thirdparty.sh line 73:
case "$VERSION" in
      ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
case "${VERSION}" in


In thirdparty/download-prebuild-thirdparty.sh line 87:
    echo "Unsupported version: $VERSION"
                               ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    echo "Unsupported version: ${VERSION}"


In thirdparty/download-prebuild-thirdparty.sh line 97:
if [ "$PLATFORM" = "darwin" ]; then
   ^------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
      ^-------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
if [[ "${PLATFORM}" = "darwin" ]]; then


In thirdparty/download-prebuild-thirdparty.sh line 100:
  if [ "$ARCH" = "arm64" ]; then
     ^-------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
        ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  if [[ "${ARCH}" = "arm64" ]]; then


In thirdparty/download-prebuild-thirdparty.sh line 101:
    case "$VERSION" in
    ^-- SC2249 (info): Consider adding a default *) case, even if it just exits with error.
          ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    case "${VERSION}" in


In thirdparty/download-prebuild-thirdparty.sh line 125:
echo "Detected platform : $PLATFORM"
                          ^-------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "Detected platform : ${PLATFORM}"


In thirdparty/download-prebuild-thirdparty.sh line 126:
echo "Detected arch     : $ARCH"
                          ^---^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "Detected arch     : ${ARCH}"


In thirdparty/download-prebuild-thirdparty.sh line 127:
echo "Version           : $VERSION"
                          ^------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "Version           : ${VERSION}"


In thirdparty/download-prebuild-thirdparty.sh line 128:
echo "Downloading       : $URL"
                          ^--^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "Downloading       : ${URL}"


In thirdparty/download-prebuild-thirdparty.sh line 135:
  curl -fL -o "$FILENAME" "$URL"
               ^-------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                           ^--^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  curl -fL -o "${FILENAME}" "${URL}"


In thirdparty/download-prebuild-thirdparty.sh line 137:
  wget -O "$FILENAME" "$URL"
           ^-------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                       ^--^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
  wget -O "${FILENAME}" "${URL}"


In thirdparty/download-prebuild-thirdparty.sh line 145:
echo "  $(pwd)/$FILENAME"
               ^-------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
echo "  $(pwd)/${FILENAME}"


In thirdparty/download-thirdparty.sh line 714:
    cd $TP_SOURCE_DIR/$CCTZ_SOURCE
       ^------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
       ^------------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.
                      ^----------^ SC2248 (style): Prefer double quoting even when variables don't contain special characters.
                      ^----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    cd "${TP_SOURCE_DIR}"/"${CCTZ_SOURCE}"


In thirdparty/download-thirdparty.sh line 715:
    if [[ ! -f "$PATCHED_MARK" ]] ; then
                ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
    if [[ ! -f "${PATCHED_MARK}" ]] ; then


In thirdparty/download-thirdparty.sh line 720:
        touch "$PATCHED_MARK"
               ^-----------^ SC2250 (style): Prefer putting braces around variable references even when not strictly required.

Did you mean: 
        touch "${PATCHED_MARK}"


In tools/lzo/build.sh line 1:
# Licensed to the Apache Software Foundation (ASF) under one
^-- SC2148 (error): Tips depend on target shell and yours is unknown. Add a shebang or a 'shell' directive.


In tools/lzo/build.sh line 20:
g++ -o lzo_writer lzo_writer.cpp -I. -Isrc -I${DORIS_THIRDPARTY}/installed/include -L${DORIS_THIRDPARTY}/installed/lib -llzo2 -std=c++17
                                             ^-----------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                                                                     ^-----------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
g++ -o lzo_writer lzo_writer.cpp -I. -Isrc -I"${DORIS_THIRDPARTY}"/installed/include -L"${DORIS_THIRDPARTY}"/installed/lib -llzo2 -std=c++17

For more information:
  https://www.shellcheck.net/wiki/SC1128 -- The shebang must be on the first ...
  https://www.shellcheck.net/wiki/SC2148 -- Tips depend on target shell and y...
  https://www.shellcheck.net/wiki/SC1090 -- ShellCheck can't follow non-const...
----------

You can address the above issues in one of three ways:
1. Manually correct the issue in the offending shell script;
2. Disable specific issues by adding the comment:
  # shellcheck disable=NNNN
above the line that contains the issue, where NNNN is the error code;
3. Add '-e NNNN' to the SHELLCHECK_OPTS setting in your .yml action file.



shfmt errors

'shfmt ' returned error 1 finding the following formatting issues:

----------
--- bin/start_be.sh.orig
+++ bin/start_be.sh
@@ -442,45 +442,45 @@
     local param="$1"
 
     case "${param}" in
-        "--add-opens="* | "--add-exports="* | "--add-reads="* | "--add-modules="*)
-            # --add-opens=java.base/sun.util.calendar=ALL-UNNAMED
-            # Extract module/package path as key: --add-opens=java.base/sun.util.calendar
-            echo "${param%=*}"
-            ;;
-        -XX:+* | -XX:-*)
-            # -XX:+HeapDumpOnOutOfMemoryError or -XX:-OmitStackTraceInFastThrow
-            # Extract flag name for pattern matching: -XX:[+-]FlagName
-            local flag_name="${param#-XX:?}"
-            echo "-XX:[+-]${flag_name}"
-            ;;
-        -XX:*=*)
-            # -XX:HeapDumpPath=/path or -XX:OnOutOfMemoryError="cmd"
-            # Extract key before '=': -XX:HeapDumpPath
-            echo "${param%%=*}"
-            ;;
-        -D*=*)
-            # -Dfile.encoding=UTF-8
-            # Extract property name: -Dfile.encoding
-            echo "${param%%=*}"
-            ;;
-        -D*)
-            # -Dfoo (boolean property without value)
-            echo "${param}"
-            ;;
-        -Xms* | -Xmx* | -Xmn* | -Xss*)
-            # -Xmx8192m, -Xms8192m, -Xmn2g, -Xss512k
-            # Extract the prefix: -Xmx, -Xms, -Xmn, -Xss
-            echo "${param}" | sed -E 's/^(-Xm[sxn]|-Xss).*/\1/'
-            ;;
-        -Xlog:*)
-            # -Xlog:gc*:file:decorators
-            # Use prefix as key
-            echo "-Xlog:"
-            ;;
-        *)
-            # For other options, use the full parameter as key
-            echo "${param}"
-            ;;
+    "--add-opens="* | "--add-exports="* | "--add-reads="* | "--add-modules="*)
+        # --add-opens=java.base/sun.util.calendar=ALL-UNNAMED
+        # Extract module/package path as key: --add-opens=java.base/sun.util.calendar
+        echo "${param%=*}"
+        ;;
+    -XX:+* | -XX:-*)
+        # -XX:+HeapDumpOnOutOfMemoryError or -XX:-OmitStackTraceInFastThrow
+        # Extract flag name for pattern matching: -XX:[+-]FlagName
+        local flag_name="${param#-XX:?}"
+        echo "-XX:[+-]${flag_name}"
+        ;;
+    -XX:*=*)
+        # -XX:HeapDumpPath=/path or -XX:OnOutOfMemoryError="cmd"
+        # Extract key before '=': -XX:HeapDumpPath
+        echo "${param%%=*}"
+        ;;
+    -D*=*)
+        # -Dfile.encoding=UTF-8
+        # Extract property name: -Dfile.encoding
+        echo "${param%%=*}"
+        ;;
+    -D*)
+        # -Dfoo (boolean property without value)
+        echo "${param}"
+        ;;
+    -Xms* | -Xmx* | -Xmn* | -Xss*)
+        # -Xmx8192m, -Xms8192m, -Xmn2g, -Xss512k
+        # Extract the prefix: -Xmx, -Xms, -Xmn, -Xss
+        echo "${param}" | sed -E 's/^(-Xm[sxn]|-Xss).*/\1/'
+        ;;
+    -Xlog:*)
+        # -Xlog:gc*:file:decorators
+        # Use prefix as key
+        echo "-Xlog:"
+        ;;
+    *)
+        # For other options, use the full parameter as key
+        echo "${param}"
+        ;;
     esac
 }
 
--- bin/start_fe.sh.orig
+++ bin/start_fe.sh
@@ -210,45 +210,45 @@
     local param="$1"
 
     case "${param}" in
-        "--add-opens="* | "--add-exports="* | "--add-reads="* | "--add-modules="*)
-            # --add-opens=java.base/sun.util.calendar=ALL-UNNAMED
-            # Extract module/package path as key: --add-opens=java.base/sun.util.calendar
-            echo "${param%=*}"
-            ;;
-        -XX:+* | -XX:-*)
-            # -XX:+HeapDumpOnOutOfMemoryError or -XX:-OmitStackTraceInFastThrow
-            # Extract flag name for pattern matching: -XX:[+-]FlagName
-            local flag_name="${param#-XX:?}"
-            echo "-XX:[+-]${flag_name}"
-            ;;
-        -XX:*=*)
-            # -XX:HeapDumpPath=/path or -XX:OnOutOfMemoryError="cmd"
-            # Extract key before '=': -XX:HeapDumpPath
-            echo "${param%%=*}"
-            ;;
-        -D*=*)
-            # -Dfile.encoding=UTF-8
-            # Extract property name: -Dfile.encoding
-            echo "${param%%=*}"
-            ;;
-        -D*)
-            # -Dfoo (boolean property without value)
-            echo "${param}"
-            ;;
-        -Xms* | -Xmx* | -Xmn* | -Xss*)
-            # -Xmx8192m, -Xms8192m, -Xmn2g, -Xss512k
-            # Extract the prefix: -Xmx, -Xms, -Xmn, -Xss
-            echo "${param}" | sed -E 's/^(-Xm[sxn]|-Xss).*/\1/'
-            ;;
-        -Xlog:*)
-            # -Xlog:gc*:file:decorators
-            # Use prefix as key
-            echo "-Xlog:"
-            ;;
-        *)
-            # For other options, use the full parameter as key
-            echo "${param}"
-            ;;
+    "--add-opens="* | "--add-exports="* | "--add-reads="* | "--add-modules="*)
+        # --add-opens=java.base/sun.util.calendar=ALL-UNNAMED
+        # Extract module/package path as key: --add-opens=java.base/sun.util.calendar
+        echo "${param%=*}"
+        ;;
+    -XX:+* | -XX:-*)
+        # -XX:+HeapDumpOnOutOfMemoryError or -XX:-OmitStackTraceInFastThrow
+        # Extract flag name for pattern matching: -XX:[+-]FlagName
+        local flag_name="${param#-XX:?}"
+        echo "-XX:[+-]${flag_name}"
+        ;;
+    -XX:*=*)
+        # -XX:HeapDumpPath=/path or -XX:OnOutOfMemoryError="cmd"
+        # Extract key before '=': -XX:HeapDumpPath
+        echo "${param%%=*}"
+        ;;
+    -D*=*)
+        # -Dfile.encoding=UTF-8
+        # Extract property name: -Dfile.encoding
+        echo "${param%%=*}"
+        ;;
+    -D*)
+        # -Dfoo (boolean property without value)
+        echo "${param}"
+        ;;
+    -Xms* | -Xmx* | -Xmn* | -Xss*)
+        # -Xmx8192m, -Xms8192m, -Xmn2g, -Xss512k
+        # Extract the prefix: -Xmx, -Xms, -Xmn, -Xss
+        echo "${param}" | sed -E 's/^(-Xm[sxn]|-Xss).*/\1/'
+        ;;
+    -Xlog:*)
+        # -Xlog:gc*:file:decorators
+        # Use prefix as key
+        echo "-Xlog:"
+        ;;
+    *)
+        # For other options, use the full parameter as key
+        echo "${param}"
+        ;;
     esac
 }
 
--- bin/start_file_cache_microbench.sh.orig
+++ bin/start_file_cache_microbench.sh
@@ -115,7 +115,6 @@
     exit 1
 fi
 
-
 JEMALLOC_CONF="percpu_arena:percpu,background_thread:true,metadata_thp:auto,muzzy_decay_ms:5000,dirty_decay_ms:5000,oversize_threshold:0,prof:true,lg_prof_interval:30,lg_prof_sample:19,prof_final:false,prof_active:true"
 JEMALLOC_PROF_PRFIX="jeprofile_doris_cloud"
 
--- build-support/clang-format.sh.orig
+++ build-support/clang-format.sh
@@ -36,7 +36,7 @@
         echo "Error: Homebrew is missing. Please install it first due to we use Homebrew to manage the tools which are needed to build the project."
         exit 1
     fi
-    if ! brew list llvm@16 > /dev/null 2>&1; then
+    if ! brew list llvm@16 >/dev/null 2>&1; then
         echo "Error: Please install llvm@16 firt due to we use it to format code."
         exit 1
     fi
--- build.sh.orig
+++ build.sh
@@ -264,11 +264,11 @@
         --be-cdc-client)
             BUILD_BE_CDC_CLIENT=1
             shift
-            ;;    
+            ;;
         --exclude-obs-dependencies)
             BUILD_OBS_DEPENDENCIES=0
             shift
-            ;; 
+            ;;
         --exclude-cos-dependencies)
             BUILD_COS_DEPENDENCIES=0
             shift
@@ -280,7 +280,7 @@
         --disable-dynamic-arch)
             ENABLE_DYNAMIC_ARCH='OFF'
             shift
-            ;;           
+            ;;
         --clean)
             CLEAN=1
             shift
@@ -329,7 +329,7 @@
         BUILD_META_TOOL='ON'
         BUILD_FILE_CACHE_MICROBENCH_TOOL='OFF'
         BUILD_INDEX_TOOL='ON'
-	    BUILD_TASK_EXECUTOR_SIMULATOR='OFF'
+        BUILD_TASK_EXECUTOR_SIMULATOR='OFF'
         BUILD_HIVE_UDF=1
         BUILD_BE_JAVA_EXTENSIONS=1
         BUILD_BE_CDC_CLIENT=1
@@ -569,7 +569,10 @@
 FEAT+=($([[ ${BUILD_HIVE_UDF} -eq 1 ]] && echo "+HIVE_UDF" || echo "-HIVE_UDF"))
 FEAT+=($([[ ${BUILD_BE_JAVA_EXTENSIONS} -eq 1 ]] && echo "+BE_JAVA_EXTENSIONS" || echo "-BE_JAVA_EXTENSIONS"))
 
-export DORIS_FEATURE_LIST=$(IFS=','; echo "${FEAT[*]}")
+export DORIS_FEATURE_LIST=$(
+    IFS=','
+    echo "${FEAT[*]}"
+)
 echo "Feature List: ${DORIS_FEATURE_LIST}"
 
 # Clean and build generated code
@@ -788,19 +791,19 @@
     if [[ "${BUILD_COS_DEPENDENCIES}" -eq 0 ]]; then
         DEPENDENCIES_MVN_OPTS+=" -Dcos.dependency.scope=provided "
     fi
-    
+
     if [[ "${DISABLE_JAVA_CHECK_STYLE}" = "ON" ]]; then
         # Allowed user customer set env param USER_SETTINGS_MVN_REPO means settings.xml file path
         if [[ -n ${USER_SETTINGS_MVN_REPO} && -f ${USER_SETTINGS_MVN_REPO} ]]; then
-            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests -Dcheckstyle.skip=true ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS}  -gs "${USER_SETTINGS_MVN_REPO}" -T 1C
+            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests -Dcheckstyle.skip=true ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS} -gs "${USER_SETTINGS_MVN_REPO}" -T 1C
         else
-            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests -Dcheckstyle.skip=true ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS}  -T 1C
+            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests -Dcheckstyle.skip=true ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS} -T 1C
         fi
     else
         if [[ -n ${USER_SETTINGS_MVN_REPO} && -f ${USER_SETTINGS_MVN_REPO} ]]; then
-            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS}  -gs "${USER_SETTINGS_MVN_REPO}" -T 1C
+            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS} -gs "${USER_SETTINGS_MVN_REPO}" -T 1C
         else
-            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS}  -T 1C
+            "${MVN_CMD}" package -pl ${FE_MODULES:+${FE_MODULES}} -am -Dskip.doc=true -DskipTests ${MVN_OPT:+${MVN_OPT}} ${DEPENDENCIES_MVN_OPTS} -T 1C
         fi
     fi
     cd "${DORIS_HOME}"
@@ -859,12 +862,12 @@
     mkdir -p "${DORIS_OUTPUT}/fe/plugins/java_extensions/"
 
     if [ "${TARGET_SYSTEM}" = "Darwin" ] || [ "${TARGET_SYSTEM}" = "Linux" ]; then
-      mkdir -p "${DORIS_OUTPUT}/fe/arthas"
-      rm -rf "${DORIS_OUTPUT}/fe/arthas/*"
-      unzip -o "${DORIS_OUTPUT}/fe/lib/arthas-packaging-*.jar" arthas-bin.zip -d "${DORIS_OUTPUT}/fe/arthas/"
-      unzip -o "${DORIS_OUTPUT}/fe/arthas/arthas-bin.zip" -d "${DORIS_OUTPUT}/fe/arthas/"
-      rm "${DORIS_OUTPUT}/fe/arthas/math-game.jar"
-      rm "${DORIS_OUTPUT}/fe/arthas/arthas-bin.zip"
+        mkdir -p "${DORIS_OUTPUT}/fe/arthas"
+        rm -rf "${DORIS_OUTPUT}/fe/arthas/*"
+        unzip -o "${DORIS_OUTPUT}/fe/lib/arthas-packaging-*.jar" arthas-bin.zip -d "${DORIS_OUTPUT}/fe/arthas/"
+        unzip -o "${DORIS_OUTPUT}/fe/arthas/arthas-bin.zip" -d "${DORIS_OUTPUT}/fe/arthas/"
+        rm "${DORIS_OUTPUT}/fe/arthas/math-game.jar"
+        rm "${DORIS_OUTPUT}/fe/arthas/arthas-bin.zip"
     fi
 fi
 
@@ -982,15 +985,15 @@
         module_proj_jar="${DORIS_HOME}/fe/be-java-extensions/${extensions_module}/target/${extensions_module}-project.jar"
         mkdir "${BE_JAVA_EXTENSIONS_DIR}"/"${extensions_module}"
         echo "Copy Be Extensions ${extensions_module} jar to ${BE_JAVA_EXTENSIONS_DIR}/${extensions_module}"
-     if [[ "${extensions_module}" == "${HADOOP_DEPS_NAME}" ]]; then
-          
+        if [[ "${extensions_module}" == "${HADOOP_DEPS_NAME}" ]]; then
+
             BE_HADOOP_HDFS_DIR="${DORIS_OUTPUT}/be/lib/hadoop_hdfs/"
             echo "Copy Be Extensions hadoop deps jars to ${BE_HADOOP_HDFS_DIR}"
             rm -rf "${BE_HADOOP_HDFS_DIR}"
             mkdir "${BE_HADOOP_HDFS_DIR}"
             HADOOP_DEPS_JAR_DIR="${DORIS_HOME}/fe/be-java-extensions/${HADOOP_DEPS_NAME}/target"
             echo "HADOOP_DEPS_JAR_DIR: ${HADOOP_DEPS_JAR_DIR}"
-            if  [[ "${BUILD_BE_JAVA_EXTENSIONS}" -eq 1 && ! -d "${HADOOP_DEPS_JAR_DIR}/lib" ]]; then
+            if [[ "${BUILD_BE_JAVA_EXTENSIONS}" -eq 1 && ! -d "${HADOOP_DEPS_JAR_DIR}/lib" ]]; then
                 echo "WARN: lib directory missing (likely due to Maven cache). Regenerating..."
                 pushd "${DORIS_HOME}/fe/be-java-extensions/${HADOOP_DEPS_NAME}"
                 "${MVN_CMD}" dependency:copy-dependencies -DskipTests -Dcheckstyle.skip=true
@@ -1015,7 +1018,7 @@
                 cp -r "${DORIS_HOME}/fe/be-java-extensions/${extensions_module}/target/lib" "${BE_JAVA_EXTENSIONS_DIR}/${extensions_module}/"
             fi
         fi
-    done        
+    done
 
     # copy jindofs jars, only support for Linux x64 or arm
     if [[ "${BUILD_JINDOFS}" == "ON" ]]; then
--- cloud/script/build_fdb.sh.orig
+++ cloud/script/build_fdb.sh
@@ -53,7 +53,7 @@
 
 # Print help message
 show_help() {
-    cat << EOF
+    cat <<EOF
 Usage: $0 [OPTIONS]
 
 Build FoundationDB using Docker.
@@ -110,110 +110,110 @@
 # Parse command line arguments
 while [[ $# -gt 0 ]]; do
     case $1 in
-        -v)
-            VERSION="$2"
-            shift 2
-            ;;
-        -o)
-            BUILD_DIR="$2"
-            shift 2
-            ;;
-        -i)
-            DOCKER_IMAGE="$2"
-            shift 2
-            ;;
-        -s)
-            SRC_DIR="$2"
-            shift 2
-            ;;
-        -u)
-            UPDATE_REPO=false
-            shift
-            ;;
-        --aws)
-            BUILD_AWS_BACKUP=true
-            shift
-            ;;
-        --azure)
-            BUILD_AZURE_BACKUP=true
-            shift
-            ;;
-        --no-jemalloc)
-            USE_JEMALLOC=false
-            shift
-            ;;
-        --no-lto)
-            USE_LTO=false
-            shift
-            ;;
-        --no-debug-syms)
-            FULL_DEBUG_SYMBOLS=false
-            shift
-            ;;
-        --no-docs)
-            BUILD_DOCUMENTATION=false
-            shift
-            ;;
-        --no-rocksdb)
-            WITH_ROCKSDB=false
-            shift
-            ;;
-        --no-grpc)
-            WITH_GRPC=false
-            shift
-            ;;
-        --debug-syms)
-            FULL_DEBUG_SYMBOLS=true
-            shift
-            ;;
-        --docs)
-            BUILD_DOCUMENTATION=true
-            shift
-            ;;
-        --rocksdb)
-            WITH_ROCKSDB=true
-            shift
-            ;;
-        --grpc)
-            WITH_GRPC=true
-            shift
-            ;;
-        --java)
-            BUILD_JAVA_BINDING=true
-            shift
-            ;;
-        --go)
-            BUILD_GO_BINDING=true
-            shift
-            ;;
-        --swift)
-            BUILD_SWIFT_BINDING=true
-            shift
-            ;;
-        --ruby)
-            BUILD_RUBY_BINDING=true
-            shift
-            ;;
-        --all-bindings)
-            BUILD_JAVA_BINDING=true
-            BUILD_GO_BINDING=true
-            BUILD_SWIFT_BINDING=true
-            BUILD_RUBY_BINDING=true
-            shift
-            ;;
-        --minimal-bindings)
-            BUILD_PYTHON_BINDING=false
-            shift
-            ;;
-        -h)
-            show_help
-            exit 0
-            ;;
-        *)
-            echo -e "${RED}Unknown option: $1${NC}" >&2
-            show_help
-            exit 1
-            ;;
+    -v)
+        VERSION="$2"
+        shift 2
+        ;;
+    -o)
+        BUILD_DIR="$2"
+        shift 2
+        ;;
+    -i)
+        DOCKER_IMAGE="$2"
+        shift 2
+        ;;
+    -s)
+        SRC_DIR="$2"
+        shift 2
+        ;;
+    -u)
+        UPDATE_REPO=false
+        shift
+        ;;
+    --aws)
+        BUILD_AWS_BACKUP=true
+        shift
+        ;;
+    --azure)
+        BUILD_AZURE_BACKUP=true
+        shift
+        ;;
+    --no-jemalloc)
+        USE_JEMALLOC=false
+        shift
+        ;;
+    --no-lto)
+        USE_LTO=false
+        shift
+        ;;
+    --no-debug-syms)
+        FULL_DEBUG_SYMBOLS=false
+        shift
+        ;;
+    --no-docs)
+        BUILD_DOCUMENTATION=false
+        shift
+        ;;
+    --no-rocksdb)
+        WITH_ROCKSDB=false
+        shift
+        ;;
+    --no-grpc)
+        WITH_GRPC=false
+        shift
+        ;;
+    --debug-syms)
+        FULL_DEBUG_SYMBOLS=true
+        shift
+        ;;
+    --docs)
+        BUILD_DOCUMENTATION=true
+        shift
+        ;;
+    --rocksdb)
+        WITH_ROCKSDB=true
+        shift
+        ;;
+    --grpc)
+        WITH_GRPC=true
+        shift
+        ;;
+    --java)
+        BUILD_JAVA_BINDING=true
+        shift
+        ;;
+    --go)
+        BUILD_GO_BINDING=true
+        shift
+        ;;
+    --swift)
+        BUILD_SWIFT_BINDING=true
+        shift
+        ;;
+    --ruby)
+        BUILD_RUBY_BINDING=true
+        shift
+        ;;
+    --all-bindings)
+        BUILD_JAVA_BINDING=true
+        BUILD_GO_BINDING=true
+        BUILD_SWIFT_BINDING=true
+        BUILD_RUBY_BINDING=true
+        shift
+        ;;
+    --minimal-bindings)
+        BUILD_PYTHON_BINDING=false
+        shift
+        ;;
+    -h)
+        show_help
+        exit 0
+        ;;
+    *)
+        echo -e "${RED}Unknown option: $1${NC}" >&2
+        show_help
+        exit 1
+        ;;
     esac
 done
 
--- cloud/script/start.sh.orig
+++ cloud/script/start.sh
@@ -54,9 +54,9 @@
 fi
 # echo "$@" "daemonized=${daemonized}"}
 
-custom_start="${DORIS_HOME}/bin/custom_start.sh" 
+custom_start="${DORIS_HOME}/bin/custom_start.sh"
 if [[ -f "${custom_start}" ]]; then
-  source "${custom_start}" 
+    source "${custom_start}"
 fi
 enable_hdfs=${enable_hdfs:-1}
 process_name="${process_name:-doris_cloud}"
--- docker/thirdparties/docker-compose/common/event-hook.sh.orig
+++ docker/thirdparties/docker-compose/common/event-hook.sh
--- docker/thirdparties/docker-compose/common/hive-configure.sh.orig
+++ docker/thirdparties/docker-compose/common/hive-configure.sh
@@ -19,16 +19,16 @@
 # Referenced from [docker-hive](https://github.com/big-data-europe/docker-hive)
 
 # Set some sensible defaults
-export CORE_CONF_fs_defaultFS=${CORE_CONF_fs_defaultFS:-hdfs://`hostname -f`:8020}
+export CORE_CONF_fs_defaultFS=${CORE_CONF_fs_defaultFS:-hdfs://$(hostname -f):8020}
 
 function addProperty() {
-  local path=$1
-  local name=$2
-  local value=$3
+    local path=$1
+    local name=$2
+    local value=$3
 
-  local entry="<property><name>$name</name><value>${value}</value></property>"
-  local escapedEntry=$(echo $entry | sed 's/\//\\\//g')
-  sed -i "/<\/configuration>/ s/.*/${escapedEntry}\n&/" $path
+    local entry="<property><name>$name</name><value>${value}</value></property>"
+    local escapedEntry=$(echo $entry | sed 's/\//\\\//g')
+    sed -i "/<\/configuration>/ s/.*/${escapedEntry}\n&/" $path
 }
 
 function configure() {
@@ -38,10 +38,10 @@
 
     local var
     local value
-    
+
     echo "Configuring $module"
-    for c in `printenv | perl -sne 'print "$1 " if m/^${envPrefix}_(.+?)=.*/' -- -envPrefix=$envPrefix`; do 
-        name=`echo ${c} | perl -pe 's/___/-/g; s/__/_/g; s/_/./g'`
+    for c in $(printenv | perl -sne 'print "$1 " if m/^${envPrefix}_(.+?)=.*/' -- -envPrefix=$envPrefix); do
+        name=$(echo ${c} | perl -pe 's/___/-/g; s/__/_/g; s/_/./g')
         var="${envPrefix}_${c}"
         value=${!var}
         echo " - Setting $name=$  "
--- docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh.orig
+++ docker/thirdparties/docker-compose/elasticsearch/scripts/es_init.sh
@@ -24,18 +24,18 @@
     local output_file=$5
 
     # clear output file
-    echo "" > "$output_file"
+    echo "" >"$output_file"
 
     local id=1
     while IFS= read -r line; do
         if [ -n "$type_value" ]; then
-            echo "{\"index\": {\"_index\": \"$index_name\", \"_type\": \"$type_value\", \"_id\": \"${id_prefix}${id}\"}}"  >> "$output_file"
+            echo "{\"index\": {\"_index\": \"$index_name\", \"_type\": \"$type_value\", \"_id\": \"${id_prefix}${id}\"}}" >>"$output_file"
         else
-            echo "{\"index\": {\"_index\": \"$index_name\", \"_id\": \"${id_prefix}${id}\"}}"  >> "$output_file"
+            echo "{\"index\": {\"_index\": \"$index_name\", \"_id\": \"${id_prefix}${id}\"}}" >>"$output_file"
         fi
-        echo "$line"  >> "$output_file"
+        echo "$line" >>"$output_file"
         id=$((id + 1))
-    done < "$data_file"
+    done <"$data_file"
 }
 
 array_data_file="/mnt/scripts/data/composite_type_array_bulk.json"
--- docker/thirdparties/docker-compose/hive/scripts/data/default/account_fund/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/default/account_fund/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/default/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/default/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/default/hive01/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/default/hive01/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/default/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/default/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/default/sale_table/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/default/sale_table/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/default/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/default/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/default/string_table/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/default/string_table/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/default/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/default/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/default/student/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/default/student/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/default/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/default/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/default/test1/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/default/test1/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/default/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/default/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/default/test2/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/default/test2/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/default/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/default/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/default/test_hive_doris/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/default/test_hive_doris/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/default/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/default/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/datev2_csv/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/datev2_csv/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}/create_table.hql"
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/datev2_orc/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/datev2_orc/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/datev2_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/datev2_parquet/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_config_test/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_config_test/run.sh
@@ -11,4 +11,3 @@
 hive -f "${CUR_DIR}"/create_table.hql
 
 hadoop fs -rm -r /user/doris/suites/default/hive_ignore_absent_partitions_table/country=India
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type2/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type2/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type3/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type3/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type_delimiter/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type_delimiter/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type_delimiter2/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type_delimiter2/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type_delimiter3/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_text_complex_type_delimiter3/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_all_types/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_all_types/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_delimiter/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_delimiter/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_nestedarray/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_nestedarray/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_upper_case_orc/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_upper_case_orc/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_upper_case_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_upper_case_parquet/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/logs1_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/logs1_parquet/run.sh
@@ -9,4 +9,3 @@
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/one_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/one_partition/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}/create_table.hql"
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/orc_nested_types/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/orc_nested_types/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/orc_partitioned_columns/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/orc_partitioned_columns/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/orc_partitioned_one_column/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/orc_partitioned_one_column/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/orc_predicate/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/orc_predicate/run.sh
@@ -5,5 +5,3 @@
 
 # create table
 hive -f "${CUR_DIR}"/orc_predicate_table.hql
-
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/par_fields_in_file_orc/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/par_fields_in_file_orc/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/par_fields_in_file_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/par_fields_in_file_parquet/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_bigint/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_bigint/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_boolean/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_boolean/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_char/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_char/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_date/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_date/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_decimal/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_decimal/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_double/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_double/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_float/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_float/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_int/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_int/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_smallint/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_smallint/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_string/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_string/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_timestamp/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_timestamp/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_tinyint/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_tinyint/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_varchar/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_alter_column_to_varchar/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_bloom_filter/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_bloom_filter/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_lz4_compression/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_lz4_compression/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_lzo_compression/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_lzo_compression/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_partitioned_columns/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_partitioned_columns/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_partitioned_one_column/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_partitioned_one_column/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_predicate_table/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_predicate_table/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/partition_location_1/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/partition_location_1/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/partition_location_2/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/partition_location_2/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/partition_manual_remove/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/partition_manual_remove/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_chinese_orc/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_chinese_orc/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_chinese_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_chinese_parquet/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_chinese_text/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_chinese_text/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_complex_types/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_complex_types/run.sh
@@ -9,4 +9,3 @@
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_compress_partitioned/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_compress_partitioned/run.sh
@@ -9,4 +9,3 @@
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_csv_format_error/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_csv_format_error/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}/create_table.hql"
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_date_string_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_date_string_partition/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}/create_table.hql"
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_hive_same_db_table_name/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_hive_same_db_table_name/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_hive_special_char_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_hive_special_char_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_mixed_par_locations_orc/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_mixed_par_locations_orc/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_mixed_par_locations_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_mixed_par_locations_parquet/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_multi_langs_orc/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_multi_langs_orc/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_multi_langs_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_multi_langs_parquet/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_multi_langs_text/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_multi_langs_text/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_special_orc_formats/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_special_orc_formats/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_truncate_char_or_varchar_columns_orc/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_truncate_char_or_varchar_columns_orc/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_truncate_char_or_varchar_columns_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_truncate_char_or_varchar_columns_parquet/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_truncate_char_or_varchar_columns_text/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_truncate_char_or_varchar_columns_text/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_wide_table/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_wide_table/run.sh
@@ -9,4 +9,3 @@
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/text_partitioned_columns/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/text_partitioned_columns/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/text_partitioned_one_column/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/text_partitioned_one_column/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/timestamp_with_time_zone/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/timestamp_with_time_zone/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/two_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/two_partition/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
 # create table
 hive -f "${CUR_DIR}/create_table.hql"
-
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/type_change_orc/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/type_change_orc/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/type_change_origin/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/type_change_origin/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/type_change_parquet/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/type_change_parquet/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/multi_catalog/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/bigint_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/bigint_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/char_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/char_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/date_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/date_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/decimal_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/decimal_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/double_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/double_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/float_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/float_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/int_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/int_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/smallint_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/smallint_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/string_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/string_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/tinyint_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/tinyint_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/partition_type/varchar_partition/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/partition_type/varchar_partition/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/partition_type/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/partition_type/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/regression/crdmm_data/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/regression/crdmm_data/run.sh
@@ -3,11 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/regression/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/regression/
 
 # create table
 hive -f "${CUR_DIR}"/create_table.hql
-
-
--- docker/thirdparties/docker-compose/hive/scripts/data/regression/serde_prop/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/regression/serde_prop/run.sh
@@ -5,5 +5,3 @@
 
 # create table
 hive -f "${CUR_DIR}"/some_serde_table.hql
-
-
--- docker/thirdparties/docker-compose/hive/scripts/data/statistics/statistics/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/statistics/statistics/run.sh
@@ -3,10 +3,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/statistics/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/statistics/
 
 # create table
 hive -f "${CUR_DIR}/create_table.hql"
-
--- docker/thirdparties/docker-compose/hive/scripts/data/statistics/stats/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/statistics/stats/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/statistics/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/statistics/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/test/hive_test/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/test/hive_test/run.sh
@@ -3,7 +3,6 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-
 hadoop fs -mkdir -p /user/doris/suites/test/
 hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/test/
 
--- docker/thirdparties/docker-compose/hive/scripts/data/tpch_1000_parquet/part/run.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/data/tpch_1000_parquet/part/run.sh
@@ -19,4 +19,3 @@
 
 # # create table
 # hive -f "${CUR_DIR}"/create_table.hql
-
--- docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/hive-metastore.sh
@@ -18,7 +18,6 @@
 
 set -e -x
 
-
 AUX_LIB="/mnt/scripts/auxlib"
 for file in "${AUX_LIB}"/*.tar.gz; do
     [ -e "$file" ] || continue
@@ -33,7 +32,6 @@
 # start metastore
 nohup /opt/hive/bin/hive --service metastore &
 
-
 # wait metastore start
 while ! $(nc -z localhost "${HMS_PORT:-9083}"); do
     sleep 5s
@@ -73,7 +71,6 @@
 hadoop_put_pids=()
 hadoop fs -mkdir -p /user/doris/
 
-
 ## put tpch1
 if [[ -z "$(ls /mnt/scripts/tpch1.db)" ]]; then
     echo "tpch1.db does not exist"
@@ -86,7 +83,6 @@
 hadoop fs -copyFromLocal -f /mnt/scripts/paimon1 /user/doris/ &
 hadoop_put_pids+=($!)
 
-
 ## put tvf_data
 if [[ -z "$(ls /mnt/scripts/tvf_data)" ]]; then
     echo "tvf_data does not exist"
@@ -99,7 +95,6 @@
 hadoop fs -copyFromLocal -f /mnt/scripts/preinstalled_data /user/doris/ &
 hadoop_put_pids+=($!)
 
-
 # wait put finish
 wait "${hadoop_put_pids[@]}"
 if [[ -z "$(hadoop fs -ls /user/doris/paimon1)" ]]; then
--- docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh.orig
+++ docker/thirdparties/docker-compose/hive/scripts/prepare-hive-data.sh
@@ -19,8 +19,8 @@
 
 CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 # Extract all tar.gz files under the repo
-find ${CUR_DIR}/data -type f -name "*.tar.gz" -print0 | \
-xargs -0 -n1 -P"${LOAD_PARALLEL}" bash -c '
+find ${CUR_DIR}/data -type f -name "*.tar.gz" -print0 |
+    xargs -0 -n1 -P"${LOAD_PARALLEL}" bash -c '
   f="$0"
   echo "Extracting hive data $f"
   dir=$(dirname "$f")
@@ -145,4 +145,3 @@
 for jar in "${jars[@]}"; do
     curl -O "https://${s3BucketName}.${s3Endpoint}/regression/docker/hive3/${jar}"
 done
-
--- docker/thirdparties/docker-compose/hudi/scripts/init.sh.orig
+++ docker/thirdparties/docker-compose/hudi/scripts/init.sh
@@ -21,8 +21,8 @@
 # Remove SUCCESS file from previous run to ensure fresh initialization
 SUCCESS_FILE="/opt/hudi-scripts/SUCCESS"
 if [[ -f "${SUCCESS_FILE}" ]]; then
-  echo "Removing previous SUCCESS file to ensure fresh initialization..."
-  rm -f "${SUCCESS_FILE}"
+    echo "Removing previous SUCCESS file to ensure fresh initialization..."
+    rm -f "${SUCCESS_FILE}"
 fi
 
 SPARK_HOME=/opt/spark
@@ -34,50 +34,50 @@
 
 # Function to download a JAR file if it doesn't exist
 download_jar() {
-  local jar_name="$1"
-  local version="$2"
-  local url="$3"
-  local jar_file="${CACHE_DIR}/${jar_name}-${version}.jar"
-  
-  if [[ ! -f "${jar_file}" ]]; then
-    echo "Downloading ${jar_name} JAR ${version} from ${url} ..." >&2
-    local download_success=false
-    if command -v curl >/dev/null 2>&1; then
-      if curl -sSfL "${url}" -o "${jar_file}"; then
-        download_success=true
-      else
-        echo "Error: Failed to download ${jar_name} from ${url}" >&2
-      fi
-    elif command -v wget >/dev/null 2>&1; then
-      if wget -qO "${jar_file}" "${url}"; then
-        download_success=true
-      else
-        echo "Error: Failed to download ${jar_name} from ${url}" >&2
-      fi
-    else
-      echo "Error: Neither curl nor wget is available in hudi-spark container." >&2
-      exit 1
-    fi
-    
-    if [[ "${download_success}" == "false" ]]; then
-      echo "Error: Failed to download ${jar_name} JAR. Please check the URL: ${url}" >&2
-      exit 1
-    fi
-    
+    local jar_name="$1"
+    local version="$2"
+    local url="$3"
+    local jar_file="${CACHE_DIR}/${jar_name}-${version}.jar"
+
     if [[ ! -f "${jar_file}" ]]; then
-      echo "Error: Downloaded file ${jar_file} does not exist" >&2
-      exit 1
+        echo "Downloading ${jar_name} JAR ${version} from ${url} ..." >&2
+        local download_success=false
+        if command -v curl >/dev/null 2>&1; then
+            if curl -sSfL "${url}" -o "${jar_file}"; then
+                download_success=true
+            else
+                echo "Error: Failed to download ${jar_name} from ${url}" >&2
+            fi
+        elif command -v wget >/dev/null 2>&1; then
+            if wget -qO "${jar_file}" "${url}"; then
+                download_success=true
+            else
+                echo "Error: Failed to download ${jar_name} from ${url}" >&2
+            fi
+        else
+            echo "Error: Neither curl nor wget is available in hudi-spark container." >&2
+            exit 1
+        fi
+
+        if [[ "${download_success}" == "false" ]]; then
+            echo "Error: Failed to download ${jar_name} JAR. Please check the URL: ${url}" >&2
+            exit 1
+        fi
+
+        if [[ ! -f "${jar_file}" ]]; then
+            echo "Error: Downloaded file ${jar_file} does not exist" >&2
+            exit 1
+        fi
     fi
-  fi
-  echo "${jar_file}"
+    echo "${jar_file}"
 }
 
 # Function to link a JAR file to Spark jars directory
 link_jar() {
-  local jar_file="$1"
-  local jar_name="$2"
-  local version="$3"
-  ln -sf "${jar_file}" "${JARS_DIR}/${jar_name}-${version}.jar"
+    local jar_file="$1"
+    local jar_name="$2"
+    local version="$3"
+    ln -sf "${jar_file}" "${JARS_DIR}/${jar_name}-${version}.jar"
 }
 
 # Wait for Hive Metastore to be ready
@@ -88,35 +88,35 @@
 RETRY_COUNT=0
 
 while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
-  if command -v nc >/dev/null 2>&1; then
-    if nc -z "${METASTORE_HOST}" "${METASTORE_PORT}" 2>/dev/null; then
-      echo "Hive Metastore is ready at ${METASTORE_HOST}:${METASTORE_PORT}"
-      break
+    if command -v nc >/dev/null 2>&1; then
+        if nc -z "${METASTORE_HOST}" "${METASTORE_PORT}" 2>/dev/null; then
+            echo "Hive Metastore is ready at ${METASTORE_HOST}:${METASTORE_PORT}"
+            break
+        fi
+    elif command -v timeout >/dev/null 2>&1; then
+        if timeout 1 bash -c "cat < /dev/null > /dev/tcp/${METASTORE_HOST}/${METASTORE_PORT}" 2>/dev/null; then
+            echo "Hive Metastore is ready at ${METASTORE_HOST}:${METASTORE_PORT}"
+            break
+        fi
+    else
+        # Fallback: just wait a bit and assume it's ready
+        if [ $RETRY_COUNT -eq 0 ]; then
+            echo "Warning: nc or timeout command not available, skipping metastore readiness check"
+            sleep 10
+            break
+        fi
     fi
-  elif command -v timeout >/dev/null 2>&1; then
-    if timeout 1 bash -c "cat < /dev/null > /dev/tcp/${METASTORE_HOST}/${METASTORE_PORT}" 2>/dev/null; then
-      echo "Hive Metastore is ready at ${METASTORE_HOST}:${METASTORE_PORT}"
-      break
+
+    RETRY_COUNT=$((RETRY_COUNT + 1))
+    if [ $((RETRY_COUNT % 10)) -eq 0 ]; then
+        echo "Waiting for Hive Metastore... (${RETRY_COUNT}/${MAX_RETRIES})"
     fi
-  else
-    # Fallback: just wait a bit and assume it's ready
-    if [ $RETRY_COUNT -eq 0 ]; then
-      echo "Warning: nc or timeout command not available, skipping metastore readiness check"
-      sleep 10
-      break
-    fi
-  fi
-  
-  RETRY_COUNT=$((RETRY_COUNT + 1))
-  if [ $((RETRY_COUNT % 10)) -eq 0 ]; then
-    echo "Waiting for Hive Metastore... (${RETRY_COUNT}/${MAX_RETRIES})"
-  fi
-  sleep 2
+    sleep 2
 done
 
 if [ $RETRY_COUNT -ge $MAX_RETRIES ]; then
-  echo "Error: Hive Metastore did not become ready within $((MAX_RETRIES * 2)) seconds"
-  exit 1
+    echo "Error: Hive Metastore did not become ready within $((MAX_RETRIES * 2)) seconds"
+    exit 1
 fi
 
 # Write core-site for MinIO (S3A)
@@ -191,37 +191,37 @@
 TEMP_SQL_DIR="/tmp/hudi_sql"
 
 if [[ -d "${SCRIPTS_DIR}" ]]; then
-  mkdir -p "${TEMP_SQL_DIR}"
-  
-  # Process each SQL file: substitute environment variables and combine them
-  echo "Processing Hudi SQL scripts..."
-  for sql_file in $(find "${SCRIPTS_DIR}" -name '*.sql' | sort); do
-    echo "Processing ${sql_file}..."
-    # Use sed to replace environment variables in SQL files
-    # Replace ${HIVE_METASTORE_URIS} and ${HUDI_BUCKET} with actual values
-    sed "s|\${HIVE_METASTORE_URIS}|${HIVE_METASTORE_URIS}|g; s|\${HUDI_BUCKET}|${HUDI_BUCKET}|g" "${sql_file}" >> "${TEMP_SQL_DIR}/hudi_total.sql"
-    echo "" >> "${TEMP_SQL_DIR}/hudi_total.sql"
-  done
-  
-  # Run Spark SQL to execute all SQL scripts
-  echo "Executing Hudi SQL scripts..."
-  START_TIME=$(date +%s)
-  ${SPARK_HOME}/bin/spark-sql \
-    --master local[*] \
-    --name hudi-init \
-    --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \
-    --conf spark.sql.catalogImplementation=hive \
-    --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension \
-    --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog \
-    -f "${TEMP_SQL_DIR}/hudi_total.sql"
-  END_TIME=$(date +%s)
-  EXECUTION_TIME=$((END_TIME - START_TIME))
-  echo "Hudi SQL scripts executed in ${EXECUTION_TIME} seconds"
-  
-  # Clean up temporary SQL file
-  rm -f "${TEMP_SQL_DIR}/hudi_total.sql"
+    mkdir -p "${TEMP_SQL_DIR}"
+
+    # Process each SQL file: substitute environment variables and combine them
+    echo "Processing Hudi SQL scripts..."
+    for sql_file in $(find "${SCRIPTS_DIR}" -name '*.sql' | sort); do
+        echo "Processing ${sql_file}..."
+        # Use sed to replace environment variables in SQL files
+        # Replace ${HIVE_METASTORE_URIS} and ${HUDI_BUCKET} with actual values
+        sed "s|\${HIVE_METASTORE_URIS}|${HIVE_METASTORE_URIS}|g; s|\${HUDI_BUCKET}|${HUDI_BUCKET}|g" "${sql_file}" >>"${TEMP_SQL_DIR}/hudi_total.sql"
+        echo "" >>"${TEMP_SQL_DIR}/hudi_total.sql"
+    done
+
+    # Run Spark SQL to execute all SQL scripts
+    echo "Executing Hudi SQL scripts..."
+    START_TIME=$(date +%s)
+    ${SPARK_HOME}/bin/spark-sql \
+        --master local[*] \
+        --name hudi-init \
+        --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \
+        --conf spark.sql.catalogImplementation=hive \
+        --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension \
+        --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog \
+        -f "${TEMP_SQL_DIR}/hudi_total.sql"
+    END_TIME=$(date +%s)
+    EXECUTION_TIME=$((END_TIME - START_TIME))
+    echo "Hudi SQL scripts executed in ${EXECUTION_TIME} seconds"
+
+    # Clean up temporary SQL file
+    rm -f "${TEMP_SQL_DIR}/hudi_total.sql"
 else
-  echo "Warning: SQL scripts directory ${SCRIPTS_DIR} not found, skipping table initialization."
+    echo "Warning: SQL scripts directory ${SCRIPTS_DIR} not found, skipping table initialization."
 fi
 
 # Create success marker file to indicate initialization is complete
--- docker/thirdparties/docker-compose/iceberg/tools/save_docker.sh.orig
+++ docker/thirdparties/docker-compose/iceberg/tools/save_docker.sh
--- docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh.orig
+++ docker/thirdparties/docker-compose/kerberos/entrypoint-hive-master.sh
@@ -56,7 +56,6 @@
 curl -O https://s3BucketName.s3Endpoint/regression/docker/hive3/paimon-hive-connector-3.1-1.3-SNAPSHOT.jar
 curl -O https://s3BucketName.s3Endpoint/regression/docker/hive3/gcs-connector-hadoop3-2.2.24-shaded.jar
 
-
 /usr/local/hadoop-run.sh &
 
 # check healthy hear
@@ -86,7 +85,7 @@
     echo "Invalid index parameter. Exiting."
     exit 1
 fi
-hive  -f /usr/local/sql/create_kerberos_hive_table.sql
+hive -f /usr/local/sql/create_kerberos_hive_table.sql
 if [[ ${enablePaimonHms} == "true" ]]; then
     echo "Creating Paimon HMS catalog and table"
     hadoop fs -put /tmp/paimon_data/* /user/hive/warehouse/
--- docker/thirdparties/docker-compose/kerberos/health-checks/health.sh.orig
+++ docker/thirdparties/docker-compose/kerberos/health-checks/health.sh
@@ -29,6 +29,6 @@
 
 if test -d "${HEALTH_D}"; then
     for health_script in "${HEALTH_D}"/*; do
-        "${health_script}" &>> /var/log/container-health.log || exit 1
+        "${health_script}" &>>/var/log/container-health.log || exit 1
     done
 fi
--- docker/thirdparties/docker-compose/kerberos/health-checks/hive-health-check-2.sh.orig
+++ docker/thirdparties/docker-compose/kerberos/health-checks/hive-health-check-2.sh
--- docker/thirdparties/docker-compose/kerberos/health-checks/hive-health-check.sh.orig
+++ docker/thirdparties/docker-compose/kerberos/health-checks/hive-health-check.sh
--- docker/thirdparties/docker-compose/kerberos/health-checks/supervisorctl-check.sh.orig
+++ docker/thirdparties/docker-compose/kerberos/health-checks/supervisorctl-check.sh
@@ -32,9 +32,9 @@
 FAILED=$(supervisorctl status | grep -v RUNNING || true)
 
 if [ "$FAILED" == "" ]; then
-  echo "All services are running"
-  exit 0
+    echo "All services are running"
+    exit 0
 else
-  echo "Some of the services are failing: ${FAILED}"
-  exit 1
+    echo "Some of the services are failing: ${FAILED}"
+    exit 1
 fi
--- docker/thirdparties/docker-compose/polaris/init-catalog.sh.orig
+++ docker/thirdparties/docker-compose/polaris/init-catalog.sh
@@ -26,29 +26,30 @@
 
 echo "[polaris-init] Waiting for Polaris health check at http://$HOST:$PORT/q/health ..."
 for i in $(seq 1 120); do
-  if curl -sSf "http://$HOST:8182/q/health" >/dev/null; then
-    break
-  fi
-  sleep 2
+    if curl -sSf "http://$HOST:8182/q/health" >/dev/null; then
+        break
+    fi
+    sleep 2
 done
 
 echo "[polaris-init] Fetching OAuth token via client_credentials ..."
 # Try to obtain token using correct OAuth endpoint
 TOKEN_JSON=$(curl -sS \
-  -X POST "http://$HOST:$PORT/api/catalog/v1/oauth/tokens" \
-  -H 'Content-Type: application/x-www-form-urlencoded' \
-  -d "grant_type=client_credentials&client_id=$USER&client_secret=$PASS&scope=PRINCIPAL_ROLE:ALL")
+    -X POST "http://$HOST:$PORT/api/catalog/v1/oauth/tokens" \
+    -H 'Content-Type: application/x-www-form-urlencoded' \
+    -d "grant_type=client_credentials&client_id=$USER&client_secret=$PASS&scope=PRINCIPAL_ROLE:ALL")
 
 # Extract access_token field
 TOKEN=$(printf "%s" "$TOKEN_JSON" | sed -n 's/.*"access_token"\s*:\s*"\([^"]*\)".*/\1/p')
 
 if [ -z "$TOKEN" ]; then
-  echo "[polaris-init] ERROR: Failed to obtain OAuth token. Response: $TOKEN_JSON" >&2
-  exit 1
+    echo "[polaris-init] ERROR: Failed to obtain OAuth token. Response: $TOKEN_JSON" >&2
+    exit 1
 fi
 
 echo "[polaris-init] Creating catalog '$CATALOG' with base '$BASE_LOCATION' ..."
-CREATE_PAYLOAD=$(cat <<JSON
+CREATE_PAYLOAD=$(
+    cat <<JSON
 {
   "name": "$CATALOG",
   "type": "INTERNAL",
@@ -71,19 +72,19 @@
 
 # Try create; on 409 Conflict, treat as success
 HTTP_CODE=$(curl -sS -o /tmp/resp.json -w "%{http_code}" \
-  -X POST "http://$HOST:$PORT/api/management/v1/catalogs" \
-  -H "Authorization: Bearer $TOKEN" \
-  -H "Content-Type: application/json" \
-  -d "$CREATE_PAYLOAD")
+    -X POST "http://$HOST:$PORT/api/management/v1/catalogs" \
+    -H "Authorization: Bearer $TOKEN" \
+    -H "Content-Type: application/json" \
+    -d "$CREATE_PAYLOAD")
 
 if [ "$HTTP_CODE" = "201" ]; then
-  echo "[polaris-init] Catalog created."
+    echo "[polaris-init] Catalog created."
 elif [ "$HTTP_CODE" = "409" ]; then
-  echo "[polaris-init] Catalog already exists. Skipping."
+    echo "[polaris-init] Catalog already exists. Skipping."
 else
-  echo "[polaris-init] Create catalog failed (HTTP $HTTP_CODE):"
-  cat /tmp/resp.json || true
-  exit 1
+    echo "[polaris-init] Create catalog failed (HTTP $HTTP_CODE):"
+    cat /tmp/resp.json || true
+    exit 1
 fi
 
 echo "[polaris-init] Setting up permissions for catalog '$CATALOG' ..."
@@ -91,55 +92,54 @@
 # Create a catalog admin role grants
 echo "[polaris-init] Creating catalog admin role grants ..."
 HTTP_CODE=$(curl -sS -o /tmp/resp.json -w "%{http_code}" \
-  -X PUT "http://$HOST:$PORT/api/management/v1/catalogs/$CATALOG/catalog-roles/catalog_admin/grants" \
-  -H "Authorization: Bearer $TOKEN" \
-  -H "Content-Type: application/json" \
-  -d '{"grant":{"type":"catalog", "privilege":"CATALOG_MANAGE_CONTENT"}}')
+    -X PUT "http://$HOST:$PORT/api/management/v1/catalogs/$CATALOG/catalog-roles/catalog_admin/grants" \
+    -H "Authorization: Bearer $TOKEN" \
+    -H "Content-Type: application/json" \
+    -d '{"grant":{"type":"catalog", "privilege":"CATALOG_MANAGE_CONTENT"}}')
 
 if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ]; then
-  echo "[polaris-init] Warning: Failed to create catalog admin grants (HTTP $HTTP_CODE)"
-  cat /tmp/resp.json || true
+    echo "[polaris-init] Warning: Failed to create catalog admin grants (HTTP $HTTP_CODE)"
+    cat /tmp/resp.json || true
 fi
 
 # Create a data engineer role
 echo "[polaris-init] Creating data engineer role ..."
 HTTP_CODE=$(curl -sS -o /tmp/resp.json -w "%{http_code}" \
-  -X POST "http://$HOST:$PORT/api/management/v1/principal-roles" \
-  -H "Authorization: Bearer $TOKEN" \
-  -H "Content-Type: application/json" \
-  -d '{"principalRole":{"name":"data_engineer"}}')
+    -X POST "http://$HOST:$PORT/api/management/v1/principal-roles" \
+    -H "Authorization: Bearer $TOKEN" \
+    -H "Content-Type: application/json" \
+    -d '{"principalRole":{"name":"data_engineer"}}')
 
 if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ] && [ "$HTTP_CODE" != "409" ]; then
-  echo "[polaris-init] Warning: Failed to create data engineer role (HTTP $HTTP_CODE)"
-  cat /tmp/resp.json || true
+    echo "[polaris-init] Warning: Failed to create data engineer role (HTTP $HTTP_CODE)"
+    cat /tmp/resp.json || true
 fi
 
 # Connect the roles
 echo "[polaris-init] Connecting roles ..."
 HTTP_CODE=$(curl -sS -o /tmp/resp.json -w "%{http_code}" \
-  -X PUT "http://$HOST:$PORT/api/management/v1/principal-roles/data_engineer/catalog-roles/$CATALOG" \
-  -H "Authorization: Bearer $TOKEN" \
-  -H "Content-Type: application/json" \
-  -d '{"catalogRole":{"name":"catalog_admin"}}')
+    -X PUT "http://$HOST:$PORT/api/management/v1/principal-roles/data_engineer/catalog-roles/$CATALOG" \
+    -H "Authorization: Bearer $TOKEN" \
+    -H "Content-Type: application/json" \
+    -d '{"catalogRole":{"name":"catalog_admin"}}')
 
 if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ]; then
-  echo "[polaris-init] Warning: Failed to connect roles (HTTP $HTTP_CODE)"
-  cat /tmp/resp.json || true
+    echo "[polaris-init] Warning: Failed to connect roles (HTTP $HTTP_CODE)"
+    cat /tmp/resp.json || true
 fi
 
 # Give root the data engineer role
 echo "[polaris-init] Assigning data engineer role to root ..."
 HTTP_CODE=$(curl -sS -o /tmp/resp.json -w "%{http_code}" \
-  -X PUT "http://$HOST:$PORT/api/management/v1/principals/root/principal-roles" \
-  -H "Authorization: Bearer $TOKEN" \
-  -H "Content-Type: application/json" \
-  -d '{"principalRole": {"name":"data_engineer"}}')
+    -X PUT "http://$HOST:$PORT/api/management/v1/principals/root/principal-roles" \
+    -H "Authorization: Bearer $TOKEN" \
+    -H "Content-Type: application/json" \
+    -d '{"principalRole": {"name":"data_engineer"}}')
 
 if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ]; then
-  echo "[polaris-init] Warning: Failed to assign data engineer role to root (HTTP $HTTP_CODE)"
-  cat /tmp/resp.json || true
+    echo "[polaris-init] Warning: Failed to assign data engineer role to root (HTTP $HTTP_CODE)"
+    cat /tmp/resp.json || true
 fi
 
 echo "[polaris-init] Permissions setup completed."
 echo "[polaris-init] Done."
-
--- docker/thirdparties/docker-compose/ranger/script/install_doris_ranger_plugins.sh.orig
+++ docker/thirdparties/docker-compose/ranger/script/install_doris_ranger_plugins.sh
--- docker/thirdparties/docker-compose/ranger/script/install_doris_service_def.sh.orig
+++ docker/thirdparties/docker-compose/ranger/script/install_doris_service_def.sh
--- docker/thirdparties/run-thirdparties-docker.sh.orig
+++ docker/thirdparties/run-thirdparties-docker.sh
@@ -51,7 +51,7 @@
 STOP=0
 NEED_RESERVE_PORTS=0
 export NEED_LOAD_DATA=1
-export LOAD_PARALLEL=$(( $(getconf _NPROCESSORS_ONLN) / 2 ))
+export LOAD_PARALLEL=$(($(getconf _NPROCESSORS_ONLN) / 2))
 export IP_HOST=$(ip -4 addr show scope global | awk '/inet / {print $2}' | cut -d/ -f1 | head -n 1)
 
 if ! OPTS="$(getopt \
@@ -201,7 +201,7 @@
         RUN_MARIADB=1
     elif [[ "${element}"x == "db2"x ]]; then
         RUN_DB2=1
-    elif [[ "${element}"x == "oceanbase"x ]];then
+    elif [[ "${element}"x == "oceanbase"x ]]; then
         RUN_OCEANBASE=1
     elif [[ "${element}"x == "lakesoul"x ]]; then
         RUN_LAKESOUL=1
@@ -376,7 +376,7 @@
     . "${ROOT}"/docker-compose/hive/hive-2x_settings.env
     envsubst <"${ROOT}"/docker-compose/hive/hive-2x.yaml.tpl >"${ROOT}"/docker-compose/hive/hive-2x.yaml
     envsubst <"${ROOT}"/docker-compose/hive/hadoop-hive.env.tpl >"${ROOT}"/docker-compose/hive/hadoop-hive-2x.env
-    envsubst <"${ROOT}"/docker-compose/hive/hadoop-hive-2x.env.tpl >> "${ROOT}"/docker-compose/hive/hadoop-hive-2x.env
+    envsubst <"${ROOT}"/docker-compose/hive/hadoop-hive-2x.env.tpl >>"${ROOT}"/docker-compose/hive/hadoop-hive-2x.env
     sudo docker compose -p ${CONTAINER_UID}hive2 -f "${ROOT}"/docker-compose/hive/hive-2x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-2x.env down
     if [[ "${STOP}" -ne 1 ]]; then
         sudo docker compose -p ${CONTAINER_UID}hive2 -f "${ROOT}"/docker-compose/hive/hive-2x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-2x.env up --build --remove-orphans -d --wait
@@ -390,7 +390,7 @@
     . "${ROOT}"/docker-compose/hive/hive-3x_settings.env
     envsubst <"${ROOT}"/docker-compose/hive/hive-3x.yaml.tpl >"${ROOT}"/docker-compose/hive/hive-3x.yaml
     envsubst <"${ROOT}"/docker-compose/hive/hadoop-hive.env.tpl >"${ROOT}"/docker-compose/hive/hadoop-hive-3x.env
-    envsubst <"${ROOT}"/docker-compose/hive/hadoop-hive-3x.env.tpl >> "${ROOT}"/docker-compose/hive/hadoop-hive-3x.env
+    envsubst <"${ROOT}"/docker-compose/hive/hadoop-hive-3x.env.tpl >>"${ROOT}"/docker-compose/hive/hadoop-hive-3x.env
     sudo docker compose -p ${CONTAINER_UID}hive3 -f "${ROOT}"/docker-compose/hive/hive-3x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-3x.env down
     if [[ "${STOP}" -ne 1 ]]; then
         sudo docker compose -p ${CONTAINER_UID}hive3 -f "${ROOT}"/docker-compose/hive/hive-3x.yaml --env-file "${ROOT}"/docker-compose/hive/hadoop-hive-3x.env up --build --remove-orphans -d --wait
@@ -409,28 +409,27 @@
     if [[ "${STOP}" -ne 1 ]]; then
         if [[ ! -d "${ICEBERG_DIR}/data" ]]; then
             echo "${ICEBERG_DIR}/data does not exist"
-            cd "${ICEBERG_DIR}" \
-            && rm -f iceberg_data*.zip \
-            && wget -P "${ROOT}"/docker-compose/iceberg https://"${s3BucketName}.${s3Endpoint}"/regression/datalake/pipeline_data/iceberg_data_paimon_101.zip \
-            && sudo unzip iceberg_data_paimon_101.zip \
-            && sudo mv iceberg_data data \
-            && sudo rm -rf iceberg_data_paimon_101.zip
+            cd "${ICEBERG_DIR}" &&
+                rm -f iceberg_data*.zip &&
+                wget -P "${ROOT}"/docker-compose/iceberg https://"${s3BucketName}.${s3Endpoint}"/regression/datalake/pipeline_data/iceberg_data_paimon_101.zip &&
+                sudo unzip iceberg_data_paimon_101.zip &&
+                sudo mv iceberg_data data &&
+                sudo rm -rf iceberg_data_paimon_101.zip
             cd -
         else
             echo "${ICEBERG_DIR}/data exist, continue !"
         fi
 
-        if [[ ! -f "${ICEBERG_DIR}/data/input/jars/iceberg-aws-bundle-1.10.0.jar" ]]; then 
+        if [[ ! -f "${ICEBERG_DIR}/data/input/jars/iceberg-aws-bundle-1.10.0.jar" ]]; then
             echo "iceberg 1.10.0 jars does not exist"
-            cd "${ICEBERG_DIR}" \
-            && rm -f iceberg_1_10_0*.jars.tar.gz\
-            && wget -P "${ROOT}"/docker-compose/iceberg https://"${s3BucketName}.${s3Endpoint}"/regression/datalake/pipeline_data/iceberg_1_10_0.jars.tar.gz \
-            && sudo tar xzvf iceberg_1_10_0.jars.tar.gz -C "data/input/jars" \
-            && sudo rm -rf iceberg_1_10_0.jars.tar.gz
+            cd "${ICEBERG_DIR}" &&
+                rm -f iceberg_1_10_0*.jars.tar.gz && wget -P "${ROOT}"/docker-compose/iceberg https://"${s3BucketName}.${s3Endpoint}"/regression/datalake/pipeline_data/iceberg_1_10_0.jars.tar.gz &&
+                sudo tar xzvf iceberg_1_10_0.jars.tar.gz -C "data/input/jars" &&
+                sudo rm -rf iceberg_1_10_0.jars.tar.gz
             cd -
-        else 
+        else
             echo "iceberg 1.10.0 jars exist, continue !"
-        fi        
+        fi
 
         sudo docker compose -f "${ROOT}"/docker-compose/iceberg/iceberg.yaml --env-file "${ROOT}"/docker-compose/iceberg/iceberg.env up -d --wait
     fi
@@ -505,9 +504,9 @@
     for i in {1..2}; do
         . "${ROOT}"/docker-compose/kerberos/kerberos${i}_settings.env
         envsubst <"${ROOT}"/docker-compose/kerberos/hadoop-hive.env.tpl >"${ROOT}"/docker-compose/kerberos/hadoop-hive-${i}.env
-        envsubst <"${ROOT}"/docker-compose/kerberos/conf/my.cnf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/my.cnf
-        envsubst <"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/kdc.conf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/kdc.conf
-        envsubst <"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/krb5.conf.tpl > "${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/krb5.conf
+        envsubst <"${ROOT}"/docker-compose/kerberos/conf/my.cnf.tpl >"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/my.cnf
+        envsubst <"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/kdc.conf.tpl >"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/kdc.conf
+        envsubst <"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/krb5.conf.tpl >"${ROOT}"/docker-compose/kerberos/conf/kerberos${i}/krb5.conf
     done
     sudo chmod a+w /etc/hosts
     sudo sed -i "1i${IP_HOST} hadoop-master" /etc/hosts
@@ -573,12 +572,12 @@
     echo "RUN_ICEBERG_REST"
     # iceberg-rest with multiple cloud storage backends
     ICEBERG_REST_DIR=${ROOT}/docker-compose/iceberg-rest
-    
+
     # generate iceberg-rest.yaml
     export CONTAINER_UID=${CONTAINER_UID}
     . "${ROOT}"/docker-compose/iceberg-rest/iceberg-rest_settings.env
     envsubst <"${ICEBERG_REST_DIR}/docker-compose.yaml.tpl" >"${ICEBERG_REST_DIR}/docker-compose.yaml"
-    
+
     sudo docker compose -f "${ICEBERG_REST_DIR}/docker-compose.yaml" down
     if [[ "${STOP}" -ne 1 ]]; then
         # Start all three REST catalogs (S3, OSS, COS)
@@ -606,102 +605,102 @@
 declare -A pids
 
 if [[ "${RUN_ES}" -eq 1 ]]; then
-    start_es > start_es.log  2>&1 &
+    start_es >start_es.log 2>&1 &
     pids["es"]=$!
 fi
 
 if [[ "${RUN_MYSQL}" -eq 1 ]]; then
-    start_mysql > start_mysql.log 2>&1 &
+    start_mysql >start_mysql.log 2>&1 &
     pids["mysql"]=$!
 fi
 
 if [[ "${RUN_PG}" -eq 1 ]]; then
-    start_pg > start_pg.log 2>&1 &
+    start_pg >start_pg.log 2>&1 &
     pids["pg"]=$!
 fi
 
 if [[ "${RUN_ORACLE}" -eq 1 ]]; then
-    start_oracle > start_oracle.log 2>&1 &
+    start_oracle >start_oracle.log 2>&1 &
     pids["oracle"]=$!
 fi
 
 if [[ "${RUN_DB2}" -eq 1 ]]; then
-    start_db2 > start_db2.log 2>&1 &
+    start_db2 >start_db2.log 2>&1 &
     pids["db2"]=$!
 fi
 
 if [[ "${RUN_OCEANBASE}" -eq 1 ]]; then
-    start_oceanbase > start_oceanbase.log 2>&1 &
+    start_oceanbase >start_oceanbase.log 2>&1 &
     pids["oceanbase"]=$!
 fi
 
 if [[ "${RUN_SQLSERVER}" -eq 1 ]]; then
-    start_sqlserver > start_sqlserver.log 2>&1 &
+    start_sqlserver >start_sqlserver.log 2>&1 &
     pids["sqlserver"]=$!
 fi
 
 if [[ "${RUN_CLICKHOUSE}" -eq 1 ]]; then
-    start_clickhouse > start_clickhouse.log 2>&1 &
+    start_clickhouse >start_clickhouse.log 2>&1 &
     pids["clickhouse"]=$!
 fi
 
 if [[ "${RUN_KAFKA}" -eq 1 ]]; then
-    start_kafka > start_kafka.log 2>&1 &
+    start_kafka >start_kafka.log 2>&1 &
     pids["kafka"]=$!
 fi
 
 if [[ "${RUN_HIVE2}" -eq 1 ]]; then
-    start_hive2 > start_hive2.log 2>&1 &
+    start_hive2 >start_hive2.log 2>&1 &
     pids["hive2"]=$!
 fi
 
 if [[ "${RUN_HIVE3}" -eq 1 ]]; then
-    start_hive3 > start_hive3.log 2>&1 &
+    start_hive3 >start_hive3.log 2>&1 &
     pids["hive3"]=$!
 fi
 
 if [[ "${RUN_ICEBERG}" -eq 1 ]]; then
-    start_iceberg > start_iceberg.log 2>&1 &
+    start_iceberg >start_iceberg.log 2>&1 &
     pids["iceberg"]=$!
 fi
 
 if [[ "${RUN_ICEBERG_REST}" -eq 1 ]]; then
-    start_iceberg_rest > start_iceberg_rest.log 2>&1 &
+    start_iceberg_rest >start_iceberg_rest.log 2>&1 &
     pids["iceberg-rest"]=$!
 fi
 
 if [[ "${RUN_HUDI}" -eq 1 ]]; then
-    start_hudi > start_hudi.log 2>&1 &
+    start_hudi >start_hudi.log 2>&1 &
     pids["hudi"]=$!
 fi
 
 if [[ "${RUN_MARIADB}" -eq 1 ]]; then
-    start_mariadb > start_mariadb.log 2>&1 &
+    start_mariadb >start_mariadb.log 2>&1 &
     pids["mariadb"]=$!
 fi
 
 if [[ "${RUN_LAKESOUL}" -eq 1 ]]; then
-    start_lakesoul > start_lakesoule.log 2>&1 &
+    start_lakesoul >start_lakesoule.log 2>&1 &
     pids["lakesoul"]=$!
 fi
 
 if [[ "${RUN_MINIO}" -eq 1 ]]; then
-    start_minio > start_minio.log 2>&1 &
+    start_minio >start_minio.log 2>&1 &
     pids["minio"]=$!
 fi
 
 if [[ "${RUN_POLARIS}" -eq 1 ]]; then
-    start_polaris > start_polaris.log 2>&1 &
+    start_polaris >start_polaris.log 2>&1 &
     pids["polaris"]=$!
 fi
 
 if [[ "${RUN_KERBEROS}" -eq 1 ]]; then
-    start_kerberos > start_kerberos.log 2>&1 &
+    start_kerberos >start_kerberos.log 2>&1 &
     pids["kerberos"]=$!
 fi
 
 if [[ "${RUN_RANGER}" -eq 1 ]]; then
-    start_ranger > start_ranger.log 2>&1 &
+    start_ranger >start_ranger.log 2>&1 &
     pids["ranger"]=$!
 fi
 echo "waiting all dockers starting done"
--- hooks/setup_worktree.sh.orig
+++ hooks/setup_worktree.sh
--- run-be-ut.sh.orig
+++ run-be-ut.sh
@@ -480,7 +480,6 @@
 profraw=${DORIS_TEST_BINARY_DIR}/doris_be_test.profraw
 profdata=${DORIS_TEST_BINARY_DIR}/doris_be_test.profdata
 
-
 if [[ ${GDB} -ge 1 ]]; then
     gdb --args "${test}" "${FILTER}"
     exit
--- run-regression-test.sh.orig
+++ run-regression-test.sh
@@ -180,7 +180,7 @@
         local cmd="$1"
         local max_attempts=3
         local attempt=1
-        
+
         while [[ ${attempt} -le ${max_attempts} ]]; do
             echo "Attempt ${attempt}/${max_attempts}: ${cmd}"
             if eval "${cmd}"; then
@@ -189,18 +189,21 @@
             else
                 echo "Command failed on attempt ${attempt}"
                 if [[ ${attempt} -lt ${max_attempts} ]]; then
-                    sleep $((attempt * 5))  # Linear backoff
+                    sleep $((attempt * 5)) # Linear backoff
                 fi
                 ((attempt++))
             fi
         done
-        
+
         echo "Command failed after ${max_attempts} attempts"
         return 1
     }
 
     # Build generated code
-    cd "${DORIS_HOME}/gensrc/thrift" || { echo "Failed to change directory"; exit 1; }
+    cd "${DORIS_HOME}/gensrc/thrift" || {
+        echo "Failed to change directory"
+        exit 1
+    }
     if ! make; then
         echo "Make command failed in ${DORIS_HOME}/gensrc/thrift"
         exit 1
@@ -209,45 +212,60 @@
     cp -rf "${DORIS_HOME}/gensrc/build/gen_java/org/apache/doris/thrift" "${FRAMEWORK_APACHE_DIR}/doris/"
 
     # Navigate to framework directory and build with retry
-    cd "${DORIS_HOME}/regression-test/framework" || { echo "Failed to change directory"; exit 1; }
-    
+    cd "${DORIS_HOME}/regression-test/framework" || {
+        echo "Failed to change directory"
+        exit 1
+    }
+
     # First try to download dependencies only
     echo "Downloading dependencies..."
-    dep_output_file="$(mktemp -t doris-dependencies-XXXXXX.txt)" || { echo "Failed to create temporary file for dependency output"; exit 1; }
+    dep_output_file="$(mktemp -t doris-dependencies-XXXXXX.txt)" || {
+        echo "Failed to create temporary file for dependency output"
+        exit 1
+    }
     execute_maven_with_retry "${MVN_CMD} dependency:resolve -B -DskipTests=true -Dmdep.prependGroupId=true -DoutputFile=${dep_output_file}" || {
         echo "Failed to download dependencies"
         exit 1
     }
-    
+
     # Then package with retry
     echo "Building package..."
     execute_maven_with_retry "${MVN_CMD} clean package -B -DskipTests=true -Dmaven.javadoc.skip=true" || {
         echo "Failed to build package"
         exit 1
     }
-    
-    cd "${DORIS_HOME}" || { echo "Failed to return to DORIS_HOME"; exit 1; }
 
+    cd "${DORIS_HOME}" || {
+        echo "Failed to return to DORIS_HOME"
+        exit 1
+    }
+
     mkdir -p "${OUTPUT_DIR}"/{lib,log}
     cp -r "${REGRESSION_TEST_BUILD_DIR}"/regression-test-*.jar "${OUTPUT_DIR}/lib"
 
     echo "===== BUILD JAVA_UDF_SRC TO GENERATE JAR ====="
     mkdir -p "${DORIS_HOME}"/regression-test/suites/javaudf_p0/jars
-    cd "${DORIS_HOME}"/regression-test/java-udf-src || { echo "Failed to change directory to java-udf-src"; exit 1; }
-    
+    cd "${DORIS_HOME}"/regression-test/java-udf-src || {
+        echo "Failed to change directory to java-udf-src"
+        exit 1
+    }
+
     # Build UDF with retry
     execute_maven_with_retry "${MVN_CMD} clean package -B -DskipTests=true -Dmaven.javadoc.skip=true" || {
         echo "Failed to build UDF package"
         exit 1
     }
-    
+
     cp target/java-udf-case-jar-with-dependencies.jar "${DORIS_HOME}"/regression-test/suites/javaudf_p0/jars/
     # be and fe dir is compiled output
     mkdir -p "${DORIS_HOME}"/output/fe/custom_lib/
     mkdir -p "${DORIS_HOME}"/output/be/custom_lib/
     cp target/java-udf-case-jar-with-dependencies.jar "${DORIS_HOME}"/output/fe/custom_lib/
     cp target/java-udf-case-jar-with-dependencies.jar "${DORIS_HOME}"/output/be/custom_lib/
-    cd "${DORIS_HOME}" || { echo "Failed to return to DORIS_HOME"; exit 1; }
+    cd "${DORIS_HOME}" || {
+        echo "Failed to return to DORIS_HOME"
+        exit 1
+    }
 fi
 
 # check java home
@@ -272,12 +290,12 @@
         SKIP_NEXT=0
         continue
     fi
-    
+
     if [[ "${arg}" == "-f" ]] || [[ "${arg}" == "--file" ]]; then
         SKIP_NEXT=1
         continue
     fi
-    
+
     NEW_ARGS+=("${arg}")
 done
 
@@ -286,7 +304,7 @@
     # Extract directory (parent path)
     # e.g., "regression-test/suites/shape_check/tpch_sf1000/shape/q1.groovy" -> "regression-test/suites/shape_check/tpch_sf1000/shape"
     FILE_DIR=$(dirname "${FILE_PATH}")
-    
+
     # Extract suite name (filename without .groovy or .sql extension)
     # e.g., "q1.groovy" -> "q1" or "q01.sql" -> "q01"
     FILE_NAME=$(basename "${FILE_PATH}")
@@ -294,9 +312,9 @@
     SUITE_NAME="${FILE_NAME%.groovy}"
     # Remove .sql extension if exists
     SUITE_NAME="${SUITE_NAME%.sql}"
-    
+
     echo "Converted -f ${FILE_PATH} to -d ${FILE_DIR} -s ${SUITE_NAME}"
-    
+
     # Add -d and -s to arguments
     NEW_ARGS+=("-d" "${FILE_DIR}" "-s" "${SUITE_NAME}")
 fi
--- thirdparty/build-thirdparty.sh.orig
+++ thirdparty/build-thirdparty.sh
@@ -520,7 +520,7 @@
 
     rm -rf CMakeCache.txt CMakeFiles/
     "${CMAKE_CMD}" ../ -G "${GENERATOR}" -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-      -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_POSITION_INDEPENDENT_CODE=On
+        -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_POSITION_INDEPENDENT_CODE=On
     # -DCMAKE_CXX_FLAGS="$warning_uninitialized"
 
     "${BUILD_SYSTEM}" -j "${PARALLEL}"
@@ -1307,7 +1307,7 @@
     rm -rf CMakeCache.txt CMakeFiles/
 
     "${CMAKE_CMD}" -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-     -G "${GENERATOR}" -DBUILD_SHARED_LIBS=FALSE -DFMT_TEST=OFF -DFMT_DOC=OFF -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" ..
+        -G "${GENERATOR}" -DBUILD_SHARED_LIBS=FALSE -DFMT_TEST=OFF -DFMT_DOC=OFF -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" ..
     "${BUILD_SYSTEM}" -j"${PARALLEL}"
     "${BUILD_SYSTEM}" install
 }
@@ -1383,10 +1383,10 @@
 
     # -Wno-elaborated-enum-base to make C++20 on MacOS happy
     "${CMAKE_CMD}" -G "${GENERATOR}" \
-    -DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS -Wno-elaborated-enum-base" \
-    -DBUILD_EXAMPLES=OFF \
-    -DBUILD_TOOLS=OFF \
-    -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DBUILD_TESTING=OFF ..
+        -DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS -Wno-elaborated-enum-base" \
+        -DBUILD_EXAMPLES=OFF \
+        -DBUILD_TOOLS=OFF \
+        -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DBUILD_TESTING=OFF ..
     "${BUILD_SYSTEM}" -j "${PARALLEL}" install
 }
 
@@ -1892,7 +1892,7 @@
     cd "${BUILD_DIR}"
 
     "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-    -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Release ..
+        -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Release ..
     MACHINE_TYPE="$(uname -m)"
     if [[ "${MACHINE_TYPE}" == "aarch64" || "${MACHINE_TYPE}" == 'arm64' ]]; then
         CFLAGS="--target=aarch64-linux-gnu -march=armv8-a+crc" NEON64_CFLAGS=" "
@@ -1922,10 +1922,10 @@
 
         # Add -ldl for clang compatibility (libcrypto.a requires dlopen/dlsym/dlclose/dlerror)
         "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-        -DCMAKE_CXX_FLAGS="-Wno-maybe-uninitialized" \
-        -DCMAKE_EXE_LINKER_FLAGS="-ldl" \
-        -DCMAKE_SHARED_LINKER_FLAGS="-ldl" \
-        -DDISABLE_RUST_IN_BUILD=ON -DVCPKG_MANIFEST_MODE=ON -DVCPKG_OVERLAY_PORTS="${azure_dir}/${AZURE_PORTS}" -DVCPKG_MANIFEST_DIR="${azure_dir}/${AZURE_MANIFEST_DIR}" -DWARNINGS_AS_ERRORS=FALSE -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Release ..
+            -DCMAKE_CXX_FLAGS="-Wno-maybe-uninitialized" \
+            -DCMAKE_EXE_LINKER_FLAGS="-ldl" \
+            -DCMAKE_SHARED_LINKER_FLAGS="-ldl" \
+            -DDISABLE_RUST_IN_BUILD=ON -DVCPKG_MANIFEST_MODE=ON -DVCPKG_OVERLAY_PORTS="${azure_dir}/${AZURE_PORTS}" -DVCPKG_MANIFEST_DIR="${azure_dir}/${AZURE_MANIFEST_DIR}" -DWARNINGS_AS_ERRORS=FALSE -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Release ..
         "${BUILD_SYSTEM}" -j "${PARALLEL}"
         "${BUILD_SYSTEM}" install
     fi
@@ -1941,7 +1941,7 @@
     cd "${BUILD_DIR}"
 
     "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-    -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DDRAGONBOX_INSTALL_TO_CHARS=ON ..
+        -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DDRAGONBOX_INSTALL_TO_CHARS=ON ..
 
     "${BUILD_SYSTEM}" -j "${PARALLEL}"
     "${BUILD_SYSTEM}" install
@@ -1987,7 +1987,7 @@
     cd "${BUILD_DIR}"
 
     "${CMAKE_CMD}" -G "${GENERATOR}" -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-    -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Release ..
+        -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Release ..
     "${BUILD_SYSTEM}" -j "${PARALLEL}"
     "${BUILD_SYSTEM}" install
 
@@ -2011,7 +2011,7 @@
     fi
 
     CXXFLAGS="-Wno-nontrivial-memcall" \
-    "${CMAKE_CMD}" -C "${TP_DIR}/paimon-cpp-cache.cmake" \
+        "${CMAKE_CMD}" -C "${TP_DIR}/paimon-cpp-cache.cmake" \
         -G "${GENERATOR}" \
         -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
         -DCMAKE_INSTALL_PREFIX="${TP_INSTALL_DIR}" \
@@ -2170,104 +2170,104 @@
 
     # Map package name to the uppercase *_SOURCE variable name
     case "${pkg}" in
-        libevent)        src_var="LIBEVENT_SOURCE" ;;
-        openssl)         src_var="OPENSSL_SOURCE" ;;
-        thrift)          src_var="THRIFT_SOURCE" ;;
-        protobuf)        src_var="PROTOBUF_SOURCE" ;;
-        gflags)          src_var="GFLAGS_SOURCE" ;;
-        glog)            src_var="GLOG_SOURCE" ;;
-        gtest)           src_var="GTEST_SOURCE" ;;
-        rapidjson)       src_var="RAPIDJSON_SOURCE" ;;
-        snappy)          src_var="SNAPPY_SOURCE" ;;
-        gperftools)      src_var="GPERFTOOLS_SOURCE" ;;
-        zlib)            src_var="ZLIB_SOURCE" ;;
-        crc32c)          src_var="CRC32C_SOURCE" ;;
-        lz4)             src_var="LZ4_SOURCE" ;;
-        bzip)            src_var="BZIP_SOURCE" ;;
-        lzo2)            src_var="LZO2_SOURCE" ;;
-        zstd)            src_var="ZSTD_SOURCE" ;;
-        #boost)           src_var="BOOST_SOURCE" ;; // boost is used for mysql later
-        abseil)          src_var="ABSEIL_SOURCE" ;;
-        curl)            src_var="CURL_SOURCE" ;;
-        re2)             src_var="RE2_SOURCE" ;;
-        hyperscan)
-            # hyperscan also builds ragel, clean both
-            if [[ -n "${RAGEL_SOURCE}" && -d "${TP_SOURCE_DIR}/${RAGEL_SOURCE}" ]]; then
-                echo "Cleaning up source: ${RAGEL_SOURCE}"
-                rm -rf "${TP_SOURCE_DIR}/${RAGEL_SOURCE}"
+    libevent) src_var="LIBEVENT_SOURCE" ;;
+    openssl) src_var="OPENSSL_SOURCE" ;;
+    thrift) src_var="THRIFT_SOURCE" ;;
+    protobuf) src_var="PROTOBUF_SOURCE" ;;
+    gflags) src_var="GFLAGS_SOURCE" ;;
+    glog) src_var="GLOG_SOURCE" ;;
+    gtest) src_var="GTEST_SOURCE" ;;
+    rapidjson) src_var="RAPIDJSON_SOURCE" ;;
+    snappy) src_var="SNAPPY_SOURCE" ;;
+    gperftools) src_var="GPERFTOOLS_SOURCE" ;;
+    zlib) src_var="ZLIB_SOURCE" ;;
+    crc32c) src_var="CRC32C_SOURCE" ;;
+    lz4) src_var="LZ4_SOURCE" ;;
+    bzip) src_var="BZIP_SOURCE" ;;
+    lzo2) src_var="LZO2_SOURCE" ;;
+    zstd) src_var="ZSTD_SOURCE" ;;
+    #boost)           src_var="BOOST_SOURCE" ;; // boost is used for mysql later
+    abseil) src_var="ABSEIL_SOURCE" ;;
+    curl) src_var="CURL_SOURCE" ;;
+    re2) src_var="RE2_SOURCE" ;;
+    hyperscan)
+        # hyperscan also builds ragel, clean both
+        if [[ -n "${RAGEL_SOURCE}" && -d "${TP_SOURCE_DIR}/${RAGEL_SOURCE}" ]]; then
+            echo "Cleaning up source: ${RAGEL_SOURCE}"
+            rm -rf "${TP_SOURCE_DIR}/${RAGEL_SOURCE}"
+        fi
+        src_var="HYPERSCAN_SOURCE"
+        ;;
+    mysql) src_var="MYSQL_SOURCE" ;;
+    odbc) src_var="ODBC_SOURCE" ;;
+    leveldb) src_var="LEVELDB_SOURCE" ;;
+    brpc) src_var="BRPC_SOURCE" ;;
+    rocksdb) src_var="ROCKSDB_SOURCE" ;;
+    cyrus_sasl) src_var="CYRUS_SASL_SOURCE" ;;
+    librdkafka) src_var="LIBRDKAFKA_SOURCE" ;;
+    flatbuffers) src_var="FLATBUFFERS_SOURCE" ;;
+    arrow) src_var="ARROW_SOURCE" ;;
+    brotli) src_var="BROTLI_SOURCE" ;;
+    cares) src_var="CARES_SOURCE" ;;
+    grpc) src_var="GRPC_SOURCE" ;;
+    s2) src_var="S2_SOURCE" ;;
+    bitshuffle) src_var="BITSHUFFLE_SOURCE" ;;
+    croaringbitmap) src_var="CROARINGBITMAP_SOURCE" ;;
+    fmt) src_var="FMT_SOURCE" ;;
+    parallel_hashmap) src_var="PARALLEL_HASHMAP_SOURCE" ;;
+    orc) src_var="ORC_SOURCE" ;;
+    cctz) src_var="CCTZ_SOURCE" ;;
+    jemalloc_doris) src_var="JEMALLOC_DORIS_SOURCE" ;;
+    libunwind) src_var="LIBUNWIND_SOURCE" ;;
+    benchmark) src_var="BENCHMARK_SOURCE" ;;
+    simdjson) src_var="SIMDJSON_SOURCE" ;;
+    nlohmann_json) src_var="NLOHMANN_JSON_SOURCE" ;;
+    libbacktrace) src_var="LIBBACKTRACE_SOURCE" ;;
+    sse2neon) src_var="SSE2NEON_SOURCE" ;;
+    xxhash) src_var="XXHASH_SOURCE" ;;
+    concurrentqueue) src_var="CONCURRENTQUEUE_SOURCE" ;;
+    fast_float) src_var="FAST_FLOAT_SOURCE" ;;
+    hadoop_libs) src_var="HADOOP_LIBS_SOURCE" ;;
+    hadoop_libs_3_4) src_var="HADOOP_LIBS_3_4_SOURCE" ;;
+    avx2neon) src_var="AVX2NEON_SOURCE" ;;
+    libdeflate) src_var="LIBDEFLATE_SOURCE" ;;
+    streamvbyte) src_var="STREAMVBYTE_SOURCE" ;;
+    ali_sdk)
+        # ali_sdk internally builds jsoncpp and libuuid, clean all three
+        for dep_var in JSONCPP_SOURCE LIBUUID_SOURCE ALI_SDK_SOURCE; do
+            dep_dir="${!dep_var}"
+            if [[ -n "${dep_dir}" && -d "${TP_SOURCE_DIR}/${dep_dir}" ]]; then
+                echo "Cleaning up source: ${dep_dir}"
+                rm -rf "${TP_SOURCE_DIR}/${dep_dir}"
             fi
-            src_var="HYPERSCAN_SOURCE"
-            ;;
-        mysql)           src_var="MYSQL_SOURCE" ;;
-        odbc)            src_var="ODBC_SOURCE" ;;
-        leveldb)         src_var="LEVELDB_SOURCE" ;;
-        brpc)            src_var="BRPC_SOURCE" ;;
-        rocksdb)         src_var="ROCKSDB_SOURCE" ;;
-        cyrus_sasl)      src_var="CYRUS_SASL_SOURCE" ;;
-        librdkafka)      src_var="LIBRDKAFKA_SOURCE" ;;
-        flatbuffers)     src_var="FLATBUFFERS_SOURCE" ;;
-        arrow)           src_var="ARROW_SOURCE" ;;
-        brotli)          src_var="BROTLI_SOURCE" ;;
-        cares)           src_var="CARES_SOURCE" ;;
-        grpc)            src_var="GRPC_SOURCE" ;;
-        s2)              src_var="S2_SOURCE" ;;
-        bitshuffle)      src_var="BITSHUFFLE_SOURCE" ;;
-        croaringbitmap)  src_var="CROARINGBITMAP_SOURCE" ;;
-        fmt)             src_var="FMT_SOURCE" ;;
-        parallel_hashmap) src_var="PARALLEL_HASHMAP_SOURCE" ;;
-        orc)             src_var="ORC_SOURCE" ;;
-        cctz)            src_var="CCTZ_SOURCE" ;;
-        jemalloc_doris)  src_var="JEMALLOC_DORIS_SOURCE" ;;
-        libunwind)       src_var="LIBUNWIND_SOURCE" ;;
-        benchmark)       src_var="BENCHMARK_SOURCE" ;;
-        simdjson)        src_var="SIMDJSON_SOURCE" ;;
-        nlohmann_json)   src_var="NLOHMANN_JSON_SOURCE" ;;
-        libbacktrace)    src_var="LIBBACKTRACE_SOURCE" ;;
-        sse2neon)        src_var="SSE2NEON_SOURCE" ;;
-        xxhash)          src_var="XXHASH_SOURCE" ;;
-        concurrentqueue) src_var="CONCURRENTQUEUE_SOURCE" ;;
-        fast_float)      src_var="FAST_FLOAT_SOURCE" ;;
-        hadoop_libs)     src_var="HADOOP_LIBS_SOURCE" ;;
-        hadoop_libs_3_4) src_var="HADOOP_LIBS_3_4_SOURCE" ;;
-        avx2neon)        src_var="AVX2NEON_SOURCE" ;;
-        libdeflate)      src_var="LIBDEFLATE_SOURCE" ;;
-        streamvbyte)     src_var="STREAMVBYTE_SOURCE" ;;
-        ali_sdk)
-            # ali_sdk internally builds jsoncpp and libuuid, clean all three
-            for dep_var in JSONCPP_SOURCE LIBUUID_SOURCE ALI_SDK_SOURCE; do
-                dep_dir="${!dep_var}"
-                if [[ -n "${dep_dir}" && -d "${TP_SOURCE_DIR}/${dep_dir}" ]]; then
-                    echo "Cleaning up source: ${dep_dir}"
-                    rm -rf "${TP_SOURCE_DIR}/${dep_dir}"
-                fi
-            done
-            return
-            ;;
-        base64)          src_var="BASE64_SOURCE" ;;
-        azure)           src_var="AZURE_SOURCE" ;;
-        dragonbox)       src_var="DRAGONBOX_SOURCE" ;;
-        icu)             src_var="ICU_SOURCE" ;;
-        jindofs)         src_var="JINDOFS_SOURCE" ;;
-        pugixml)         src_var="PUGIXML_SOURCE" ;;
-        paimon_cpp)      src_var="PAIMON_CPP_SOURCE" ;;
-        aws_sdk)         src_var="AWS_SDK_SOURCE" ;;
-        lzma)            src_var="LZMA_SOURCE" ;;
-        xml2)            src_var="XML2_SOURCE" ;;
-        idn)             src_var="IDN_SOURCE" ;;
-        gsasl)           src_var="GSASL_SOURCE" ;;
-        krb5)            src_var="KRB5_SOURCE" ;;
-        hdfs3)           src_var="HDFS3_SOURCE" ;;
-        libdivide)       src_var="LIBDIVIDE_SOURCE" ;;
-        binutils)        src_var="BINUTILS_SOURCE" ;;
-        gettext)         src_var="GETTEXT_SOURCE" ;;
-        # Header-only files, skip cleanup
-        pdqsort|timsort|tsan_header|js_and_css)
-            return
-            ;;
-        *)
-            echo "Warning: no source mapping for package '${pkg}', skipping cleanup"
-            return
-            ;;
+        done
+        return
+        ;;
+    base64) src_var="BASE64_SOURCE" ;;
+    azure) src_var="AZURE_SOURCE" ;;
+    dragonbox) src_var="DRAGONBOX_SOURCE" ;;
+    icu) src_var="ICU_SOURCE" ;;
+    jindofs) src_var="JINDOFS_SOURCE" ;;
+    pugixml) src_var="PUGIXML_SOURCE" ;;
+    paimon_cpp) src_var="PAIMON_CPP_SOURCE" ;;
+    aws_sdk) src_var="AWS_SDK_SOURCE" ;;
+    lzma) src_var="LZMA_SOURCE" ;;
+    xml2) src_var="XML2_SOURCE" ;;
+    idn) src_var="IDN_SOURCE" ;;
+    gsasl) src_var="GSASL_SOURCE" ;;
+    krb5) src_var="KRB5_SOURCE" ;;
+    hdfs3) src_var="HDFS3_SOURCE" ;;
+    libdivide) src_var="LIBDIVIDE_SOURCE" ;;
+    binutils) src_var="BINUTILS_SOURCE" ;;
+    gettext) src_var="GETTEXT_SOURCE" ;;
+    # Header-only files, skip cleanup
+    pdqsort | timsort | tsan_header | js_and_css)
+        return
+        ;;
+    *)
+        echo "Warning: no source mapping for package '${pkg}', skipping cleanup"
+        return
+        ;;
     esac
 
     src_dir="${!src_var}"
--- thirdparty/download-prebuild-thirdparty.sh.orig
+++ thirdparty/download-prebuild-thirdparty.sh
@@ -28,8 +28,8 @@
 VERSION="$1"
 
 if [ -z "$VERSION" ]; then
-  echo "Usage: sh download-prebuild-thirdparty.sh <version>"
-  exit 1
+    echo "Usage: sh download-prebuild-thirdparty.sh <version>"
+    exit 1
 fi
 
 # ----------------------------
@@ -39,13 +39,13 @@
 ARCH="$(uname -m)"
 
 case "$OS" in
-  Darwin)
+Darwin)
     PLATFORM="darwin"
     ;;
-  Linux)
+Linux)
     PLATFORM="linux"
     ;;
-  *)
+*)
     echo "Unsupported OS: $OS"
     exit 1
     ;;
@@ -55,13 +55,13 @@
 # Detect ARCH
 # ----------------------------
 case "$ARCH" in
-  x86_64|amd64)
+x86_64 | amd64)
     ARCH="x86_64"
     ;;
-  arm64|aarch64)
+arm64 | aarch64)
     ARCH="arm64"
     ;;
-  *)
+*)
     echo "Unsupported architecture: $ARCH"
     exit 1
     ;;
@@ -71,19 +71,19 @@
 # Resolve base release tag
 # ----------------------------
 case "$VERSION" in
-  master|4.0)
+master | 4.0)
     RELEASE_TAG="automation"
     ;;
-  3.1)
+3.1)
     RELEASE_TAG="automation-3.1"
     ;;
-  3.0)
+3.0)
     RELEASE_TAG="automation-3.0"
     ;;
-  2.1)
+2.1)
     RELEASE_TAG="automation-2.1"
     ;;
-  *)
+*)
     echo "Unsupported version: $VERSION"
     exit 1
     ;;
@@ -95,26 +95,26 @@
 FILENAME=""
 
 if [ "$PLATFORM" = "darwin" ]; then
-  FILENAME="doris-thirdparty-prebuilt-darwin-${ARCH}.tar.xz"
+    FILENAME="doris-thirdparty-prebuilt-darwin-${ARCH}.tar.xz"
 else
-  if [ "$ARCH" = "arm64" ]; then
-    case "$VERSION" in
-      master|4.0)
-        FILENAME="doris-thirdparty-prebuild-arm64.tar.xz"
-        ;;
-      3.1)
-        FILENAME="doris-thirdparty-3.1-prebuild-arm64.tar.xz"
-        ;;
-      3.0)
-        FILENAME="doris-thirdparty-3.0-prebuild-arm64.tar.xz"
-        ;;
-      2.1)
-        FILENAME="doris-thirdparty-2.1-prebuild-arm64.tar.xz"
-        ;;
-    esac
-  else
-    FILENAME="doris-thirdparty-prebuilt-linux-x86_64.tar.xz"
-  fi
+    if [ "$ARCH" = "arm64" ]; then
+        case "$VERSION" in
+        master | 4.0)
+            FILENAME="doris-thirdparty-prebuild-arm64.tar.xz"
+            ;;
+        3.1)
+            FILENAME="doris-thirdparty-3.1-prebuild-arm64.tar.xz"
+            ;;
+        3.0)
+            FILENAME="doris-thirdparty-3.0-prebuild-arm64.tar.xz"
+            ;;
+        2.1)
+            FILENAME="doris-thirdparty-2.1-prebuild-arm64.tar.xz"
+            ;;
+        esac
+    else
+        FILENAME="doris-thirdparty-prebuilt-linux-x86_64.tar.xz"
+    fi
 fi
 
 # ----------------------------
@@ -132,15 +132,14 @@
 # Download
 # ----------------------------
 if command -v curl >/dev/null 2>&1; then
-  curl -fL -o "$FILENAME" "$URL"
+    curl -fL -o "$FILENAME" "$URL"
 elif command -v wget >/dev/null 2>&1; then
-  wget -O "$FILENAME" "$URL"
+    wget -O "$FILENAME" "$URL"
 else
-  echo "Error: curl or wget is required"
-  exit 1
+    echo "Error: curl or wget is required"
+    exit 1
 fi
 
 echo
 echo "Download completed:"
 echo "  $(pwd)/$FILENAME"
-
--- thirdparty/download-thirdparty.sh.orig
+++ thirdparty/download-thirdparty.sh
@@ -272,7 +272,7 @@
     GIT_URL_VAR="${TP_ARCH}_GIT_URL"
     GIT_TAG_VAR="${TP_ARCH}_GIT_TAG"
     SOURCE_VAR="${TP_ARCH}_SOURCE"
-    
+
     GIT_URL="${!GIT_URL_VAR}"
     GIT_TAG="${!GIT_TAG_VAR}"
     SOURCE_DIR="${TP_SOURCE_DIR}/${!SOURCE_VAR}"
@@ -407,7 +407,7 @@
             patch -p1 <"${TP_PATCH_DIR}/rocksdb-5.14.2.patch"
             if [[ "$(uname -s)" == "Darwin" ]]; then
                 patch -p1 <"${TP_PATCH_DIR}/rocksdb-mac-compile-fix.patch"
-            fi 
+            fi
             touch "${PATCHED_MARK}"
         fi
         cd -
@@ -710,9 +710,9 @@
     echo "Finished patching ${PAIMON_CPP_SOURCE}"
 fi
 
-if [[ " ${TP_ARCHIVES[*]} " =~ " CCTZ " ]] ; then
+if [[ " ${TP_ARCHIVES[*]} " =~ " CCTZ " ]]; then
     cd $TP_SOURCE_DIR/$CCTZ_SOURCE
-    if [[ ! -f "$PATCHED_MARK" ]] ; then
+    if [[ ! -f "$PATCHED_MARK" ]]; then
         for patch_file in "${TP_PATCH_DIR}"/cctz-*; do
             echo "patch ${patch_file}"
             patch -p1 --ignore-whitespace <"${patch_file}"
--- tools/coffeebench-tools/bin/run-queries.sh.orig
+++ tools/coffeebench-tools/bin/run-queries.sh
@@ -73,7 +73,6 @@
     usage
 fi
 
-
 check_prerequest() {
     local CMD=$1
     local NAME=$2
--- tools/tpcds-tools/bin/run-tpcds-queries.sh.orig
+++ tools/tpcds-tools/bin/run-tpcds-queries.sh
@@ -142,15 +142,15 @@
 run_query() {
     local query_file=$1
     local query_name=$2
-    
+
     if [[ ! -f "${query_file}" ]]; then
         return
     fi
-    
+
     local cold=0
     local hot1=0
     local hot2=0
-    
+
     echo -ne "${query_name}\t" | tee -a result.csv
     start=$(date +%s%3N)
     if ! output=$(mysql -h"${FE_HOST}" -u"${USER}" -P"${FE_QUERY_PORT}" -D"${DB}" --comments \
@@ -201,7 +201,7 @@
 for i in ${query_array[@]}; do
     # Run main query file
     run_query "${TPCDS_QUERIES_DIR}/query${i}.sql" "query${i}"
-    
+
     # Run variant query file if exists
     run_query "${TPCDS_QUERIES_DIR}/query${i}_1.sql" "query${i}_1"
 done
----------

You can reformat the above files to meet shfmt's requirements by typing:

  shfmt  -w filename


morrySnow pushed a commit that referenced this pull request Mar 17, 2026
… exit (apache#61040)

### What problem does this PR solve?

The SyncPoint singleton was being destroyed during program exit while
background bthread timers were still accessing it, causing
heap-use-after-free.

Changed get_instance() to return a never-destructed heap-allocated
pointer
instead of a stack-allocated static object to prevent destruction order
issues.

This is a standard pattern for singletons accessed by background
threads.

```
11:47:40       #0 0x5582a963153d in operator new(unsigned long) (/root/doris/cloud/ut_build_ASAN/test/recycler_test+0x122b53d) (BuildId: 1191affa24589f52)
11:47:40       #1 0x5582ab0aa52f in doris::SyncPoint::SyncPoint() /root/doris/common/cpp/sync_point.cpp:77:9
11:47:40       #2 0x5582ab0aa46b in doris::SyncPoint::get_instance() /root/doris/common/cpp/sync_point.cpp:73:20
11:47:40       #3 0x5582aae33ee8 in doris::cloud::memkv::Transaction::get(std::basic_string_view<char, std::char_traits<char>>, std::basic_string_view<char, std::char_traits<char>>, std::unique_ptr<doris::cloud::RangeGetIterator, std::default_delete<doris::cloud::RangeGetIterator>>*, bool, int) /root/doris/cloud/src/meta-store/mem_txn_kv.cpp:276:5
11:47:40       #4 0x5582a968f49f in doris::cloud::txn_get(doris::cloud::TxnKv*, std::basic_string_view<char, std::char_traits<char>>, std::basic_string_view<char, std::char_traits<char>>, std::unique_ptr<doris::cloud::RangeGetIterator, std::default_delete<doris::cloud::RangeGetIterator>>&) /root/doris/cloud/src/recycler/recycler.cpp:99:18
11:47:40       apache#5 0x5582a9657090 in doris::cloud::InstanceRecycler::scan_and_recycle(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::basic_string_view<char, std::char_traits<char>>, std::function<int (std::basic_string_view<char, std::char_traits<char>>, std::basic_string_view<char, std::char_traits<char>>)>, std::function<int ()>) /root/doris/cloud/src/recycler/recycler.cpp:2976:23
11:47:40       apache#6 0x5582a9686153 in doris::cloud::InstanceRecycler::recycle_rowsets() /root/doris/cloud/src/recycler/recycler.cpp:2587:15
11:47:40       apache#7 0x5582a96a8d47 in doris::cloud::RecyclerTest_recycle_empty_Test::TestBody() /root/doris/cloud/test/recycler_test.cpp:1136:5
```
morrySnow pushed a commit that referenced this pull request Mar 24, 2026
…free. (apache#61138)

### What problem does this PR solve?
Related PR: apache/doris-thirdparty#383

Problem Summary:
fix coredump:
```
#0 0x5561f1d46f12 in operator delete(void*, unsigned long) (/mnt/disk2/tengjianping/doris-master/output/be/lib/doris_be+0x50ae4f12)
    #1 0x55622c94b454 in std::__new_allocator<std::shared_ptr<orc::ExpressionTree>>::deallocate(std::shared_ptr<orc::ExpressionTree>*, unsigned long) (/mnt/disk2/tengjianping/doris-master/output/be/lib/doris_be+0x8b6e9454)
    #2 0x55622c94b41e in std::_Deque_base<std::shared_ptr<orc::ExpressionTree>, std::allocator<std::shared_ptr<orc::ExpressionTree>>>::_M_deallocate_node(std::shared_ptr<orc::ExpressionTree>*) (/mnt/disk2/tengjianping/doris-master/output/be/lib/doris_be+0x8b6e941e)
    #3 0x55622c950681 in std::deque<std::shared_ptr<orc::ExpressionTree>, std::allocator<std::shared_ptr<orc::ExpressionTree>>>::_M_pop_front_aux() (/mnt/disk2/tengjianping/doris-master/output/be/lib/doris_be+0x8b6ee681)
    #4 0x55622c94868e in std::deque<std::shared_ptr<orc::ExpressionTree>, std::allocator<std::shared_ptr<orc::ExpressionTree>>>::pop_front() (/mnt/disk2/tengjianping/doris-master/output/be/lib/doris_be+0x8b6e668e)
    apache#5 0x55622c947d79 in orc::rewriteLeaves(std::shared_ptr<orc::ExpressionTree>, unsigned long*) SearchArgument.cc
    apache#6 0x55622c947809 in orc::SearchArgumentBuilderImpl::build() (/mnt/disk2/tengjianping/doris-master/output/be/lib/doris_be+0x8b6e5809)
    apache#7 0x5562195209a6 in doris::vectorized::OrcReader::_init_search_argument(std::vector<std::shared_ptr<doris::vectorized::VExpr>, std::allocator<std::shared_ptr<doris::vectorized::VExpr>>> const&) /mnt/disk2/tengjianping/doris-master/be/src/vec/exec/format/orc/vorc_reader.cpp:1072:27
    apache#8 0x556219527175 in doris::vectorized::OrcReader::set_fill_columns(std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, doris::SlotDescriptor const*>, std::hash<std::__cxx11::basic_string<char, 
```
morrySnow pushed a commit that referenced this pull request Mar 24, 2026
```
==1472432==ERROR: AddressSanitizer: heap-use-after-free on address 0x7bc7535fba50 at pc 0x557ec5178739 bp 0x7b1743746d40 sp 0x7b1743746500
WRITE of size 104 at 0x7bc7535fba50 thread T2
    #0 0x557ec5178738 in memset ~/workspace/llvm-project/compiler-rt/lib/asan/../sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc:87:3
    #1 0x7f17566e64fc in fdb_transaction_set_option (libfdb_c.so+0xc014fc) (BuildId: 854ec989d11d3c183aa4963a6d758cfc2b571b07)
    #2 0x7f17566e2e47 in fdb_transaction_set_option (libfdb_c.so+0xbfde47) (BuildId: 854ec989d11d3c183aa4963a6d758cfc2b571b07)
    #3 0x7f17566e4ec5 in fdb_transaction_set_option (libfdb_c.so+0xbffec5) (BuildId: 854ec989d11d3c183aa4963a6d758cfc2b571b07)
    #4 0x7f17564f80ee in fdb_transaction_set_option (libfdb_c.so+0xa130ee) (BuildId: 854ec989d11d3c183aa4963a6d758cfc2b571b07)
    apache#5 0x7f1755e55b71 in fdb_transaction_set_option (libfdb_c.so+0x370b71) (BuildId: 854ec989d11d3c183aa4963a6d758cfc2b571b07)
    apache#6 0x7f1755e2b2e9 in fdb_run_network (libfdb_c.so+0x3462e9) (BuildId: 854ec989d11d3c183aa4963a6d758cfc2b571b07)
    apache#7 0x557ec6595a2b in doris::cloud::fdb::Network::init()::::operator()() const ~/workspace/doris/cloud/ut_build_ASAN/../src/meta-store/txn_kv.cpp:468:28
    apache#8 0x557ec65958e6 in void std::__invoke_impl<void, doris::cloud::fdb::Network::init()::>(std::__invoke_other, doris::cloud::fdb::Network::init()::&&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:61:14
    apache#9 0x557ec6595886 in std::__invoke_result<doris::cloud::fdb::Network::init()::>::type std::__invoke<doris::cloud::fdb::Network::init()::>(doris::cloud::fdb::Network::init()::&&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:96:14
    apache#10 0x557ec659584e in void std::thread::_Invoker<std::tuple<doris::cloud::fdb::Network::init()::>>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_thread.h:292:13
    apache#11 0x557ec6595816 in std::thread::_Invoker<std::tuple<doris::cloud::fdb::Network::init()::>>::operator()() /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_thread.h:299:11
    apache#12 0x557ec659571a in std::thread::_State_impl<std::thread::_Invoker<std::tuple<doris::cloud::fdb::Network::init()::>>>::_M_run() /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_thread.h:244:13
    apache#13 0x557ec7756e43 in execute_native_thread_routine InstrProfilingUtil.c
    apache#14 0x557ec50b1a07 in asan_thread_start(void*) ~/workspace/llvm-project/compiler-rt/lib/asan/asan_interceptors.cpp:239:43
    apache#15 0x7f17545caaa3 in start_thread nptl/pthread_create.c:447:8
    apache#16 0x7f1754657a63 in clone misc/../sysdeps/unix/sysv/linux/x86_64/clone.S:100
```
morrySnow pushed a commit that referenced this pull request Mar 26, 2026
…pache#55500)

### What problem does this PR solve?
Related PR: apache#45937

Problem Summary:
Fix the error case on ingestion load and the core in parquet reader.

==8898==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x62f0020603fc at pc 0x55f634e64ded bp 0x7fba0d03c410 sp 0x7fba0d03bbd8
READ of size 4 at 0x62f0020603fc thread T768 (PUSH-9699)
    #0 0x55f634e64dec in __asan_memcpy (/mnt/hdd01/ci/doris-deploy-branch-3.1-local/be/lib/doris_be+0x39a24dec) (BuildId: 9b04e7f7d3075dac)
    #1 0x55f634eca93f in std::char_traits::copy(char*, char const*, unsigned long) /var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/char_traits.h:409:33
    #2 0x55f634eca93f in std::__cxx11::basic_string, std::allocator>::_S_copy(char*, char const*, unsigned long) /var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/basic_string.h:351:4
    #3 0x55f634eca93f in std::__cxx11::basic_string, std::allocator>::_S_copy_chars(char*, char const*, char const*) /var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/basic_string.h:398:9
    #4 0x55f634eca93f in void std::__cxx11::basic_string, std::allocator>::_M_construct(char const*, char const*, std::forward_iterator_tag) /var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/basic_string.tcc:225:6
    apache#5 0x55f654a4f74d in void std::__cxx11::basic_string, std::allocator>::_M_construct_aux(char const*, char const*, std::__false_type) /var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/basic_string.h:247:11
    apache#6 0x55f654a4f74d in void std::__cxx11::basic_string, std::allocator>::_M_construct(char const*, char const*) /var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/basic_string.h:266:4
    apache#7 0x55f654a4f74d in std::__cxx11::basic_string, std::allocator>::basic_string(char const*, unsigned long, std::allocator const&) /var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/basic_string.h:513:9
    apache#8 0x55f654a4f74d in doris::vectorized::parse_thrift_footer(std::shared_ptr, doris::vectorized::FileMetaData**, unsigned long*, doris::io::IOContext*) /home/zcp/repo_center/doris_branch-3.1/doris/be/src/vec/exec/format/parquet/parquet_thrift_util.h:55:17
morrySnow pushed a commit that referenced this pull request Mar 26, 2026
…che#5027)

pick apache#56854
```
start BE in cloud mode, cloud_unique_id: ddc_cloud_unique_id_be, meta_service_endpoint: 172.20.56.123:5000
/mnt/disk3/pipeline/repo/selectdb-core_branch-selectdb-doris-3.1/selectdb-core/be/src/vec/sink/writer/vfile_result_writer.cpp:139:71: runtime error: load of value 190, which is not a valid value for type 'bool'
    #0 0x55b5e9a1e7a0 in doris::vectorized::VFileResultWriter::_create_file_writer(std::__cxx11::basic_string, std::allocator> const&) /mnt/disk3/pipeline/repo/selectdb-core_branch-selectdb-doris-3.1/selectdb-core/be/src/vec/sink/writer/vfile_result_writer.cpp:139:71
    #1 0x55b5e9a1ac9f in doris::vectorized::VFileResultWriter::_create_next_file_writer() /mnt/disk3/pipeline/repo/selectdb-core_branch-selectdb-doris-3.1/selectdb-core/be/src/vec/sink/writer/vfile_result_writer.cpp:116:12
    #2 0x55b5e9a16445 in doris::vectorized::VFileResultWriter::open(doris::RuntimeState*, doris::RuntimeProfile*) /mnt/disk3/pipeline/repo/selectdb-core_branch-selectdb-doris-3.1/selectdb-core/be/src/vec/sink/writer/vfile_result_writer.cpp:100:12
    #3 0x55b5e7677e7c in doris::vectorized::AsyncResultWriter::process_block(doris::RuntimeState*, doris::RuntimeProfile*) /mnt/disk3/pipeline/repo/selectdb-core_branch-selectdb-doris-3.1/selectdb-core/be/src/vec/sink/writer/async_result_writer.cpp:106:23
    #4 0x55b5e767ca7a in doris::vectorized::AsyncResultWriter::start_writer(doris::RuntimeState*, doris::RuntimeProfile*)::$_0::operator()() const /mnt/disk3/pipeline/repo/selectdb-core_branch-selectdb-doris-3.1/selectdb-core/be/src/vec/sink/writer/async_result_writer.cpp:93:5
    apache#5 0x55b5e767ca7a in void std::__invoke_impl(std::__invoke_other, doris::vectorized::AsyncResultWriter::start_writer(doris::RuntimeState*, doris::RuntimeProfile*)::$_0&) /var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:61:14
    apache#6 0x55b5e767ca7a in std::enable_if, void>::type std::__invoke_r(doris::vectorized::AsyncResultWriter::start_writer(doris::RuntimeState*, doris::RuntimeProfile*)::$_0&) /var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:111:2
    apache#7 0x55b5e767ca7a in std::_Function_handler::_M_invoke(std::_Any_data const&) /var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:291:9
    apache#8 0x55b5b50496a7 in doris::ThreadPool::dispatch_thread() /mnt/disk3/pipeline/repo/selectdb-core_branch-selectdb-doris-3.1/selectdb-core/be/src/util/threadpool.cpp:602:24
    apache#9 0x55b5b50206de in std::function::operator()() const /var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:560:9
    apache#10 0x55b5b50206de in doris::Thread::supervise_thread(void*) /mnt/disk3/pipeline/repo/selectdb-core_branch-selectdb-doris-3.1/selectdb-core/be/src/util/thread.cpp:498:5
```
morrySnow pushed a commit that referenced this pull request Jul 10, 2026
Issue Number: None

Related PR: None

Problem Summary: 
UBSAN/ASAN reported a heap-use-after-free during BE shutdown in
TimeSharingTaskExecutor destruction. The scan executor owned pending
split runners, while the split runner function held ScannerContext, and
ScannerContext cleaned up its task by copying the executor shared_ptr
back from the scheduler. When the scheduler was already destroying that
shared_ptr, copying the same shared_ptr member could re-enter the
executor destruction path and release members such as MetricEntity
twice. Keep ScannerContext cleanup tied to a weak reference of the
executor captured when the task is created, and avoid capturing the
scheduler this pointer in split cleanup lambdas.

旧代码的链路大致是:

1. TaskExecutorSimplifiedScanScheduler 析构,成员 _task_executor 是最后阶段要销毁的
std::shared_ptr<TaskExecutor>。
2. 这个 shared_ptr 引用计数降到 0,于是开始执行
TimeSharingTaskExecutor::~TimeSharingTaskExecutor()。
  3. TimeSharingTaskExecutor 析构时会释放它持有的 split/task 容器。
4. split 里有 ScannerSplitRunner,它的 std::function 捕获了
std::shared_ptr<ScannerContext>。
5. 释放 split 会释放这个 captured ScannerContext,于是进入
ScannerContext::~ScannerContext()。
  6. 旧代码在 ScannerContext::~ScannerContext() 里又执行:

  task_executor_scheduler->task_executor()->remove_task(_task_handle)

  而 task_executor() 返回的是:

std::shared_ptr<TaskExecutor> task_executor() const { return
_task_executor; }

  也就是从 scheduler 的 _task_executor 成员再复制一个 shared_ptr。

问题在于:第 1 步里,scheduler 的 _task_executor 这个 shared_ptr 正在析构,并且它已经触发了
TimeSharingTaskExecutor 的析构。此时再从同一个 member
shared_ptr 复制引用,等价于在其析构过程中重新操作它的 control block。这个 control block 可能已经处于
release-last-use 路径,随后临时复制出来的
shared_ptr 析构又会再次 release 同一个 control block,导致 TimeSharingTaskExecutor
析构链被重入或二次释放其成员。

```
/usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:1069:11: runtime error: member call on address 0x7c63e14891c0 which does not point to an object of type 'std::_Sp_counted_base<>'
0x7c63e14891c0: note: object has invalid vptr
 00 00 00 00 e0 74 1d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 be be be be d0 26 2b e1
              ^~~~~~~~~~~~~~~~~~~~~~~
              invalid vptr
    #0 0x55e77069caee in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:1069:11
    #1 0x55e77069caee in std::__shared_ptr<doris::MetricEntity, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:1531:31
    #2 0x55e77069caee in doris::TimeSharingTaskExecutor::~TimeSharingTaskExecutor() be/build_ASAN/./be/build_ASAN/../src/exec/scan/task_executor/time_sharing/time_sharing_task_executor.cpp:306:1
    #3 0x55e75b584397 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release_last_use() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:174:2
    #4 0x55e7706486ac in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:1069:11
    apache#5 0x55e7706486ac in std::__shared_ptr<doris::TaskExecutor, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:1531:31
    apache#6 0x55e7706486ac in doris::ScannerContext::~ScannerContext() be/build_ASAN/./be/build_ASAN/../src/exec/scan/scanner_context.cpp:277:13
    apache#7 0x55e75b584397 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release_last_use() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:174:2
    apache#8 0x55e7706f288d in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:1069:11
    apache#9 0x55e7706f288d in std::__shared_ptr<doris::ScannerContext, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:1531:31
    apache#10 0x55e7706f288d in doris::ScannerScheduler::submit(std::shared_ptr<doris::ScannerContext>, std::shared_ptr<doris::ScanTask>)::$_0::operator()() const::'lambda'()::~() be/build_ASAN/./be/build_ASAN/../src/exec/scan/scanner_scheduler.cpp:77:26
    apache#11 0x55e7706f39bb in std::_Function_base::_Base_manager<doris::ScannerScheduler::submit(std::shared_ptr<doris::ScannerContext>, std::shared_ptr<doris::ScanTask>)::$_0::operator()() const::'lambda'()>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_function.h:177:4
    apache#12 0x55e7706f39bb in std::_Function_base::_Base_manager<doris::ScannerScheduler::submit(std::shared_ptr<doris::ScannerContext>, std::shared_ptr<doris::ScanTask>)::$_0::operator()() const::'lambda'()>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_function.h:205:8
    apache#13 0x55e7706f39bb in std::_Function_handler<bool (), doris::ScannerScheduler::submit(std::shared_ptr<doris::ScannerContext>, std::shared_ptr<doris::ScanTask>)::$_0::operator()() const::'lambda'()>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_function.h:284:6
    apache#14 0x55e770702246 in std::_Function_base::~_Function_base() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_function.h:246:2
    apache#15 0x55e770702246 in doris::ScannerSplitRunner::~ScannerSplitRunner() be/build_ASAN/../src/exec/scan/scanner_scheduler.h:62:7
    apache#16 0x55e75b584397 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release_last_use() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:174:2
    apache#17 0x55e7706e11e9 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:1069:11
    apache#18 0x55e7706e11e9 in std::__shared_ptr<doris::SplitRunner, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:1531:31
    apache#19 0x55e7706e11e9 in doris::PrioritizedSplitRunner::~PrioritizedSplitRunner() be/build_ASAN/../src/exec/scan/task_executor/time_sharing/prioritized_split_runner.h:54:47
    apache#20 0x55e75b584397 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release_last_use() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:174:2
    apache#21 0x55e7706b8ba4 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:1069:11
    apache#22 0x55e7706b8ba4 in std::__shared_ptr<doris::PrioritizedSplitRunner, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:1531:31
    apache#23 0x55e7706b8ba4 in void std::destroy_at<std::shared_ptr<doris::PrioritizedSplitRunner> >(std::shared_ptr<doris::PrioritizedSplitRunner>*) /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_construct.h:88:15
    apache#24 0x55e7706b8ba4 in void std::allocator_traits<std::allocator<std::__detail::_Hash_node<std::shared_ptr<doris::PrioritizedSplitRunner>, false> > >::destroy<std::shared_ptr<doris::PrioritizedSplitRunner> >(std::allocator<std::__detail::_Hash_node<std::shared_ptr<doris::PrioritizedSplitRunner>, false> >&, std::shared_ptr<doris::PrioritizedSplitRunner>*) /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/alloc_traits.h:698:4
    apache#25 0x55e7706b8ba4 in std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::shared_ptr<doris::PrioritizedSplitRunner>, false> > >::_M_deallocate_node(std::__detail::_Hash_node<std::shared_ptr<doris::PrioritizedSplitRunner>, false>*) /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/hashtable_policy.h:1572:7
    apache#26 0x55e7706b89ff in std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::shared_ptr<doris::PrioritizedSplitRunner>, false> > >::_M_deallocate_nodes(std::__detail::_Hash_node<std::shared_ptr<doris::PrioritizedSplitRunner>, false>*) /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/hashtable_policy.h:1594:4
    apache#27 0x55e7706b89ff in std::_Hashtable<std::shared_ptr<doris::PrioritizedSplitRunner>, std::shared_ptr<doris::PrioritizedSplitRunner>, std::allocator<std::shared_ptr<doris::PrioritizedSplitRunner> >, std::__detail::_Identity, std::equal_to<std::shared_ptr<doris::PrioritizedSplitRunner> >, std::hash<std::shared_ptr<doris::PrioritizedSplitRunner> >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, true, true> >::~_Hashtable() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/hashtable.h:1852:13
    apache#28 0x55e77069c6ca in std::unordered_set<std::shared_ptr<doris::PrioritizedSplitRunner>, std::hash<std::shared_ptr<doris::PrioritizedSplitRunner> >, std::equal_to<std::shared_ptr<doris::PrioritizedSplitRunner> >, std::allocator<std::shared_ptr<doris::PrioritizedSplitRunner> > >::~unordered_set() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/unordered_set.h:107:11
    apache#29 0x55e77069c6ca in doris::TimeSharingTaskExecutor::~TimeSharingTaskExecutor() be/build_ASAN/./be/build_ASAN/../src/exec/scan/task_executor/time_sharing/time_sharing_task_executor.cpp:306:1
    apache#30 0x55e75b583fa1 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:345:8
    apache#31 0x55e770688ecf in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:1069:11
    apache#32 0x55e770688ecf in std::__shared_ptr<doris::TaskExecutor, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:1531:31
    apache#33 0x55e770688ecf in doris::TaskExecutorSimplifiedScanScheduler::~TaskExecutorSimplifiedScanScheduler() be/build_ASAN/../src/exec/scan/scanner_scheduler.h:266:5
    apache#34 0x55e7706891ed in doris::TaskExecutorSimplifiedScanScheduler::~TaskExecutorSimplifiedScanScheduler() be/build_ASAN/../src/exec/scan/scanner_scheduler.h:261:53
    apache#35 0x55e7744d5afa in std::default_delete<doris::ScannerScheduler>::operator()(doris::ScannerScheduler*) const /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/unique_ptr.h:93:2
    apache#36 0x55e7744d5afa in std::__uniq_ptr_impl<doris::ScannerScheduler, std::default_delete<doris::ScannerScheduler> >::reset(doris::ScannerScheduler*) /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/unique_ptr.h:205:4
    apache#37 0x55e7744d5afa in std::unique_ptr<doris::ScannerScheduler, std::default_delete<doris::ScannerScheduler> >::reset(doris::ScannerScheduler*) /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/unique_ptr.h:512:7
    apache#38 0x55e7744d5afa in doris::WorkloadGroup::destroy_schedulers() be/build_ASAN/./be/build_ASAN/../src/runtime/workload_group/workload_group.cpp:776:22
    apache#39 0x55e774501af0 in doris::WorkloadGroupMgr::destroy_schedulers() be/build_ASAN/./be/build_ASAN/../src/runtime/workload_group/workload_group_manager.cpp:977:23
    apache#40 0x55e7740e0ddc in doris::ExecEnv::destroy() be/build_ASAN/./be/build_ASAN/../src/runtime/exec_env_init.cpp:892:34
    apache#41 0x55e75b5601f2 in main be/build_ASAN/./be/build_ASAN/../src/service/doris_main.cpp:734:15
    apache#42 0x7f53e1e6b082 in __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:308:16
    apache#43 0x55e75b470029 in _start (/mnt/ssd01/pipline/OpenSourceDoris/clusterEnv/P0/Cluster0/be/lib/doris_be+0x247b8029)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h:1069:11
```

### What problem does this PR solve?

Issue Number: close #xxx

Related PR: #xxx

Problem Summary:

### Release note

None

### Check List (For Author)

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [ ] Unit Test
    - [ ] Manual test (add detailed scripts or steps below)
    - [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
        - [ ] Previous test can cover this change.
        - [ ] No code files have been changed.
        - [ ] Other reason <!-- Add your reason?  -->

- Behavior changed:
    - [ ] No.
    - [ ] Yes. <!-- Explain the behavior change -->

- Does this need documentation?
    - [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
apache/doris-website#1214 -->

### Check List (For Reviewer who merge this PR)

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
morrySnow pushed a commit that referenced this pull request Aug 31, 2026
Problem Summary: Streaming `ROWS` window aggregates retain state across
frame evaluations. The eviction path previously considered only whether
buffered blocks had been emitted, so it could erase either the outgoing
row needed by a bounded sliding frame or the next unread row needed by
an `UNBOUNDED PRECEDING ... N PRECEDING` frame. After rebasing, negative
partition and outgoing positions could allow a nullable aggregate to
access its null map out of bounds. Evicting either kind of required row
could also produce incorrect aggregate results.

Root cause: `_remove_unused_rows()` did not account for the earliest row
required by the next ROWS frame evaluation, and
`BoundaryPose::remove_unused_rows()` allowed retained-column coordinates
to become negative.

This change defers block-aligned eviction when the candidate prefix
contains either `frame_start - 1`, the outgoing row required by a
bounded sliding update, or the next unread row required by an `UNBOUNDED
PRECEDING ... N PRECEDING` frame. It also rebases partition and order
boundaries to nonnegative physical-column coordinates. The BE unit
coverage exercises both ROWS executors across eviction boundaries and
verifies boundary rebasing.

Observed ASAN failure before this change (`output/be/log/be.out`):

```text
ERROR: AddressSanitizer: heap-buffer-overflow
READ of size 1
    #0 doris::AggregateFunctionNullUnaryInlineV2<...>::execute_function_with_incremental(...)
       be/src/exprs/aggregate/aggregate_function_null_v2.h:595
    #1 doris::AggFnEvaluator::execute_function_with_incremental(...)
       be/src/exprs/vectorized_agg_fn.cpp:334
    #2 doris::AnalyticSinkLocalState::_execute_for_function<true>(...)
       be/src/exec/operator/analytic_sink_operator.cpp:385
    #3 doris::AnalyticSinkLocalState::_get_next_for_sliding_rows(...)
       be/src/exec/operator/analytic_sink_operator.cpp:203
    #4 doris::AnalyticSinkLocalState::_execute_impl(...)
       be/src/exec/operator/analytic_sink_operator.cpp:358
    apache#5 doris::AnalyticSinkOperatorX::sink_impl(...)
       be/src/exec/operator/analytic_sink_operator.cpp:757
SUMMARY: AddressSanitizer: heap-buffer-overflow in
doris::AggregateFunctionNullUnaryInlineV2<...>::execute_function_with_incremental(...)
```


### Release note

None

### Check List (For Author)

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [ ] Unit Test
    - [ ] Manual test (add detailed scripts or steps below)
    - [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
        - [ ] Previous test can cover this change.
        - [ ] No code files have been changed.
        - [ ] Other reason <!-- Add your reason?  -->

- Behavior changed:
    - [ ] No.
    - [ ] Yes. <!-- Explain the behavior change -->

- Does this need documentation?
    - [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
apache/doris-website#1214 -->

### Check List (For Reviewer who merge this PR)

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.