1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-19 13:22:42 +01:00
No description
Find a file
epriestley ac7edf54af Fix bad counting in SQL when enforcing Drydock allocator soft limits
Summary:
Ref T9252. This fixes a bug from D14236. D14272 discusses the observable effects of the bug, primarily that the window for racing is widened from ~a few milliseconds to several minutes under our configuration.

This SQL query is missing a `GROUP BY` clause, so all of the resources get counted as having the same status (specifically, the alphabetically earliest status any resource had, I think). For test cases this often gets the right result since the number of resources may be small and they may all have the same status, but in production this isn't true. In particular, the allocator would sometimes see "35 destroyed resources" (or whatever), when the real counts were "32 destroyed resources + 3 pending resources".

Since this allocator behavior is soft/advisory this didn't cause any actual problems, per se (we do expect races here occasionally), it just made the race very very easy to hit. For example, Drydock in production currently has three pending working copy resources. Although we do expect this to be //possible//, getting 4 resources when the configured limit is 1 should be hard (not lightning strike / cosmic radiaion hard, but "happens once a year" hard).

Also exclude destroyed resources since we never care about them.

Test Plan:
Followed the plan from D14272 and restarted two Harbormaster workers at the same time.

After this patch was applied, they no longer created two different resources (we expect it to be possible for this to happen, just very hard).

We should still be able to force this race by putting something like `sleep(10)` right before the query, then `sleep(10)` right after it. That would prevent the allocators from seeing one another (so they would both think there were no other resources) and push us down the pathway where we exceed the soft limit.

Reviewers: chad, hach-que

Reviewed By: hach-que

Maniphest Tasks: T9252

Differential Revision: https://secure.phabricator.com/D14274
2015-10-14 06:18:10 -07:00
bin Provide bin/garbage for interacting with garbage collection 2015-10-02 09:17:24 -07:00
conf Mark some strings for translation 2015-06-09 23:06:52 +10:00
externals Use PEAR Text_Figlet to render figlet fonts 2015-09-13 12:31:07 -07:00
resources Rough cut of DrydockRepositoryOperation 2015-10-13 15:46:12 -07:00
scripts Provide bin/garbage for interacting with garbage collection 2015-10-02 09:17:24 -07:00
src Fix bad counting in SQL when enforcing Drydock allocator soft limits 2015-10-14 06:18:10 -07:00
support Add a "Startup" to DarkConsole 2015-08-21 14:53:29 -07:00
webroot Make Diffusion "Last Modified" rendering less fragile 2015-10-07 07:32:27 -07:00
.arcconfig Use the configuration driven unit test engine 2015-08-11 07:57:11 +10:00
.arclint Turn lint TODO comments back on 2015-05-27 10:06:55 -07:00
.arcunit Use the configuration driven unit test engine 2015-08-11 07:57:11 +10:00
.editorconfig Fix text lint issues 2015-02-12 07:00:13 +11:00
.gitignore Add custom Cows and Figlet directories to .gitignore 2015-10-08 20:23:05 -07:00
LICENSE Fix text lint issues 2015-02-12 07:00:13 +11:00
NOTICE Update Phabricator NOTICE file to reflect modern legal circumstances 2014-06-25 13:42:13 -07:00
README.md Marginal improvements to README 2015-03-08 11:29:06 -07:00

Phabricator is an open source collection of web applications which help software companies build better software.

Phabricator includes applications for:

  • reviewing and auditing source code;
  • hosting and browsing repositories;
  • tracking bugs;
  • managing projects;
  • conversing with team members;
  • assembling a party to venture forth;
  • writing stuff down and reading it later;
  • hiding stuff from coworkers; and
  • also some other things.

You can learn more about the project (and find links to documentation and resources) at Phabricator.org

Phabricator is developed and maintained by Phacility.


BUG REPORTS

Please update your install to HEAD before filing bug reports. Follow our bug reporting guide for complete instructions.

FEATURE REQUESTS

We're big fans of feature requests that state core problems, not just 'add this'. We've compiled a short guide to effective upstream requests here.

COMMUNITY CHAT

Please visit our IRC Channel (#phabricator on FreeNode) to talk with other members of the Phabricator community. There might be someone there who can help you with setup issues or what image to choose for a macro.

SECURITY ISSUES

Phabricator participates in HackerOne and may pay out for various issues reported there. You can find out more information on our HackerOne page.

PULL REQUESTS

We do not accept pull requests through GitHub. If you would like to contribute code, please read our Contributor's Guide for more information.

LICENSE

Phabricator is released under the Apache 2.0 license except as otherwise noted.