aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/venti/srv/buildindex.c
diff options
context:
space:
mode:
authorDavid du Colombier <0intro@gmail.com>2011-06-02 09:33:56 -0400
committerRuss Cox <rsc@swtch.com>2011-06-02 09:33:56 -0400
commitf5a8ea6fd8908c6f42670b8546239fdbc7fdbf03 (patch)
treef9e6abdcd5c651adf191f8a9b2dd9655404313a9 /src/cmd/venti/srv/buildindex.c
parent7fb06adf54aa6e47974673dcdeb328780927b8e6 (diff)
downloadplan9port-f5a8ea6fd8908c6f42670b8546239fdbc7fdbf03.tar.gz
plan9port-f5a8ea6fd8908c6f42670b8546239fdbc7fdbf03.tar.bz2
plan9port-f5a8ea6fd8908c6f42670b8546239fdbc7fdbf03.zip
venti: import changes from plan 9
R=rsc CC=plan9port.codebot http://codereview.appspot.com/4523057
Diffstat (limited to 'src/cmd/venti/srv/buildindex.c')
-rw-r--r--src/cmd/venti/srv/buildindex.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/cmd/venti/srv/buildindex.c b/src/cmd/venti/srv/buildindex.c
index ce5103a7..08f0901a 100644
--- a/src/cmd/venti/srv/buildindex.c
+++ b/src/cmd/venti/srv/buildindex.c
@@ -50,18 +50,19 @@ static void arenapartproc(void*);
void
usage(void)
{
- fprint(2, "usage: buildindex [-bd] [-i isect]... [-M imem] venti.conf\n");
+ fprint(2, "usage: buildindex [-b] [-i isect]... [-M imem] venti.conf\n");
threadexitsall("usage");
}
void
threadmain(int argc, char *argv[])
{
- int fd, i, napart;
+ int fd, i, napart, nfinish, maxdisks;
u32int bcmem, imem;
Config conf;
Part *p;
+ maxdisks = 100000;
ventifmtinstall();
imem = 256*1024*1024;
ARGBEGIN{
@@ -78,6 +79,9 @@ threadmain(int argc, char *argv[])
case 'M':
imem = unittoull(EARGF(usage()));
break;
+ case 'm': /* temporary - might go away */
+ maxdisks = atoi(EARGF(usage()));
+ break;
default:
usage();
break;
@@ -146,17 +150,21 @@ threadmain(int argc, char *argv[])
/* start arena procs */
p = nil;
napart = 0;
+ nfinish = 0;
arenadonechan = chancreate(sizeof(void*), 0);
for(i=0; i<ix->narenas; i++){
if(ix->arenas[i]->part != p){
p = ix->arenas[i]->part;
vtproc(arenapartproc, p);
- napart++;
+ if(++napart >= maxdisks){
+ recvp(arenadonechan);
+ nfinish++;
+ }
}
}
/* wait for arena procs to finish */
- for(i=0; i<napart; i++)
+ for(nfinish=0; nfinish<napart; nfinish++)
recvp(arenadonechan);
/* tell index procs to finish */
@@ -844,6 +852,11 @@ isectproc(void *v)
sysfatal("not enough memory");
nminibuf = nbuf;
}
+ if (nbuf == 0) {
+ fprint(2, "%s: brand-new index, no work to do\n", argv0);
+ threadexitsall(nil);
+ }
+
/* size buffer to use extra memory */
bufsize = MinBufSize;
while(bufsize*2*nbuf <= isectmem && bufsize < MaxBufSize)