mirror of https://github.com/facebook/rocksdb.git
116 lines
3.5 KiB
Bash
Executable File
116 lines
3.5 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# A shell script to load some pre generated data file to a DB using ldb tool
|
|
# ./ldb needs to be avaible to be executed.
|
|
#
|
|
# Usage: <SCRIPT> [checkout]
|
|
# `checkout` can be a tag, commit or branch name. Will build using it and check DBs generated by all previous tags can be opened by it.
|
|
# Return value 0 means all regression tests pass. 1 if not pass.
|
|
|
|
scriptpath=`dirname $BASH_SOURCE`
|
|
test_dir=${TEST_TMPDIR:-"/tmp"}"/format_compatible_check"
|
|
script_copy_dir=$test_dir"/script_copy"
|
|
input_data_path=$test_dir"/test_data_input/"
|
|
|
|
mkdir $test_dir || true
|
|
mkdir $input_data_path || true
|
|
rm -rf $script_copy_dir
|
|
cp $scriptpath $script_copy_dir -rf
|
|
|
|
# Generate four random files.
|
|
for i in {1..6}
|
|
do
|
|
input_data[$i]=$input_data_path/data$i
|
|
echo == Generating random input file ${input_data[$i]}
|
|
python - <<EOF
|
|
import random
|
|
random.seed($i)
|
|
symbols=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
|
|
with open('${input_data[$i]}', 'w') as f:
|
|
for i in range(1,1024):
|
|
k = ""
|
|
for j in range(1, random.randint(1,32)):
|
|
k=k + symbols[random.randint(0, len(symbols) - 1)]
|
|
vb = ""
|
|
for j in range(1, random.randint(0,128)):
|
|
vb = vb + symbols[random.randint(0, len(symbols) - 1)]
|
|
v = ""
|
|
for j in range(1, random.randint(1, 5)):
|
|
v = v + vb
|
|
print >> f, k + " ==> " + v
|
|
EOF
|
|
done
|
|
|
|
# v2.1 or older doesn't pass the debug build but OK with release build
|
|
declare -a need_release_tags=("v1.5.7" "v2.1")
|
|
declare -a tags=("v2.5" "v2.4" "v2.3" "v2.2" "v2.8" "v3.0" "v3.1" "v3.2" "v3.3" "v3.4" "rocksdb-3.5.1" "rocksdb-3.6.2" "rocksdb-3.7" "rocksdb-3.8" "rocksdb-3.9" "v3.10" "v3.11" "v3.12.1" "v3.13.1" "v4.0" "v4.1" "v4.2" "v4.3" "v4.3.1" "v4.4")
|
|
declare -a forward_compatible_tags=("v3.10" "v3.11" "v3.12.1" "v3.13.1" "v4.0" "v4.1" "v4.2" "v4.3.1" "v4.4")
|
|
|
|
generate_db()
|
|
{
|
|
set +e
|
|
$script_copy_dir/generate_random_db.sh $1 $2
|
|
if [ $? -ne 0 ]; then
|
|
echo ==== Error loading data from $2 to $1 ====
|
|
exit 1
|
|
fi
|
|
set -e
|
|
}
|
|
|
|
compare_db()
|
|
{
|
|
set +e
|
|
$script_copy_dir/verify_random_db.sh $1 $2 $3
|
|
if [ $? -ne 0 ]; then
|
|
echo ==== Read different content from $1 and $2 or error happened. ====
|
|
exit 1
|
|
fi
|
|
set -e
|
|
}
|
|
|
|
set -e
|
|
for tag in "${tags[@]}" "${need_release_tags[@]}"
|
|
do
|
|
echo == Generating DB from "$tag" ...
|
|
git checkout $tag
|
|
make clean
|
|
make ldb -j32
|
|
generate_db $input_data_path $test_dir/$tag
|
|
done
|
|
|
|
checkout_flag=${1:-"master"}
|
|
|
|
echo == Building $checkout_flag debug
|
|
git checkout $checkout_flag
|
|
make clean
|
|
make ldb -j32
|
|
compare_base_db_dir=$test_dir"/base_db_dir"
|
|
echo == Generate compare base DB to $compare_base_db_dir
|
|
generate_db $input_data_path $compare_base_db_dir
|
|
|
|
for tag in "${tags[@]}"
|
|
do
|
|
echo == Opening DB from "$tag" using debug build of $checkout_flag ...
|
|
compare_db $test_dir/$tag $compare_base_db_dir db_dump.txt
|
|
done
|
|
|
|
echo == Building $checkout_flag release
|
|
git checkout $checkout_flag
|
|
make release
|
|
for tag in "${need_release_tags[@]}"
|
|
do
|
|
echo == Opening DB generated by "$tag" using release build of $checkout_flag ...
|
|
compare_db $test_dir/$tag $compare_base_db_dir db_dump.txt
|
|
done
|
|
|
|
for tag in "${forward_compatible_tags[@]}"
|
|
do
|
|
echo == Build "$tag" and try to open DB generated using $checkout_flag...
|
|
git checkout $tag
|
|
make clean
|
|
make ldb -j32
|
|
compare_db $test_dir/$tag $compare_base_db_dir forward_${tag}_dump.txt
|
|
done
|
|
|
|
echo ==== Compatibility Test PASSED ====
|