Skip to content

Commit d2b01ae

Browse files
author
epriestley
committed
Use one daemon to discover commits in all repositories, not one per repository
Summary: See D2418. This merges the commit discovery daemon into the same single daemon, and applies all the same rules to it. There are relatively few implementation changes, but a few things did change: - I simplified/improved Mercurial importing, by finding full branch tip hashes with "--debug branches" and using "parents --template {node}" so we don't need to do separate "--debug id" calls. - Added a new "--not" flag to exclude repositories, since I switched to real arg parsing anyway. - I removed a web UI notification that you need to restart the daemons, this is no longer true. - I added a web UI notification that no pull daemon is running on the machine. NOTE: @makinde, this doesn't change anything from your perspective, but it something breaks this is the likely cause. This implicitly resolves T792, because discovery no longer runs before pulling. Test Plan: - Swapped databases to a fresh install. - Ran "pulllocal" in debug mode. Verified it correctly does nothing (fixed a minor issue with min() on empty array). - Added an SVN repository. Verified it cloned and discovered correctly. - Added a Mercurial repository. Verified it cloned and discovered correctly. - Added a Git repository. Verified it cloned and discovered correctly. - Ran with arguments to verify behaviors: "--not MTEST --not STEST", "P --no-discovery", "P". Reviewers: btrahan, csilvers, Makinde Reviewed By: btrahan CC: aran Maniphest Tasks: T792 Differential Revision: https://secure.phabricator.com/D2430
1 parent 679f778 commit d2b01ae

24 files changed

+635
-746
lines changed

Diff for: scripts/daemon/phabricator_daemon_launcher.php

+24-48
Original file line numberDiff line numberDiff line change
@@ -52,69 +52,45 @@ function must_have_extension($ext) {
5252
$need_launch = phd_load_tracked_repositories();
5353
if (!$need_launch) {
5454
echo "There are no repositories with tracking enabled.\n";
55-
exit(0);
55+
exit(1);
5656
}
5757

5858
will_launch($control);
59+
60+
echo "Launching PullLocal daemon in readonly mode...\n";
61+
5962
$control->launchDaemon(
6063
'PhabricatorRepositoryPullLocalDaemon',
61-
array());
64+
array(
65+
'--no-discovery',
66+
));
67+
68+
echo "Done.\n";
6269
break;
6370

6471
case 'repository-launch-master':
6572
$need_launch = phd_load_tracked_repositories();
6673
if (!$need_launch) {
6774
echo "There are no repositories with tracking enabled.\n";
6875
exit(1);
69-
} else {
70-
will_launch($control);
71-
72-
$control->launchDaemon(
73-
'PhabricatorRepositoryPullLocalDaemon',
74-
array());
75-
76-
foreach ($need_launch as $repository) {
77-
$name = $repository->getName();
78-
$callsign = $repository->getCallsign();
79-
$desc = "'{$name}' ({$callsign})";
80-
$phid = $repository->getPHID();
81-
82-
switch ($repository->getVersionControlSystem()) {
83-
case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
84-
echo "Launching discovery daemon on the {$desc} repository...\n";
85-
$control->launchDaemon(
86-
'PhabricatorRepositoryGitCommitDiscoveryDaemon',
87-
array(
88-
$phid,
89-
));
90-
break;
91-
case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
92-
echo "Launching discovery daemon on the {$desc} repository...\n";
93-
$control->launchDaemon(
94-
'PhabricatorRepositorySvnCommitDiscoveryDaemon',
95-
array(
96-
$phid,
97-
));
98-
break;
99-
case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
100-
echo "Launching discovery daemon on the {$desc} repository...\n";
101-
$control->launchDaemon(
102-
'PhabricatorRepositoryMercurialCommitDiscoveryDaemon',
103-
array(
104-
$phid,
105-
));
106-
break;
76+
}
10777

108-
}
109-
}
78+
will_launch($control);
11079

111-
echo "Launching CommitTask daemon...\n";
112-
$control->launchDaemon(
113-
'PhabricatorRepositoryCommitTaskDaemon',
114-
array());
80+
echo "Launching PullLocal daemon in master mode...\n";
81+
$control->launchDaemon(
82+
'PhabricatorRepositoryPullLocalDaemon',
83+
array());
11584

