1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
//! The merge-on-read file group reader engine, mirroring Java's
//! `org.apache.hudi.common.table.read` package.
//!
//! `engine` orchestrates a read: the `resolver` derives the reader context
//! from a table's configs, the log scanner and record buffer merge log records
//! over the base file, and `merge_iterator` streams the merged output.
//! `file_group::reader::FileGroupReader` reaches all of this through
//! `adapter` (see its `read_via_v2` / `stream_via_v2`).
//!
//! Some surface exists only for Java parity or is reached only by the test
//! harness; it carries targeted `#[allow(dead_code)]` allows rather than a
//! module-wide blanket, so an item that is mistakenly dead still warns.
/// Far-future instant standing in for "no upper bound on the timeline": every
/// real instant sorts before it, so a read watermarked here sees the whole
/// snapshot and no log block counts as a future block.
///
/// Comparison is lexicographic on purpose — instant times are zero-padded
/// fixed-width strings.
pub const MAX_INSTANT_TIME: &str = "99991231235959999";
pub
pub
pub
pub
pub
pub
pub
pub
pub
pub
pub
pub
// The one module here that names something outside this reader: it holds Hudi's
// metadata payload merge, so `filesystemMetadata` and the payload's class name appear
// below a reader that otherwise knows nothing about the metadata table.
//
// Deliberate, and narrower than it looks. What it implements is the generic
// `BufferedRecordMerger`, so the interface a second custom payload would need already
// exists and the merge itself is not special-cased anywhere else. What keeps the module
// here rather than above the reader is that `resolver` and `schema_handler` consult the
// merger while resolving the merge mode and the schema, before any record is read, so
// moving it means giving the reader a merger at construction and threading it through
// setup. That is worth doing when a second custom payload exists to justify the
// injection; with one, it buys a file move and a new parameter.
//
// The cost of leaving it: a second payload cannot be added without editing this
// directory.
pub
pub
pub
pub
pub
pub
pub
pub
pub
/// Arrow IPC serialization for the spill tier.
///
/// Only the RocksDB-backed merge map serializes anything, so without
/// `spill-rocksdb` there is no caller and the module is not built.
pub
pub
pub