Changeset: cf80e6fefe3c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cf80e6fefe3c
Modified Files:
sql/server/sql_mvc.c
sql/storage/store.c
Branch: HTM
Log Message:
Make sure the store gets unlocked errors
Also make sure the original mvc_commit has one continiuous lock, while the
mvc_precommit unlocks it at the end. In line of that mvc_persistcommmit lock
the store in the very beginning.
diffs (59 lines):
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -285,12 +285,14 @@ mvc_commit(mvc *m, int chain, char *name
int ok = SQL_OK;//, wait = 0;
if ((ok = mvc_commit_prepare(m, chain, name, tr)) != SQL_OK) {
+ store_unlock();
return 0;
}
if (sql_trans_validate(tr)) {
/* execute commit */
if ((ok = sql_trans_commit(tr)) != SQL_OK) {
+ store_unlock();
char *msg = sql_message("40000!COMMIT: transaction
commit failed (perhaps your disk is full?) exiting (kernel error: %s)",
GDKerrbuf);
GDKfatal("%s", msg);
_DELETE(msg);
@@ -313,11 +315,13 @@ mvc_precommit(mvc *m, int chain, char *n
int ok = SQL_OK;//, wait = 0;
if ((ok = mvc_commit_prepare(m, chain, name, tr)) != SQL_OK) {
+ store_unlock();
return 0;
}
if (sql_trans_validate(tr)) {
if ((ok = sql_trans_precommit(tr)) != SQL_OK) {
+ store_unlock();
char *msg = sql_message("40000!COMMIT: transaction
commit failed (perhaps your disk is full?) exiting (kernel error: %s)",
GDKerrbuf);
GDKfatal("%s", msg);
_DELETE(msg);
@@ -329,6 +333,7 @@ mvc_precommit(mvc *m, int chain, char *n
return NULL;
}
+ store_unlock();
return tr;
}
@@ -336,6 +341,7 @@ int
mvc_persistcommit(mvc *m, int chain, char *name, sql_trans *tr) {
int ok = SQL_OK;//, wait = 0;
+ store_lock();
if ((ok = sql_trans_persistcommit(tr)) != SQL_OK) {
char *msg = sql_message("40000!COMMIT: transaction commit
failed (perhaps your disk is full?) exiting (kernel error: %s)", GDKerrbuf);
GDKfatal("%s", msg);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3257,6 +3257,7 @@ sql_trans_precommit(sql_trans *tr)
{
int ok = LOG_OK;
+ store_lock();
/* snap shots should be saved first */
if (tr->parent == gtrans) {
if (bs_debug) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list