瀏覽代碼

HADOOP-14405. Fix performance regression due to incorrect use of DataChecksum. Contributed by LiXin Ge.

(cherry picked from commit 06ffeb8d4d705d14e8755364099286ac4ed3bb83)
Masatake Iwasaki 8 年之前
父節點
當前提交
05dda3063b

+ 11 - 3
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/DataChecksum.java

@@ -288,12 +288,20 @@ public class DataChecksum implements Checksum {
   public void verifyChunkedSums(ByteBuffer data, ByteBuffer checksums,
       String fileName, long basePos) throws ChecksumException {
     if (type.size == 0) return;
-    
+
     if (data.hasArray() && checksums.hasArray()) {
       final int dataOffset = data.arrayOffset() + data.position();
       final int crcsOffset = checksums.arrayOffset() + checksums.position();
-      verifyChunked(type, summer, data.array(), dataOffset, data.remaining(),
-          bytesPerChecksum, checksums.array(), crcsOffset, fileName, basePos);
+
+      if (NativeCrc32.isAvailable()) {
+        NativeCrc32.verifyChunkedSumsByteArray(bytesPerChecksum, type.id,
+                checksums.array(), crcsOffset, data.array(), dataOffset,
+                data.remaining(), fileName, basePos);
+      } else {
+        verifyChunked(type, summer, data.array(), dataOffset, data.remaining(),
+                bytesPerChecksum, checksums.array(), crcsOffset, fileName,
+                basePos);
+      }
       return;
     }
     if (NativeCrc32.isAvailable()) {