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