2012-06-08 03:23:57 +02:00
|
|
|
#!/usr/bin/env php
|
|
|
|
<?php
|
|
|
|
|
|
|
|
require_once dirname(dirname(__FILE__)).'/__init_script__.php';
|
|
|
|
|
|
|
|
$args = new PhutilArgumentParser($argv);
|
|
|
|
$args->parseStandardArguments();
|
|
|
|
$args->parse(
|
|
|
|
array(
|
Add various flags to the HgProxy daemons
Summary:
- Add flags to exit after an idle time or client count.
- Add flags to control daemonization.
- Add flags to control output.
- Add flags to skip the "hello" frame of the protocol.
- Make the client launch a server if one does not exist.
The one-time overhead to launch a server and run a command through it looks to be ~130% of the overhead to run the command directly with "hg", so even if we never run a second command we're not paying too much.
The incremental overhead to run subsequent command appears to be less than 3% of the overhead to run the command directly with "hg" (and maybe less than 1%, I'm not sure how long the computation part of a command like 'hg log' "actually" takes).
The overhead to launch a PHP client, connect to an existing server, run a command, and then print it and exit is roughly 50% of the overhead to run the command directly with "hg". So theoretically a user can achieve an amortized 2x performance increase for all 'hg' commands by aliasing 'hg' to the PHP client in their shell.
Test Plan:
- Ran servers with idle and client count limits, let them idle and/or hit their connection limits, saw them exit.
- Ran foreground and background servers.
- Ran a daemon server with redirected stdout/stderr. Verified logs appeared.
- Ran with --quiet.
- Ran clients and servers with and without --skip-hello, things work if they agree and break if they disagree. The throughput gain on this is fairly small (maybe 5%?) but it seems simple enough to keep for the moment.
- Ran serverless clients and verified that servers launched the first time, were available subsequently, and relaunched after 15 seconds idle.
Reviewers: csilvers, vrana, btrahan
Reviewed By: csilvers
CC: aran
Differential Revision: https://secure.phabricator.com/D2680
2012-06-26 20:00:26 +02:00
|
|
|
array(
|
|
|
|
'name' => 'quiet',
|
|
|
|
'help' => 'Do not print status messages to stdout.',
|
|
|
|
),
|
|
|
|
array(
|
|
|
|
'name' => 'skip-hello',
|
|
|
|
'help' => 'Do not send "capability" message when clients connect. '.
|
|
|
|
'Clients must be configured not to expect the message. '.
|
|
|
|
'This deviates from the Mercurial protocol, but slightly '.
|
|
|
|
'improves performance.',
|
|
|
|
),
|
|
|
|
array(
|
|
|
|
'name' => 'do-not-daemonize',
|
|
|
|
'help' => 'Remain in the foreground instead of daemonizing.',
|
|
|
|
),
|
|
|
|
array(
|
|
|
|
'name' => 'client-limit',
|
|
|
|
'param' => 'limit',
|
|
|
|
'help' => 'Exit after serving __limit__ clients.',
|
|
|
|
),
|
|
|
|
array(
|
|
|
|
'name' => 'idle-limit',
|
|
|
|
'param' => 'seconds',
|
|
|
|
'help' => 'Exit after __seconds__ spent idle.',
|
|
|
|
),
|
2012-06-08 03:23:57 +02:00
|
|
|
array(
|
|
|
|
'name' => 'repository',
|
|
|
|
'wildcard' => true,
|
|
|
|
),
|
|
|
|
));
|
|
|
|
|
|
|
|
$repo = $args->getArg('repository');
|
|
|
|
if (count($repo) !== 1) {
|
2014-05-23 22:53:05 +02:00
|
|
|
throw new Exception('Specify exactly one working copy!');
|
2012-06-08 03:23:57 +02:00
|
|
|
}
|
|
|
|
$repo = head($repo);
|
|
|
|
|
Add various flags to the HgProxy daemons
Summary:
- Add flags to exit after an idle time or client count.
- Add flags to control daemonization.
- Add flags to control output.
- Add flags to skip the "hello" frame of the protocol.
- Make the client launch a server if one does not exist.
The one-time overhead to launch a server and run a command through it looks to be ~130% of the overhead to run the command directly with "hg", so even if we never run a second command we're not paying too much.
The incremental overhead to run subsequent command appears to be less than 3% of the overhead to run the command directly with "hg" (and maybe less than 1%, I'm not sure how long the computation part of a command like 'hg log' "actually" takes).
The overhead to launch a PHP client, connect to an existing server, run a command, and then print it and exit is roughly 50% of the overhead to run the command directly with "hg". So theoretically a user can achieve an amortized 2x performance increase for all 'hg' commands by aliasing 'hg' to the PHP client in their shell.
Test Plan:
- Ran servers with idle and client count limits, let them idle and/or hit their connection limits, saw them exit.
- Ran foreground and background servers.
- Ran a daemon server with redirected stdout/stderr. Verified logs appeared.
- Ran with --quiet.
- Ran clients and servers with and without --skip-hello, things work if they agree and break if they disagree. The throughput gain on this is fairly small (maybe 5%?) but it seems simple enough to keep for the moment.
- Ran serverless clients and verified that servers launched the first time, were available subsequently, and relaunched after 15 seconds idle.
Reviewers: csilvers, vrana, btrahan
Reviewed By: csilvers
CC: aran
Differential Revision: https://secure.phabricator.com/D2680
2012-06-26 20:00:26 +02:00
|
|
|
id(new ArcanistHgProxyServer($repo))
|
|
|
|
->setQuiet($args->getArg('quiet'))
|
|
|
|
->setClientLimit($args->getArg('client-limit'))
|
|
|
|
->setIdleLimit($args->getArg('idle-limit'))
|
|
|
|
->setDoNotDaemonize($args->getArg('do-not-daemonize'))
|
|
|
|
->setSkipHello($args->getArg('skip-hello'))
|
|
|
|
->start();
|