Подскажите пожалуйста где можно почитать информацию об тестировании целостности данных и отказоустойчивости системы для клиент серверного приложения написанного с помощью Java и использующее mySQL сервер.
Нужно сделать такие тесты при котором можно бы было симулировать падение сервера при операциях взаимодействующих с базой данных и которые гарантировали бы правильное поведение сервера при подобных ситуациях(отсутствие в базе данных не валидных объектов, которые были записаны в БД частично), то есть нужно протестировать правильность всех транзакций.
Не знаю как можно сделать подобные падение сервера в просчитанный момент времени(выполнение какого-то метода).
все что вам нужно это транзакции на стороне сервера, все изменения сделаны внутри одной транзакции приложения приходят одной транзакцией в субд, если что-то пойдет не так субд применит всю транзакцию или же не применит ничего. гуглить: java transaction management
p.s. транзакции на стороне сервера могут быть вложенными поэтому не всегда одна транзакция приложения = одна транзакция на стороне базы данных
У нас некоторые данные собираются порциями по частям, мы столкнулись с проблемой ломаной бд после ситуаций падения сервера, сейчас все тщательно перебирается и все такие записи будут отправляться в БД транзакцией, но нам нужны(я не знаю зачем) тесты, которые бы подтверждали правильность всех этих транзакций, вот и вопрос, а как так можно автоматизировать этот самый краш сервера в нужны момент времени.
Я неправильно сделал, что акцентировал внимание на проблеме БД, проблема в нашем сервере, нужно что бы он мог подняться, вычитав данные из бд, даже если предыдущий его запуск завершился падением во время какой либо операции.
Alexey: "а как так можно автоматизировать этот самый краш сервера в нужны момент времени." На этот вопрос Вам смогут ответить только разработчики серверной части вашего приложения. Потому что вариантов как это сделать может быть множество: подсунуть динамически неверные настройки, сделать входящие данные невалидными так чтобы при записи часть проходила валидацию и писалась, другая часть падала. В общем и целом этот вопрос сводится к вопросу как кинуть Exception в рантайме и чтобы транзакция по этому эксепшену откатилась.
Alexey:
снизить вероятность падения субд к 0 = перейти на нормальную субд
Сделать процедуру, в которой raw data будет удаляться только после ее успешного коммита
или писать raw data в ту же бд без индексов, а потом разбирать в таблицы и удалять (помечать на удаление) после коммита
отсутствие в базе данных не валидных объектов, которые были записаны в БД частично
это возможно только тогда, когда одну запись Вы делаете в несколько транзакций. Иначе - флаг завершения транзакции не поставится (а ставится он после того, как все поля уже на местах) и записи в БД не будет. dev.mysql.com/doc/refman/5.7/en/commit.html