Changeset: 4784d7f2b200 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/4784d7f2b200 Modified Files: sql/storage/bat/bat_storage.c sql/storage/objectset.c sql/storage/store.c testing/sqllogictest.py Branch: default Log Message:
Merge with Dec2023 branch. diffs (129 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 @@ -3492,7 +3492,6 @@ log_segments(sql_trans *tr, segments *se unlock_table(tr->store, id); if (seg->ts == tr->tid && seg->end-seg->start) { if (log_segment(tr, seg, id) != LOG_OK) { - unlock_table(tr->store, id); return LOG_ERR; } } diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c --- a/sql/storage/objectset.c +++ b/sql/storage/objectset.c @@ -55,6 +55,7 @@ typedef struct objectset { allocator *sa; destroy_fptr destroy; MT_RWLock rw_lock; /*readers-writer lock to protect the links (chains) in the objectversion chain.*/ + MT_Lock lock; /* global objectset lock for os_add/del */ versionhead *name_based_h; versionhead *name_based_t; versionhead *id_based_h; @@ -668,6 +669,7 @@ os_new(allocator *sa, destroy_fptr destr }; os->destroy = destroy; MT_rwlock_init(&os->rw_lock, "sa_readers_lock"); + MT_lock_init(&os->lock, "single_writer_lock"); } return os; @@ -685,6 +687,7 @@ os_destroy(objectset *os, sql_store stor { if (ATOMIC_DEC(&os->refcnt) > 0) return; + MT_lock_destroy(&os->lock); MT_rwlock_destroy(&os->rw_lock); versionhead* n=os->id_based_h; while(n) { @@ -927,9 +930,9 @@ os_add_(objectset *os, struct sql_trans int os_add(objectset *os, struct sql_trans *tr, const char *name, sql_base *b) { - store_lock(tr->store); + MT_lock_set(&os->lock); int res = os_add_(os, tr, name, b); - store_unlock(tr->store); + MT_lock_unset(&os->lock); return res; } @@ -1032,9 +1035,9 @@ os_del_(objectset *os, struct sql_trans int os_del(objectset *os, sql_trans *tr, const char *name, sql_base *b) { - store_lock(tr->store); + MT_lock_set(&os->lock); int res = os_del_(os, tr, name, b); - store_unlock(tr->store); + MT_lock_unset(&os->lock); return res; } diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -3816,8 +3816,6 @@ sql_trans_destroy(sql_trans *tr) sql_trans_rollback(tr, false); sqlstore *store = tr->store; os_destroy(tr->localtmps, store); - store_lock(store); - store_unlock(store); MT_lock_destroy(&tr->lock); if (!list_empty(tr->dropped)) list_destroy(tr->dropped); diff --git a/testing/sqllogictest.py b/testing/sqllogictest.py --- a/testing/sqllogictest.py +++ b/testing/sqllogictest.py @@ -656,10 +656,11 @@ class SQLLogic: result2 = result return result1, result2 - def initfile(self, f, defines): + def initfile(self, f, defines, run_until=None): self.name = f self.file = open(f, 'r', encoding='utf-8', errors='replace') self.line = 0 + self.run_until = run_until self.hashes = {} defs = [] if defines: @@ -674,6 +675,8 @@ class SQLLogic: def readline(self): self.line += 1 + if self.run_until and self.line >= self.run_until: + return '' origline = line = self.file.readline() for reg, val, key in self.defines: line = reg.sub(val.replace('\\', r'\\'), line) @@ -736,9 +739,9 @@ class SQLLogic: self.raise_error('invalid connection parameters definition, username or password missing!') return res - def parse(self, f, approve=None, verbose=False, defines=None): + def parse(self, f, approve=None, verbose=False, defines=None, run_until=None): self.approve = approve - self.initfile(f, defines) + self.initfile(f, defines, run_until=run_until) nthreads = None if self.language == 'sql': self.crs.execute(f'call sys.setsessiontimeout({self.timeout or 0})') @@ -945,6 +948,8 @@ if __name__ == '__main__': ' (can be repeated)') parser.add_argument('--alltests', action='store_true', help='also executed "knownfail" tests') + parser.add_argument('--run-until', action='store', type=int, + help='run tests until specified line') parser.add_argument('tests', nargs='*', help='tests to be run') opts = parser.parse_args() args = opts.tests @@ -959,7 +964,7 @@ if __name__ == '__main__': print('now testing {}'. format(test)) try: sql.parse(test, approve=opts.approve, verbose=opts.verbose, - defines=opts.define) + defines=opts.define, run_until=opts.run_until) except SQLLogicSyntaxError: pass except BrokenPipeError: _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org