about summary refs log tree commit diff
path: root/README
blob: 5917c37ce30b3f0a374c9fa376955f51f1d7bfbf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Cache algorithm
===============

Cgit normally returns cached pages when invoked. If there is no cache file, or
the cache file has expired, it is regenerated. Finally, the cache file is 
printed on stdout.

When it is decided that a cache file needs to be regenerated, an attempt is 
made to create a corresponding lockfile. If this fails, the process gives up
and uses the expired cache file instead.

When there is no cache file for a request, an attempt is made to create a 
corresponding lockfile. If this fails, the process calls sched_yield(2) before
restarting the request handling.

In pseudocode:

	name = generate_cache_name(request);
top:
	if (!exists(name)) {
		if (lock_cache(name)) {
			generate_cache(request, name);
			unlock_cache(name);
		} else {
			sched_yield();
			goto top;
		}
	} else if (expired(name)) {
		if (lock_cache(name)) {
			generate_cache(request, name);
			unlock_cache(name);
		}
	}
	print_file(name);


The following options can be set in /etc/cgitrc to control cache behaviour:
  cache-root:        root directory for cache files
  cache-root-ttl:    TTL for the repo listing page
  cache-repo-ttl:    TTL for any repos summary page
  cache-dynamic-ttl: TTL for pages with symbolic references (not SHA1)
  cache-static-ttl:  TTL for pages with sha1 references

TTL is specified in minutes, -1 meaning "infinite caching". 


Naming of cache files
---------------------
Repository listing:  <cachedir>/index.html
Repository summary:  <cachedir>/<repo>/index.html
Repository subpage:  <cachedir>/<repo>/<page>/<querystring>.html

The corresponding lock files have a ".lock" suffix.

19df29a0b9824f7b983dee33ccda9e32&follow=1'>Actually fix nvim and doas presence testsJune McEnroe 2020-07-14Install up CGI with mode 700June McEnroe It should never be served as a regular file. 2020-07-14Check that there is upload dataJune McEnroe 2020-07-14Add CGI upload program for temp.causal.agencyJune McEnroe 2020-07-10Add The Broken KingdomsJune McEnroe 2020-07-08Add facebook and twitter to title user-agentJune McEnroe This fixes fetching tweets again! https://github.com/thelounge/thelounge/pull/ 3602 (Intentionally breaking the link so GitHub doesn't add a "referenced this PR" thing?) 2020-06-30Tweak causal.agency for mostly no reasonJune McEnroe 2020-06-30Add Ancillary JusticeJune McEnroe 2020-06-26Add password non-manager to planJune McEnroe I've had this idea for years... 2020-06-26Tweak TF2 sensitivities once moreJune McEnroe 2020-06-19Add note about litterbox bot useJune McEnroe 2020-06-19Publish "IRC suite"June McEnroe 2020-06-17Add errors to link.shJune McEnroe