sync_everything
}
+has_been_deleted() {
+ for already_deleted in "${deleted_vols[@]}";do
+ if [[ "$1" == "$already_deleted" ]];then return 0; fi
+ done
+ return 1
+}
+
sync_everything() {
for vol in "${vols[@]}";do
- for already_deleted in "${deleted_vols[@]}";do
- if [[ "$vol" == "$already_deleted" ]];then continue 2; fi
- done
+ if has_been_deleted "$vol";then continue; fi
git -C "$(vol_dir "$vol")" annex sync
done
}
fsck_everything() {
for vol in "${vols[@]}";do
- for already_deleted in "${deleted_vols[@]}";do
- if [[ "$vol" == "$already_deleted" ]];then continue 2; fi
- done
- git -C "$(vol_dir "$vol")" annex fsck
+ if has_been_deleted "$vol";then continue; fi
+ pushd "$(vol_dir "$vol")"
+ git annex fsck -- *-*
+ popd
done
}
delete_test_vol() {
- for already_deleted in "${deleted_vols[@]}";do
- if [[ "$1" == "$already_deleted" ]];then return; fi
- done
+ if has_been_deleted "$vol";then return; fi
d="$(vol_dir "$1")"
if [[ -d "$d/.git/annex/objects" ]];then
chmod -R +w "$d/.git/annex/objects"
# Find a not-yet-deleted volume (if there is one) and report the deleted volume as dead
for vol in "${vols[@]}";do
- for already_deleted in "${deleted_vols[@]}";do
- if [[ "$vol" == "$already_deleted" ]];then continue 2; fi
- done
+ if has_been_deleted "$vol";then continue; fi
git -C "$(vol_dir "$vol")" annex dead "$(vol_name "$1")"
break
done
echo "$f"
}
-choose_volumes() {
+some_random_volume_names() {
x=$(for vol in "${vols[@]}";do
vol_name "$vol"
done | shuf | head -n "$1" | tr \\n ,)
echo "${x%,}"
}
+a_random_volume_dir() {
+ while true;do
+ vol="${vols[$RANDOM % $num_vols]}"
+ if has_been_deleted "$vol";then continue; fi
+ vol_dir "$vol"
+ break
+ done
+}
+
MIN_REDUNDANCY=1
MIN_FILES=2 # If you only have one file in a group, you'd just make copies of it, no need for annex-ec
MIN_VOLUMES=$((MIN_REDUNDANCY + MIN_FILES))
for (( num_vols=MIN_VOLUMES; num_vols <= 10; num_vols++ ));do
- for (( redundancy=1; redundancy < num_vols-2; redundancy++ ));do
+ for (( redundancy=1; redundancy <= num_vols-2; redundancy++ ));do
max_files=$(( num_vols - redundancy ))
for (( num_files=MIN_FILES; num_files <= max_files; num_files++ ));do
make_test_vols "$num_vols"
done
sync_everything
sync_everything
- pushd "$(vol_dir "${vols[$RANDOM % $num_vols]}")"
- cmd=(annex-ec -r "$redundancy" -v "$(choose_volumes $((num_files+redundancy)))" "${files[@]}")
+ pushd "$(a_random_volume_dir)"
+ cmd=(annex-ec -r "$redundancy" -v "$(some_random_volume_names $((num_files+redundancy)))" "${files[@]}")
echo "In $PWD , running ${cmd[*]}" >&2
"${cmd[@]}"
popd
sync_everything
+ sync_everything
fsck_everything
+
delete_some_test_vols "$redundancy"
- # TODO: Recover
+ pushd "$(a_random_volume_dir)"
+ annex-ec-recover -- *-*
+ popd
+
sync_everything
- # fsck_everything # Skip this check until recovery is implemented
+ sync_everything
+ fsck_everything
delete_all_test_vols
done
done