diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/PureJavaCrc32C.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/PureJavaCrc32C.java index bdf929709a..11388f0f1c 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/PureJavaCrc32C.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/PureJavaCrc32C.java @@ -39,7 +39,7 @@ public class PureJavaCrc32C implements Checksum { /** Create a new PureJavaCrc32 object. */ public PureJavaCrc32C() { - reset(); + resetFinal(); // safe to call as it cannot be overridden } @Override @@ -50,6 +50,12 @@ public long getValue() { @Override public void reset() { + resetFinal(); + } + + // This must be final as it is called by the ctor + // (can't also be private, as checkstyle then complains) + final void resetFinal() { crc = 0xffffffff; } diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestPureJavaCrc32C.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestPureJavaCrc32C.java new file mode 100644 index 0000000000..b085bbf2ac --- /dev/null +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestPureJavaCrc32C.java @@ -0,0 +1,37 @@ +/** + * 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. + */ +package org.apache.hadoop.util; + +import java.util.zip.Checksum; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + + +public class TestPureJavaCrc32C { + + @Test + public void testChecksumInit() { + Checksum csum = new PureJavaCrc32C(); + long crc1 = csum.getValue(); + csum.reset(); + long crc2 = csum.getValue(); + assertEquals("reset should give same as initial value", crc1, crc2); + } +}