Changeset: dc71eeaede6f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dc71eeaede6f
Modified Files:
        gdk/gdk_calc.c
        sql/storage/bat/bat_table.c
        sql/storage/store.c
Branch: default
Log Message:

merged with 2016


diffs (129 lines):

diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -13234,7 +13234,7 @@ BATcalcifthenelse(BAT *b, BAT *b1, BAT *
                return NULL;
        if (checkbats(b, b2, "BATcalcifthenelse") != GDK_SUCCEED)
                return NULL;
-       if (b->ttype != TYPE_bit || b1->ttype != b2->ttype) {
+       if (b->ttype != TYPE_bit || ATOMtype(b1->ttype) != ATOMtype(b2->ttype)) 
{
                GDKerror("BATcalcifthenelse: \"then\" and \"else\" BATs have 
different types.\n");
                return NULL;
        }
diff --git a/sql/storage/bat/bat_table.c b/sql/storage/bat/bat_table.c
--- a/sql/storage/bat/bat_table.c
+++ b/sql/storage/bat/bat_table.c
@@ -478,12 +478,17 @@ table_vacuum(sql_trans *tr, sql_table *t
        BAT *tids = delta_cands(tr, t);
        BAT **cols;
        node *n;
+
+       if (!tids)
+               return SQL_ERR;
        // FIXME unchecked_malloc NEW_ARRAY can return NULL
        cols = NEW_ARRAY(BAT*, cs_size(&t->columns));
        for (n = t->columns.set->h; n; n = n->next) {
                sql_column *c = n->data;
                BAT *v = store_funcs.bind_col(tr, c, RDONLY);
 
+               if (!v)
+                       return SQL_ERR;
                cols[c->colnr] = BATproject(tids, v);
                BBPunfix(v->batCacheid);
        }
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1687,6 +1687,7 @@ store_flush_log(void)
 static int
 store_needs_vacuum( sql_trans *tr )
 {
+       size_t max_dels = GDKdebug & FORCEMITOMASK ? 1 : 128;
        sql_schema *s = find_sql_schema(tr, "sys");
        node *n;
 
@@ -1697,9 +1698,11 @@ store_needs_vacuum( sql_trans *tr )
                if (!t->system)
                        continue;
                /* no inserts, updates and enough deletes ? */
-               if (!store_funcs.count_col(tr, c, 0) && 
+               if (store_funcs.count_col(tr, c, 0) && 
+                   (store_funcs.count_col(tr, c, 1) -
+                   store_funcs.count_col(tr, c, 0)) == 0 && 
                    !store_funcs.count_upd(tr, t) && 
-                   store_funcs.count_del(tr, t) > 128) 
+                   store_funcs.count_del(tr, t) >= max_dels) 
                        return 1;
        }
        return 0;
@@ -1709,6 +1712,7 @@ static void
 store_vacuum( sql_trans *tr )
 {
        /* tables */
+       size_t max_dels = GDKdebug & FORCEMITOMASK ? 1 : 128;
        sql_schema *s = find_sql_schema(tr, "sys");
        node *n;
 
@@ -1718,26 +1722,28 @@ store_vacuum( sql_trans *tr )
 
                if (!t->system)
                        continue;
-               if (!store_funcs.count_col(tr, c, 0) && 
+               if (store_funcs.count_col(tr, c, 0) && 
+                   (store_funcs.count_col(tr, c, 1) -
+                   store_funcs.count_col(tr, c, 0)) == 0 && 
                    !store_funcs.count_upd(tr, t) && 
-                   store_funcs.count_del(tr, t) > 128) {
+                   store_funcs.count_del(tr, t) >= max_dels)
                        table_funcs.table_vacuum(tr, t);
-               }
        }
 }
 
 void
 store_manager(void)
 {
-       const int timeout = GDKdebug & FORCEMITOMASK ? 10 : 50;
+       const int sleeptime = GDKdebug & FORCEMITOMASK ? 10 : 50;
+       const int timeout = GDKdebug & FORCEMITOMASK ? 500 : 50000;
 
        while (!GDKexiting()) {
                int res = LOG_OK;
                int t;
                lng shared_transactions_drift = -1;
 
-               for (t = 30000; t > 0 && !need_flush; t -= timeout) {
-                       MT_sleep_ms(timeout);
+               for (t = timeout; t > 0 && !need_flush; t -= sleeptime) {
+                       MT_sleep_ms(sleeptime);
                        if (GDKexiting())
                                return;
                }
@@ -1767,7 +1773,7 @@ store_manager(void)
                        MT_lock_unset(&bs_lock);
                        if (GDKexiting())
                                return;
-                       MT_sleep_ms(timeout);
+                       MT_sleep_ms(sleeptime);
                        MT_lock_set(&bs_lock);
                }
 
@@ -1819,14 +1825,15 @@ store_manager(void)
 void
 idle_manager(void)
 {
-       const int timeout = GDKdebug & FORCEMITOMASK ? 10 : 50;
+       const int sleeptime = GDKdebug & FORCEMITOMASK ? 10 : 50;
+       const int timeout = GDKdebug & FORCEMITOMASK ? 50 : 5000;
 
        while (!GDKexiting()) {
                sql_session *s;
                int t;
 
-               for (t = 5000; t > 0; t -= timeout) {
-                       MT_sleep_ms(timeout);
+               for (t = timeout; t > 0; t -= sleeptime) {
+                       MT_sleep_ms(sleeptime);
                        if (GDKexiting())
                                return;
                }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to