6 int paranoid = 1; /* should verify hashes on disk read */
8 static ArenaPart *configarenas(char *file);
9 static ISect *configisect(char *file);
10 static Bloom *configbloom(char *file);
13 initventi(char *file, Config *conf)
18 seterr(EOk, "no configuration file");
21 if(runconfig(file, conf) < 0){
22 seterr(EOk, "can't initialize venti: %r");
25 mainindex = initindex(conf->index, conf->sects, conf->nsects);
28 mainindex->bloom = conf->bloom;
42 if(p[1] == 0 && strchr("MmGgKk", *p))
50 * config : "isect" filename
57 * | "httpaddr" address
60 * '#' and \n delimit comments
67 runconfig(char *file, Config *config)
72 char *s, *line, *flds[MaxArgs + 1];
75 if(readifile(&f, file) < 0)
77 memset(config, 0, sizeof *config);
78 config->mem = Unspecified;
88 i = getfields(s, flds, MaxArgs + 1, 1, " \t\r");
89 if(i > 0 && strcmp(flds[0], "mgr") == 0){
91 }else if(i == 2 && strcmp(flds[0], "isect") == 0){
92 sv = MKN(ISect*, config->nsects + 1);
93 for(i = 0; i < config->nsects; i++)
94 sv[i] = config->sects[i];
97 config->sects[config->nsects] = configisect(flds[1]);
98 if(config->sects[config->nsects] == nil)
101 }else if(i == 2 && strcmp(flds[0], "arenas") == 0){
102 av = MKN(ArenaPart*, config->naparts + 1);
103 for(i = 0; i < config->naparts; i++)
104 av[i] = config->aparts[i];
105 free(config->aparts);
107 config->aparts[config->naparts] = configarenas(flds[1]);
108 if(config->aparts[config->naparts] == nil)
111 }else if(i == 2 && strcmp(flds[0], "bloom") == 0){
113 seterr(EAdmin, "duplicate bloom lines in configuration file %s", file);
116 if((config->bloom = configbloom(flds[1])) == nil)
118 }else if(i == 2 && strcmp(flds[0], "index") == 0){
119 if(nameok(flds[1]) < 0){
120 seterr(EAdmin, "illegal index name %s in config file %s", flds[1], file);
123 if(config->index != nil){
124 seterr(EAdmin, "duplicate indices in config file %s", file);
127 config->index = estrdup(flds[1]);
128 }else if(i == 2 && strcmp(flds[0], "bcmem") == 0){
129 if(numok(flds[1]) < 0){
130 seterr(EAdmin, "illegal size %s in config file %s",
134 if(config->bcmem != 0){
135 seterr(EAdmin, "duplicate bcmem lines in config file %s", file);
138 config->bcmem = unittoull(flds[1]);
139 }else if(i == 2 && strcmp(flds[0], "mem") == 0){
140 if(numok(flds[1]) < 0){
141 seterr(EAdmin, "illegal size %s in config file %s",
145 if(config->mem != Unspecified){
146 seterr(EAdmin, "duplicate mem lines in config file %s", file);
149 config->mem = unittoull(flds[1]);
150 }else if(i == 2 && strcmp(flds[0], "icmem") == 0){
151 if(numok(flds[1]) < 0){
152 seterr(EAdmin, "illegal size %s in config file %s",
156 if(config->icmem != 0){
157 seterr(EAdmin, "duplicate icmem lines in config file %s", file);
160 config->icmem = unittoull(flds[1]);
161 }else if(i == 1 && strcmp(flds[0], "queuewrites") == 0){
162 config->queuewrites = 1;
163 }else if(i == 2 && strcmp(flds[0], "httpaddr") == 0){
165 seterr(EAdmin, "duplicate httpaddr lines in configuration file %s", file);
168 config->haddr = estrdup(flds[1]);
169 }else if(i == 2 && strcmp(flds[0], "webroot") == 0){
171 seterr(EAdmin, "duplicate webroot lines in configuration file %s", file);
174 config->webroot = estrdup(flds[1]);
175 }else if(i == 2 && strcmp(flds[0], "addr") == 0){
177 seterr(EAdmin, "duplicate addr lines in configuration file %s", file);
180 config->vaddr = estrdup(flds[1]);
182 seterr(EAdmin, "illegal line '%s' in configuration file %s", line, file);
193 free(config->aparts);
194 config->aparts = nil;
200 configisect(char *file)
205 if(0) fprint(2, "configure index section in %s\n", file);
207 part = initpart(file, ORDWR|ODIRECT);
210 is = initisect(part);
212 werrstr("%s: %r", file);
217 configarenas(char *file)
222 if(0) fprint(2, "configure arenas in %s\n", file);
223 part = initpart(file, ORDWR|ODIRECT);
226 ap = initarenapart(part);
228 werrstr("%s: %r", file);
233 configbloom(char *file)
238 if(0) fprint(2, "configure bloom in %s\n", file);
239 part = initpart(file, ORDWR|ODIRECT);
244 werrstr("%s: %r", file);
250 /* for OS X linker, which only resolves functions, not data */