Commit Briefs
bump version number (main)
fix gotwebd regress failure introduced with querystring changes
A folder parameter addressing the root directory is expected to be an empty string rather than "/".
move parsing of gotwebd querystrings into the pledge("stdio") process
Fields of the querystring structure become fixed-sized buffers for easy passing over imsg. This means we can no longer check pointers in this structure for NULL. Instead we have to check for empty strings. ok op@
dispatch new requests to the least-busy gotwebd worker
Instead of distributing requests across workers in a round-robin fashion keep track of how many requests a given worker has queued and send new requests to the worker which has the least amount of work queued for it. This makes gotwebd much more responsive than stupid round-robin, even though the new strategy is still not optimal because different types of requests carry different cost. E.g. blaming a file is usually heavier than listing trees. But it might be good enough, for now. Let's try and see. ok op@
run just one gotwebd process which listens on sockets
The listen statement is a global configuration setting and it does not make sense to have more than one process listening. Run just one process which listens and is now again called "sockets", having been renamed from "sockets" to "server" some time ago. There is no good reason to run more than one "server" since server-specific settings from gotwebd.conf are selected based on the SERVER_NAME sent in the FastCGI request. This selection is handled by the gotweb.c process. ok op@
sockets_launch: simplify listen() handling
* clean up the SOCKS_BACKLOG versus SOMAXCONN usage * factor out just one listen() call * slightly improve the logging by showing the socket "name" too. ok stsp@
make gotsysd-managed repositories readable for the _gotd group
This allows making the repositories readable by other user accounts, such as _gotwebd, by adding those users to the _gotd group.
make commit notifications only show the part of history unique to the branch
When a new branch is created, show all commits added on the branch relative to the HEAD branch, instead of showing just the tip commit. When branch history is changed with got send -f or git push -f, limit history traversal to a common ancestor with the HEAD branch, instead of walking the entire history until a root commit is found. Stacked branches will still show some extra history until they hit HEAD. This can be improved later. ok op@
set gotwebd pledges according to address families of listening sockets
We were implicitly relying on "inet" to provide "unix". Be more specific. ok op@
fix parallel processing of requests in gotwebd
Run just one server process per server declared in gotwebd.conf, instead of running additional server processes based on the "prefork" setting. The extra servers weren't actually used since they would all wake up together, only one of them would manage to accept a connection, and the others would fail wtth EWOULDBLOCK go back to sleep instead of handling other connections. Having a single listening process dispatch request across gotweb processes in a round-robin fashion actually allows requests to be processed in parallel as intended. We currently use a round-robin scheme which can still cause some requests to wait for a busy worker. This will be improved later. The "prefork" setting now only controls the number of gotweb workers which will be started. ok op@