Changeset: a5153b2f902c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a5153b2f902c
Modified Files:
MonetDB.spec
gdk/gdk_bbp.c
gdk/gdk_private.h
monetdb5/mal/mal_client.c
monetdb5/mal/mal_interpreter.c
sql/server/rel_optimize_proj.c
sql/server/rel_optimize_sel.c
Branch: default
Log Message:
Merge with Dec2023 branch.
diffs (272 lines):
diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -808,9 +808,7 @@ do
/usr/sbin/semodule -s ${selinuxvariant} -i \
%{_datadir}/selinux/${selinuxvariant}/monetdb.pp &> /dev/null || :
done
-# use /var/run/monetdb since that's what it says in the monetdb.fc file
-# it says that because /run/monetdb for some reason doesn't work
-/sbin/restorecon -R %{_localstatedir}/monetdb5 %{_localstatedir}/log/monetdb
/var/run/monetdb %{_bindir}/monetdbd %{_bindir}/mserver5
%{_unitdir}/monetdbd.service &> /dev/null || :
+/sbin/restorecon -R %{_localstatedir}/monetdb5 %{_localstatedir}/log/monetdb
%{_rundir}/monetdb %{_bindir}/monetdbd %{_bindir}/mserver5
%{_unitdir}/monetdbd.service &> /dev/null || :
/usr/bin/systemctl try-restart monetdbd.service
%postun selinux
@@ -839,6 +837,13 @@ fi
%setup -q
%build
+# from Fedora 40, selinux uses /run where before it used /var/run
+# the code is now for Fedora 40 but needs a patch for older versions
+%if (0%{?fedora} < 40)
+sed -i
's;@CMAKE_INSTALL_FULL_RUNSTATEDIR@/monetdb;@CMAKE_INSTALL_FULL_LOCALSTATEDIR@/run/monetdb;'
misc/selinux/monetdb.fc.in
+sed -i 's/1\.2/1.1/' misc/selinux/monetdb.te
+%endif
+
%cmake3 \
-DCMAKE_INSTALL_RUNSTATEDIR=/run \
-DRELEASE_VERSION=ON \
diff --git a/gdk/ChangeLog.Dec2023 b/gdk/ChangeLog.Dec2023
--- a/gdk/ChangeLog.Dec2023
+++ b/gdk/ChangeLog.Dec2023
@@ -1,6 +1,12 @@
# ChangeLog file for GDK
# This file is updated with Maddlog
+* Thu Mar 28 2024 Sjoerd Mullender <[email protected]>
+- Threads have their own list of free bats. The list was not returned
+ to the system when a thread exited, meaning that the free bats that
+ were in the list would not be reused by any thread. This has been
+ fixed.
+
* Mon Mar 18 2024 Sjoerd Mullender <[email protected]>
- Fixed a couple of deadlock situations, one actually observed, one
never observed.
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -1746,6 +1746,10 @@ BBPtrim(bool aggressive, bat nbat)
flag |= BBPHOT;
lng t0 = GDKusec();
for (bat bid = 1; bid < nbat && !GDKexiting(); bid++) {
+ /* quick check to see if we might possibly have to do
+ * work (includes free bats) */
+ if ((BBP_status(bid) & BBPLOADED) == 0)
+ continue;
/* don't do this during a (sub)commit */
BBPtmlock();
MT_lock_set(&GDKswapLock(bid));
@@ -2930,10 +2934,8 @@ BBPclear(bat i)
}
void
-BBPrelinquish(void)
+BBPrelinquish(struct freebats *t)
{
- struct freebats *t = MT_thread_getfreebats();
-
if (t->nfreebats == 0)
return;
MT_lock_set(&GDKcacheLock);
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -112,8 +112,6 @@ bat BBPallocbat(int tt)
__attribute__((__visibility__("hidden")));
void BBPprintinfo(void)
__attribute__((__visibility__("hidden")));
-void BBPrelinquish(void)
- __attribute__((__visibility__("hidden")));
int BBPselectfarm(role_t role, int type, enum heaptype hptype)
__attribute__((__visibility__("hidden")));
gdk_return BBPsync(int cnt, bat *restrict subcommit, BUN *restrict sizes, lng
logno)
diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c
--- a/gdk/gdk_system.c
+++ b/gdk/gdk_system.c
@@ -285,9 +285,10 @@ dump_threads(void)
MT_Cond *cn = t->condwait;
struct mtthread *jn = t->joinwait;
int pos = snprintf(buf, sizeof(buf),
- "%s, tid %zu, waiting for %s%s, working on
%.200s",
+ "%s, tid %zu, %"PRIu32" free bats, waiting
for %s%s, working on %.200s",
t->threadname,
t->tid,
+ t->freebats.nfreebats,
lk ? "lock " : sm ? "semaphore " : cn ?
"condvar " : jn ? "thread " : "",
lk ? lk->name : sm ? sm->name : cn ?
cn->name : jn ? jn->threadname : "nothing",
ATOMIC_GET(&t->exited) ? "exiting" :
@@ -314,6 +315,7 @@ rm_mtthread(struct mtthread *t)
struct mtthread **pt;
assert(t != &mainthread);
+ BBPrelinquish(&t->freebats);
thread_lock();
for (pt = &mtthreads; *pt && *pt != t; pt = &(*pt)->next)
;
diff --git a/gdk/gdk_system_private.h b/gdk/gdk_system_private.h
--- a/gdk/gdk_system_private.h
+++ b/gdk/gdk_system_private.h
@@ -45,3 +45,5 @@ struct freebats {
};
struct freebats *MT_thread_getfreebats(void)
__attribute__((__visibility__("hidden")));
+void BBPrelinquish(struct freebats *t)
+ __attribute__((__visibility__("hidden")));
diff --git a/misc/selinux/monetdb.fc.in b/misc/selinux/monetdb.fc.in
--- a/misc/selinux/monetdb.fc.in
+++ b/misc/selinux/monetdb.fc.in
@@ -12,8 +12,7 @@
@CMAKE_INSTALL_FULL_BINDIR@/mserver5 --
gen_context(system_u:object_r:mserver5_exec_t,s0)
@CMAKE_INSTALL_FULL_LIBDIR@/systemd/system/monetdbd.*
gen_context(system_u:object_r:monetdbd_unit_file_t,s0)
@CMAKE_INSTALL_FULL_LOCALSTATEDIR@/log/monetdb(/.*)?
gen_context(system_u:object_r:monetdbd_log_t,s0)
-# for some reason we cannot use /run/monetdb here, even though that is the
real name
-@CMAKE_INSTALL_FULL_LOCALSTATEDIR@/run/monetdb(/.*)?
gen_context(system_u:object_r:monetdbd_var_run_t,s0)
+@CMAKE_INSTALL_FULL_RUNSTATEDIR@/monetdb(/.*)?
gen_context(system_u:object_r:monetdbd_var_run_t,s0)
# database "farm"
@CMAKE_INSTALL_FULL_LOCALSTATEDIR@/monetdb5/dbfarm(/.*)?
gen_context(system_u:object_r:mserver5_db_t,s0)
@CMAKE_INSTALL_FULL_LOCALSTATEDIR@/monetdb5/dbfarm/\.merovingian_properties
-- gen_context(system_u:object_r:monetdbd_etc_t,s0)
diff --git a/misc/selinux/monetdb.te b/misc/selinux/monetdb.te
--- a/misc/selinux/monetdb.te
+++ b/misc/selinux/monetdb.te
@@ -8,7 +8,7 @@
# Copyright August 2008 - 2023 MonetDB B.V.;
# Copyright 1997 - July 2008 CWI.
-policy_module(monetdb, 1.1)
+policy_module(monetdb, 1.2)
# The above line declares that this file is a SELinux policy file. Its
# name is monetdb, so the file should be saved as monetdb.te
diff --git a/misc/selinux/post_install_script_file.in
b/misc/selinux/post_install_script_file.in
--- a/misc/selinux/post_install_script_file.in
+++ b/misc/selinux/post_install_script_file.in
@@ -3,7 +3,5 @@ do
/usr/sbin/semodule -s ${selinuxvariant} -i \
@CMAKE_INSTALL_DATADIR@/selinux/${selinuxvariant}/monetdb.pp &> /dev/null
|| :
done
-# use /var/run/monetdb since that's what it says in the monetdb.fc file
-# it says that because /run/monetdb for some reason doesn't work
/sbin/restorecon -R @CMAKE_INSTALL_FULL_LOCALSTATEDIR@/monetdb5
@CMAKE_INSTALL_FULL_LOCALSTATEDIR@/log/monetdb
@CMAKE_INSTALL_FULL_RUNSTATEDIR@/monetdb @CMAKE_INSTALL_FULL_BINDIR@/monetdbd
@CMAKE_INSTALL_FULL_BINDIR@/mserver5 %{_unitdir}/monetdbd.service &> /dev/null
|| :
/usr/bin/systemctl try-restart monetdbd.service
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -356,7 +356,7 @@ MCshutdowninprogress(void)
* When a client needs to be terminated then the file descriptors for
* its input/output are simply closed. This leads to a graceful
* degradation, but may take some time when the client is busy. A more
- * forcefull method is to kill the client thread, but this may leave
+ * forceful method is to kill the client thread, but this may leave
* locks and semaphores in an undesirable state.
*
* The routine freeClient ends a single client session, but through side
@@ -443,7 +443,7 @@ MCcloseClient(Client c)
/*
* If a client disappears from the scene (eof on stream), we should
- * terminate all its children. This is in principle a forcefull action,
+ * terminate all its children. This is in principle a forceful action,
* because the children may be ignoring the primary IO streams.
* (Instead they may be blocked in an infinite loop)
*
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -1362,7 +1362,7 @@ runMALsequence(Client cntxt, MalBlkPtr m
* an error raised deeply inside the system.
*
* The policy is to require all C-functions to return a string-pointer.
- * Upon a successfull call, it is a NULL string. Otherwise it contains an
+ * Upon a successful call, it is a NULL string. Otherwise it contains an
* encoding of the exceptional state encountered. This message
* starts with the exception identifer, followed by contextual details.
*/
@@ -1377,7 +1377,7 @@ runMALsequence(Client cntxt, MalBlkPtr m
* A key issue is to deal with temporary BATs in an efficient way.
* References to bats in the buffer pool may cause dangling references
* at the language level. This appears as soons as your share
- * a reference and delete the BAT from one angle. If not carefull, the
+ * a reference and delete the BAT from one angle. If not careful, the
* dangling pointer may subsequently be associated with another BAT
*
* All string values are private to the VALrecord, which means they
diff --git a/sql/server/rel_optimize_proj.c b/sql/server/rel_optimize_proj.c
--- a/sql/server/rel_optimize_proj.c
+++ b/sql/server/rel_optimize_proj.c
@@ -90,6 +90,8 @@ rel_push_project_down_(visitor *v, sql_r
}
}
}
+ /* ToDo handle useful renames, ie new relation name and unique set of
attribute names (could reduce set of * attributes) */
+ /* handle both useless and useful with project [ group by ] */
return rel;
}
@@ -391,6 +393,7 @@ exp_rename(mvc *sql, sql_exp *e, sql_rel
}
if (!ne)
return e;
+ sql_exp *oe = e;
e = NULL;
if (exp_name(ne) && ne->r && ne->l)
e = rel_bind_column2(sql, t, ne->l, ne->r, 0);
@@ -401,6 +404,7 @@ exp_rename(mvc *sql, sql_exp *e, sql_rel
sql->errstr[0] = 0;
if (exp_is_atom(ne))
return ne;
+ return oe;
}
return exp_ref(sql, e);
case e_cmp:
@@ -1564,7 +1568,7 @@ rel_simplify_sum(visitor *v, sql_rel *re
/* the new generate function
calls are valid, update relations */
/* we need a new relation for
the multiplication and addition/subtraction */
if (!upper) {
- /* be carefull with
relations with more than 1 reference, so do in-place replacement */
+ /* be careful with
relations with more than 1 reference, so do in-place replacement */
list *projs =
rel_projections(v->sql, rel, NULL, 1, 1);
sql_rel *nrel =
rel_groupby(v->sql, rel->l, NULL);
nrel->exps = rel->exps;
diff --git a/sql/server/rel_optimize_sel.c b/sql/server/rel_optimize_sel.c
--- a/sql/server/rel_optimize_sel.c
+++ b/sql/server/rel_optimize_sel.c
@@ -2627,7 +2627,7 @@ rel_rewrite_semijoin(visitor *v, sql_rel
* also push simple expressions of a semijoin down if they only
* involve the left sided of the semijoin.
*
- * in some cases the other way is usefull, ie push join down
+ * in some cases the other way is useful, ie push join down
* semijoin. When the join reduces (ie when there are selects on it).
*
* At the moment, we only flag changes by this optimizer on the first level of
optimization
diff --git a/sql/test/BugTracker-2024/Tests/exp_ref-Bug-7479.test
b/sql/test/BugTracker-2024/Tests/exp_ref-Bug-7479.test
--- a/sql/test/BugTracker-2024/Tests/exp_ref-Bug-7479.test
+++ b/sql/test/BugTracker-2024/Tests/exp_ref-Bug-7479.test
@@ -10,23 +10,16 @@ WITH x AS ( SELECT 1 x UNION SELECT - '1
1
1
-query IRI nosort
+statment error syntax error, unexpected ')' in: "with x as ( select 1 x union
select - '199419' ) select 1 from x as where x in ("
WITH x AS ( SELECT 1 x UNION SELECT - '199419' ) SELECT 1 FROM x AS WHERE x IN
( SELECT min ( x ) OVER ( PARTITION BY x ) AS )
----
-1
-1.000
-1
-1
--199419.000
-1
-skipif knownfail
query T nosort
WITH x AS ( SELECT 1 x UNION SELECT - '199419' ) SELECT 1 FROM x AS WHERE x IN
( SELECT x FROM x , ( SELECT min ( x ) OVER ( PARTITION BY x ) ) AS )
----
+1
+1
-skipif knownfail
-query T nosort
+statment error GDK reported error: BATsubcross: more than one match
SELECT ( WITH x AS ( SELECT 1 x UNION SELECT - '199419' ) SELECT 1 FROM x AS
WHERE x IN ( SELECT x FROM x , ( SELECT min ( x ) OVER ( PARTITION BY x ) ) AS
) )
----
-
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]