MCPcopy Create free account
hub / github.com/apache/impala / ReadFileHeader

Method ReadFileHeader

be/src/exec/rcfile/hdfs-rcfile-scanner.cc:116–206  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

114}
115
116Status HdfsRCFileScanner::ReadFileHeader() {
117 RcFileHeader* rc_header = reinterpret_cast<RcFileHeader*>(header_);
118
119 // Validate file version
120 uint8_t* header;
121 RETURN_IF_FALSE(stream_->ReadBytes(
122 sizeof(RCFILE_VERSION_HEADER), &header, &parse_status_));
123 if (!memcmp(header, HdfsSequenceScanner::SEQFILE_VERSION_HEADER,
124 sizeof(HdfsSequenceScanner::SEQFILE_VERSION_HEADER))) {
125 rc_header->version = SEQ6;
126 } else if (!memcmp(header, RCFILE_VERSION_HEADER, sizeof(RCFILE_VERSION_HEADER))) {
127 rc_header->version = RCF1;
128 } else {
129 stringstream ss;
130 ss << stream_->filename() << " Invalid RCFILE_VERSION_HEADER: '"
131 << ReadWriteUtil::HexDump(header, sizeof(RCFILE_VERSION_HEADER)) << "'";
132 return Status(ss.str());
133 }
134
135 if (rc_header->version == SEQ6) {
136 // Validate class name key/value
137 uint8_t* class_name_key;
138 int64_t len;
139 RETURN_IF_FALSE(
140 stream_->ReadText(&class_name_key, &len, &parse_status_));
141 if (len != strlen(HdfsRCFileScanner::RCFILE_KEY_CLASS_NAME) ||
142 memcmp(class_name_key, HdfsRCFileScanner::RCFILE_KEY_CLASS_NAME, len)) {
143 stringstream ss;
144 ss << stream_->filename() << " Invalid RCFILE_KEY_CLASS_NAME: '"
145 << string(reinterpret_cast<char*>(class_name_key), len) << "' len=" << len;
146 return Status(ss.str());
147 }
148
149 uint8_t* class_name_val;
150 RETURN_IF_FALSE(
151 stream_->ReadText(&class_name_val, &len, &parse_status_));
152 if (len != strlen(HdfsRCFileScanner::RCFILE_VALUE_CLASS_NAME) ||
153 memcmp(class_name_val, HdfsRCFileScanner::RCFILE_VALUE_CLASS_NAME, len)) {
154 stringstream ss;
155 ss << stream_->filename() << " Invalid RCFILE_VALUE_CLASS_NAME: '"
156 << string(reinterpret_cast<char*>(class_name_val), len) << "' len=" << len;
157 return Status(ss.str());
158 }
159 }
160
161 // Check for compression
162 RETURN_IF_FALSE(
163 stream_->ReadBoolean(&header_->is_compressed, &parse_status_));
164 if (rc_header->version == SEQ6) {
165 // Read the is_blk_compressed header field. This field should *always*
166 // be FALSE, and is the result of using the sequence file header format in the
167 // original RCFile format.
168 bool is_blk_compressed;
169 RETURN_IF_FALSE(
170 stream_->ReadBoolean(&is_blk_compressed, &parse_status_));
171 if (is_blk_compressed) {
172 stringstream ss;
173 ss << stream_->filename() << " RC files does not support block compression.";

Callers

nothing calls this directly

Calls 11

HexDumpFunction · 0.85
OKFunction · 0.85
ReadBytesMethod · 0.80
ReadTextMethod · 0.80
ReadBooleanMethod · 0.80
total_bytes_returnedMethod · 0.80
StatusClass · 0.50
filenameMethod · 0.45
strMethod · 0.45
findMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected