git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [ANNOUNCE] CGit v0.1-pre

From
Linus Torvalds <torvalds@osdl.org>
Date
Dec 11, 2006, 01:04 UTC
Message-ID
<Pine.LNX.4.64.0612101653420.12500@woody.osdl.org>
In-Reply-To
<8c5c35580612101542n72d300c7o106e53e219670510@mail.gmail.com>
On Mon, 11 Dec 2006, Lars Hjemli wrote:
> 
> For a quick summary of the cache algorithm, the project README is here:
> 
>  http://hjemli.net/git/cgit/view/?id=5917c37ce30b3f0a374c9fa376955f51f1d7bfbf
Your pseudo-algorithm is dubious:
		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);
You really should have:
	if (!exists) {
		if (!lock)
			delay-and-repeat;
		/* RETEST exists _after_ getting the lock */
		if (!exists) {
			generate into lock-file
			mv lockfile exists;
		} else {
			rm lockfile
		}
	}

because you really want to re-check the existence after you got the lock, otherwise you would race with somebody else that got the lock, generated the data, and then unlocked (and you got the lock _after_ the data was generated, so now you generate it unnecessarily).

As a side note: how do you release your caches? 
Previous: MichaelNext: Lars Hjemli
Message 4 of 12 in “[ANNOUNCE] CGit v0.1-pre”
  1. Lars HjemliDec 10, 2006
  2. Jakub NarebskiDec 11, 2006
  3. MichaelDec 11, 2006
  4. Linus TorvaldsDec 11, 2006
  5. Lars HjemliDec 11, 2006
  6. Lars HjemliDec 11, 2006
  7. Linus TorvaldsDec 11, 2006
  8. Linus TorvaldsDec 11, 2006
  9. Lars HjemliDec 11, 2006
  10. Linus TorvaldsDec 11, 2006
  11. Lars HjemliDec 11, 2006
  12. Jakub NarebskiDec 11, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.