kubernetes/pkg/controller
Dan Mace 010a127314 Fix quota controller worker deadlock
The resource quota controller worker pool can deadlock when:

* Worker goroutines are idle waiting for work from queues
* The Sync() method detects discovery updates to apply

The problem is workers acquire a read lock while idle, making write lock
acquisition dependent upon the presence of work in the queues.

The Sync() method blocks on a pending write lock acquisition and won't unblock
until every existing worker processes one item from their queue and releases
their read lock. While the Sync() method's lock is pending, all new read lock
acquisitions will block; if a worker does process work and release its lock, it
will then become blocked on a read lock acquisition; they become blocked on
Sync(). This can easily deadlock all the workers processing from one queue while
any workers on the other queue remain blocked waiting for work.

Fix the deadlock by refactoring workers to acquire a read lock *after* work is
popped from the queue. This allows writers to get locks while workers are idle,
while preserving the worker pause semantics necessary to allow safe sync.
2018-01-10 16:36:01 -05:00
..
bootstrap Autogenerate BUILD files 2017-12-23 13:12:11 -08:00
certificates Autogenerate BUILD files 2017-12-23 13:12:11 -08:00
cloud Fix scheduler refs in BUILD files. 2018-01-05 15:05:01 -08:00
clusterroleaggregation Autogenerate BUILD files 2017-12-23 13:12:11 -08:00
cronjob Autogenerate BUILD files 2017-12-23 13:12:11 -08:00
daemon Fix scheduler refs in BUILD files. 2018-01-05 15:05:01 -08:00
deployment Autogenerate BUILD files 2017-12-23 13:12:11 -08:00
disruption Autogenerate BUILD files 2017-12-23 13:12:11 -08:00
endpoint remove redundant deleting endpoint explicitly in endpoint controller 2018-01-02 20:35:30 +08:00
garbagecollector Merge pull request #55218 from chentao1596/optimize-error-nomatchkind 2018-01-04 20:43:20 -08:00
history Autogenerate BUILD files 2017-12-23 13:12:11 -08:00
job Autogenerate BUILD files 2017-12-23 13:12:11 -08:00
namespace Autogenerate BUILD files 2017-12-23 13:12:11 -08:00
nodeipam Refactor retry logic away from updateCIDRAllocation() 2018-01-09 12:45:55 +01:00
nodelifecycle Merge pull request #57852 from misterikkit/moveScheduler 2018-01-05 22:20:13 -08:00
podautoscaler Add test coverage for metrics/utilization.go 2018-01-06 10:26:51 -05:00
podgc Autogenerate BUILD files 2017-12-23 13:12:11 -08:00
replicaset Autogenerate BUILD files 2017-12-23 13:12:11 -08:00
replication Autogenerate BUILD files 2017-12-23 13:12:11 -08:00
resourcequota Fix quota controller worker deadlock 2018-01-10 16:36:01 -05:00
route Autogenerate BUILD files 2017-12-23 13:12:11 -08:00
service use sets.String to replace slice when sort []string 2018-01-06 16:16:37 +08:00
serviceaccount Autogenerate BUILD files 2017-12-23 13:12:11 -08:00
statefulset Merge pull request #55316 from tnozicka/statefulset-report-event-on-pod-recreate 2018-01-10 06:31:58 -08:00
testutil Update generated files 2017-11-09 12:14:08 +01:00
ttl Autogenerate BUILD files 2017-12-23 13:12:11 -08:00
util/node Split the NodeController into lifecycle and ipam pieces. 2018-01-04 12:48:08 -08:00
volume Merge pull request #57724 from mlmhl/ad_controller_populateDesiredStateOfWorld 2018-01-10 05:12:27 -08:00
.import-restrictions add import restrictions 2016-10-13 16:10:24 -07:00
BUILD Split the NodeController into lifecycle and ipam pieces. 2018-01-04 12:48:08 -08:00
client_builder.go remove duplicated import 2017-11-14 17:18:17 +08:00
controller_ref_manager.go Migrate to GetControllerOf from meta/v1 package 2017-08-06 22:41:58 +10:00
controller_ref_manager_test.go Merge pull request #50353 from zhangxiaoyu-zidif/Delete-redundant-expectError-for-controller-ref-test 2017-08-12 00:00:55 -07:00
controller_utils.go Removed unnecessary type conversion 2017-11-14 11:04:18 +02:00
controller_utils_test.go Removed unused function. 2017-11-14 10:53:29 +02:00
doc.go Use Go canonical import paths 2016-07-16 13:48:21 -04:00
lookup_cache.go Use fnv.New32a() in hash instead adler32 2017-02-15 14:03:54 +08:00
OWNERS remove some people from OWNERS so they don't get reviews anymore 2017-07-13 10:02:21 -07:00