Changeset: bbbac3f5e110 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bbbac3f5e110
Modified Files:
        monetdb5/modules/mal/bbp.mx
        sql/backends/monet5/sql.mx
        sql/test/leaks/Tests/check0.stable.out
        sql/test/leaks/Tests/check1.stable.out
        sql/test/leaks/Tests/check2.stable.out
        sql/test/leaks/Tests/check3.stable.out
        sql/test/leaks/Tests/check4.stable.out
        sql/test/leaks/Tests/check5.stable.out
        sql/test/leaks/Tests/drop3.stable.out
        sql/test/leaks/Tests/select1.stable.out
        sql/test/leaks/Tests/select2.stable.out
        sql/test/leaks/Tests/temp1.stable.out
        sql/test/leaks/Tests/temp2.stable.out
        sql/test/leaks/Tests/temp3.stable.out
Branch: Dec2011
Log Message:

switched to a single bbp function to solve concurrency problems.


diffs (297 lines):

diff --git a/monetdb5/modules/mal/bbp.mx b/monetdb5/modules/mal/bbp.mx
--- a/monetdb5/modules/mal/bbp.mx
+++ b/monetdb5/modules/mal/bbp.mx
@@ -152,6 +152,13 @@ command getRNames() :bat[:int,:str]
 address CMDbbpRNames
 comment "Map a BAT into its bbp physical name";
 
+command get() (ns:bat[:any_1,:any_2], ht:bat[:int,:str], tt:bat[:int,:str],
+            cnt:bat[:int,:lng], refcnt:bat[:int,:int], lrefcnt:bat[:int,:int],
+            location:bat[:int,:str], heat:bat[:int,:int], 
dirty:bat[:int,:str], 
+            status:bat[:int,:str], kind:bat[:int,:str]) 
+address CMDbbp
+comment "bpp";
+
 command getName( b:bat[:any_1,:any_2]):str
 address CMDbbpName
 comment "Map a BAT into its internal name";
