[Tarantool-patches] [PATCH rfc v2] memtx: fix out of memory handling for rtree

Konstantin Osipov kostja.osipov at gmail.com
Mon Dec 9 17:07:28 MSK 2019


* Olga Arkhangelskaia <arkholga at tarantool.org> [19/12/09 16:49]:
> When tarantool tries to recover rtree from a snapshot and memtx_memory value is
> lower than it has been when the snapshot was created, server suffers from
> segmentation fault. This happens because there is no out of memory error
> handling in rtree lib. In another words, we do not check the result of
> malloc operation.
> To prevent this behaviour we simply reserve memory before replace operation for
> rtree. And if there is not enough memory to be reserved - server will fail
> gently with the "Failed to allocate" error message.

It seems you're on track. You don't explain, however, why you had
to add an additional reserve() which is on the side of the main
execution flow (which is box_process1): during snapshot recovery 
the secondary keys are built in batches, not using box_process1,
so the check sitting on the main execution track is not invoked.

This begs the question: shouldn't you add the check to
memtx_*_build_next() instead?


-- 
Konstantin Osipov, Moscow, Russia


More information about the Tarantool-patches mailing list