This is an automated email from the ASF dual-hosted git repository.
rakeshr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new f31d589 HDDS-6088. Implement O3FS/OFS getFileChecksum() using file
checksum helpers. (#2935)
f31d589 is described below
commit f31d5896d53615d992d986d332b8ec985c791dfb
Author: Wei-Chiu Chuang <[email protected]>
AuthorDate: Fri Feb 11 13:12:27 2022 +0800
HDDS-6088. Implement O3FS/OFS getFileChecksum() using file checksum
helpers. (#2935)
---
.../apache/hadoop/hdds/scm/OzoneClientConfig.java | 38 ++++++++++++++
.../client/checksum/BaseFileChecksumHelper.java | 9 +---
.../checksum/ReplicatedFileChecksumHelper.java | 6 +--
.../checksum/TestReplicatedFileChecksumHelper.java | 4 +-
.../hadoop/ozone/shell/TestOzoneShellHA.java | 10 +++-
.../fs/ozone/BasicOzoneClientAdapterImpl.java | 14 +++++
.../hadoop/fs/ozone/BasicOzoneFileSystem.java | 5 +-
.../ozone/BasicRootedOzoneClientAdapterImpl.java | 18 +++++++
.../fs/ozone/BasicRootedOzoneFileSystem.java | 3 +-
.../apache/hadoop/fs/ozone/OzoneClientAdapter.java | 3 ++
.../apache/hadoop/fs/ozone/OzoneClientUtils.java | 22 ++++++++
.../hadoop/fs/ozone/TestOzoneClientUtils.java | 59 ++++++++++++++++++++++
12 files changed, 174 insertions(+), 17 deletions(-)
diff --git
a/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/OzoneClientConfig.java
b/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/OzoneClientConfig.java
index f39ec86..97029e6 100644
---
a/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/OzoneClientConfig.java
+++
b/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/OzoneClientConfig.java
@@ -38,6 +38,18 @@ public class OzoneClientConfig {
private static final Logger LOG =
LoggerFactory.getLogger(OzoneClientConfig.class);
+ /**
+ * Enum for indicating what mode to use when combining chunk and block
+ * checksums to define an aggregate FileChecksum. This should be considered
+ * a client-side runtime option rather than a persistent property of any
+ * stored metadata, which is why this is not part of ChecksumOpt, which
+ * deals with properties of files at rest.
+ */
+ public enum ChecksumCombineMode {
+ MD5MD5CRC, // MD5 of block checksums, which are MD5 over chunk CRCs
+ COMPOSITE_CRC // Block/chunk-independent composite CRC
+ }
+
@Config(key = "stream.buffer.flush.size",
defaultValue = "16MB",
type = ConfigType.SIZE,
@@ -124,6 +136,20 @@ public class OzoneClientConfig {
tags = ConfigTag.CLIENT)
private boolean checksumVerify = true;
+ @Config(key = "checksum.combine.mode",
+ defaultValue = "COMPOSITE_CRC",
+ description = "The combined checksum type [MD5MD5CRC / COMPOSITE_CRC] "
+ + "determines which algorithm would be used to compute file
checksum."
+ + "COMPOSITE_CRC calculates the combined CRC of the whole file, "
+ + "where the lower-level chunk/block checksums are combined into "
+ + "file-level checksum."
+ + "MD5MD5CRC calculates the MD5 of MD5 of checksums of individual "
+ + "chunks."
+ + "Default checksum type is COMPOSITE_CRC.",
+ tags = ConfigTag.CLIENT)
+ private String checksumCombineMode =
+ ChecksumCombineMode.COMPOSITE_CRC.name();
+
@PostConstruct
private void validate() {
Preconditions.checkState(streamBufferSize > 0);
@@ -227,4 +253,16 @@ public class OzoneClientConfig {
public int getBufferIncrement() {
return bufferIncrement;
}
+
+ public ChecksumCombineMode getChecksumCombineMode() {
+ try {
+ return ChecksumCombineMode.valueOf(checksumCombineMode);
+ } catch(IllegalArgumentException iae) {
+ LOG.warn("Bad checksum combine mode: {}. Using default {}",
+ checksumCombineMode,
+ ChecksumCombineMode.COMPOSITE_CRC.name());
+ return ChecksumCombineMode.valueOf(
+ ChecksumCombineMode.COMPOSITE_CRC.name());
+ }
+ }
}
diff --git
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/checksum/BaseFileChecksumHelper.java
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/checksum/BaseFileChecksumHelper.java
index ece725f..d75e878 100644
---
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/checksum/BaseFileChecksumHelper.java
+++
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/checksum/BaseFileChecksumHelper.java
@@ -17,7 +17,6 @@
*/
package org.apache.hadoop.ozone.client.checksum;
-import com.google.common.annotations.VisibleForTesting;
import org.apache.hadoop.fs.FileChecksum;
import org.apache.hadoop.fs.MD5MD5CRC32GzipFileChecksum;
import org.apache.hadoop.hdds.scm.XceiverClientFactory;
@@ -50,8 +49,8 @@ public abstract class BaseFileChecksumHelper {
private final long length;
private ClientProtocol rpcClient;
- private XceiverClientFactory xceiverClientFactory;
private final DataOutputBuffer blockChecksumBuf = new DataOutputBuffer();
+ private XceiverClientFactory xceiverClientFactory;
private FileChecksum fileChecksum;
private List<OmKeyLocationInfo> keyLocationInfos;
private long remaining = 0L;
@@ -161,12 +160,6 @@ public abstract class BaseFileChecksumHelper {
}
}
- @VisibleForTesting
- List<OmKeyLocationInfo> getKeyLocationInfos() {
- return keyLocationInfos;
- }
-
-
/**
* Compute block checksums block by block and append the raw bytes of the
* block checksums into getBlockChecksumBuf().
diff --git
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/checksum/ReplicatedFileChecksumHelper.java
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/checksum/ReplicatedFileChecksumHelper.java
index 5b79eb8..0c61432 100644
---
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/checksum/ReplicatedFileChecksumHelper.java
+++
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/checksum/ReplicatedFileChecksumHelper.java
@@ -30,7 +30,7 @@ import
org.apache.hadoop.hdds.security.token.OzoneBlockTokenIdentifier;
import org.apache.hadoop.io.MD5Hash;
import org.apache.hadoop.ozone.client.OzoneBucket;
import org.apache.hadoop.ozone.client.OzoneVolume;
-import org.apache.hadoop.ozone.client.rpc.RpcClient;
+import org.apache.hadoop.ozone.client.protocol.ClientProtocol;
import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfo;
import org.apache.hadoop.security.token.Token;
@@ -44,9 +44,9 @@ import java.util.List;
public class ReplicatedFileChecksumHelper extends BaseFileChecksumHelper {
private int blockIdx;
- ReplicatedFileChecksumHelper(
+ public ReplicatedFileChecksumHelper(
OzoneVolume volume, OzoneBucket bucket, String keyName, long length,
- RpcClient rpcClient) throws IOException {
+ ClientProtocol rpcClient) throws IOException {
super(volume, bucket, keyName, length, rpcClient);
}
diff --git
a/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/checksum/TestReplicatedFileChecksumHelper.java
b/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/checksum/TestReplicatedFileChecksumHelper.java
index 198602d..add0b20 100644
---
a/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/checksum/TestReplicatedFileChecksumHelper.java
+++
b/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/checksum/TestReplicatedFileChecksumHelper.java
@@ -232,7 +232,7 @@ public class TestReplicatedFileChecksumHelper {
helper.compute();
FileChecksum fileChecksum = helper.getFileChecksum();
assertTrue(fileChecksum instanceof MD5MD5CRC32GzipFileChecksum);
- assertEquals(1, helper.getKeyLocationInfos().size());
+ assertEquals(1, helper.getKeyLocationInfoList().size());
}
private XceiverClientReply buildValidResponse() {
@@ -317,7 +317,7 @@ public class TestReplicatedFileChecksumHelper {
helper.compute();
FileChecksum fileChecksum = helper.getFileChecksum();
assertTrue(fileChecksum instanceof MD5MD5CRC32GzipFileChecksum);
- assertEquals(1, helper.getKeyLocationInfos().size());
+ assertEquals(1, helper.getKeyLocationInfoList().size());
}
}
}
\ No newline at end of file
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneShellHA.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneShellHA.java
index 5ee2ac3..c0f6342 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneShellHA.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneShellHA.java
@@ -28,6 +28,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.UUID;
+import org.apache.hadoop.fs.FileChecksum;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileUtil;
@@ -575,17 +576,22 @@ public class TestOzoneShellHA {
Assert.assertEquals(0, res);
// Verify key1 creation
FileStatus statusPathKey1 = fs.getFileStatus(pathKey1);
+
+ FileChecksum previousFileChecksum = fs.getFileChecksum(pathKey1);
+
Assert.assertEquals(strKey1, statusPathKey1.getPath().toString());
// rm without -skipTrash. since trash interval > 0, should moved to trash
res = ToolRunner.run(shell, new String[]{"-rm", strKey1});
Assert.assertEquals(0, res);
+
+ FileChecksum afterFileChecksum = fs.getFileChecksum(trashPathKey1);
+
// Verify that the file is moved to the correct trash location
FileStatus statusTrashPathKey1 = fs.getFileStatus(trashPathKey1);
// It'd be more meaningful if we actually write some content to the file
Assert.assertEquals(
statusPathKey1.getLen(), statusTrashPathKey1.getLen());
- Assert.assertEquals(
- fs.getFileChecksum(pathKey1), fs.getFileChecksum(trashPathKey1));
+ Assert.assertEquals(previousFileChecksum, afterFileChecksum);
// Check delete skip trash behavior
res = ToolRunner.run(shell, new String[]{"-touch", strKey2});
diff --git
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneClientAdapterImpl.java
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneClientAdapterImpl.java
index 4c09a81..55bce59 100644
---
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneClientAdapterImpl.java
+++
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneClientAdapterImpl.java
@@ -30,6 +30,7 @@ import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.crypto.key.KeyProvider;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileAlreadyExistsException;
+import org.apache.hadoop.fs.FileChecksum;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.PathIsNotEmptyDirectoryException;
import org.apache.hadoop.hdds.annotation.InterfaceAudience;
@@ -38,6 +39,7 @@ import org.apache.hadoop.hdds.client.ReplicationFactor;
import org.apache.hadoop.hdds.conf.ConfigurationSource;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
+import org.apache.hadoop.hdds.scm.OzoneClientConfig;
import org.apache.hadoop.hdds.security.x509.SecurityConfig;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.ozone.OmUtils;
@@ -559,4 +561,16 @@ public class BasicOzoneClientAdapterImpl implements
OzoneClientAdapter {
public boolean isFSOptimizedBucket() {
return bucket.getBucketLayout().isFileSystemOptimized();
}
+
+ @Override
+ public FileChecksum getFileChecksum(String keyName, long length)
+ throws IOException {
+ OzoneClientConfig.ChecksumCombineMode combineMode =
+ config.getObject(OzoneClientConfig.class).getChecksumCombineMode();
+
+ return OzoneClientUtils.getFileChecksumWithCombineMode(
+ volume, bucket, keyName,
+ length, combineMode, ozoneClient.getObjectStore().getClientProxy());
+
+ }
}
diff --git
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneFileSystem.java
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneFileSystem.java
index c8549f0..3496105 100644
---
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneFileSystem.java
+++
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneFileSystem.java
@@ -800,7 +800,10 @@ public class BasicOzoneFileSystem extends FileSystem {
@Override
public FileChecksum getFileChecksum(Path f, long length) throws IOException {
incrementCounter(Statistic.INVOCATION_GET_FILE_CHECKSUM);
- return super.getFileChecksum(f, length);
+ statistics.incrementReadOps(1);
+ Path qualifiedPath = f.makeQualified(uri, workingDir);
+ String key = pathToKey(qualifiedPath);
+ return adapter.getFileChecksum(key, length);
}
@Override
diff --git
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneClientAdapterImpl.java
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneClientAdapterImpl.java
index 2577105..35a027d 100644
---
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneClientAdapterImpl.java
+++
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneClientAdapterImpl.java
@@ -36,6 +36,7 @@ import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.crypto.key.KeyProvider;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileAlreadyExistsException;
+import org.apache.hadoop.fs.FileChecksum;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
@@ -47,6 +48,7 @@ import org.apache.hadoop.hdds.client.ReplicationFactor;
import org.apache.hadoop.hdds.conf.ConfigurationSource;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
+import org.apache.hadoop.hdds.scm.OzoneClientConfig;
import org.apache.hadoop.hdds.security.x509.SecurityConfig;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.ozone.OFSPath;
@@ -1066,4 +1068,20 @@ public class BasicRootedOzoneClientAdapterImpl
// TODO: Need to refine this part.
return false;
}
+
+ @Override
+ public FileChecksum getFileChecksum(String keyName, long length)
+ throws IOException {
+ OzoneClientConfig.ChecksumCombineMode combineMode =
+ config.getObject(OzoneClientConfig.class).getChecksumCombineMode();
+
+ OFSPath ofsPath = new OFSPath(keyName);
+
+ OzoneVolume volume = objectStore.getVolume(ofsPath.getVolumeName());
+ OzoneBucket bucket = getBucket(ofsPath, false);
+ return OzoneClientUtils.getFileChecksumWithCombineMode(
+ volume, bucket, ofsPath.getKeyName(),
+ length, combineMode, ozoneClient.getObjectStore().getClientProxy());
+
+ }
}
diff --git
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneFileSystem.java
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneFileSystem.java
index 35065f0..09383a6 100644
---
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneFileSystem.java
+++
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneFileSystem.java
@@ -832,7 +832,8 @@ public class BasicRootedOzoneFileSystem extends FileSystem {
@Override
public FileChecksum getFileChecksum(Path f, long length) throws IOException {
incrementCounter(Statistic.INVOCATION_GET_FILE_CHECKSUM);
- return super.getFileChecksum(f, length);
+ String key = pathToKey(f);
+ return adapter.getFileChecksum(key, length);
}
@Override
diff --git
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/OzoneClientAdapter.java
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/OzoneClientAdapter.java
index 0258f69..31bf351 100644
---
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/OzoneClientAdapter.java
+++
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/OzoneClientAdapter.java
@@ -24,6 +24,7 @@ import java.util.Iterator;
import java.util.List;
import org.apache.hadoop.crypto.key.KeyProvider;
+import org.apache.hadoop.fs.FileChecksum;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.ozone.security.OzoneTokenIdentifier;
import org.apache.hadoop.security.token.Token;
@@ -78,4 +79,6 @@ public interface OzoneClientAdapter {
Path qualifiedPath, String userName) throws IOException;
boolean isFSOptimizedBucket();
+
+ FileChecksum getFileChecksum(String keyName, long length) throws IOException;
}
diff --git
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/OzoneClientUtils.java
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/OzoneClientUtils.java
index 14983dc..92333b2 100644
---
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/OzoneClientUtils.java
+++
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/OzoneClientUtils.java
@@ -16,9 +16,16 @@
*/
package org.apache.hadoop.fs.ozone;
+import com.google.common.base.Preconditions;
import org.apache.commons.lang3.tuple.Pair;
+import org.apache.hadoop.fs.FileChecksum;
+import org.apache.hadoop.hdds.scm.OzoneClientConfig;
+import org.apache.hadoop.ozone.client.checksum.BaseFileChecksumHelper;
import org.apache.hadoop.ozone.client.ObjectStore;
import org.apache.hadoop.ozone.client.OzoneBucket;
+import org.apache.hadoop.ozone.client.OzoneVolume;
+import org.apache.hadoop.ozone.client.checksum.ReplicatedFileChecksumHelper;
+import org.apache.hadoop.ozone.client.protocol.ClientProtocol;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.BucketLayout;
@@ -64,4 +71,19 @@ public final class OzoneClientUtils {
}
return bucket.getBucketLayout();
}
+
+ public static FileChecksum getFileChecksumWithCombineMode(OzoneVolume volume,
+ OzoneBucket bucket, String keyName, long length,
+ OzoneClientConfig.ChecksumCombineMode combineMode,
+ ClientProtocol rpcClient) throws IOException {
+ Preconditions.checkArgument(length >= 0);
+
+ if (keyName.length() == 0) {
+ return null;
+ }
+ BaseFileChecksumHelper helper = new ReplicatedFileChecksumHelper(
+ volume, bucket, keyName, length, rpcClient);
+ helper.compute();
+ return helper.getFileChecksum();
+ }
}
diff --git
a/hadoop-ozone/ozonefs-common/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneClientUtils.java
b/hadoop-ozone/ozonefs-common/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneClientUtils.java
new file mode 100644
index 0000000..a9d4f98
--- /dev/null
+++
b/hadoop-ozone/ozonefs-common/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneClientUtils.java
@@ -0,0 +1,59 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.
+ */
+package org.apache.hadoop.fs.ozone;
+
+import org.apache.hadoop.fs.FileChecksum;
+import org.apache.hadoop.hdds.scm.OzoneClientConfig;
+import org.apache.hadoop.ozone.client.OzoneBucket;
+import org.apache.hadoop.ozone.client.OzoneVolume;
+import org.apache.hadoop.ozone.client.protocol.ClientProtocol;
+import org.junit.Test;
+
+import java.io.IOException;
+
+import static org.junit.Assert.assertNull;
+import static org.mockito.Mockito.mock;
+
+/**
+ * Unit tests for OzoneClientUtils.
+ */
+public class TestOzoneClientUtils {
+ @Test(expected = IllegalArgumentException.class)
+ public void testNegativeLength() throws IOException {
+ OzoneVolume volume = mock(OzoneVolume.class);
+ OzoneBucket bucket = mock(OzoneBucket.class);
+ String keyName = "dummy";
+ ClientProtocol clientProtocol = mock(ClientProtocol.class);
+ OzoneClientUtils.getFileChecksumWithCombineMode(volume, bucket, keyName,
+ -1, OzoneClientConfig.ChecksumCombineMode.MD5MD5CRC, clientProtocol);
+
+ }
+
+ @Test
+ public void testEmptyKeyName() throws IOException {
+ OzoneVolume volume = mock(OzoneVolume.class);
+ OzoneBucket bucket = mock(OzoneBucket.class);
+ String keyName = "";
+ ClientProtocol clientProtocol = mock(ClientProtocol.class);
+ FileChecksum checksum =
+ OzoneClientUtils.getFileChecksumWithCombineMode(volume, bucket,
keyName,
+ 1, OzoneClientConfig.ChecksumCombineMode.MD5MD5CRC,
+ clientProtocol);
+
+ assertNull(checksum);
+ }
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]