Changeset: f5dca3c801ef for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f5dca3c801ef
Modified Files:
        gdk/gdk_bbp.c
        gdk/gdk_logger.c
        sql/backends/monet5/sql_scenario.c
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: Dec2023
Log Message:

Do a bit of locking + some rearrangement of USR1 code.


diffs (140 lines):

diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -4618,47 +4618,47 @@ BBPtmunlock(void)
 void
 BBPprintinfo(void)
 {
-       if (MT_lock_try(&GDKtmLock)) {
-               BBPtmlockFinish();
-               size_t tmem = 0, tvm = 0;
-               size_t pmem = 0, pvm = 0;
-               int tn = 0;
-               int pn = 0;
-               int nh = 0;
-
-               for (bat i = 1, sz = (bat) ATOMIC_GET(&BBPsize); i < sz; i++) {
-                       if (BBP_refs(i) == 0 && BBP_lrefs(i) == 0)
-                               continue;
+       size_t tmem = 0, tvm = 0;
+       size_t pmem = 0, pvm = 0;
+       int tn = 0;
+       int pn = 0;
+       int nh = 0;
+
+       BBPtmlock();
+       for (bat i = 1, sz = (bat) ATOMIC_GET(&BBPsize); i < sz; i++) {
+               MT_lock_set(&GDKswapLock(i));
+               if (BBP_refs(i) > 0 || BBP_lrefs(i) > 0) {
                        BAT *b = BBP_desc(i);
-                       if (b == NULL)
-                               continue;
-                       ATOMIC_BASE_TYPE status = BBP_status(i);
-                       nh += (status & BBPHOT) != 0;
-                       if (status & BBPPERSISTENT) {
-                               pn++;
-                               pmem += HEAPmemsize(b->theap);
-                               pvm += HEAPvmsize(b->theap);
-                               pmem += HEAPmemsize(b->tvheap);
-                               pvm += HEAPvmsize(b->tvheap);
-                       } else {
-                               tn++;
-                               if (b->theap &&
-                                   b->theap->parentid == b->batCacheid) {
-                                       tmem += HEAPmemsize(b->theap);
-                                       tvm += HEAPvmsize(b->theap);
+                       if (b != NULL) {
+                               ATOMIC_BASE_TYPE status = BBP_status(i);
+                               nh += (status & BBPHOT) != 0;
+                               MT_lock_set(&b->theaplock);
+                               if (status & BBPPERSISTENT) {
+                                       pn++;
+                                       pmem += HEAPmemsize(b->theap);
+                                       pvm += HEAPvmsize(b->theap);
+                                       pmem += HEAPmemsize(b->tvheap);
+                                       pvm += HEAPvmsize(b->tvheap);
+                               } else {
+                                       tn++;
+                                       if (b->theap &&
+                                           b->theap->parentid == 
b->batCacheid) {
+                                               tmem += HEAPmemsize(b->theap);
+                                               tvm += HEAPvmsize(b->theap);
+                                       }
+                                       if (b->tvheap &&
+                                           b->tvheap->parentid == 
b->batCacheid) {
+                                               tmem += HEAPmemsize(b->tvheap);
+                                               tvm += HEAPvmsize(b->tvheap);
+                                       }
                                }
-                               if (b->tvheap &&
-                                   b->tvheap->parentid == b->batCacheid) {
-                                       tmem += HEAPmemsize(b->tvheap);
-                                       tvm += HEAPvmsize(b->tvheap);
-                               }
+                               MT_lock_unset(&b->theaplock);
                        }
                }
-               BBPtmunlock();
-               printf("%d persistent bats using %zu virtual memory (%zu 
malloced)\n", pn, pvm, pmem);
-               printf("%d transient bats using %zu virtual memory (%zu 
malloced)\n", tn, tvm, tmem);
-               printf("%d bats are \"hot\" (i.e. currently or recently 
used)\n", nh);
-       } else {
-               printf("BBP currently locked, so no information available\n");
+               MT_lock_unset(&GDKswapLock(i));
        }
+       BBPtmunlock();
+       printf("%d persistent bats using %zu virtual memory (%zu malloced)\n", 
pn, pvm, pmem);
+       printf("%d transient bats using %zu virtual memory (%zu malloced)\n", 
tn, tvm, tmem);
+       printf("%d bats are \"hot\" (i.e. currently or recently used)\n", nh);
 }
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -3377,8 +3377,10 @@ void
 log_printinfo(logger *lg)
 {
        printf("logger %s:\n", lg->fn);
+       rotation_lock(lg);
        printf("current log file "ULLFMT", last handled log file "ULLFMT"\n",
               lg->id, lg->saved_id);
+       rotation_unlock(lg);
        printf("current transaction id %d, saved transaction id %d\n",
               lg->tid, lg->saved_tid);
        printf("number of flushers: %d, number of open files %d\n",
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -89,7 +89,7 @@ static void
 SQLprintinfo(void)
 {
        /* we need to start printing SQL info here... */
-       log_printinfo(((sqlstore *) SQLstore)->logger);
+       store_printinfo(SQLstore);
 }
 
 str
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -564,4 +564,6 @@ extern BAT *FORdecompress_(BAT *o, lng m
 extern int FORprepare4append(BAT **noffsets, BAT *vals, lng minval, int tt);
 extern int FORprepare4append_vals(void **noffsets, void *vals, BUN cnt, lng 
minval, int vtype, int ft);
 
+extern void store_printinfo(sqlstore *store);
+
 #endif /*SQL_STORAGE_H */
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -7387,3 +7387,11 @@ sql_trans_convert_partitions(sql_trans *
        }
        return 0;
 }
+
+void
+store_printinfo(sqlstore *store)
+{
+       MT_lock_set(&store->commit);
+       log_printinfo(store->logger);
+       MT_lock_unset(&store->commit);
+}
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to