# 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-14-dfs-dir.tgz : 
# ---------------------
# This file contains the HDFS directory structure for one namenode and 4 datanodes.
# The structure is setup similar to the structure used in MiniDFSCluster.
# The directory was created with Hadoo-0.14.x.
#
# In the test, this directory is unpacked and MiniDFSCluster is run with 
# "-upgrade" option. The test waits for the upgrade to complete 
# (leave safe mode) and then all the files are read. The test checks that the
# directory structure and file checksums exactly match the information
# in this file.
#
# 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.
#
# In the future, when Hadoop project no longer supports upgrade from
# Hadoop-0.12, then a new DFS directory image must be created.
#
# 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
