|
@@ -27,12 +27,6 @@ import org.apache.hadoop.fs.Options.ChecksumOpt;
|
|
import org.apache.hadoop.io.MD5Hash;
|
|
import org.apache.hadoop.io.MD5Hash;
|
|
import org.apache.hadoop.io.WritableUtils;
|
|
import org.apache.hadoop.io.WritableUtils;
|
|
import org.apache.hadoop.util.DataChecksum;
|
|
import org.apache.hadoop.util.DataChecksum;
|
|
-import org.xml.sax.Attributes;
|
|
|
|
-import org.xml.sax.SAXException;
|
|
|
|
-import org.znerd.xmlenc.XMLOutputter;
|
|
|
|
-
|
|
|
|
-import org.apache.hadoop.fs.MD5MD5CRC32CastagnoliFileChecksum;
|
|
|
|
-import org.apache.hadoop.fs.MD5MD5CRC32GzipFileChecksum;
|
|
|
|
|
|
|
|
/** MD5 of MD5 of CRC32. */
|
|
/** MD5 of MD5 of CRC32. */
|
|
@InterfaceAudience.LimitedPrivate({"HDFS"})
|
|
@InterfaceAudience.LimitedPrivate({"HDFS"})
|
|
@@ -107,62 +101,6 @@ public class MD5MD5CRC32FileChecksum extends FileChecksum {
|
|
md5.write(out);
|
|
md5.write(out);
|
|
}
|
|
}
|
|
|
|
|
|
- /** Write that object to xml output. */
|
|
|
|
- public static void write(XMLOutputter xml, MD5MD5CRC32FileChecksum that
|
|
|
|
- ) throws IOException {
|
|
|
|
- xml.startTag(MD5MD5CRC32FileChecksum.class.getName());
|
|
|
|
- if (that != null) {
|
|
|
|
- xml.attribute("bytesPerCRC", "" + that.bytesPerCRC);
|
|
|
|
- xml.attribute("crcPerBlock", "" + that.crcPerBlock);
|
|
|
|
- xml.attribute("crcType", ""+ that.getCrcType().name());
|
|
|
|
- xml.attribute("md5", "" + that.md5);
|
|
|
|
- }
|
|
|
|
- xml.endTag();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /** Return the object represented in the attributes. */
|
|
|
|
- public static MD5MD5CRC32FileChecksum valueOf(Attributes attrs
|
|
|
|
- ) throws SAXException {
|
|
|
|
- final String bytesPerCRC = attrs.getValue("bytesPerCRC");
|
|
|
|
- final String crcPerBlock = attrs.getValue("crcPerBlock");
|
|
|
|
- final String md5 = attrs.getValue("md5");
|
|
|
|
- String crcType = attrs.getValue("crcType");
|
|
|
|
- DataChecksum.Type finalCrcType;
|
|
|
|
- if (bytesPerCRC == null || crcPerBlock == null || md5 == null) {
|
|
|
|
- return null;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- try {
|
|
|
|
- // old versions don't support crcType.
|
|
|
|
- if (crcType == null || crcType.equals("")) {
|
|
|
|
- finalCrcType = DataChecksum.Type.CRC32;
|
|
|
|
- } else {
|
|
|
|
- finalCrcType = DataChecksum.Type.valueOf(crcType);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- switch (finalCrcType) {
|
|
|
|
- case CRC32:
|
|
|
|
- return new MD5MD5CRC32GzipFileChecksum(
|
|
|
|
- Integer.parseInt(bytesPerCRC),
|
|
|
|
- Integer.parseInt(crcPerBlock),
|
|
|
|
- new MD5Hash(md5));
|
|
|
|
- case CRC32C:
|
|
|
|
- return new MD5MD5CRC32CastagnoliFileChecksum(
|
|
|
|
- Integer.parseInt(bytesPerCRC),
|
|
|
|
- Integer.parseInt(crcPerBlock),
|
|
|
|
- new MD5Hash(md5));
|
|
|
|
- default:
|
|
|
|
- // we should never get here since finalCrcType will
|
|
|
|
- // hold a valid type or we should have got an exception.
|
|
|
|
- return null;
|
|
|
|
- }
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- throw new SAXException("Invalid attributes: bytesPerCRC=" + bytesPerCRC
|
|
|
|
- + ", crcPerBlock=" + crcPerBlock + ", crcType=" + crcType
|
|
|
|
- + ", md5=" + md5, e);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
@Override
|
|
@Override
|
|
public String toString() {
|
|
public String toString() {
|
|
return getAlgorithmName() + ":" + md5;
|
|
return getAlgorithmName() + ":" + md5;
|