xref: /plan9-contrib/sys/src/cmd/venti/srv/syncindex.c (revision fececb924262ae5acb31c5c448a4a6a523887b15)
1 #include "stdinc.h"
2 #include "dat.h"
3 #include "fns.h"
4 
5 static	int	verbose;
6 void
7 usage(void)
8 {
9 	fprint(2, "usage: syncindex [-fv] [-B blockcachesize] config\n");
10 	threadexitsall("usage");
11 }
12 
13 Config conf;
14 
15 void
16 threadmain(int argc, char *argv[])
17 {
18 	u32int bcmem, icmem;
19 	int fix;
20 
21 	fix = 0;
22 	bcmem = 0;
23 	icmem = 0;
24 	ARGBEGIN{
25 	case 'B':
26 		bcmem = unittoull(EARGF(usage()));
27 		break;
28 	case 'I':
29 		icmem = unittoull(EARGF(usage()));
30 		break;
31 	case 'f':
32 		fix++;
33 		break;
34 	case 'v':
35 		verbose++;
36 		break;
37 	default:
38 		usage();
39 		break;
40 	}ARGEND
41 
42 	if(!fix)
43 		readonly = 1;
44 
45 	if(argc != 1)
46 		usage();
47 
48 	ventifmtinstall();
49 	if(initventi(argv[0], &conf) < 0)
50 		sysfatal("can't init venti: %r");
51 	if(mainindex->bloom && loadbloom(mainindex->bloom) < 0)
52 		sysfatal("can't load bloom filter: %r");
53 
54 	if(bcmem < maxblocksize * (mainindex->narenas + mainindex->nsects * 4 + 16))
55 		bcmem = maxblocksize * (mainindex->narenas + mainindex->nsects * 4 + 16);
56 	if(0) fprint(2, "initialize %d bytes of disk block cache\n", bcmem);
57 	initdcache(bcmem);
58 	initlumpcache(1*1024*1024, 1024/8);
59 	icmem = u64log2(icmem / (sizeof(IEntry)+sizeof(IEntry*)) / ICacheDepth);
60 	if(icmem < 4)
61 		icmem = 4;
62 	if(1) fprint(2, "initialize %d bytes of index cache for %d index entries\n",
63 		(sizeof(IEntry)+sizeof(IEntry*)) * (1 << icmem) * ICacheDepth,
64 		(1 << icmem) * ICacheDepth);
65 	initicache(icmem, ICacheDepth);
66 	initicachewrite();
67 	if(mainindex->bloom)
68 		startbloomproc(mainindex->bloom);
69 
70 	if(verbose)
71 		printindex(2, mainindex);
72 	if(syncindex(mainindex, fix, 1, 0) < 0)
73 		sysfatal("failed to sync index=%s: %r\n", mainindex->name);
74 
75 	threadexitsall(0);
76 }
77