MonetDB: Dec2023 - Fixed some data races.
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...
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...
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.
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.
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
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.
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.
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