116-
echo "Done.\n";
117-
}
85+
echo "Launching CommitTask daemon...\n";
86+
$control->launchDaemon(
87+
'PhabricatorRepositoryCommitTaskDaemon',
88+
array());
89+
90+
echo "NOTE: Make sure you run some taskmaster daemons too, e.g. ".
91+
"with 'phd launch 4 taskmaster'.\n";
92+
93+
echo "Done.\n";
11894
break;
11995

12096
case 'launch':

Diff for: scripts/repository/discover.php

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/usr/bin/env php
2+
<?php
3+
4+
/*
5+
* Copyright 2012 Facebook, Inc.
6+
*
7+
* Licensed under the Apache License, Version 2.0 (the "License");
8+
* you may not use this file except in compliance with the License.
9+
* You may obtain a copy of the License at
10+
*
11+
* http://www.apache.org/licenses/LICENSE-2.0
12+
*
13+
* Unless required by applicable law or agreed to in writing, software
14+
* distributed under the License is distributed on an "AS IS" BASIS,
15+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
* See the License for the specific language governing permissions and
17+
* limitations under the License.
18+
*/
19+
20+
$root = dirname(dirname(dirname(__FILE__)));
21+
require_once $root.'/scripts/__init_script__.php';
22+
23+
$args = new PhutilArgumentParser($argv);
24+
$args->setTagline('manually discover working copies');
25+
$args->setSynopsis(<<<EOHELP
26+
**discover.php** [__options__] __repository-callsign-or-phid ...__
27+
Manually discover commits in working copies for the named repositories.
28+
EOHELP
29+
);
30+
$args->parseStandardArguments();
31+
$args->parse(
32+
array(
33+
array(
34+
'name' => 'repositories',
35+
'wildcard' => true,
36+
),
37+
));
38+
39+
$repo_names = $args->getArg('repositories');
40+
if (!$repo_names) {
41+
echo "Specify one or more repositories to pull, by callsign or PHID.\n";
42+
exit(1);
43+
}
44+
45+
$repos = PhabricatorRepository::loadAllByPHIDOrCallsign($repo_names);
46+
foreach ($repos as $repo) {
47+
$callsign = $repo->getCallsign();
48+
echo "Discovering '{$callsign}'...\n";
49+
PhabricatorRepositoryPullLocalDaemon::discoverRepository($repo);
50+
}
51+
echo "Done.\n";

Diff for: src/__phutil_library_map__.php

