diff --git a/src/box/alter.cc b/src/box/alter.cc index 11560acfdc4058aac4fcfe364cdc98c2758453cd..9b29fac379c5ce16e4d08ecf55ff2b692892a396 100644 --- a/src/box/alter.cc +++ b/src/box/alter.cc @@ -1400,20 +1400,26 @@ on_replace_dd_truncate(struct trigger * /* trigger */, void *event) struct tuple *old_tuple = stmt->old_tuple; struct tuple *new_tuple = stmt->new_tuple; - if (old_tuple == NULL || new_tuple == NULL) { - /* Space create or drop. */ + if (new_tuple == NULL) { + /* Space drop - nothing to do. */ return; } - /* - * Truncate counter is updated - truncate the space. - */ uint32_t space_id = tuple_field_u32_xc(new_tuple, BOX_TRUNCATE_FIELD_SPACE_ID); uint64_t truncate_count = tuple_field_u64_xc(new_tuple, BOX_TRUNCATE_FIELD_COUNT); struct space *old_space = space_cache_find(space_id); + if (old_tuple == NULL) { + /* Space create - initialize truncate_count. */ + old_space->truncate_count = truncate_count; + return; + } + + /* + * Truncate counter is updated - truncate the space. + */ struct truncate_space *truncate = region_calloc_object_xc(&fiber()->gc, struct truncate_space); diff --git a/test/engine/truncate.result b/test/engine/truncate.result index 50bc706f89762a0774ff7e9d195b68cc496a5524..91153e2f17ea12f01d9f96868a5130a18b719a61 100644 --- a/test/engine/truncate.result +++ b/test/engine/truncate.result @@ -248,6 +248,9 @@ box.snapshot() --- - ok ... +_ = s1:insert{321, 123} +--- +... s2:truncate() --- ... @@ -291,10 +294,12 @@ s3 = box.space.test3 s1.index.i1:select() --- - - [123, 321] + - [321, 123] ... s1.index.i2:select() --- -- - [123, 321] +- - [321, 123] + - [123, 321] ... s2.index.i1:select() --- diff --git a/test/engine/truncate.test.lua b/test/engine/truncate.test.lua index 6dfd4b3ac829fe5001fd0a28d6ba0c301dc74df7..41f5694d19fbd5391674147736a5760398c65f61 100644 --- a/test/engine/truncate.test.lua +++ b/test/engine/truncate.test.lua @@ -112,6 +112,7 @@ _ = s2:insert{10, 30} _ = s2:insert{20, 20} _ = s2:insert{30, 10} box.snapshot() +_ = s1:insert{321, 123} s2:truncate() _ = s2:insert{456, 654} s3 = box.schema.create_space('test3', {engine = engine})