You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by um...@apache.org on 2022/04/01 17:41:35 UTC

[ozone] branch HDDS-3816-ec updated: HDDS-6478. EC: Fix ISA-l load hadoop native lib UnsatisfiedLinkError (#3218)

This is an automated email from the ASF dual-hosted git repository.

umamahesh pushed a commit to branch HDDS-3816-ec
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/HDDS-3816-ec by this push:
     new 16c3e99  HDDS-6478. EC: Fix ISA-l load hadoop native lib UnsatisfiedLinkError (#3218)
16c3e99 is described below

commit 16c3e99eae05c74128229e94adbc4671c2bbee65
Author: cchenax <38...@users.noreply.github.com>
AuthorDate: Sat Apr 2 01:41:03 2022 +0800

    HDDS-6478. EC: Fix ISA-l load hadoop native lib UnsatisfiedLinkError (#3218)
---
 .../rawcoder/HadoopNativeECAccessorUtil.java}      | 68 +++++++++-------------
 .../io/erasurecode/rawcoder/package-info.java      | 29 +++++++++
 .../rawcoder/AbstractNativeRawDecoder.java         |  8 ---
 .../rawcoder/AbstractNativeRawEncoder.java         |  8 ---
 .../erasurecode/rawcoder/ErasureCodeNative.java    |  2 +-
 .../erasurecode/rawcoder/NativeRSRawDecoder.java   | 45 +++++---------
 .../erasurecode/rawcoder/NativeRSRawEncoder.java   | 44 +++++---------
 .../erasurecode/rawcoder/NativeXORRawDecoder.java  | 46 +++++----------
 .../erasurecode/rawcoder/NativeXORRawEncoder.java  | 42 +++++--------
 9 files changed, 120 insertions(+), 172 deletions(-)

diff --git a/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeXORRawDecoder.java b/hadoop-hdds/erasurecode/src/main/java/org/apache/hadoop/io/erasurecode/rawcoder/HadoopNativeECAccessorUtil.java
similarity index 50%
copy from hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeXORRawDecoder.java
copy to hadoop-hdds/erasurecode/src/main/java/org/apache/hadoop/io/erasurecode/rawcoder/HadoopNativeECAccessorUtil.java
index d4e43ee..5314db3 100644
--- a/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeXORRawDecoder.java
+++ b/hadoop-hdds/erasurecode/src/main/java/org/apache/hadoop/io/erasurecode/rawcoder/HadoopNativeECAccessorUtil.java
@@ -15,60 +15,48 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.ozone.erasurecode.rawcoder;
-
-import org.apache.hadoop.hdds.annotation.InterfaceAudience;
-import org.apache.hadoop.hdds.client.ECReplicationConfig;
+package org.apache.hadoop.io.erasurecode.rawcoder;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
+import org.apache.hadoop.hdds.annotation.InterfaceAudience;
+
 /**
- * A XOR raw decoder using Intel ISA-L library.
+ * This class is used to access some of the protected API
+ * from hadoop native EC java code.
+ * This is needed until we adapt the native ec code from hadoop.
  */
 @InterfaceAudience.Private
-public class NativeXORRawDecoder extends AbstractNativeRawDecoder {
-
-  static {
-    ErasureCodeNative.checkNativeCodeLoaded();
-  }
-
-  public NativeXORRawDecoder(ECReplicationConfig ecReplicationConfig) {
-    super(ecReplicationConfig);
-    decoderLock.writeLock().lock();
-    try {
-      initImpl(ecReplicationConfig.getData(), ecReplicationConfig.getParity());
-    } finally {
-      decoderLock.writeLock().unlock();
-    }
+public final class HadoopNativeECAccessorUtil {
+  public static void performEncodeImpl(NativeRSRawEncoder encoder,
+      ByteBuffer[] inputs, int[] inputOffsets, int dataLen,
+      ByteBuffer[] outputs, int[] outputOffsets) throws IOException {
+    encoder.performEncodeImpl(inputs, inputOffsets, dataLen, outputs,
+        outputOffsets);
   }
 
-  @Override
-  protected void performDecodeImpl(
+  public static void performDecodeImpl(NativeRSRawDecoder decoder,
       ByteBuffer[] inputs, int[] inputOffsets, int dataLen, int[] erased,
       ByteBuffer[] outputs, int[] outputOffsets) throws IOException {
-    decodeImpl(inputs, inputOffsets, dataLen, erased, outputs, outputOffsets);
+    decoder.performDecodeImpl(inputs, inputOffsets, dataLen, erased, outputs,
+        outputOffsets);
   }
 
-  @Override
-  public void release() {
-    decoderLock.writeLock().lock();
-    try {
-      destroyImpl();
-    } finally {
-      decoderLock.writeLock().unlock();
-    }
+  public static void performEncodeImpl(NativeXORRawEncoder encoder,
+      ByteBuffer[] inputs, int[] inputOffsets, int dataLen,
+      ByteBuffer[] outputs, int[] outputOffsets) throws IOException {
+    encoder.performEncodeImpl(inputs, inputOffsets, dataLen, outputs,
+        outputOffsets);
   }
 
-  private native void initImpl(int numDataUnits, int numParityUnits);
-
-  /**
-   * Native implementation of decoding.
-   * @throws IOException if the decoder is closed.
-   */
-  private native void decodeImpl(
+  public static void performDecodeImpl(NativeXORRawDecoder decoder,
       ByteBuffer[] inputs, int[] inputOffsets, int dataLen, int[] erased,
-      ByteBuffer[] outputs, int[] outputOffsets) throws IOException;
+      ByteBuffer[] outputs, int[] outputOffsets) throws IOException {
+    decoder.performDecodeImpl(inputs, inputOffsets, dataLen, erased, outputs,
+        outputOffsets);
+  }
 
-  private native void destroyImpl();
-}
\ No newline at end of file
+  private HadoopNativeECAccessorUtil() {
+  }
+}
diff --git a/hadoop-hdds/erasurecode/src/main/java/org/apache/hadoop/io/erasurecode/rawcoder/package-info.java b/hadoop-hdds/erasurecode/src/main/java/org/apache/hadoop/io/erasurecode/rawcoder/package-info.java
new file mode 100644
index 0000000..42c6705
--- /dev/null
+++ b/hadoop-hdds/erasurecode/src/main/java/org/apache/hadoop/io/erasurecode/rawcoder/package-info.java
@@ -0,0 +1,29 @@
+/**
+ * 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.
+ */
+
+/**
+ *
+ * Erasure coding rawcoder utilities for Apache Ozone.
+ *
+ */
+@InterfaceAudience.Private
+@InterfaceStability.Unstable
+package org.apache.hadoop.io.erasurecode.rawcoder;
+
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceStability;
\ No newline at end of file
diff --git a/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/AbstractNativeRawDecoder.java b/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/AbstractNativeRawDecoder.java
index f940879..537c2bb 100644
--- a/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/AbstractNativeRawDecoder.java
+++ b/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/AbstractNativeRawDecoder.java
@@ -41,10 +41,6 @@ abstract class AbstractNativeRawDecoder extends RawErasureDecoder {
   protected final ReentrantReadWriteLock decoderLock =
       new ReentrantReadWriteLock();
 
-  // To link with the underlying data structure in the native layer.
-  // No get/set as only used by native codes.
-  private long nativeCoder;
-
   AbstractNativeRawDecoder(ECReplicationConfig replicationConfig) {
     super(replicationConfig);
   }
@@ -54,10 +50,6 @@ abstract class AbstractNativeRawDecoder extends RawErasureDecoder {
       throws IOException {
     decoderLock.readLock().lock();
     try {
-      if (nativeCoder == 0) {
-        throw new IOException(String.format("%s closed",
-            getClass().getSimpleName()));
-      }
       int[] inputOffsets = new int[decodingState.inputs.length];
       int[] outputOffsets = new int[decodingState.outputs.length];
 
diff --git a/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/AbstractNativeRawEncoder.java b/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/AbstractNativeRawEncoder.java
index 365e6db..df6f36f 100644
--- a/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/AbstractNativeRawEncoder.java
+++ b/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/AbstractNativeRawEncoder.java
@@ -50,10 +50,6 @@ abstract class AbstractNativeRawEncoder extends RawErasureEncoder {
       throws IOException {
     encoderLock.readLock().lock();
     try {
-      if (nativeCoder == 0) {
-        throw new IOException(String.format("%s closed",
-            getClass().getSimpleName()));
-      }
       int[] inputOffsets = new int[encodingState.inputs.length];
       int[] outputOffsets = new int[encodingState.outputs.length];
       int dataLen = encodingState.inputs[0].remaining();
@@ -100,8 +96,4 @@ abstract class AbstractNativeRawEncoder extends RawErasureEncoder {
   public boolean preferDirectBuffer() {
     return true;
   }
-
-  // To link with the underlying data structure in the native layer.
-  // No get/set as only used by native codes.
-  private long nativeCoder;
 }
diff --git a/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/ErasureCodeNative.java b/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/ErasureCodeNative.java
index 9f2ff61..4fcac54 100644
--- a/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/ErasureCodeNative.java
+++ b/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/ErasureCodeNative.java
@@ -50,7 +50,7 @@ public final class ErasureCodeNative {
         loadLibrary();
       } catch (Throwable t) {
         problem = "Loading ISA-L failed: " + t.getMessage();
-        LOG.warn(problem);
+        LOG.warn(problem, t);
       }
       LOADING_FAILURE_REASON = problem;
     }
diff --git a/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeRSRawDecoder.java b/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeRSRawDecoder.java
index 1ab7e1b..98c5e8e 100644
--- a/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeRSRawDecoder.java
+++ b/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeRSRawDecoder.java
@@ -19,6 +19,8 @@ package org.apache.ozone.erasurecode.rawcoder;
 
 import org.apache.hadoop.hdds.annotation.InterfaceAudience;
 import org.apache.hadoop.hdds.client.ECReplicationConfig;
+import org.apache.hadoop.io.erasurecode.ErasureCoderOptions;
+import org.apache.hadoop.io.erasurecode.rawcoder.HadoopNativeECAccessorUtil;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -29,48 +31,33 @@ import java.nio.ByteBuffer;
 @InterfaceAudience.Private
 public class NativeRSRawDecoder extends AbstractNativeRawDecoder {
 
-  static {
-    ErasureCodeNative.checkNativeCodeLoaded();
-  }
+  private org.apache.hadoop.io.erasurecode.rawcoder.NativeRSRawDecoder
+      hadoopNativeRSRawDecoder;
 
   public NativeRSRawDecoder(ECReplicationConfig ecReplicationConfig) {
     super(ecReplicationConfig);
-    decoderLock.writeLock().lock();
-    try {
-      initImpl(ecReplicationConfig.getData(), ecReplicationConfig.getParity());
-    } finally {
-      decoderLock.writeLock().unlock();
-    }
+    hadoopNativeRSRawDecoder =
+        new org.apache.hadoop.io.erasurecode.rawcoder.NativeRSRawDecoder(
+            new ErasureCoderOptions(ecReplicationConfig.getData(),
+                ecReplicationConfig.getParity()));
   }
 
   @Override
-  protected void performDecodeImpl(
-      ByteBuffer[] inputs, int[] inputOffsets, int dataLen, int[] erased,
-      ByteBuffer[] outputs, int[] outputOffsets) throws IOException {
-    decodeImpl(inputs, inputOffsets, dataLen, erased, outputs, outputOffsets);
+  protected void performDecodeImpl(ByteBuffer[] inputs, int[] inputOffsets,
+      int dataLen, int[] erased, ByteBuffer[] outputs, int[] outputOffsets)
+      throws IOException {
+    HadoopNativeECAccessorUtil
+        .performDecodeImpl(hadoopNativeRSRawDecoder, inputs,
+            inputOffsets, dataLen, erased, outputs, outputOffsets);
   }
 
   @Override
   public void release() {
-    decoderLock.writeLock().lock();
-    try {
-      destroyImpl();
-    } finally {
-      decoderLock.writeLock().unlock();
-    }
+    hadoopNativeRSRawDecoder.release();
   }
 
   @Override
   public boolean preferDirectBuffer() {
-    return true;
+    return hadoopNativeRSRawDecoder.preferDirectBuffer();
   }
-
-  private native void initImpl(int numDataUnits, int numParityUnits);
-
-  private native void decodeImpl(
-          ByteBuffer[] inputs, int[] inputOffsets, int dataLen, int[] erased,
-          ByteBuffer[] outputs, int[] outputOffsets) throws IOException;
-
-  private native void destroyImpl();
-
 }
\ No newline at end of file
diff --git a/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeRSRawEncoder.java b/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeRSRawEncoder.java
index f03bb19..62db61e 100644
--- a/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeRSRawEncoder.java
+++ b/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeRSRawEncoder.java
@@ -19,6 +19,8 @@ package org.apache.ozone.erasurecode.rawcoder;
 
 import org.apache.hadoop.hdds.annotation.InterfaceAudience;
 import org.apache.hadoop.hdds.client.ECReplicationConfig;
+import org.apache.hadoop.io.erasurecode.ErasureCoderOptions;
+import org.apache.hadoop.io.erasurecode.rawcoder.HadoopNativeECAccessorUtil;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -29,47 +31,33 @@ import java.nio.ByteBuffer;
 @InterfaceAudience.Private
 public class NativeRSRawEncoder extends AbstractNativeRawEncoder {
 
-  static {
-    ErasureCodeNative.checkNativeCodeLoaded();
-  }
+  private org.apache.hadoop.io.erasurecode.rawcoder.NativeRSRawEncoder
+      hadoopNativeRSRawEncoder;
 
   public NativeRSRawEncoder(ECReplicationConfig ecReplicationConfig) {
     super(ecReplicationConfig);
-    encoderLock.writeLock().lock();
-    try {
-      initImpl(ecReplicationConfig.getData(), ecReplicationConfig.getParity());
-    } finally {
-      encoderLock.writeLock().unlock();
-    }
+    hadoopNativeRSRawEncoder =
+        new org.apache.hadoop.io.erasurecode.rawcoder.NativeRSRawEncoder(
+            new ErasureCoderOptions(ecReplicationConfig.getData(),
+                ecReplicationConfig.getParity()));
   }
 
   @Override
-  protected void performEncodeImpl(
-          ByteBuffer[] inputs, int[] inputOffsets, int dataLen,
-          ByteBuffer[] outputs, int[] outputOffsets) throws IOException {
-    encodeImpl(inputs, inputOffsets, dataLen, outputs, outputOffsets);
+  protected void performEncodeImpl(ByteBuffer[] inputs, int[] inputOffsets,
+      int dataLen, ByteBuffer[] outputs, int[] outputOffsets)
+      throws IOException {
+    HadoopNativeECAccessorUtil
+        .performEncodeImpl(hadoopNativeRSRawEncoder, inputs,
+            inputOffsets, dataLen, outputs, outputOffsets);
   }
 
   @Override
   public void release() {
-    encoderLock.writeLock().lock();
-    try {
-      destroyImpl();
-    } finally {
-      encoderLock.writeLock().unlock();
-    }
+    hadoopNativeRSRawEncoder.release();
   }
 
   @Override
   public boolean preferDirectBuffer() {
-    return true;
+    return hadoopNativeRSRawEncoder.preferDirectBuffer();
   }
-
-  private native void initImpl(int numDataUnits, int numParityUnits);
-
-  private native void encodeImpl(ByteBuffer[] inputs, int[] inputOffsets,
-                                 int dataLen, ByteBuffer[] outputs,
-                                 int[] outputOffsets) throws IOException;
-
-  private native void destroyImpl();
 }
\ No newline at end of file
diff --git a/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeXORRawDecoder.java b/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeXORRawDecoder.java
index d4e43ee..96f8581 100644
--- a/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeXORRawDecoder.java
+++ b/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeXORRawDecoder.java
@@ -19,6 +19,8 @@ package org.apache.ozone.erasurecode.rawcoder;
 
 import org.apache.hadoop.hdds.annotation.InterfaceAudience;
 import org.apache.hadoop.hdds.client.ECReplicationConfig;
+import org.apache.hadoop.io.erasurecode.ErasureCoderOptions;
+import org.apache.hadoop.io.erasurecode.rawcoder.HadoopNativeECAccessorUtil;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -29,46 +31,28 @@ import java.nio.ByteBuffer;
 @InterfaceAudience.Private
 public class NativeXORRawDecoder extends AbstractNativeRawDecoder {
 
-  static {
-    ErasureCodeNative.checkNativeCodeLoaded();
-  }
+  private org.apache.hadoop.io.erasurecode.rawcoder.NativeXORRawDecoder
+      hadoopNativeXORRawDecoder;
 
   public NativeXORRawDecoder(ECReplicationConfig ecReplicationConfig) {
     super(ecReplicationConfig);
-    decoderLock.writeLock().lock();
-    try {
-      initImpl(ecReplicationConfig.getData(), ecReplicationConfig.getParity());
-    } finally {
-      decoderLock.writeLock().unlock();
-    }
+    hadoopNativeXORRawDecoder =
+        new org.apache.hadoop.io.erasurecode.rawcoder.NativeXORRawDecoder(
+            new ErasureCoderOptions(ecReplicationConfig.getData(),
+                ecReplicationConfig.getParity()));
   }
 
   @Override
-  protected void performDecodeImpl(
-      ByteBuffer[] inputs, int[] inputOffsets, int dataLen, int[] erased,
-      ByteBuffer[] outputs, int[] outputOffsets) throws IOException {
-    decodeImpl(inputs, inputOffsets, dataLen, erased, outputs, outputOffsets);
+  protected void performDecodeImpl(ByteBuffer[] inputs, int[] inputOffsets,
+      int dataLen, int[] erased, ByteBuffer[] outputs, int[] outputOffsets)
+      throws IOException {
+    HadoopNativeECAccessorUtil
+        .performDecodeImpl(hadoopNativeXORRawDecoder, inputs,
+            inputOffsets, dataLen, erased, outputs, outputOffsets);
   }
 
   @Override
   public void release() {
-    decoderLock.writeLock().lock();
-    try {
-      destroyImpl();
-    } finally {
-      decoderLock.writeLock().unlock();
-    }
+    hadoopNativeXORRawDecoder.release();
   }
-
-  private native void initImpl(int numDataUnits, int numParityUnits);
-
-  /**
-   * Native implementation of decoding.
-   * @throws IOException if the decoder is closed.
-   */
-  private native void decodeImpl(
-      ByteBuffer[] inputs, int[] inputOffsets, int dataLen, int[] erased,
-      ByteBuffer[] outputs, int[] outputOffsets) throws IOException;
-
-  private native void destroyImpl();
 }
\ No newline at end of file
diff --git a/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeXORRawEncoder.java b/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeXORRawEncoder.java
index 6dde2d5..91be762 100644
--- a/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeXORRawEncoder.java
+++ b/hadoop-hdds/erasurecode/src/main/java/org/apache/ozone/erasurecode/rawcoder/NativeXORRawEncoder.java
@@ -19,6 +19,8 @@ package org.apache.ozone.erasurecode.rawcoder;
 
 import org.apache.hadoop.hdds.annotation.InterfaceAudience;
 import org.apache.hadoop.hdds.client.ECReplicationConfig;
+import org.apache.hadoop.io.erasurecode.ErasureCoderOptions;
+import org.apache.hadoop.io.erasurecode.rawcoder.HadoopNativeECAccessorUtil;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -29,42 +31,28 @@ import java.nio.ByteBuffer;
 @InterfaceAudience.Private
 public class NativeXORRawEncoder extends AbstractNativeRawEncoder {
 
-  static {
-    ErasureCodeNative.checkNativeCodeLoaded();
-  }
+  private org.apache.hadoop.io.erasurecode.rawcoder.NativeXORRawEncoder
+      hadoopNativeXORRawEncoder;
 
   public NativeXORRawEncoder(ECReplicationConfig ecReplicationConfig) {
     super(ecReplicationConfig);
-    encoderLock.writeLock().lock();
-    try {
-      initImpl(ecReplicationConfig.getData(), ecReplicationConfig.getParity());
-    } finally {
-      encoderLock.writeLock().unlock();
-    }
+    hadoopNativeXORRawEncoder =
+        new org.apache.hadoop.io.erasurecode.rawcoder.NativeXORRawEncoder(
+            new ErasureCoderOptions(ecReplicationConfig.getData(),
+                ecReplicationConfig.getParity()));
   }
 
   @Override
-  protected void performEncodeImpl(
-      ByteBuffer[] inputs, int[] inputOffsets, int dataLen,
-      ByteBuffer[] outputs, int[] outputOffsets) throws IOException {
-    encodeImpl(inputs, inputOffsets, dataLen, outputs, outputOffsets);
+  protected void performEncodeImpl(ByteBuffer[] inputs, int[] inputOffsets,
+      int dataLen, ByteBuffer[] outputs, int[] outputOffsets)
+      throws IOException {
+    HadoopNativeECAccessorUtil
+        .performEncodeImpl(hadoopNativeXORRawEncoder, inputs,
+            inputOffsets, dataLen, outputs, outputOffsets);
   }
 
   @Override
   public void release() {
-    encoderLock.writeLock().lock();
-    try {
-      destroyImpl();
-    } finally {
-      encoderLock.writeLock().unlock();
-    }
+    hadoopNativeXORRawEncoder.release();
   }
-
-  private native void initImpl(int numDataUnits, int numParityUnits);
-
-  private native void encodeImpl(ByteBuffer[] inputs, int[] inputOffsets,
-                                 int dataLen, ByteBuffer[] outputs,
-                                 int[] outputOffsets) throws IOException;
-
-  private native void destroyImpl();
 }
\ No newline at end of file

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org