+3-13
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,6 @@
840840
'PhabricatorRepositoryCommit' => 'applications/repository/storage/commit',
841841
'PhabricatorRepositoryCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/base',
842842
'PhabricatorRepositoryCommitData' => 'applications/repository/storage/commitdata',
843-
'PhabricatorRepositoryCommitDiscoveryDaemon' => 'applications/repository/daemon/commitdiscovery/base',
844843
'PhabricatorRepositoryCommitHeraldWorker' => 'applications/repository/worker/herald',
845844
'PhabricatorRepositoryCommitMessageDetailParser' => 'applications/repository/parser/base',
846845
'PhabricatorRepositoryCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/base',
@@ -850,22 +849,18 @@
850849
'PhabricatorRepositoryController' => 'applications/repository/controller/base',
851850
'PhabricatorRepositoryCreateController' => 'applications/repository/controller/create',
852851
'PhabricatorRepositoryDAO' => 'applications/repository/storage/base',
853-
'PhabricatorRepositoryDaemon' => 'applications/repository/daemon/base',
854852
'PhabricatorRepositoryDefaultCommitMessageDetailParser' => 'applications/repository/parser/default',
855853
'PhabricatorRepositoryDeleteController' => 'applications/repository/controller/delete',
856854
'PhabricatorRepositoryEditController' => 'applications/repository/controller/edit',
857855
'PhabricatorRepositoryGitCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/git',
858-
'PhabricatorRepositoryGitCommitDiscoveryDaemon' => 'applications/repository/daemon/commitdiscovery/git',
859-
'PhabricatorRepositoryGitCommitDiscoveryDaemonTestCase' => 'applications/repository/daemon/commitdiscovery/git/__tests__',
860856
'PhabricatorRepositoryGitCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/git',
861857
'PhabricatorRepositoryListController' => 'applications/repository/controller/list',
862858
'PhabricatorRepositoryMercurialCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/mercurial',
863-
'PhabricatorRepositoryMercurialCommitDiscoveryDaemon' => 'applications/repository/daemon/commitdiscovery/mercurial',
864859
'PhabricatorRepositoryMercurialCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/mercurial',
865860
'PhabricatorRepositoryPullLocalDaemon' => 'applications/repository/daemon/pulllocal',
861+
'PhabricatorRepositoryPullLocalDaemonTestCase' => 'applications/repository/daemon/pulllocal/__tests__',
866862
'PhabricatorRepositoryShortcut' => 'applications/repository/storage/shortcut',
867863
'PhabricatorRepositorySvnCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/svn',
868-
'PhabricatorRepositorySvnCommitDiscoveryDaemon' => 'applications/repository/daemon/commitdiscovery/svn',
869864
'PhabricatorRepositorySvnCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/svn',
870865
'PhabricatorRepositorySymbol' => 'applications/repository/storage/symbol',
871866
'PhabricatorRepositoryTestCase' => 'applications/repository/storage/repository/__tests__',
@@ -1735,31 +1730,26 @@
17351730
'PhabricatorRepositoryCommit' => 'PhabricatorRepositoryDAO',
17361731
'PhabricatorRepositoryCommitChangeParserWorker' => 'PhabricatorRepositoryCommitParserWorker',
17371732
'PhabricatorRepositoryCommitData' => 'PhabricatorRepositoryDAO',
1738-
'PhabricatorRepositoryCommitDiscoveryDaemon' => 'PhabricatorRepositoryDaemon',
17391733
'PhabricatorRepositoryCommitHeraldWorker' => 'PhabricatorRepositoryCommitParserWorker',
17401734
'PhabricatorRepositoryCommitMessageParserWorker' => 'PhabricatorRepositoryCommitParserWorker',
17411735
'PhabricatorRepositoryCommitOwnersWorker' => 'PhabricatorRepositoryCommitParserWorker',
17421736
'PhabricatorRepositoryCommitParserWorker' => 'PhabricatorWorker',
1743-
'PhabricatorRepositoryCommitTaskDaemon' => 'PhabricatorRepositoryDaemon',
1737+
'PhabricatorRepositoryCommitTaskDaemon' => 'PhabricatorDaemon',
17441738
'PhabricatorRepositoryController' => 'PhabricatorController',
17451739
'PhabricatorRepositoryCreateController' => 'PhabricatorRepositoryController',
17461740
'PhabricatorRepositoryDAO' => 'PhabricatorLiskDAO',
1747-
'PhabricatorRepositoryDaemon' => 'PhabricatorDaemon',
17481741
'PhabricatorRepositoryDefaultCommitMessageDetailParser' => 'PhabricatorRepositoryCommitMessageDetailParser',
17491742
'PhabricatorRepositoryDeleteController' => 'PhabricatorRepositoryController',
17501743
'PhabricatorRepositoryEditController' => 'PhabricatorRepositoryController',
17511744
'PhabricatorRepositoryGitCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
1752-
'PhabricatorRepositoryGitCommitDiscoveryDaemon' => 'PhabricatorRepositoryCommitDiscoveryDaemon',
1753-
'PhabricatorRepositoryGitCommitDiscoveryDaemonTestCase' => 'PhabricatorTestCase',
17541745
'PhabricatorRepositoryGitCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
17551746
'PhabricatorRepositoryListController' => 'PhabricatorRepositoryController',
17561747
'PhabricatorRepositoryMercurialCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
1757-
'PhabricatorRepositoryMercurialCommitDiscoveryDaemon' => 'PhabricatorRepositoryCommitDiscoveryDaemon',
17581748
'PhabricatorRepositoryMercurialCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
17591749
'PhabricatorRepositoryPullLocalDaemon' => 'PhabricatorDaemon',
1750+
'PhabricatorRepositoryPullLocalDaemonTestCase' => 'PhabricatorTestCase',
17601751
'PhabricatorRepositoryShortcut' => 'PhabricatorRepositoryDAO',
17611752
'PhabricatorRepositorySvnCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
1762-
'PhabricatorRepositorySvnCommitDiscoveryDaemon' => 'PhabricatorRepositoryCommitDiscoveryDaemon',
17631753
'PhabricatorRepositorySvnCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
17641754
'PhabricatorRepositorySymbol' => 'PhabricatorRepositoryDAO',
17651755
'PhabricatorRepositoryTestCase' => 'PhabricatorTestCase',

Diff for: src/applications/diffusion/query/history/svn/DiffusionSvnHistoryQuery.php

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22

