MCPcopy Create free account
hub / github.com/apache/orc / readerIsCompatible

Method readerIsCompatible

java/core/src/java/org/apache/orc/OrcFile.java:1205–1271  ·  view source on GitHub ↗

Is the new reader compatible with the file that is being written? @param firstReader the first reader that others must match @param userMetadata the user metadata @param path the new path name for warning messages @param reader the new reader @return is the reader compatible with the previous ones?

(Reader firstReader,
                                    Map<String, ByteBuffer> userMetadata,
                                    Path path,
                                    Reader reader)

Source from the content-addressed store, hash-verified

1203 * @return is the reader compatible with the previous ones?
1204 */
1205 static boolean readerIsCompatible(Reader firstReader,
1206 Map<String, ByteBuffer> userMetadata,
1207 Path path,
1208 Reader reader) {
1209 // now we have to check compatibility
1210 TypeDescription schema = firstReader.getSchema();
1211 if (!reader.getSchema().equals(schema)) {
1212 LOG.info("Can't merge {} because of different schemas {} vs {}",
1213 path, reader.getSchema(), schema);
1214 return false;
1215 }
1216 CompressionKind compression = firstReader.getCompressionKind();
1217 if (reader.getCompressionKind() != compression) {
1218 LOG.info("Can't merge {} because of different compression {} vs {}",
1219 path, reader.getCompressionKind(), compression);
1220 return false;
1221 }
1222 OrcFile.Version fileVersion = firstReader.getFileVersion();
1223 if (reader.getFileVersion() != fileVersion) {
1224 LOG.info("Can't merge {} because of different file versions {} vs {}",
1225 path, reader.getFileVersion(), fileVersion);
1226 return false;
1227 }
1228 OrcFile.WriterVersion writerVersion = firstReader.getWriterVersion();
1229 if (reader.getWriterVersion() != writerVersion) {
1230 LOG.info("Can't merge {} because of different writer versions {} vs {}",
1231 path, reader.getFileVersion(), fileVersion);
1232 return false;
1233 }
1234 int rowIndexStride = firstReader.getRowIndexStride();
1235 if (reader.getRowIndexStride() != rowIndexStride) {
1236 LOG.info("Can't merge {} because of different row index strides {} vs {}",
1237 path, reader.getRowIndexStride(), rowIndexStride);
1238 return false;
1239 }
1240 for(String key: reader.getMetadataKeys()) {
1241 ByteBuffer currentValue = userMetadata.get(key);
1242 if (currentValue != null) {
1243 ByteBuffer newValue = reader.getMetadataValue(key);
1244 if (!newValue.equals(currentValue)) {
1245 LOG.info("Can't merge {} because of different user metadata {}", path,
1246 key);
1247 return false;
1248 }
1249 }
1250 }
1251 if (!sameKeys(firstReader.getColumnEncryptionKeys(),
1252 reader.getColumnEncryptionKeys())) {
1253 LOG.info("Can't merge {} because it has different encryption keys", path);
1254 return false;
1255 }
1256 if (!sameMasks(firstReader.getDataMasks(), reader.getDataMasks())) {
1257 LOG.info("Can't merge {} because it has different encryption masks", path);
1258 return false;
1259 }
1260 if (!sameVariants(firstReader.getEncryptionVariants(),
1261 reader.getEncryptionVariants())) {
1262 LOG.info("Can't merge {} because it has different encryption variants", path);

Callers 1

mergeFilesMethod · 0.95

Calls 15

sameKeysMethod · 0.95
sameMasksMethod · 0.95
sameVariantsMethod · 0.95
getSchemaMethod · 0.65
getCompressionKindMethod · 0.65
getFileVersionMethod · 0.65
getWriterVersionMethod · 0.65
getRowIndexStrideMethod · 0.65
getMetadataKeysMethod · 0.65
getMetadataValueMethod · 0.65
getDataMasksMethod · 0.65

Tested by

no test coverage detected