[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