@@ -1388,3 +1395,67 @@ str CMDbbp@2( int *ret){
 @:headtailProperty(htype,HeadType)@
 @:headtailProperty(ttype,TailType)@
 
+bbp_export str CMDbbp( int *NS, int *HT, int *TT, int *CNT, int *REFCNT, int 
*LREFCNT, int *LOCATION, int *HEAT, int *DIRTY, int *STATUS, int *KIND);
+str CMDbbp( int *NS, int *HT, int *TT, int *CNT, int *REFCNT, int *LREFCNT, 
int *LOCATION, int *HEAT, int *DIRTY, int *STATUS, int *KIND)
+{
+       BAT     *ns, *ht, *tt, *cnt, *refcnt, *lrefcnt, *location, *heat, 
*dirty, *status, *kind, *bn;
+       int     i;
+       char buf[MAXPATHLEN];
+       char cwd[MAXPATHLEN];
+
+       ns = BATnew(TYPE_int,TYPE_str,BBPsize);
+       ht = BATnew(TYPE_int,TYPE_str,BBPsize);
+       tt = BATnew(TYPE_int,TYPE_str,BBPsize);
+       cnt = BATnew(TYPE_int,TYPE_lng,BBPsize);
+       refcnt = BATnew(TYPE_int,TYPE_int,BBPsize);
+       lrefcnt = BATnew(TYPE_int,TYPE_int,BBPsize);
+       location = BATnew(TYPE_int,TYPE_str,BBPsize);
+       heat = BATnew(TYPE_int,TYPE_int,BBPsize);
+       dirty = BATnew(TYPE_int,TYPE_str,BBPsize);
+       status = BATnew(TYPE_int,TYPE_str,BBPsize);
+       kind = BATnew(TYPE_int,TYPE_str,BBPsize);
+
+       if (!ns || !ht || !tt || !cnt || !refcnt || !lrefcnt || !location || 
!heat || !dirty || !status || !kind) 
+               throw(MAL, "catalog.bbp", MAL_MALLOC_FAIL);
+
+       for(i=1; i < BBPsize; i++) 
+       if (BBP_logical(i) && (BBP_refs(i) || BBP_lrefs(i))) {
+               bn = BATdescriptor(i);
+               if (bn) {
+                       lng l = BATcount(bn);
+                       int heat_ = BBP_lastused(i);
+                       char *loc = BBP_cache(i) ? "load" : "disk";
+                       char *mode = "persistent";
+                       int refs = BBP_refs(i);
+                       int lrefs = BBP_lrefs(i);
+
+                       if ((BBP_status(i) & BBPDELETED) || !(BBP_status(i) & 
BBPPERSISTENT))
+                               mode = "transient";
+                       
snprintf(buf,MAXPATHLEN,"%s/bat/%s",cwd,BBP_physical(i));
+                       BUNins(ns, &i, BBP_logical(i), FALSE);
+                       BUNins(ht, &i, BATatoms[BAThtype(bn)].name, FALSE);
+                       BUNins(tt, &i, BATatoms[BATttype(bn)].name, FALSE);
+                       BUNins(cnt, &i, &l, FALSE);
+                       BUNins(refcnt, &i, &refs, FALSE);
+                       BUNins(lrefcnt, &i, &lrefs, FALSE);
+                       BUNins(location, &i, buf, FALSE);
+                       BUNins(heat, &i, &heat_, FALSE);
+                       BUNins(dirty, &i, bn ? BATdirty(bn) ? "dirty" : 
DELTAdirty(bn) ? "diffs" : "clean" : (BBP_status(i) & BBPSWAPPED) ? "diffs" : 
"clean", FALSE);
+                       BUNins(status, &i, loc, FALSE);
+                       BUNins(kind, &i, mode, FALSE);
+               }
+               BBPunfix(bn->batCacheid);
+       }
+       BBPkeepref(*NS = ns->batCacheid);
+       BBPkeepref(*HT = ht->batCacheid);
+       BBPkeepref(*TT = tt->batCacheid);
+       BBPkeepref(*CNT = cnt->batCacheid);
+       BBPkeepref(*REFCNT = refcnt->batCacheid);
+       BBPkeepref(*LREFCNT = lrefcnt->batCacheid);
+       BBPkeepref(*LOCATION = location->batCacheid);
+       BBPkeepref(*HEAT = heat->batCacheid);
+       BBPkeepref(*DIRTY = dirty->batCacheid);
+       BBPkeepref(*STATUS = status->batCacheid);
+       BBPkeepref(*KIND = kind->batCacheid);
+       return MAL_SUCCEED;
+}
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -414,30 +414,7 @@ end clients;
 
 function bbp{inline}()( id:bat[:oid,:int], name:bat[:oid,:str], 
htype:bat[:oid,:str], ttype:bat[:oid,:str], count:bat[:oid,:lng], 
refcnt:bat[:oid,:int], lrefcnt:bat[:oid,:int], location:bat[:oid,:str], 
heat:bat[:oid,:int], dirty:bat[:oid,:str], status:bat[:oid,:str], 
kind:bat[:oid,:str]);
 
-       ns:bat[:int,:str] := nil:bat[:int,:str];
-       iht:bat[:int,:str] := nil:bat[:int,:str];
-       itt:bat[:int,:str] := nil:bat[:int,:str];
-       icnt:bat[:int,:lng] := nil:bat[:int,:lng];
-       irefcnt:bat[:int,:int] := nil:bat[:int,:int];
-       ilrefcnt:bat[:int,:int] := nil:bat[:int,:int];
-       ilocation:bat[:int,:str] := nil:bat[:int,:str];
-       iheat:bat[:int,:int] := nil:bat[:int,:int];
-       idirty:bat[:int,:str] := nil:bat[:int,:str];
-       istatus:bat[:int,:str] := nil:bat[:int,:str];
-       ikind:bat[:int,:str] := nil:bat[:int,:str];
-barrier bbp_1 := true;
-       ns := bbp.getNames();
-       iht := bbp.getHeadType();
-       itt := bbp.getTailType();
-       icnt := bbp.getCount();
-       irefcnt := bbp.getRefCount();
-       ilrefcnt := bbp.getLRefCount();
-       ilocation := bbp.getLocation();
-       iheat := bbp.getHeat();
-       idirty := bbp.getDirty();
-       istatus := bbp.getStatus();
-       ikind := bbp.getKind();
-exit bbp_1;
+       (ns,iht,itt,icnt,irefcnt,ilrefcnt,ilocation,iheat,idirty,istatus,ikind) 
:= bbp.get();
        ri := algebra.markT(ns, 0:oid);
        i := bat.reverse(ri);
        n := algebra.markH(ns, 0:oid);
diff --git a/sql/test/leaks/Tests/check0.stable.out 
b/sql/test/leaks/Tests/check0.stable.out
--- a/sql/test/leaks/Tests/check0.stable.out
+++ b/sql/test/leaks/Tests/check0.stable.out
@@ -58,6 +58,7 @@ Ready.
 [ "oid",       "int",  1151    ]
 [ "oid",       "int",  1151    ]
 [ "oid",       "int",  1151    ]
+[ "oid",       "int",  1151    ]
 [ "oid",       "int",  3163    ]
 [ "oid",       "int",  3163    ]
 [ "oid",       "int",  3163    ]
@@ -77,13 +78,13 @@ Ready.
 % L1,  L2 # name
 % char,        wrd # type
 % 9,   3 # length
-[ "transient", 487     ]
+[ "transient", 497     ]
 #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
 % .L3, .bbp # table_name
 % L3,  L4 # name
 % char,        wrd # type
 % 10,  2 # length
-[ "persistent",        24      ]
+[ "persistent",        25      ]
 
 # 22:02:15 >  
 # 22:02:15 >  Done.
diff --git a/sql/test/leaks/Tests/check1.stable.out 
b/sql/test/leaks/Tests/check1.stable.out
--- a/sql/test/leaks/Tests/check1.stable.out
+++ b/sql/test/leaks/Tests/check1.stable.out
@@ -182,7 +182,7 @@ Ready.
 % L1,  L2 # name
 % char,        wrd # type
 % 9,   3 # length
-[ "transient", 158     ]
+[ "transient", 169     ]
 #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
 % .L3, .bbp # table_name
 % L3,  L4 # name
diff --git a/sql/test/leaks/Tests/check2.stable.out 
b/sql/test/leaks/Tests/check2.stable.out
--- a/sql/test/leaks/Tests/check2.stable.out
+++ b/sql/test/leaks/Tests/check2.stable.out
@@ -182,7 +182,7 @@ Ready.
 % L1,  L2 # name
 % char,        wrd # type
 % 9,   3 # length
-[ "transient", 158     ]
+[ "transient", 169     ]
 #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
 % .L3, .bbp # table_name
 % L3,  L4 # name
diff --git a/sql/test/leaks/Tests/check3.stable.out 
b/sql/test/leaks/Tests/check3.stable.out
--- a/sql/test/leaks/Tests/check3.stable.out
+++ b/sql/test/leaks/Tests/check3.stable.out
@@ -182,7 +182,7 @@ Ready.
 % L1,  L2 # name
 % char,        wrd # type
 % 9,   3 # length
-[ "transient", 178     ]
+[ "transient", 189     ]
 #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
 % .L3, .bbp # table_name
 % L3,  L4 # name
diff --git a/sql/test/leaks/Tests/check4.stable.out 
b/sql/test/leaks/Tests/check4.stable.out
--- a/sql/test/leaks/Tests/check4.stable.out
+++ b/sql/test/leaks/Tests/check4.stable.out
@@ -182,7 +182,7 @@ Ready.
 % L1,  L2 # name
 % char,        wrd # type
 % 9,   3 # length
-[ "transient", 178     ]
+[ "transient", 189     ]
 #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
 % .L3, .bbp # table_name
 % L3,  L4 # name
diff --git a/sql/test/leaks/Tests/check5.stable.out 
b/sql/test/leaks/Tests/check5.stable.out
--- a/sql/test/leaks/Tests/check5.stable.out
+++ b/sql/test/leaks/Tests/check5.stable.out
@@ -182,7 +182,7 @@ Ready.
 % L1,  L2 # name
 % char,        wrd # type
 % 9,   3 # length
-[ "transient", 178     ]
+[ "transient", 189     ]
 #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
 % .L3, .bbp # table_name
 % L3,  L4 # name
diff --git a/sql/test/leaks/Tests/drop3.stable.out 
b/sql/test/leaks/Tests/drop3.stable.out
--- a/sql/test/leaks/Tests/drop3.stable.out
+++ b/sql/test/leaks/Tests/drop3.stable.out
@@ -28,7 +28,7 @@ Ready.
 % L1,  L2 # name
 % char,        wrd # type
 % 9,   3 # length
-[ "transient", 178     ]
+[ "transient", 189     ]
 #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
 % .L3, .bbp # table_name
 % L3,  L4 # name
diff --git a/sql/test/leaks/Tests/select1.stable.out 
b/sql/test/leaks/Tests/select1.stable.out
--- a/sql/test/leaks/Tests/select1.stable.out
+++ b/sql/test/leaks/Tests/select1.stable.out
@@ -33,7 +33,7 @@ Ready.
 % L1 # name
 % wrd # type
 % 3 # length
-[ 138  ]
+[ 338  ]
 #select 1; 
 % . # table_name
 % single_value # name
@@ -44,7 +44,7 @@ Ready.
 % L2 # name
 % wrd # type
 % 3 # length
-[ 138  ]
+[ 338  ]
 
 # 22:03:05 >  
 # 22:03:05 >  Done.
diff --git a/sql/test/leaks/Tests/select2.stable.out 
b/sql/test/leaks/Tests/select2.stable.out
--- a/sql/test/leaks/Tests/select2.stable.out
+++ b/sql/test/leaks/Tests/select2.stable.out
@@ -33,7 +33,7 @@ Ready.
 % L1 # name
 % wrd # type
 % 3 # length
-[ 138  ]
+[ 338  ]
 #select 1; 
 % . # table_name
 % single_value # name
@@ -44,7 +44,7 @@ Ready.
 % L2 # name
 % wrd # type
 % 3 # length
-[ 138  ]
+[ 338  ]
 
 # 22:03:05 >  
 # 22:03:05 >  Done.
diff --git a/sql/test/leaks/Tests/temp1.stable.out 
b/sql/test/leaks/Tests/temp1.stable.out
--- a/sql/test/leaks/Tests/temp1.stable.out
+++ b/sql/test/leaks/Tests/temp1.stable.out
@@ -28,7 +28,7 @@ Ready.
 % L1,  L2 # name
 % char,        wrd # type
 % 9,   3 # length
-[ "transient", 161     ]
+[ "transient", 172     ]
 #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
 % .L3, .bbp # table_name
 % L3,  L4 # name
diff --git a/sql/test/leaks/Tests/temp2.stable.out 
b/sql/test/leaks/Tests/temp2.stable.out
--- a/sql/test/leaks/Tests/temp2.stable.out
+++ b/sql/test/leaks/Tests/temp2.stable.out
@@ -28,7 +28,7 @@ Ready.
 % L1,  L2 # name
 % char,        wrd # type
 % 9,   3 # length
-[ "transient", 161     ]
+[ "transient", 172     ]
 #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
 % .L3, .bbp # table_name
 % L3,  L4 # name
diff --git a/sql/test/leaks/Tests/temp3.stable.out 
b/sql/test/leaks/Tests/temp3.stable.out
--- a/sql/test/leaks/Tests/temp3.stable.out
+++ b/sql/test/leaks/Tests/temp3.stable.out
@@ -28,7 +28,7 @@ Ready.
 % L1,  L2 # name
 % char,        wrd # type
 % 9,   3 # length
-[ "transient", 186     ]
+[ "transient", 197     ]
 #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
 % .L3, .bbp # table_name
 % L3,  L4 # name
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to