From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpng3.m.smailru.net (smtpng3.m.smailru.net [94.100.177.149]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 35B4B469719 for ; Fri, 14 Feb 2020 22:39:53 +0300 (MSK) From: Ilya Kosarev Date: Fri, 14 Feb 2020 22:39:42 +0300 Message-Id: Subject: [Tarantool-patches] [PATCH v4 0/4] Safe truncation and deletion List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: tarantool-patches@dev.tarantool.org Cc: v.shpilevoy@tarantool.org space:truncate() and space:delete() could fail on memory allocations when reaching memtx_memory limit. As far as it is quite an ill behaviour, it is fixed in this patchset through memtx quota strictness adjustment. Now it can be overused if needed. Also possible bps_tree_create_leaf NULL dereference issue is fixed. Branch: https://github.com/tarantool/tarantool/tree/i.kosarev/gh-3807-safe-alloc-on-truncation Issue: https://github.com/tarantool/tarantool/issues/3807 Changes in v2: Approach changed completely: now we are not trying to allocate service tuples in some safe way, but increasing memtx quota so that space:truncate() and space:delete() won't fail on allocation. Changes in v3: Now we are not increasing memtx quota. Instead we just set a flag to allow quota overuse for space:truncate() and space:delete(). Changes in v4: improved quota on/off flag style took into account fail cases for box_upsert in space_truncate now we are switching the quota off for deletion only in case there is OutOfMemory error in diag removed extra checks added tests Ilya Kosarev (4): small: bump small version b-tree: return NULL on matras_alloc fail memtx: allow quota overuse for truncation and deletion test: add tests for truncation and deletion src/box/box.cc | 27 ++++++- src/box/memtx_space.c | 33 ++++++-- src/lib/core/errinj.h | 1 + src/lib/salad/bps_tree.h | 22 +++++- src/lib/small | 2 +- test/box/errinj.result | 1 + test/engine/engine.cfg | 6 ++ test/engine/low_memory.lua | 8 ++ test/engine/stress_delete.result | 111 +++++++++++++++++++++++++++ test/engine/stress_delete.test.lua | 55 +++++++++++++ test/engine/stress_truncate.result | 103 +++++++++++++++++++++++++ test/engine/stress_truncate.test.lua | 52 +++++++++++++ 12 files changed, 408 insertions(+), 13 deletions(-) create mode 100644 test/engine/low_memory.lua create mode 100644 test/engine/stress_delete.result create mode 100644 test/engine/stress_delete.test.lua create mode 100644 test/engine/stress_truncate.result create mode 100644 test/engine/stress_truncate.test.lua -- 2.17.1