# 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.

#
# This is a readme for hadoop-version-dfs-dir.tgz and hadoop-dfs-dir.txt.
#
# See HADOOP-1629 for more info if needed.
# These two files are used by unit test TestDFSUpgradeFromImage.java 
# 
# hadoop-dfs-dir.txt :
# ---------------------
# Along with this description this file contains the expected files and 
# checksums or the files in the upgraded DFS.
# 
# The original DFS directory was created with various types of files and with
# some recoverable errors (i.e. corrupt or missing .crc files).
#
# A similar set of files exist in two different DFS directories. 
# For e.g. "top-dir-1Mb-512" contains files created with dfs.blocksize of 1Mb 
# and io.bytes.per.checksum of 512.
#
# To generate checksum info for new files :
# ---------------------------------------
# Uncomment the last coment (starts with "printChecksums") and run the 
# test again. When the test sees this line, it prints the checksum
# information that should replace the checksum information in 
# this file. When run in this mode, the test will fail with a descriptive IOException.
#
# Next, extract the checksum info from the test log like this:
#  sed -n 's/.*CRC info for reference file : //p' test-log.txt >> this_file
# This will append a new list of files and checksums to this file.  Be sure to remove the existing checksum info.
#
# For your reference, the format of the checksum info below is "filename whitespace*\twhitespace* checksum\n"
#
# Uncomment the following line to produce checksum info for a new DFS image.
#printChecksums

/1kb-multiple-checksum-blocks-64-16 	 191893480
/top-dir-120000-60/1Mb-file 	 4079112547
/top-dir-120000-60/4k-file 	 3716287280
/top-dir-120000-60/5Mb-file 	 2563834633
/top-dir-120000-60/directory1/500thousand-file 	 3036538664
/top-dir-120000-60/directory1/file-with-corrupt-crc 	 1984689737
/top-dir-120000-60/directory1/file-with-no-crc 	 4004594475
/top-dir-120000-60/directory1/zero1 	 0
/top-dir-120000-60/zerolen 	 0
/top-dir-1Mb-512/1Mb-file 	 4079112547
/top-dir-1Mb-512/4k-file 	 3716287280
/top-dir-1Mb-512/5Mb-file 	 2563834633
/top-dir-1Mb-512/directory1/500thousand-file 	 3036538664
/top-dir-1Mb-512/directory1/file-with-corrupt-crc 	 1984689737
/top-dir-1Mb-512/directory1/file-with-no-crc 	 4004594475
/top-dir-1Mb-512/directory1/zero1 	 0
/top-dir-1Mb-512/zerolen 	 0
overallCRC 	 1419480698
