MonetDB: Dec2023 - Fixed some data races.

2024-03-25 Thread Sjoerd Mullender via checkin-list
Changeset: 55d7465116d7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/55d7465116d7
Modified Files:
gdk/gdk_logger.c
Branch: Dec2023
Log Message:

Fixed some data races.


diffs (47 lines):

diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1301,8 +1301,9 @@ log_read_transaction(logger *lg, uint32_
 * return GDK_FAIL */
switch (l.flag) {
case LOG_START:
-   if (l.id > lg->tid) /* TODO: check that this can 
only happen during initialisation */
-   lg->tid = l.id;
+   assert(!lg->flushing || l.id <= lg->tid);
+   if (!lg->flushing && l.id > lg->tid)
+   lg->tid = l.id; /* should only happen during 
initialization */
if ((tr = tr_create(tr, l.id)) == NULL) {
TRC_CRITICAL(GDK, "memory allocation failed\n");
err = LOG_ERR;
@@ -1752,9 +1753,11 @@ cleanup_and_swap(logger *lg, int *r, con
strconcat_len(bak, sizeof(bak), lg->fn, "_catalog_lid", NULL);
if (BBPrename(lg->catalog_lid, bak) < 0)
GDKclrerr();
+   rotation_lock(lg);
for (logged_range *p = lg->pending; p; p = p->next) {
p->cnt -= cleanup;
}
+   rotation_unlock(lg);
return rcnt;
 }
 
@@ -2558,9 +2561,11 @@ log_next_logfile(logger *lg, ulng ts)
int m = (ATOMIC_GET(&GDKdebug) & FORCEMITOMASK) ? 1000 : 100;
if (!lg->pending || !lg->pending->next)
return NULL;
+   rotation_lock(lg);
if (ATOMIC_GET(&lg->pending->refcount) == 0 && lg->pending != 
lg->current && lg->pending != lg->flush_ranges &&
(ulng) ATOMIC_GET(&lg->pending->last_ts) == (ulng) 
ATOMIC_GET(&lg->pending->flushed_ts) &&
(ulng) ATOMIC_GET(&lg->pending->flushed_ts) <= ts) {
+   rotation_unlock(lg);
logged_range *p = lg->pending;
for (int i = 1;
 i < m && ATOMIC_GET(&p->refcount) == 0 && p->next && 
p->next != lg->current &&
@@ -2569,6 +2574,7 @@ log_next_logfile(logger *lg, ulng ts)
p = p->next;
return p;
}
+   rotation_unlock(lg);
return NULL;
 }
 
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: sch_rename_more_permissive - Create branch sch_rename_m...

2024-03-25 Thread Lucas Pereira via checkin-list
Changeset: 4d98a63a2ce9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4d98a63a2ce9
Branch: sch_rename_more_permissive
Log Message:

Create branch sch_rename_more_permissive

___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: sch_rename_more_permissive - Allow schema renaming if s...

2024-03-25 Thread Lucas Pereira via checkin-list
Changeset: 5108daa966aa for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/5108daa966aa
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_cat.c
sql/server/rel_schema.c
sql/server/sql_mvc.c
sql/storage/bat/bat_table.c
sql/storage/sql_storage.h
sql/storage/store.c
sql/storage/store_dependency.c
Branch: sch_rename_more_permissive
Log Message:

Allow schema renaming if schema has only implicit dependencies. WIP


diffs (truncated from 467 to 300 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -5589,7 +5589,7 @@ cascade_ukey(backend *be, stmt **updates
 {
/* now iterate over all keys */
sql_trans *tr = be->mvc->session->tr;
-   list *keys = sql_trans_get_dependencies(tr, k->base.id, 
FKEY_DEPENDENCY, NULL);
+   list *keys = sql_trans_get_dependents(tr, k->base.id, FKEY_DEPENDENCY, 
NULL);
if (keys) {
for (node *n = keys->h; n; n = n->next->next) {
sqlid fkey_id = *(sqlid*)n->data;
@@ -6166,7 +6166,7 @@ sql_delete_ukey(backend *be, stmt *utids
sql_subtype *lng = sql_bind_localtype("lng");
sql_subtype *bt = sql_bind_localtype("bit");
sql_trans *tr = be->mvc->session->tr;
-   list *keys = sql_trans_get_dependencies(tr, k->base.id, 
FKEY_DEPENDENCY, NULL);
+   list *keys = sql_trans_get_dependents(tr, k->base.id, FKEY_DEPENDENCY, 
NULL);
 
if (keys) {
for (node *n = keys->h; n; n = n->next->next) {
@@ -6350,7 +6350,7 @@ check_for_foreign_key_references(mvc *sq
sql_key *k = n->data;
 
if (k->type == ukey || k->type == pkey) {
-   list *keys = sql_trans_get_dependencies(tr, 
k->base.id, FKEY_DEPENDENCY, NULL);
+   list *keys = sql_trans_get_dependents(tr, 
k->base.id, FKEY_DEPENDENCY, NULL);
 
if (keys) {
for (node *nn = keys->h; nn; nn = 
nn->next->next) {
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -38,12 +38,12 @@
 #include "orderidx.h"
 #include "sql_user.h"
 
-#define initcontext() \
-   if ((msg = getSQLContext(cntxt, mb, &sql, NULL)) != NULL)\
-   return msg;\
-   if ((msg = checkSQLContext(cntxt)) != NULL)\
-   return msg;\
-   if (store_readonly(sql->session->tr->store))\
+#define initcontext()  
\
+   if ((msg = getSQLContext(cntxt, mb, &sql, NULL)) != NULL)   
\
+   return msg; 
\
+   if ((msg = checkSQLContext(cntxt)) != NULL) 
\
+   return msg; 
\
+   if (store_readonly(sql->session->tr->store))
\
throw(SQL,"sql.cat",SQLSTATE(25006) "Schema statements cannot 
be executed on a readonly database.");
 
 static char *
@@ -2125,34 +2125,50 @@ SQLrename_schema(Client cntxt, MalBlkPtr
sql_schema *s;
 
initcontext();
-   sql_trans *tr = sql->session->tr;
sql_schema *cur = cur_schema(sql);
 
if (!(s = mvc_bind_schema(sql, old_name)))
-   throw(SQL, "sql.rename_schema", SQLSTATE(42S02) "ALTER SCHEMA: 
no such schema '%s'", old_name);
+   throw(SQL, "sql.rename_schema", SQLSTATE(42S02)
+ "ALTER SCHEMA: no such schema '%s'", old_name);
+
if (!mvc_schema_privs(sql, s))
-   throw(SQL, "sql.rename_schema", SQLSTATE(42000) "ALTER SCHEMA: 
access denied for %s to schema '%s'", get_string_global_var(sql, 
"current_user"), old_name);
+   throw(SQL, "sql.rename_schema", SQLSTATE(42000)
+ "ALTER SCHEMA: access denied for %s to schema '%s'",
+ get_string_global_var(sql, "current_user"), old_name);
+
if (s->system)
-   throw(SQL, "sql.rename_schema", SQLSTATE(3F000) "ALTER SCHEMA: 
cannot rename a system schema");
-   if (os_size(s->tables, tr) || os_size(s->types, tr) || 
os_size(s->funcs, tr) || os_size(s->seqs, tr))
-   throw(SQL, "sql.rename_schema", SQLSTATE(2BM37) "ALTER SCHEMA: 
unable to rename schema '%s' (there are database objects which depend on it)", 
old_name);
+   throw(SQL, "sql.rename_schema", SQLSTATE(3F000)
+ "ALTER SCHEMA: cannot rename a system schema");
+
if (st

MonetDB: Dec2023 - We can't transfer views, so make a copy.

2024-03-25 Thread Sjoerd Mullender via checkin-list
Changeset: 3329ce0f3084 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/3329ce0f3084
Modified Files:
sql/storage/bat/bat_storage.c
Branch: Dec2023
Log Message:

We can't transfer views, so make a copy.


diffs (131 lines):

diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -66,11 +66,20 @@ static void merge_delta( sql_delta *obat
((!seg->deleted && VALID_4_READ(seg->ts, tr)) || \
 (seg->deleted && OLD_VALID_4_READ(seg->ts, seg->oldts, tr)))
 
-static inline void
+static inline BAT *
 transfer_to_systrans(BAT *b)
 {
/* transfer a BAT from the TRANSIENT farm to the SYSTRANS farm */
MT_lock_set(&b->theaplock);
+   if (VIEWtparent(b) || VIEWvtparent(b)) {
+   MT_lock_unset(&b->theaplock);
+   BAT *bn = COLcopy(b, b->ttype, true, TRANSIENT);
+   BBPreclaim(b);
+   b = bn;
+   if (b == NULL)
+   return NULL;
+   MT_lock_set(&b->theaplock);
+   }
if (b->theap->farmid == TRANSIENT ||
(b->tvheap && b->tvheap->farmid == TRANSIENT)) {
QryCtx *qc = MT_thread_get_qry_ctx();
@@ -87,6 +96,7 @@ transfer_to_systrans(BAT *b)
}
}
MT_lock_unset(&b->theaplock);
+   return b;
 }
 
 static void
@@ -1160,8 +1170,8 @@ dict_append_bat(sql_trans *tr, sql_delta
}
if (cs->bid && !new)
temp_destroy(cs->bid);
+   n = transfer_to_systrans(n);
bat_set_access(n, BAT_READ);
-   transfer_to_systrans(n);
cs->bid = temp_create(n);
bat_destroy(n);
if (cs->ebid && !new)
@@ -1203,8 +1213,8 @@ dict_append_bat(sql_trans *tr, sql_delta
}
if (cs->bid && !new)
temp_destroy(cs->bid);
+   n = transfer_to_systrans(n);
bat_set_access(n, BAT_READ);
-   transfer_to_systrans(n);
cs->bid = temp_create(n);
bat_destroy(n);
cs->cleared = true;
@@ -1256,8 +1266,8 @@ for_append_bat(column_storage *cs, BAT *
return NULL;
if (cs->bid)
temp_destroy(cs->bid);
+   n = transfer_to_systrans(n);
bat_set_access(n, BAT_READ);
-   transfer_to_systrans(n);
cs->bid = temp_create(n);
cs->ucnt = 0;
if (cs->uibid)
@@ -1511,8 +1521,8 @@ cs_update_bat( sql_trans *tr, sql_delta 
} else {
temp_destroy(cs->uibid);
temp_destroy(cs->uvbid);
-   transfer_to_systrans(ui);
-   transfer_to_systrans(uv);
+   ui = transfer_to_systrans(ui);
+   uv = transfer_to_systrans(uv);
cs->uibid = temp_create(ui);
cs->uvbid = temp_create(uv);
cs->ucnt = BATcount(ui);
@@ -1605,8 +1615,8 @@ cs_update_bat( sql_trans *tr, sql_delta 
if (res == LOG_OK) {
temp_destroy(cs->uibid);
temp_destroy(cs->uvbid);
-   
transfer_to_systrans(nui);
-   
transfer_to_systrans(nuv);
+   nui = 
transfer_to_systrans(nui);
+   nuv = 
transfer_to_systrans(nuv);
cs->uibid = 
temp_create(nui);
cs->uvbid = 
temp_create(nuv);
cs->ucnt = 
BATcount(nui);
@@ -1698,8 +1708,8 @@ dict_append_val(sql_trans *tr, sql_delta
}
if (cs->bid && !new)
temp_destroy(cs->bid);
+   n = transfer_to_systrans(n);
bat_set_access(n, BAT_READ);
-   transfer_

MonetDB: Dec2023 - Add error checking.

2024-03-25 Thread Sjoerd Mullender via checkin-list
Changeset: f7c41636b127 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f7c41636b127
Modified Files:
sql/storage/bat/bat_storage.c
Branch: Dec2023
Log Message:

Add error checking.


diffs (130 lines):

diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1171,6 +1171,8 @@ dict_append_bat(sql_trans *tr, sql_delta
if (cs->bid && !new)
temp_destroy(cs->bid);
n = transfer_to_systrans(n);
+   if (n == NULL)
+   return NULL;
bat_set_access(n, BAT_READ);
cs->bid = temp_create(n);
bat_destroy(n);
@@ -1214,6 +1216,8 @@ dict_append_bat(sql_trans *tr, sql_delta
if (cs->bid && !new)
temp_destroy(cs->bid);
n = transfer_to_systrans(n);
+   if (n == NULL)
+   return NULL;
bat_set_access(n, BAT_READ);
cs->bid = temp_create(n);
bat_destroy(n);
@@ -1267,6 +1271,8 @@ for_append_bat(column_storage *cs, BAT *
if (cs->bid)
temp_destroy(cs->bid);
n = transfer_to_systrans(n);
+   if (n == NULL)
+   return NULL;
bat_set_access(n, BAT_READ);
cs->bid = temp_create(n);
cs->ucnt = 0;
@@ -1523,9 +1529,15 @@ cs_update_bat( sql_trans *tr, sql_delta 
temp_destroy(cs->uvbid);
ui = transfer_to_systrans(ui);
uv = transfer_to_systrans(uv);
-   cs->uibid = temp_create(ui);
-   cs->uvbid = temp_create(uv);
-   cs->ucnt = BATcount(ui);
+   if (ui == NULL || uv == NULL) {
+   BBPreclaim(ui);
+   BBPreclaim(uv);
+   res = LOG_ERR;
+   } else {
+   cs->uibid = temp_create(ui);
+   cs->uvbid = temp_create(uv);
+   cs->ucnt = BATcount(ui);
+   }
}
} else {
BAT *nui = NULL, *nuv = NULL;
@@ -1617,9 +1629,13 @@ cs_update_bat( sql_trans *tr, sql_delta 
temp_destroy(cs->uvbid);
nui = 
transfer_to_systrans(nui);
nuv = 
transfer_to_systrans(nuv);
-   cs->uibid = 
temp_create(nui);
-   cs->uvbid = 
temp_create(nuv);
-   cs->ucnt = 
BATcount(nui);
+   if (nui == NULL || nuv 
== NULL) {
+   res = LOG_ERR;
+   } else {
+   cs->uibid = 
temp_create(nui);
+   cs->uvbid = 
temp_create(nuv);
+   cs->ucnt = 
BATcount(nui);
+   }
}
}
bat_destroy(nui);
@@ -1700,6 +1716,7 @@ dict_append_val(sql_trans *tr, sql_delta
if (cs->ts != tr->tid) {
if ((*batp = tr_dup_delta(tr, bat)) == 
NULL) {
bat_destroy(n);
+   bat_destroy(u);
return NULL;
}
cs = &(*batp)->cs;
@@ -1709,6 +1726,10 @@ dict_append_val(sql_trans *tr, sql_delta
if (cs->bid && !new)
temp_destroy(cs->bid);
  

MonetDB: Dec2023 - add test for update/drop crash

2024-03-25 Thread Niels Nes via checkin-list
Changeset: a688b8e6858a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a688b8e6858a
Added Files:
sql/test/transactions/Tests/update_drop_crash.test
Branch: Dec2023
Log Message:

add test for update/drop crash


diffs (47 lines):

diff --git a/sql/test/transactions/Tests/update_drop_crash.test 
b/sql/test/transactions/Tests/update_drop_crash.test
new file mode 100644
--- /dev/null
+++ b/sql/test/transactions/Tests/update_drop_crash.test
@@ -0,0 +1,42 @@
+statement ok
+create table t1 (i int)
+
+statement ok
+insert into t1 values (1), (2), (3), (9)
+
+@connection(id=reader)
+statement ok
+start transaction
+
+@connection(id=update)
+statement ok
+update t1 set i=10 where i=2
+
+query T
+select count(*) from t1;
+
+4
+
+statement ok
+insert into t1 values (1), (2), (3), (9)
+
+@connection(id=update2)
+statement ok
+update t1 set i=11 where i=9
+
+query T
+select count(*) from t1;
+
+8
+
+@connection(id=drop)
+statement ok
+drop table t1
+
+query T
+select name from sys._tables where name = 't1'
+
+
+@connection(id=reader)
+statement ok
+commit
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: default - Merge with Dec2023 branch.

2024-03-25 Thread Sjoerd Mullender via checkin-list
Changeset: e820748f2614 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e820748f2614
Modified Files:
gdk/gdk_logger.c
sql/backends/monet5/sql.c
sql/server/rel_optimize_proj.c
sql/server/rel_optimize_sel.c
sql/server/rel_unnest.c
sql/server/sql_mvc.c
sql/storage/bat/bat_storage.c
sql/storage/store.c
Branch: default
Log Message:

Merge with Dec2023 branch.


diffs (truncated from 879 to 300 lines):

diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1303,8 +1303,9 @@ log_read_transaction(logger *lg, uint32_
 * return GDK_FAIL */
switch (l.flag) {
case LOG_START:
-   if (l.id > lg->tid) /* TODO: check that this can 
only happen during initialisation */
-   lg->tid = l.id;
+   assert(!lg->flushing || l.id <= lg->tid);
+   if (!lg->flushing && l.id > lg->tid)
+   lg->tid = l.id; /* should only happen during 
initialization */
if ((tr = tr_create(tr, l.id)) == NULL) {
TRC_CRITICAL(GDK, "memory allocation failed\n");
err = LOG_ERR;
@@ -1751,9 +1752,11 @@ cleanup_and_swap(logger *lg, int *r, con
strconcat_len(bak, sizeof(bak), lg->fn, "_catalog_lid", NULL);
if (BBPrename(lg->catalog_lid, bak) < 0)
GDKclrerr();
+   rotation_lock(lg);
for (logged_range *p = lg->pending; p; p = p->next) {
p->cnt -= cleanup;
}
+   rotation_unlock(lg);
return rcnt;
 }
 
@@ -2549,9 +2552,11 @@ log_next_logfile(logger *lg, ulng ts)
int m = (ATOMIC_GET(&GDKdebug) & FORCEMITOMASK) ? 1000 : 100;
if (!lg->pending || !lg->pending->next)
return NULL;
+   rotation_lock(lg);
if (ATOMIC_GET(&lg->pending->refcount) == 0 && lg->pending != 
lg->current && lg->pending != lg->flush_ranges &&
(ulng) ATOMIC_GET(&lg->pending->last_ts) == (ulng) 
ATOMIC_GET(&lg->pending->flushed_ts) &&
(ulng) ATOMIC_GET(&lg->pending->flushed_ts) <= ts) {
+   rotation_unlock(lg);
logged_range *p = lg->pending;
for (int i = 1;
 i < m && ATOMIC_GET(&p->refcount) == 0 && p->next && 
p->next != lg->current &&
@@ -2560,6 +2565,7 @@ log_next_logfile(logger *lg, ulng ts)
p = p->next;
return p;
}
+   rotation_unlock(lg);
return NULL;
 }
 
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -339,7 +339,7 @@ create_table_or_view(mvc *sql, char *sna
break;
}
osa = sql->sa;
-   sql->sa = sql->ta;
+   sql_allocator *nsa = sql->sa = sa_create(NULL);
/* first check default values */
for (n = ol_first_node(t->columns); n; n = n->next) {
sql_column *c = n->data;
@@ -349,13 +349,14 @@ create_table_or_view(mvc *sql, char *sna
const char *next_value_for = "next value for 
\"sys\".\"seq_";
sql_rel *r = NULL;
 
-   sql->sa = sql->ta;
+   sa_reset(nsa);
+   sql->sa = nsa;
r = rel_parse(sql, s, sa_message(sql->ta, "select %s;", 
c->def), m_deps);
if (!r || !is_project(r->op) || !r->exps || 
list_length(r->exps) != 1 ||
exp_check_type(sql, &c->type, r, 
r->exps->h->data, type_equal) == NULL) {
if (r)
rel_destroy(r);
-   sa_reset(sql->ta);
+   sa_destroy(nsa);
sql->sa = osa;
if (strlen(sql->errstr) > 6 && sql->errstr[5] 
== '!')
throw(SQL, "sql.catalog", "%s", 
sql->errstr);
@@ -367,12 +368,11 @@ create_table_or_view(mvc *sql, char *sna
if (strncmp(c->def, next_value_for, 
strlen(next_value_for)) != 0) {
list *blist = rel_dependencies(sql, r);
if (mvc_create_dependencies(sql, blist, 
nt->base.id, FUNC_DEPENDENCY)) {
-   rel_destroy(r);
-   sa_reset(sql->sa);
+   sa_destroy(nsa);
+   sql->sa = osa;
throw(SQL, "sql.catalog", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
}
}
-   rel_destroy(r);
sa_reset(sql->sa);
}
}

MonetDB: Dec2023 - Activate new test.

2024-03-25 Thread Sjoerd Mullender via checkin-list
Changeset: 219a579e1c04 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/219a579e1c04
Modified Files:
sql/test/transactions/Tests/All
Branch: Dec2023
Log Message:

Activate new test.


diffs (8 lines):

diff --git a/sql/test/transactions/Tests/All b/sql/test/transactions/Tests/All
--- a/sql/test/transactions/Tests/All
+++ b/sql/test/transactions/Tests/All
@@ -7,3 +7,4 @@ mergetable-deps-crash
 view-deps
 chaining
 truncate-insert-restart
+update_drop_crash
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org