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