From: Roman Khabibov <roman.habibov1@yandex.ru>
To: tarantool-patches@freelists.org
Cc: v.shpilevoy@tarantool.org
Subject: [tarantool-patches] [PATCH] box: add a method to check if transaction is open
Date: Fri, 7 Sep 2018 04:00:19 +0300 [thread overview]
Message-ID: <1536282019-17978-1-git-send-email-roman.habibov1@yandex.ru> (raw)
Add method box.is_in_txn()
Closes: #3518.
---
Branch: https://github.com/tarantool/tarantool/tree/romankhabibov/gh-3518-check-if-txn
Issue: https://github.com/tarantool/tarantool/issues/3518
| 1 +
src/box/lua/schema.lua | 6 ++++++
src/box/txn.c | 6 ++++++
src/box/txn.h | 8 ++++++++
test/box/misc.result | 1 +
test/box/transaction.result | 18 ++++++++++++++++++
test/box/transaction.test.lua | 8 ++++++++
test/engine/savepoint.result | 12 ++++++------
8 files changed, 54 insertions(+), 6 deletions(-)
--git a/extra/exports b/extra/exports
index 319d2c4..2f408d9 100644
--- a/extra/exports
+++ b/extra/exports
@@ -136,6 +136,7 @@ luaT_state
luaT_tolstring
box_txn
box_txn_begin
+box_is_in_txn
box_txn_commit
box_txn_savepoint
box_txn_rollback
diff --git a/src/box/lua/schema.lua b/src/box/lua/schema.lua
index 74b7064..e1526ac 100644
--- a/src/box/lua/schema.lua
+++ b/src/box/lua/schema.lua
@@ -68,6 +68,8 @@ ffi.cdef[[
box_txn_id();
int
box_txn_begin();
+ bool
+ box_is_in_txn();
/** \endcond public */
typedef struct txn_savepoint box_txn_savepoint_t;
@@ -321,6 +323,10 @@ box.begin = function()
end
end
+box.is_in_txn = function()
+ return { builtin.box_is_in_txn() }
+end
+
box.savepoint = function()
local csavepoint = builtin.box_txn_savepoint()
if csavepoint == nil then
diff --git a/src/box/txn.c b/src/box/txn.c
index 617ceb8..51b50bf 100644
--- a/src/box/txn.c
+++ b/src/box/txn.c
@@ -447,6 +447,12 @@ box_txn_begin()
return 0;
}
+bool
+box_is_in_txn()
+{
+ return box_txn();
+}
+
int
box_txn_commit()
{
diff --git a/src/box/txn.h b/src/box/txn.h
index e74c14d..e587129 100644
--- a/src/box/txn.h
+++ b/src/box/txn.h
@@ -382,6 +382,14 @@ API_EXPORT int
box_txn_commit(void);
/**
+ * Check if transaction opened in the current fiber.
+ * @retval true Transaction is opened.
+ * @retval false Transaction is closed.
+ */
+API_EXPORT bool
+box_is_in_txn(void);
+
+/**
* Rollback the current transaction.
* May fail if called from a nested
* statement.
diff --git a/test/box/misc.result b/test/box/misc.result
index d9f8d4e..325af3b 100644
--- a/test/box/misc.result
+++ b/test/box/misc.result
@@ -67,6 +67,7 @@ t
- index
- info
- internal
+ - is_in_txn
- on_commit
- on_rollback
- once
diff --git a/test/box/transaction.result b/test/box/transaction.result
index e024084..fb7ebbd 100644
--- a/test/box/transaction.result
+++ b/test/box/transaction.result
@@ -12,6 +12,24 @@ test_run:cmd("setopt delimiter ';'")
box.begin() box.commit();
---
...
+-- gh-3518 no active transaction - false
+box.is_in_txn();
+---
+- - false
+...
+-- start transaction
+box.begin();
+---
+...
+-- active transaction - true
+box.is_in_txn();
+---
+- - true
+...
+-- close transaction
+box.commit();
+---
+...
-- double begin
box.begin() box.begin();
---
diff --git a/test/box/transaction.test.lua b/test/box/transaction.test.lua
index e1d258e..79a2c0b 100644
--- a/test/box/transaction.test.lua
+++ b/test/box/transaction.test.lua
@@ -3,6 +3,14 @@ test_run = env.new()
test_run:cmd("setopt delimiter ';'")
-- empty transaction - ok
box.begin() box.commit();
+-- gh-3518 no active transaction - false
+box.is_in_txn();
+-- start transaction
+box.begin();
+-- active transaction - true
+box.is_in_txn();
+-- close transaction
+box.commit();
-- double begin
box.begin() box.begin();
-- no active transaction since exception rolled it back
diff --git a/test/engine/savepoint.result b/test/engine/savepoint.result
index a62a2e1..00d281b 100644
--- a/test/engine/savepoint.result
+++ b/test/engine/savepoint.result
@@ -14,7 +14,7 @@ s1 = box.savepoint()
...
box.rollback_to_savepoint(s1)
---
-- error: 'builtin/box/schema.lua:340: Usage: box.rollback_to_savepoint(savepoint)'
+- error: 'builtin/box/schema.lua:346: Usage: box.rollback_to_savepoint(savepoint)'
...
box.begin() s1 = box.savepoint()
---
@@ -323,27 +323,27 @@ test_run:cmd("setopt delimiter ''");
ok1, errmsg1
---
- false
-- 'builtin/box/schema.lua:340: Usage: box.rollback_to_savepoint(savepoint)'
+- 'builtin/box/schema.lua:346: Usage: box.rollback_to_savepoint(savepoint)'
...
ok2, errmsg2
---
- false
-- 'builtin/box/schema.lua:340: Usage: box.rollback_to_savepoint(savepoint)'
+- 'builtin/box/schema.lua:346: Usage: box.rollback_to_savepoint(savepoint)'
...
ok3, errmsg3
---
- false
-- 'builtin/box/schema.lua:340: Usage: box.rollback_to_savepoint(savepoint)'
+- 'builtin/box/schema.lua:346: Usage: box.rollback_to_savepoint(savepoint)'
...
ok4, errmsg4
---
- false
-- 'builtin/box/schema.lua:340: Usage: box.rollback_to_savepoint(savepoint)'
+- 'builtin/box/schema.lua:346: Usage: box.rollback_to_savepoint(savepoint)'
...
ok5, errmsg5
---
- false
-- 'builtin/box/schema.lua:340: Usage: box.rollback_to_savepoint(savepoint)'
+- 'builtin/box/schema.lua:346: Usage: box.rollback_to_savepoint(savepoint)'
...
s:select{}
---
--
2.7.4
next reply other threads:[~2018-09-07 1:00 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-07 1:00 Roman Khabibov [this message]
2018-09-10 6:21 ` [tarantool-patches] " Kirill Shcherbatov
2018-09-11 0:23 ` roman.habibov1
2018-09-11 0:25 ` roman.habibov1
2018-09-11 11:51 ` Kirill Shcherbatov
2018-09-19 13:38 ` Alexander Turenko
2018-09-21 0:54 ` [tarantool-patches] Re: [PATCH 1/1] " roman.habibov1
2018-09-21 2:41 ` Alexander Turenko
2018-09-21 22:29 ` roman.habibov1
2018-09-22 1:00 ` Alexander Turenko
2018-09-23 10:11 ` Vladislav Shpilevoy
2018-09-21 0:54 ` [tarantool-patches] Re: [PATCH 2/2] test: add output filtering feature roman.habibov1
2018-09-21 2:53 ` Alexander Turenko
2018-09-21 22:25 ` roman.habibov1
2018-09-24 8:38 ` [tarantool-patches] Re: [PATCH] box: add a method to check if transaction is open Kirill Yukhin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1536282019-17978-1-git-send-email-roman.habibov1@yandex.ru \
--to=roman.habibov1@yandex.ru \
--cc=tarantool-patches@freelists.org \
--cc=v.shpilevoy@tarantool.org \
--subject='Re: [tarantool-patches] [PATCH] box: add a method to check if transaction is open' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox