#!/bin/bash

# Test recovery after many nodes failed at the same time

. ./common

for i in `seq 0 7`; do
    _start_sheep $i
done

_wait_for_sheep 8

_cluster_format

$DOG vdi create test 100M
# create 25 objects
for i in `seq 0 24`; do
    echo $i | $DOG vdi write test $((i * 4 * 1024 * 1024)) 512
done

$DOG vdi read test | md5sum

# kill 7 nodes without waiting to finish recovery
for i in 7 6 5; do
    _kill_sheep $i
done
# this is necessary to avoid network partition detection
nr=5
for i in 4 3 2 1; do
    _wait_for_sheep $nr $i
    _kill_sheep $i
    nr=$(($nr - 1))
done

# make sheep 0 master to avoid master transfer
_wait_for_sheep 1
_kill_sheep 0

sleep 1

# start master first
_start_sheep 0
_wait_for_sheep 1
for i in `seq 1 7`; do
    _start_sheep $i
done

_wait_for_sheep_recovery 0

ls $STORE/*/obj/807c2b2500000000 | _filter_store | sort
for i in `seq 0 24`; do
    ls $STORE/*/obj/007c2b25000000`printf "%02x" $i` | _filter_store | sort
done
ls $STORE/*/obj/.stale | _filter_store | sort

$DOG vdi read test | md5sum
