Coverage Report

Created: 2026-03-29 13:25

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
be/src/exec/scan/meta_scanner.cpp
Line
Count
Source
1
// Licensed to the Apache Software Foundation (ASF) under one
2
// or more contributor license agreements.  See the NOTICE file
3
// distributed with this work for additional information
4
// regarding copyright ownership.  The ASF licenses this file
5
// to you under the Apache License, Version 2.0 (the
6
// "License"); you may not use this file except in compliance
7
// with the License.  You may obtain a copy of the License at
8
//
9
//   http://www.apache.org/licenses/LICENSE-2.0
10
//
11
// Unless required by applicable law or agreed to in writing,
12
// software distributed under the License is distributed on an
13
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
// KIND, either express or implied.  See the License for the
15
// specific language governing permissions and limitations
16
// under the License.
17
18
#include "exec/scan/meta_scanner.h"
19
20
#include <fmt/format.h>
21
#include <gen_cpp/FrontendService.h>
22
#include <gen_cpp/FrontendService_types.h>
23
#include <gen_cpp/HeartbeatService_types.h>
24
#include <gen_cpp/PaloInternalService_types.h>
25
#include <gen_cpp/PlanNodes_types.h>
26
27
#include <ostream>
28
#include <string>
29
#include <unordered_map>
30
31
#include "common/cast_set.h"
32
#include "common/logging.h"
33
#include "core/block/block.h"
34
#include "core/column/column.h"
35
#include "core/column/column_nullable.h"
36
#include "core/column/column_string.h"
37
#include "core/column/column_vector.h"
38
#include "core/data_type/define_primitive_type.h"
39
#include "core/types.h"
40
#include "format/table/parquet_metadata_reader.h"
41
#include "runtime/descriptors.h"
42
#include "runtime/exec_env.h"
43
#include "runtime/runtime_state.h"
44
#include "util/client_cache.h"
45
#include "util/thrift_rpc_helper.h"
46
47
namespace doris {
48
class RuntimeProfile;
49
class VExprContext;
50
} // namespace doris
51
52
namespace doris {
53
#include "common/compile_check_begin.h"
54
55
MetaScanner::MetaScanner(RuntimeState* state, ScanLocalStateBase* local_state, TupleId tuple_id,
56
                         const TScanRangeParams& scan_range, int64_t limit, RuntimeProfile* profile,
57
                         TUserIdentity user_identity)
58
6.47k
        : Scanner(state, local_state, limit, profile),
59
6.47k
          _meta_eos(false),
60
6.47k
          _tuple_id(tuple_id),
61
6.47k
          _user_identity(user_identity),
62
6.47k
          _scan_range(scan_range.scan_range) {}
63
64
6.47k
Status MetaScanner::_open_impl(RuntimeState* state) {
65
6.47k
    VLOG_CRITICAL << "MetaScanner::open";
66
6.47k
    RETURN_IF_ERROR(Scanner::_open_impl(state));
67
6.47k
    if (_scan_range.meta_scan_range.metadata_type == TMetadataType::PARQUET) {
68
76
        auto reader = ParquetMetadataReader::create_unique(_tuple_desc->slots(), state, _profile,
69
76
                                                           _scan_range.meta_scan_range);
70
76
        RETURN_IF_ERROR(reader->init_reader());
71
76
        _reader = std::move(reader);
72
6.39k
    } else {
73
6.39k
        RETURN_IF_ERROR(_fetch_metadata(_scan_range.meta_scan_range));
74
6.39k
    }
75
6.47k
    return Status::OK();
76
6.47k
}
77
78
6.47k
Status MetaScanner::init(RuntimeState* state, const VExprContextSPtrs& conjuncts) {
79
6.47k
    VLOG_CRITICAL << "MetaScanner::init";
80
6.47k
    RETURN_IF_ERROR(Scanner::init(_state, conjuncts));
81
6.47k
    _tuple_desc = state->desc_tbl().get_tuple_descriptor(_tuple_id);
82
6.47k
    return Status::OK();
83
6.47k
}
84
85
12.0k
Status MetaScanner::_get_block_impl(RuntimeState* state, Block* block, bool* eof) {
86
12.0k
    VLOG_CRITICAL << "MetaScanner::_get_block_impl";
87
12.0k
    if (nullptr == state || nullptr == block || nullptr == eof) {
88
0
        return Status::InternalError("input is NULL pointer");
89
0
    }
90
91
    // Build name to index map only once on first call
92
12.0k
    if (_src_block_name_to_idx.empty()) {
93
6.47k
        _src_block_name_to_idx = block->get_name_to_pos_map();
94
6.47k
    }
95
96
12.0k
    if (_reader) {
97
        // TODO: This is a temporary workaround; the code is planned to be refactored later.
98
146
        size_t read_rows = 0;
99
146
        return _reader->get_next_block(block, &read_rows, eof);
100
146
    }
101
102
11.8k
    if (_meta_eos == true) {
103
5.49k
        *eof = true;
104
5.49k
        return Status::OK();
105
5.49k
    }
106
107
6.39k
    auto column_size = _tuple_desc->slots().size();
108
6.39k
    std::vector<MutableColumnPtr> columns(column_size);
109
6.39k
    bool mem_reuse = block->mem_reuse();
110
6.39k
    do {
111
6.39k
        RETURN_IF_CANCELLED(state);
112
113
6.39k
        columns.resize(column_size);
114
48.9k
        for (auto i = 0; i < column_size; i++) {
115
42.5k
            if (mem_reuse) {
116
42.5k
                columns[i] = block->get_by_position(i).column->assume_mutable();
117
42.5k
            } else {
118
0
                columns[i] = _tuple_desc->slots()[i]->get_empty_mutable_column();
119
0
            }
120
42.5k
        }
121
        // fill block
122
6.39k
        RETURN_IF_ERROR(_fill_block_with_remote_data(columns));
123
6.39k
        if (_meta_eos == true) {
124
6.39k
            if (block->rows() == 0) {
125
888
                *eof = true;
126
888
            }
127
6.39k
            break;
128
6.39k
        }
129
        // Before really use the Block, must clear other ptr of column in block
130
        // So here need do std::move and clear in `columns`
131
18.4E
        if (!mem_reuse) {
132
0
            int column_index = 0;
133
0
            for (const auto slot_desc : _tuple_desc->slots()) {
134
0
                block->insert(ColumnWithTypeAndName(std::move(columns[column_index++]),
135
0
                                                    slot_desc->get_data_type_ptr(),
136
0
                                                    slot_desc->col_name()));
137
0
            }
138
18.4E
        } else {
139
18.4E
            columns.clear();
140
18.4E
        }
141
18.4E
        VLOG_ROW << "VMetaScanNode output rows: " << block->rows();
142
18.4E
    } while (block->rows() == 0 && !(*eof));
143
6.39k
    return Status::OK();
144
6.39k
}
145
146
6.39k
Status MetaScanner::_fill_block_with_remote_data(const std::vector<MutableColumnPtr>& columns) {
147
6.39k
    VLOG_CRITICAL << "MetaScanner::_fill_block_with_remote_data";
148
48.5k
    for (int col_idx = 0; col_idx < columns.size(); col_idx++) {
149
42.5k
        auto slot_desc = _tuple_desc->slots()[col_idx];
150
151
4.82M
        for (int _row_idx = 0; _row_idx < _batch_data.size(); _row_idx++) {
152
4.77M
            IColumn* col_ptr = columns[col_idx].get();
153
4.77M
            TCell& cell = _batch_data[_row_idx].column_value[col_idx];
154
4.77M
            if (cell.__isset.isNull && cell.isNull) {
155
82
                DCHECK(slot_desc->is_nullable())
156
0
                        << "cell is null but column is not nullable: " << slot_desc->col_name();
157
82
                auto& null_col = reinterpret_cast<ColumnNullable&>(*col_ptr);
158
82
                null_col.get_nested_column().insert_default();
159
82
                null_col.get_null_map_data().push_back(1);
160
4.77M
            } else {
161
4.77M
                if (slot_desc->is_nullable()) {
162
230
                    auto& null_col = reinterpret_cast<ColumnNullable&>(*col_ptr);
163
230
                    null_col.get_null_map_data().push_back(0);
164
230
                    col_ptr = null_col.get_nested_column_ptr().get();
165
230
                }
166
4.77M
                switch (slot_desc->type()->get_primitive_type()) {
167
5.61k
                case TYPE_BOOLEAN: {
168
5.61k
                    bool data = cell.boolVal;
169
5.61k
                    assert_cast<ColumnBool*>(col_ptr)->insert_value((uint8_t)data);
170
5.61k
                    break;
171
0
                }
172
4
                case TYPE_TINYINT: {
173
4
                    int8_t data = (int8_t)cell.intVal;
174
4
                    assert_cast<ColumnInt8*>(col_ptr)->insert_value(data);
175
4
                    break;
176
0
                }
177
4
                case TYPE_SMALLINT: {
178
4
                    int16_t data = (int16_t)cell.intVal;
179
4
                    assert_cast<ColumnInt16*>(col_ptr)->insert_value(data);
180
4
                    break;
181
0
                }
182
142
                case TYPE_INT: {
183
142
                    int32_t data = cell.intVal;
184
142
                    assert_cast<ColumnInt32*>(col_ptr)->insert_value(data);
185
142
                    break;
186
0
                }
187
6.83k
                case TYPE_BIGINT: {
188
6.83k
                    int64_t data = cell.longVal;
189
6.83k
                    assert_cast<ColumnInt64*>(col_ptr)->insert_value(data);
190
6.83k
                    break;
191
0
                }
192
78
                case TYPE_FLOAT: {
193
78
                    auto data = static_cast<float>(cell.doubleVal);
194
78
                    assert_cast<ColumnFloat32*>(col_ptr)->insert_value(data);
195
78
                    break;
196
0
                }
197
20
                case TYPE_DOUBLE: {
198
20
                    double data = cell.doubleVal;
199
20
                    assert_cast<ColumnFloat64*>(col_ptr)->insert_value(data);
200
20
                    break;
201
0
                }
202
4
                case TYPE_DATEV2: {
203
4
                    uint32_t data = (uint32_t)cell.longVal;
204
4
                    assert_cast<ColumnDateV2*>(col_ptr)->insert_value(data);
205
4
                    break;
206
0
                }
207
4
                case TYPE_DATETIMEV2: {
208
4
                    uint64_t data = cell.longVal;
209
4
                    assert_cast<ColumnDateTimeV2*>(col_ptr)->insert_value(data);
210
4
                    break;
211
0
                }
212
4.77M
                case TYPE_STRING:
213
4.77M
                case TYPE_CHAR:
214
4.77M
                case TYPE_VARCHAR: {
215
4.77M
                    std::string data = cell.stringVal;
216
4.77M
                    assert_cast<ColumnString*>(col_ptr)->insert_data(data.c_str(), data.length());
217
4.77M
                    break;
218
4.77M
                }
219
0
                default: {
220
0
                    std::string error_msg =
221
0
                            fmt::format("Invalid column type {} on column: {}.",
222
0
                                        slot_desc->type()->get_name(), slot_desc->col_name());
223
0
                    return Status::InternalError(std::string(error_msg));
224
4.77M
                }
225
4.77M
                }
226
4.77M
            }
227
4.77M
        }
228
42.5k
    }
229
5.97k
    _meta_eos = true;
230
5.97k
    return Status::OK();
231
6.39k
}
232
233
6.39k
Status MetaScanner::_fetch_metadata(const TMetaScanRange& meta_scan_range) {
234
6.39k
    VLOG_CRITICAL << "MetaScanner::_fetch_metadata";
235
6.39k
    TFetchSchemaTableDataRequest request;
236
6.39k
    switch (meta_scan_range.metadata_type) {
237
0
    case TMetadataType::HUDI:
238
0
        RETURN_IF_ERROR(_build_hudi_metadata_request(meta_scan_range, &request));
239
0
        break;
240
24
    case TMetadataType::BACKENDS:
241
24
        RETURN_IF_ERROR(_build_backends_metadata_request(meta_scan_range, &request));
242
24
        break;
243
42
    case TMetadataType::FRONTENDS:
244
42
        RETURN_IF_ERROR(_build_frontends_metadata_request(meta_scan_range, &request));
245
42
        break;
246
42
    case TMetadataType::FRONTENDS_DISKS:
247
13
        RETURN_IF_ERROR(_build_frontends_disks_metadata_request(meta_scan_range, &request));
248
13
        break;
249
13
    case TMetadataType::WORKLOAD_SCHED_POLICY:
250
0
        RETURN_IF_ERROR(_build_workload_sched_policy_metadata_request(meta_scan_range, &request));
251
0
        break;
252
48
    case TMetadataType::CATALOGS:
253
48
        RETURN_IF_ERROR(_build_catalogs_metadata_request(meta_scan_range, &request));
254
48
        break;
255
2.43k
    case TMetadataType::MATERIALIZED_VIEWS:
256
2.43k
        RETURN_IF_ERROR(_build_materialized_views_metadata_request(meta_scan_range, &request));
257
2.43k
        break;
258
2.43k
    case TMetadataType::PARTITIONS:
259
26
        RETURN_IF_ERROR(_build_partitions_metadata_request(meta_scan_range, &request));
260
26
        break;
261
1.07k
    case TMetadataType::JOBS:
262
1.07k
        RETURN_IF_ERROR(_build_jobs_metadata_request(meta_scan_range, &request));
263
1.07k
        break;
264
2.69k
    case TMetadataType::TASKS:
265
2.69k
        RETURN_IF_ERROR(_build_tasks_metadata_request(meta_scan_range, &request));
266
2.69k
        break;
267
2.69k
    case TMetadataType::PARTITION_VALUES:
268
40
        RETURN_IF_ERROR(_build_partition_values_metadata_request(meta_scan_range, &request));
269
40
        break;
270
40
    default:
271
0
        _meta_eos = true;
272
0
        return Status::OK();
273
6.39k
    }
274
275
    // set filter columns
276
6.39k
    std::vector<std::string> filter_columns;
277
42.5k
    for (const auto& slot : _tuple_desc->slots()) {
278
42.5k
        filter_columns.emplace_back(slot->col_name_lower_case());
279
42.5k
    }
280
6.39k
    request.metada_table_params.__set_columns_name(filter_columns);
281
282
    // _state->execution_timeout() is seconds, change to milliseconds
283
6.39k
    int time_out = _state->execution_timeout() * 1000;
284
6.39k
    TNetworkAddress master_addr = ExecEnv::GetInstance()->cluster_info()->master_fe_addr;
285
6.39k
    TFetchSchemaTableDataResult result;
286
6.39k
    RETURN_IF_ERROR(ThriftRpcHelper::rpc<FrontendServiceClient>(
287
6.39k
            master_addr.hostname, master_addr.port,
288
6.39k
            [&request, &result](FrontendServiceConnection& client) {
289
6.39k
                client->fetchSchemaTableData(result, request);
290
6.39k
            },
291
6.39k
            time_out));
292
293
6.39k
    Status status(Status::create(result.status));
294
6.39k
    if (!status.ok()) {
295
0
        LOG(WARNING) << "fetch schema table data from master failed, errmsg=" << status;
296
0
        return status;
297
0
    }
298
6.39k
    _batch_data = std::move(result.data_batch);
299
6.39k
    return Status::OK();
300
6.39k
}
301
302
Status MetaScanner::_build_hudi_metadata_request(const TMetaScanRange& meta_scan_range,
303
0
                                                 TFetchSchemaTableDataRequest* request) {
304
0
    VLOG_CRITICAL << "MetaScanner::_build_hudi_metadata_request";
305
0
    if (!meta_scan_range.__isset.hudi_params) {
306
0
        return Status::InternalError("Can not find THudiMetadataParams from meta_scan_range.");
307
0
    }
308
309
    // create request
310
0
    request->__set_cluster_name("");
311
0
    request->__set_schema_table_name(TSchemaTableName::METADATA_TABLE);
312
313
    // create TMetadataTableRequestParams
314
0
    TMetadataTableRequestParams metadata_table_params;
315
0
    metadata_table_params.__set_metadata_type(TMetadataType::HUDI);
316
0
    metadata_table_params.__set_hudi_metadata_params(meta_scan_range.hudi_params);
317
318
0
    request->__set_metada_table_params(metadata_table_params);
319
0
    return Status::OK();
320
0
}
321
322
Status MetaScanner::_build_backends_metadata_request(const TMetaScanRange& meta_scan_range,
323
24
                                                     TFetchSchemaTableDataRequest* request) {
324
24
    VLOG_CRITICAL << "MetaScanner::_build_backends_metadata_request";
325
24
    if (!meta_scan_range.__isset.backends_params) {
326
0
        return Status::InternalError("Can not find TBackendsMetadataParams from meta_scan_range.");
327
0
    }
328
    // create request
329
24
    request->__set_cluster_name("");
330
24
    request->__set_schema_table_name(TSchemaTableName::METADATA_TABLE);
331
332
    // create TMetadataTableRequestParams
333
24
    TMetadataTableRequestParams metadata_table_params;
334
24
    metadata_table_params.__set_metadata_type(TMetadataType::BACKENDS);
335
24
    metadata_table_params.__set_backends_metadata_params(meta_scan_range.backends_params);
336
337
24
    request->__set_metada_table_params(metadata_table_params);
338
24
    return Status::OK();
339
24
}
340
341
Status MetaScanner::_build_frontends_metadata_request(const TMetaScanRange& meta_scan_range,
342
42
                                                      TFetchSchemaTableDataRequest* request) {
343
42
    VLOG_CRITICAL << "MetaScanner::_build_frontends_metadata_request";
344
42
    if (!meta_scan_range.__isset.frontends_params) {
345
0
        return Status::InternalError("Can not find TFrontendsMetadataParams from meta_scan_range.");
346
0
    }
347
    // create request
348
42
    request->__set_cluster_name("");
349
42
    request->__set_schema_table_name(TSchemaTableName::METADATA_TABLE);
350
351
    // create TMetadataTableRequestParams
352
42
    TMetadataTableRequestParams metadata_table_params;
353
42
    metadata_table_params.__set_metadata_type(TMetadataType::FRONTENDS);
354
42
    metadata_table_params.__set_frontends_metadata_params(meta_scan_range.frontends_params);
355
356
42
    request->__set_metada_table_params(metadata_table_params);
357
42
    return Status::OK();
358
42
}
359
360
Status MetaScanner::_build_frontends_disks_metadata_request(const TMetaScanRange& meta_scan_range,
361
13
                                                            TFetchSchemaTableDataRequest* request) {
362
13
    VLOG_CRITICAL << "MetaScanner::_build_frontends_metadata_request";
363
13
    if (!meta_scan_range.__isset.frontends_params) {
364
0
        return Status::InternalError("Can not find TFrontendsMetadataParams from meta_scan_range.");
365
0
    }
366
    // create request
367
13
    request->__set_cluster_name("");
368
13
    request->__set_schema_table_name(TSchemaTableName::METADATA_TABLE);
369
370
    // create TMetadataTableRequestParams
371
13
    TMetadataTableRequestParams metadata_table_params;
372
13
    metadata_table_params.__set_metadata_type(TMetadataType::FRONTENDS_DISKS);
373
13
    metadata_table_params.__set_frontends_metadata_params(meta_scan_range.frontends_params);
374
375
13
    request->__set_metada_table_params(metadata_table_params);
376
13
    return Status::OK();
377
13
}
378
379
Status MetaScanner::_build_workload_sched_policy_metadata_request(
380
0
        const TMetaScanRange& meta_scan_range, TFetchSchemaTableDataRequest* request) {
381
0
    VLOG_CRITICAL << "MetaScanner::_build_workload_sched_policy_metadata_request";
382
383
    // create request
384
0
    request->__set_cluster_name("");
385
0
    request->__set_schema_table_name(TSchemaTableName::METADATA_TABLE);
386
387
    // create TMetadataTableRequestParams
388
0
    TMetadataTableRequestParams metadata_table_params;
389
0
    metadata_table_params.__set_metadata_type(TMetadataType::WORKLOAD_SCHED_POLICY);
390
0
    metadata_table_params.__set_current_user_ident(_user_identity);
391
392
0
    request->__set_metada_table_params(metadata_table_params);
393
0
    return Status::OK();
394
0
}
395
396
Status MetaScanner::_build_catalogs_metadata_request(const TMetaScanRange& meta_scan_range,
397
48
                                                     TFetchSchemaTableDataRequest* request) {
398
48
    VLOG_CRITICAL << "MetaScanner::_build_catalogs_metadata_request";
399
400
    // create request
401
48
    request->__set_schema_table_name(TSchemaTableName::METADATA_TABLE);
402
403
    // create TMetadataTableRequestParams
404
48
    TMetadataTableRequestParams metadata_table_params;
405
48
    metadata_table_params.__set_metadata_type(TMetadataType::CATALOGS);
406
48
    metadata_table_params.__set_current_user_ident(_user_identity);
407
408
48
    request->__set_metada_table_params(metadata_table_params);
409
48
    return Status::OK();
410
48
}
411
412
Status MetaScanner::_build_materialized_views_metadata_request(
413
2.43k
        const TMetaScanRange& meta_scan_range, TFetchSchemaTableDataRequest* request) {
414
2.43k
    VLOG_CRITICAL << "MetaScanner::_build_materialized_views_metadata_request";
415
2.43k
    if (!meta_scan_range.__isset.materialized_views_params) {
416
0
        return Status::InternalError(
417
0
                "Can not find TMaterializedViewsMetadataParams from meta_scan_range.");
418
0
    }
419
420
    // create request
421
2.43k
    request->__set_schema_table_name(TSchemaTableName::METADATA_TABLE);
422
423
    // create TMetadataTableRequestParams
424
2.43k
    TMetadataTableRequestParams metadata_table_params;
425
2.43k
    metadata_table_params.__set_metadata_type(TMetadataType::MATERIALIZED_VIEWS);
426
2.43k
    metadata_table_params.__set_materialized_views_metadata_params(
427
2.43k
            meta_scan_range.materialized_views_params);
428
429
2.43k
    request->__set_metada_table_params(metadata_table_params);
430
2.43k
    return Status::OK();
431
2.43k
}
432
433
Status MetaScanner::_build_partitions_metadata_request(const TMetaScanRange& meta_scan_range,
434
26
                                                       TFetchSchemaTableDataRequest* request) {
435
26
    VLOG_CRITICAL << "MetaScanner::_build_partitions_metadata_request";
436
26
    if (!meta_scan_range.__isset.partitions_params) {
437
0
        return Status::InternalError(
438
0
                "Can not find TPartitionsMetadataParams from meta_scan_range.");
439
0
    }
440
441
    // create request
442
26
    request->__set_schema_table_name(TSchemaTableName::METADATA_TABLE);
443
444
    // create TMetadataTableRequestParams
445
26
    TMetadataTableRequestParams metadata_table_params;
446
26
    metadata_table_params.__set_metadata_type(TMetadataType::PARTITIONS);
447
26
    metadata_table_params.__set_partitions_metadata_params(meta_scan_range.partitions_params);
448
449
26
    request->__set_metada_table_params(metadata_table_params);
450
26
    return Status::OK();
451
26
}
452
453
Status MetaScanner::_build_jobs_metadata_request(const TMetaScanRange& meta_scan_range,
454
1.07k
                                                 TFetchSchemaTableDataRequest* request) {
455
1.07k
    VLOG_CRITICAL << "MetaScanner::_build_jobs_metadata_request";
456
1.07k
    if (!meta_scan_range.__isset.jobs_params) {
457
0
        return Status::InternalError("Can not find TJobsMetadataParams from meta_scan_range.");
458
0
    }
459
460
    // create request
461
1.07k
    request->__set_schema_table_name(TSchemaTableName::METADATA_TABLE);
462
463
    // create TMetadataTableRequestParams
464
1.07k
    TMetadataTableRequestParams metadata_table_params;
465
1.07k
    metadata_table_params.__set_metadata_type(TMetadataType::JOBS);
466
1.07k
    metadata_table_params.__set_jobs_metadata_params(meta_scan_range.jobs_params);
467
468
1.07k
    request->__set_metada_table_params(metadata_table_params);
469
1.07k
    return Status::OK();
470
1.07k
}
471
472
Status MetaScanner::_build_tasks_metadata_request(const TMetaScanRange& meta_scan_range,
473
2.69k
                                                  TFetchSchemaTableDataRequest* request) {
474
2.69k
    VLOG_CRITICAL << "MetaScanner::_build_tasks_metadata_request";
475
2.69k
    if (!meta_scan_range.__isset.tasks_params) {
476
0
        return Status::InternalError("Can not find TTasksMetadataParams from meta_scan_range.");
477
0
    }
478
479
    // create request
480
2.69k
    request->__set_schema_table_name(TSchemaTableName::METADATA_TABLE);
481
482
    // create TMetadataTableRequestParams
483
2.69k
    TMetadataTableRequestParams metadata_table_params;
484
2.69k
    metadata_table_params.__set_metadata_type(TMetadataType::TASKS);
485
2.69k
    metadata_table_params.__set_tasks_metadata_params(meta_scan_range.tasks_params);
486
487
2.69k
    request->__set_metada_table_params(metadata_table_params);
488
2.69k
    return Status::OK();
489
2.69k
}
490
491
Status MetaScanner::_build_partition_values_metadata_request(
492
40
        const TMetaScanRange& meta_scan_range, TFetchSchemaTableDataRequest* request) {
493
40
    VLOG_CRITICAL << "MetaScanner::_build_partition_values_metadata_request";
494
40
    if (!meta_scan_range.__isset.partition_values_params) {
495
0
        return Status::InternalError(
496
0
                "Can not find TPartitionValuesMetadataParams from meta_scan_range.");
497
0
    }
498
499
    // create request
500
40
    request->__set_schema_table_name(TSchemaTableName::METADATA_TABLE);
501
502
    // create TMetadataTableRequestParams
503
40
    TMetadataTableRequestParams metadata_table_params;
504
40
    metadata_table_params.__set_metadata_type(TMetadataType::PARTITION_VALUES);
505
40
    metadata_table_params.__set_partition_values_metadata_params(
506
40
            meta_scan_range.partition_values_params);
507
508
40
    request->__set_metada_table_params(metadata_table_params);
509
40
    return Status::OK();
510
40
}
511
512
6.47k
Status MetaScanner::close(RuntimeState* state) {
513
6.47k
    VLOG_CRITICAL << "MetaScanner::close";
514
6.47k
    if (!_try_close()) {
515
0
        return Status::OK();
516
0
    }
517
6.47k
    if (_reader) {
518
76
        RETURN_IF_ERROR(_reader->close());
519
76
    }
520
6.47k
    RETURN_IF_ERROR(Scanner::close(state));
521
6.47k
    return Status::OK();
522
6.47k
}
523
524
#include "common/compile_check_end.h"
525
} // namespace doris