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)
| 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); |
no test coverage detected