annotate contrib/tcsh_completion_build.sh @ 40021:c537144fdbef

wireprotov2: support response caching One of the things I've learned from managing VCS servers over the years is that they are hard to scale. It is well known that some companies have very beefy (read: very expensive) servers to power their VCS needs. It is also known that specialized servers for various VCS exist in order to facilitate scaling servers. (Mercurial is in this boat.) One of the aspects that make a VCS server hard to scale is the high CPU load incurred by constant client clone/pull operations. To alleviate the scaling pain associated with data retrieval operations, I want to integrate caching into the Mercurial wire protocol server as robustly as possible such that servers can aggressively cache responses and defer as much server load as possible. This commit represents the initial implementation of a general caching layer in wire protocol version 2. We define a new interface and behavior for a wire protocol cacher in repository.py. (This is probably where a reviewer should look first to understand what is going on.) The bulk of the added code is in wireprotov2server.py, where we define how a command can opt in to being cached and integrate caching into command dispatching. From a very high-level: * A command can declare itself as cacheable by providing a callable that can be used to derive a cache key. * At dispatch time, if a command is cacheable, we attempt to construct a cacher and use it for serving the request and/or caching the request. * The dispatch layer handles the bulk of the business logic for caching, making cachers mostly "dumb content stores." * The mechanism for invalidating cached entries (one of the harder parts about caching in general) is by varying the cache key when state changes. As such, cachers don't need to be concerned with cache invalidation. Initially, we've hooked up support for caching "manifestdata" and "filedata" commands. These are the simplest to cache, as they should be immutable over time. Caching of commands related to changeset data is a bit harder (because cache validation is impacted by changes to bookmarks, phases, etc). This will be implemented later. (Strictly speaking, censoring a file should invalidate caches. I've added an inline TODO to track this edge case.) To prove it works, this commit implements a test-only extension providing in-memory caching backed by an lrucachedict. A new test showing this extension behaving properly is added. FWIW, the cacher is ~50 lines of code, demonstrating the relative ease with which a cache can be added to a server. While the test cacher is not suitable for production workloads, just for kicks I performed a clone of just the changeset and manifest data for the mozilla-unified repository. With a fully warmed cache (of just the manifest data since changeset data is not cached), server-side CPU usage dropped from ~73s to ~28s. That's pretty significant and demonstrates the potential that response caching has on server scalability! Differential Revision: https://phab.mercurial-scm.org/D4773
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 26 Sep 2018 17:16:56 -0700
parents 2616325766e3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1155
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
1 #!/bin/sh
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
2
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
3 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
4 # tcsh_completion_build.sh - script to generate tcsh completion
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
5 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
6 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
7 # Copyright (C) 2005 TK Soh.
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
8 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
9 # This is free software; you can redistribute it and/or modify it under
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
10 # the terms of the GNU General Public License as published by the Free
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
11 # Software Foundation; either version 2 of the License, or (at your
1308
2073e5a71008 Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1157
diff changeset
12 # option) any later version.
1155
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
13 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
14 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
15 # Description
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
16 # -----------
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
17 # This script generates a tcsh source file to support completion
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
18 # of Mercurial commands and options.
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
19 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
20 # Instruction:
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
21 # -----------
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
22 # Run this script to generate the tcsh source file, and source
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
23 # the file to add command completion support for Mercurial.
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
24 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
25 # tcsh% tcsh_completion.sh FILE
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
26 # tcsh% source FILE
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
27 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
28 # If FILE is not specified, tcsh_completion will be generated.
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
29 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
30 # Bugs:
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
31 # ----
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
32 # 1. command specific options are not supported
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
33 # 2. hg commands must be specified immediately after 'hg'.
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
34 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
35
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
36 tcsh_file=${1-tcsh_completion}
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
37
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
38 hg_commands=`hg --debug help | \
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
39 sed -e '1,/^list of commands:/d' \
7766
2b2548342265 Update tcsh completion scripts with new commands and for new help output.
Gilles Moris <gilles.moris@free.fr>
parents: 1308
diff changeset
40 -e '/^enabled extensions:/,$d' \
13515
2616325766e3 contrib: update tcsh_completion for Mercurial 1.8
Gilles Moris <gilles.moris@free.fr>
parents: 7766
diff changeset
41 -e '/^additional help topics:/,$d' \
1157
6e66235084d9 tcsh_completion_build.sh: fixed error caused by xargs on Linux
TK Soh <tksoh@freescale.com>
parents: 1155
diff changeset
42 -e '/^ [^ ]/!d; s/[,:]//g;' | \
1155
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
43 xargs -n5 | \
1157
6e66235084d9 tcsh_completion_build.sh: fixed error caused by xargs on Linux
TK Soh <tksoh@freescale.com>
parents: 1155
diff changeset
44 sed -e '$!s/$/ \\\\/g; 2,$s/^ */ /g'`
1155
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
45
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
46 hg_global_options=`hg -v help | \
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
47 sed -e '1,/global/d;/^ *-/!d; s/ [^- ].*//' | \
1157
6e66235084d9 tcsh_completion_build.sh: fixed error caused by xargs on Linux
TK Soh <tksoh@freescale.com>
parents: 1155
diff changeset
48 sed -e 's/ *$//; $!s/$/ \\\\/g; 2,$s/^ */ /g'`
1155
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
49
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
50 hg_version=`hg version | sed -e '1q'`
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
51
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
52 script_name=`basename $0`
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
53
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
54 cat > $tcsh_file <<END
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
55 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
56 # tcsh completion for Mercurial
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
57 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
58 # This file has been auto-generated by $script_name for
1308
2073e5a71008 Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1157
diff changeset
59 # $hg_version
1155
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
60 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
61 # Copyright (C) 2005 TK Soh.
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
62 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
63 # This is free software; you can redistribute it and/or modify it under
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
64 # the terms of the GNU General Public License as published by the Free
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
65 # Software Foundation; either version 2 of the License, or (at your
1308
2073e5a71008 Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1157
diff changeset
66 # option) any later version.
1155
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
67 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
68
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
69 complete hg \\
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
70 'n/--cwd/d/' 'n/-R/d/' 'n/--repository/d/' \\
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
71 'C/-/($hg_global_options)/' \\
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
72 'p/1/($hg_commands)/'
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
73
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
74 END