33
/*
4-
* Copyright 2011 Facebook, Inc.
4+
* Copyright 2012 Facebook, Inc.
55
*
66
* Licensed under the Apache License, Version 2.0 (the "License");
77
* you may not use this file except in compliance with the License.
@@ -33,7 +33,11 @@ protected function executeQuery() {
3333
PhabricatorRepository::TABLE_PATH,
3434
array(md5('/'.trim($path, '/'))));
3535
$paths = ipull($paths, 'id', 'path');
36-
$path_id = $paths['/'.trim($path, '/')];
36+
$path_id = idx($paths, '/'.trim($path, '/'));
37+
38+
if (!$path_id) {
39+
return array();
40+
}
3741

3842
$filter_query = '';
3943
if ($this->needDirectChanges) {

Diff for: src/applications/repository/controller/base/PhabricatorRepositoryController.php

+36-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22

33
/*
4-
* Copyright 2011 Facebook, Inc.
4+
* Copyright 2012 Facebook, Inc.
55
*
66
* Licensed under the Apache License, Version 2.0 (the "License");
77
* you may not use this file except in compliance with the License.
@@ -32,8 +32,43 @@ public function buildStandardPageResponse($view, array $data) {
3232
$page->setGlyph("rX");
3333
$page->appendChild($view);
3434

35+
3536
$response = new AphrontWebpageResponse();
3637
return $response->setContent($page->render());
3738
}
3839

40+
private function isPullDaemonRunningOnThisMachine() {
41+
42+
// This is sort of hacky, but should probably work.
43+
44+
list($stdout) = execx('ps auxwww');
45+
return preg_match('/PhabricatorRepositoryPullLocalDaemon/', $stdout);
46+
}
47+
48+
protected function renderDaemonNotice() {
49+
$daemon_running = $this->isPullDaemonRunningOnThisMachine();
50+
if ($daemon_running) {
51+
return null;
52+
}
53+
54+
$documentation = phutil_render_tag(
55+
'a',
56+
array(
57+
'href' => PhabricatorEnv::getDoclink(
58+
'article/Diffusion_User_Guide.html'),
59+
),
60+
'Diffusion User Guide');
61+
62+
$view = new AphrontErrorView();
63+
$view->setSeverity(AphrontErrorView::SEVERITY_WARNING);
64+
$view->setTitle('Repository Daemon Not Running');
65+
$view->appendChild(
66+
"<p>The repository daemon is not running on this machine. Without this ".
67+
"daemon, Phabricator will not be able to import or update repositories. ".
68+
"For instructions on starting the daemon, see ".
69+
"<strong>{$documentation}</strong>.</p>");
70+
71+
return $view;
72+
}
73+
3974
}

Diff for: src/applications/repository/controller/base/__init__.php

+4
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@
88

99
phutil_require_module('phabricator', 'aphront/response/webpage');
1010
phutil_require_module('phabricator', 'applications/base/controller/base');
11+
phutil_require_module('phabricator', 'infrastructure/env');
12+
phutil_require_module('phabricator', 'view/form/error');
1113

14+
phutil_require_module('phutil', 'future/exec');
15+
phutil_require_module('phutil', 'markup');
1216
phutil_require_module('phutil', 'utils');
1317

1418

Diff for: src/applications/repository/controller/edit/PhabricatorRepositoryEditController.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ public function processRequest() {
6363
phutil_escape_html($name)));
6464
}
6565

66+
$nav->appendChild($this->renderDaemonNotice());
67+
6668
$this->sideNav = $nav;
6769

6870
switch ($this->view) {
@@ -345,9 +347,7 @@ private function processTrackingRequest() {
345347
$error_view = new AphrontErrorView();
346348
$error_view->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
347349
$error_view->setTitle('Changes Saved');
348-
$error_view->appendChild(
349-
'Tracking changes were saved. You may need to restart the daemon '.
350-
'before changes will take effect.');
350+
$error_view->appendChild('Tracking changes were saved.');
351351
} else if (!$repository->isTracked()) {
352352
$error_view = new AphrontErrorView();
353353
$error_view->setSeverity(AphrontErrorView::SEVERITY_WARNING);

Diff for: src/applications/repository/controller/list/PhabricatorRepositoryListController.php

+1
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ public function processRequest() {
157157

158158
return $this->buildStandardPageResponse(
159159
array(
160+
$this->renderDaemonNotice(),
160161
$panel,
161162
$project_panel,
162163
),

Diff for: src/applications/repository/daemon/base/PhabricatorRepositoryDaemon.php

-38
This file was deleted.

Diff for: src/applications/repository/daemon/base/__init__.php

-15
This file was deleted.

0 commit comments

Comments
 (0)