1 7a4ee46d 2003-11-23 devnull #include "stdinc.h"
2 7a4ee46d 2003-11-23 devnull #include "dat.h"
3 7a4ee46d 2003-11-23 devnull #include "fns.h"
5 7a4ee46d 2003-11-23 devnull #include "whack.h"
7 7a4ee46d 2003-11-23 devnull int debug;
8 7a4ee46d 2003-11-23 devnull int mainstacksize = 256*1024;
10 7a4ee46d 2003-11-23 devnull static void ventiserver(char *vaddr);
13 7a4ee46d 2003-11-23 devnull threadmain(int argc, char *argv[])
15 7a4ee46d 2003-11-23 devnull char *config, *haddr, *vaddr;
16 7a4ee46d 2003-11-23 devnull u32int mem, icmem, bcmem, minbcmem;
18 7a4ee46d 2003-11-23 devnull vaddr = "tcp!*!venti";
19 7a4ee46d 2003-11-23 devnull haddr = nil;
20 7a4ee46d 2003-11-23 devnull config = nil;
21 7a4ee46d 2003-11-23 devnull mem = 0xffffffffUL;
22 7a4ee46d 2003-11-23 devnull icmem = 0;
23 7a4ee46d 2003-11-23 devnull bcmem = 0;
24 7a4ee46d 2003-11-23 devnull ARGBEGIN{
25 7a4ee46d 2003-11-23 devnull case 'a':
26 7a4ee46d 2003-11-23 devnull vaddr = ARGF();
27 7a4ee46d 2003-11-23 devnull if(vaddr == nil)
28 7a4ee46d 2003-11-23 devnull goto usage;
30 7a4ee46d 2003-11-23 devnull case 'B':
31 7a4ee46d 2003-11-23 devnull bcmem = unittoull(ARGF());
33 7a4ee46d 2003-11-23 devnull case 'c':
34 7a4ee46d 2003-11-23 devnull config = ARGF();
35 7a4ee46d 2003-11-23 devnull if(config == nil)
36 7a4ee46d 2003-11-23 devnull goto usage;
38 7a4ee46d 2003-11-23 devnull case 'C':
39 7a4ee46d 2003-11-23 devnull mem = unittoull(ARGF());
41 7a4ee46d 2003-11-23 devnull case 'd':
42 7a4ee46d 2003-11-23 devnull debug = 1;
44 7a4ee46d 2003-11-23 devnull case 'h':
45 7a4ee46d 2003-11-23 devnull haddr = ARGF();
46 7a4ee46d 2003-11-23 devnull if(haddr == nil)
47 7a4ee46d 2003-11-23 devnull goto usage;
49 7a4ee46d 2003-11-23 devnull case 'I':
50 7a4ee46d 2003-11-23 devnull icmem = unittoull(ARGF());
52 7a4ee46d 2003-11-23 devnull case 'w':
53 7a4ee46d 2003-11-23 devnull queuewrites = 1;
56 7a4ee46d 2003-11-23 devnull goto usage;
59 7a4ee46d 2003-11-23 devnull print("whack %d\n", sizeof(Whack));
61 7a4ee46d 2003-11-23 devnull if(argc){
63 7a4ee46d 2003-11-23 devnull fprint(2, "usage: venti [-dw] [-a ventiaddress] [-h httpaddress] [-c config] [-C cachesize] [-I icachesize] [-B blockcachesize]\n");
64 7a4ee46d 2003-11-23 devnull threadexitsall("usage");
67 7a4ee46d 2003-11-23 devnull fmtinstall('V', vtscorefmt);
68 7a4ee46d 2003-11-23 devnull fmtinstall('H', encodefmt);
69 7a4ee46d 2003-11-23 devnull fmtinstall('F', vtfcallfmt);
71 7a4ee46d 2003-11-23 devnull if(config == nil)
72 7a4ee46d 2003-11-23 devnull config = "venti.conf";
75 7a4ee46d 2003-11-23 devnull if(initarenasum() < 0)
76 7a4ee46d 2003-11-23 devnull fprint(2, "warning: can't initialize arena summing process: %r");
78 7a4ee46d 2003-11-23 devnull if(initventi(config) < 0)
79 7a4ee46d 2003-11-23 devnull sysfatal("can't init server: %r");
81 7a4ee46d 2003-11-23 devnull if(mem == 0xffffffffUL)
82 7a4ee46d 2003-11-23 devnull mem = 1 * 1024 * 1024;
83 7a4ee46d 2003-11-23 devnull fprint(2, "initialize %d bytes of lump cache for %d lumps\n",
84 7a4ee46d 2003-11-23 devnull mem, mem / (8 * 1024));
85 7a4ee46d 2003-11-23 devnull initlumpcache(mem, mem / (8 * 1024));
87 7a4ee46d 2003-11-23 devnull icmem = u64log2(icmem / (sizeof(IEntry)+sizeof(IEntry*)) / ICacheDepth);
88 7a4ee46d 2003-11-23 devnull if(icmem < 4)
89 7a4ee46d 2003-11-23 devnull icmem = 4;
90 7a4ee46d 2003-11-23 devnull fprint(2, "initialize %d bytes of index cache for %d index entries\n",
91 7a4ee46d 2003-11-23 devnull (sizeof(IEntry)+sizeof(IEntry*)) * (1 << icmem) * ICacheDepth,
92 7a4ee46d 2003-11-23 devnull (1 << icmem) * ICacheDepth);
93 7a4ee46d 2003-11-23 devnull initicache(icmem, ICacheDepth);
96 7a4ee46d 2003-11-23 devnull * need a block for every arena and every process
98 7a4ee46d 2003-11-23 devnull minbcmem = maxblocksize *
99 7a4ee46d 2003-11-23 devnull (mainindex->narenas + mainindex->nsects*4 + 16);
100 7a4ee46d 2003-11-23 devnull if(bcmem < minbcmem)
101 7a4ee46d 2003-11-23 devnull bcmem = minbcmem;
103 7a4ee46d 2003-11-23 devnull fprint(2, "initialize %d bytes of disk block cache\n", bcmem);
104 7a4ee46d 2003-11-23 devnull initdcache(bcmem);
106 7a4ee46d 2003-11-23 devnull fprint(2, "sync arenas and index...\n");
107 7a4ee46d 2003-11-23 devnull if(syncindex(mainindex, 1) < 0)
108 7a4ee46d 2003-11-23 devnull sysfatal("can't sync server: %r");
110 7a4ee46d 2003-11-23 devnull if(queuewrites){
111 7a4ee46d 2003-11-23 devnull fprint(2, "initialize write queue...\n");
112 7a4ee46d 2003-11-23 devnull if(initlumpqueues(mainindex->nsects) < 0){
113 7a4ee46d 2003-11-23 devnull fprint(2, "can't initialize lump queues,"
114 7a4ee46d 2003-11-23 devnull " disabling write queueing: %r");
115 7a4ee46d 2003-11-23 devnull queuewrites = 0;
119 7a4ee46d 2003-11-23 devnull if(haddr){
120 7a4ee46d 2003-11-23 devnull fprint(2, "starting http server at %s\n", haddr);
121 7a4ee46d 2003-11-23 devnull if(httpdinit(haddr) < 0)
122 7a4ee46d 2003-11-23 devnull fprint(2, "warning: can't start http server: %r");
125 7a4ee46d 2003-11-23 devnull ventiserver(vaddr);
126 7a4ee46d 2003-11-23 devnull threadexitsall(0);
129 7a4ee46d 2003-11-23 devnull static void
130 7a4ee46d 2003-11-23 devnull vtrerror(VtReq *r, char *error)
132 7a4ee46d 2003-11-23 devnull r->rx.type = VtRerror;
133 7a4ee46d 2003-11-23 devnull r->rx.error = estrdup(error);
136 7a4ee46d 2003-11-23 devnull static void
137 7a4ee46d 2003-11-23 devnull ventiserver(char *addr)
139 7a4ee46d 2003-11-23 devnull Packet *p;
140 7a4ee46d 2003-11-23 devnull VtReq *r;
141 7a4ee46d 2003-11-23 devnull VtSrv *s;
142 24998851 2004-03-11 devnull char err[ERRMAX];
144 7a4ee46d 2003-11-23 devnull s = vtlisten(addr);
145 7a4ee46d 2003-11-23 devnull if(s == nil)
146 7a4ee46d 2003-11-23 devnull sysfatal("can't announce %s: %r", addr);
148 7a4ee46d 2003-11-23 devnull while((r = vtgetreq(s)) != nil){
149 7a4ee46d 2003-11-23 devnull r->rx.type = r->tx.type+1;
150 9ffbb5ad 2004-03-12 devnull // print("req (arenas[0]=%p sects[0]=%p) %F\n",
151 9ffbb5ad 2004-03-12 devnull // mainindex->arenas[0], mainindex->sects[0], &r->tx);
152 7a4ee46d 2003-11-23 devnull switch(r->tx.type){
153 7a4ee46d 2003-11-23 devnull default:
154 7a4ee46d 2003-11-23 devnull vtrerror(r, "unknown request");
156 7a4ee46d 2003-11-23 devnull case VtTread:
157 24998851 2004-03-11 devnull if((r->rx.data = readlump(r->tx.score, r->tx.dtype, r->tx.count)) == nil){
158 24998851 2004-03-11 devnull rerrstr(err, sizeof err);
159 24998851 2004-03-11 devnull vtrerror(r, err);
162 7a4ee46d 2003-11-23 devnull case VtTwrite:
163 7a4ee46d 2003-11-23 devnull p = r->tx.data;
164 7a4ee46d 2003-11-23 devnull r->tx.data = nil;
165 24998851 2004-03-11 devnull if(writelump(p, r->rx.score, r->tx.dtype, 0) < 0){
166 24998851 2004-03-11 devnull rerrstr(err, sizeof err);
167 24998851 2004-03-11 devnull vtrerror(r, err);
170 7a4ee46d 2003-11-23 devnull case VtTsync:
171 24998851 2004-03-11 devnull flushqueue();
172 24998851 2004-03-11 devnull flushdcache();
175 7a4ee46d 2003-11-23 devnull vtrespond(r);