[tarantool-patches] [PATCH v3 04/14] ddl: place alter structures onto a txn memory region
Georgy Kirichenko
georgy at tarantool.org
Sun Jun 9 23:44:33 MSK 2019
As alter schema triggers lifecycle is bound with a transaction
so corresponding structures should be placed onto a txn memory
region instead of a fiber gc space.
Prerequisites: #1254
---
src/box/alter.cc | 8 ++++----
src/box/vinyl.c | 10 ++++------
2 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/src/box/alter.cc b/src/box/alter.cc
index c4a1c52a9..671209b51 100644
--- a/src/box/alter.cc
+++ b/src/box/alter.cc
@@ -668,7 +668,7 @@ public:
void *operator new(size_t size)
{
- return region_aligned_calloc_xc(&fiber()->gc, size,
+ return region_aligned_calloc_xc(&in_txn()->region, size,
alignof(uint64_t));
}
void operator delete(void * /* ptr */) {}
@@ -682,7 +682,7 @@ static struct trigger *
txn_alter_trigger_new(trigger_f run, void *data)
{
struct trigger *trigger = (struct trigger *)
- region_calloc_object_xc(&fiber()->gc, struct trigger);
+ txn_alloc(in_txn(), sizeof(struct trigger));
trigger->run = run;
trigger->data = data;
trigger->destroy = NULL;
@@ -718,7 +718,7 @@ static struct alter_space *
alter_space_new(struct space *old_space)
{
struct alter_space *alter =
- region_calloc_object_xc(&fiber()->gc, struct alter_space);
+ region_calloc_object_xc(&in_txn()->region, struct alter_space);
rlist_create(&alter->ops);
alter->old_space = old_space;
alter->space_def = space_def_dup_xc(alter->old_space->def);
@@ -3246,7 +3246,7 @@ on_replace_dd_sequence(struct trigger * /* trigger */, void *event)
struct tuple *new_tuple = stmt->new_tuple;
struct alter_sequence *alter =
- region_calloc_object_xc(&fiber()->gc, struct alter_sequence);
+ region_calloc_object_xc(&txn->region, struct alter_sequence);
struct sequence_def *new_def = NULL;
auto def_guard = make_scoped_guard([=] { free(new_def); });
diff --git a/src/box/vinyl.c b/src/box/vinyl.c
index 8286fed7c..e37631064 100644
--- a/src/box/vinyl.c
+++ b/src/box/vinyl.c
@@ -4618,19 +4618,17 @@ vy_deferred_delete_on_replace(struct trigger *trigger, void *event)
* which will propagate the WAL row LSN to
* the LSM tree.
*/
- struct trigger *on_commit = region_alloc(&fiber()->gc,
- sizeof(*on_commit));
+ struct trigger *on_commit = txn_alloc(txn, sizeof(*on_commit));
if (on_commit == NULL) {
diag_set(OutOfMemory, sizeof(*on_commit),
- "region", "struct trigger");
+ "txn region", "struct trigger");
rc = -1;
break;
}
- struct trigger *on_rollback = region_alloc(&fiber()->gc,
- sizeof(*on_commit));
+ struct trigger *on_rollback = txn_alloc(txn, sizeof(*on_commit));
if (on_rollback == NULL) {
diag_set(OutOfMemory, sizeof(*on_commit),
- "region", "struct trigger");
+ "txn region", "struct trigger");
rc = -1;
break;
}
--
2.21.0
More information about the Tarantool-patches
mailing list