10 подписчиков
Как сломать RocksDB (точнее приложение, которое его использует): определяем компаратор для ключей, который умеет крашить процесс. Просим добавить плохой ключ в базу. Всё упало. Фиксим бажину, которая пишет не те ключи не туда. Всё равно не можем запуститься, потому что после открытия базы оно видит, что есть ключи которые нужно дописать, сравнивает снова и падает. Из-за чего затем приходится удалить базу и начать заново.
Варианта сделать так, чтобы при невалидных ключах оно возвращало ошибку записи я не вижу, похоже что в колонки, где есть компараторы буду при инициализации записывать ключ с пустой строкой, а при сравнениях делать вид, что невалидные ключи равны пустой строке/любому другому невалидному значению.
Тогда значения будут к этой пустой строке и записываться. Я проверил, что даже если в WriteBatch удалять старый ключ и добавлять новый, но при это компаратор говорит что они равны — то он останется старым.
Ну и логировать это, плюс отправлять сигнал, что процесс нужно закрешить (уже вне сравнений), т.к. мы явно данные где-то теряем, так нельзя работать в любом случае.
#rocksdb
Около минуты
13 декабря 2022