{"action":"created","issue":{"url":"https://api.github.com/repos/cockroachdb/cockroach/issues/4172","repository_url":"https://api.github.com/repos/cockroachdb/cockroach","labels_url":"https://api.github.com/repos/cockroachdb/cockroach/issues/4172/labels{/name}","comments_url":"https://api.github.com/repos/cockroachdb/cockroach/issues/4172/comments","events_url":"https://api.github.com/repos/cockroachdb/cockroach/issues/4172/events","html_url":"https://github.com/cockroachdb/cockroach/pull/4172","id":131796212,"number":4172,"title":"Implement a \"purgatory\" state for ranges failing to replicate.","user":{"login":"spencerkimball","id":6147149,"avatar_url":"https://avatars.githubusercontent.com/u/6147149?v=3","gravatar_id":"","url":"https://api.github.com/users/spencerkimball","html_url":"https://github.com/spencerkimball","followers_url":"https://api.github.com/users/spencerkimball/followers","following_url":"https://api.github.com/users/spencerkimball/following{/other_user}","gists_url":"https://api.github.com/users/spencerkimball/gists{/gist_id}","starred_url":"https://api.github.com/users/spencerkimball/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spencerkimball/subscriptions","organizations_url":"https://api.github.com/users/spencerkimball/orgs","repos_url":"https://api.github.com/users/spencerkimball/repos","events_url":"https://api.github.com/users/spencerkimball/events{/privacy}","received_events_url":"https://api.github.com/users/spencerkimball/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":{"login":"tschottdorf","id":5076964,"avatar_url":"https://avatars.githubusercontent.com/u/5076964?v=3","gravatar_id":"","url":"https://api.github.com/users/tschottdorf","html_url":"https://github.com/tschottdorf","followers_url":"https://api.github.com/users/tschottdorf/followers","following_url":"https://api.github.com/users/tschottdorf/following{/other_user}","gists_url":"https://api.github.com/users/tschottdorf/gists{/gist_id}","starred_url":"https://api.github.com/users/tschottdorf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tschottdorf/subscriptions","organizations_url":"https://api.github.com/users/tschottdorf/orgs","repos_url":"https://api.github.com/users/tschottdorf/repos","events_url":"https://api.github.com/users/tschottdorf/events{/privacy}","received_events_url":"https://api.github.com/users/tschottdorf/received_events","type":"User","site_admin":false},"milestone":null,"comments":17,"created_at":"2016-02-06T00:24:12Z","updated_at":"2016-02-07T18:32:55Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/cockroachdb/cockroach/pulls/4172","html_url":"https://github.com/cockroachdb/cockroach/pull/4172","diff_url":"https://github.com/cockroachdb/cockroach/pull/4172.diff","patch_url":"https://github.com/cockroachdb/cockroach/pull/4172.patch"},"body":"A purgatory is where replicas which fail to up-replicate are placed\r\nin order to be quickly processed again when new store information\r\nis gossiped. The purgatory also offers a much less noisy logging\r\nmechanism. Initial failures for any replica are logged as before,\r\nbut further failures aren't logged. As long as a queue has replicas\r\nin purgatory, it periodically logs how many, grouped by the error\r\nmessage. The default logging frequency of this purgatory reporting\r\nis once every 10m.\r\n\r\nThe purgatory mechanism is part of the base queue, so we can use it\r\nfor other queue implementations as the need arises.\n\n<!-- Reviewable:start -->\n[<img src=\"https://reviewable.io/review_button.svg\" height=\"40\" alt=\"Review on Reviewable\"/>](https://reviewable.io/reviews/cockroachdb/cockroach/4172)\n<!-- Reviewable:end -->\n"},"comment":{"url":"https://api.github.com/repos/cockroachdb/cockroach/issues/comments/181074719","html_url":"https://github.com/cockroachdb/cockroach/pull/4172#issuecomment-181074719","issue_url":"https://api.github.com/repos/cockroachdb/cockroach/issues/4172","id":181074719,"user":{"login":"tamird","id":1535036,"avatar_url":"https://avatars.githubusercontent.com/u/1535036?v=3","gravatar_id":"","url":"https://api.github.com/users/tamird","html_url":"https://github.com/tamird","followers_url":"https://api.github.com/users/tamird/followers","following_url":"https://api.github.com/users/tamird/following{/other_user}","gists_url":"https://api.github.com/users/tamird/gists{/gist_id}","starred_url":"https://api.github.com/users/tamird/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tamird/subscriptions","organizations_url":"https://api.github.com/users/tamird/orgs","repos_url":"https://api.github.com/users/tamird/repos","events_url":"https://api.github.com/users/tamird/events{/privacy}","received_events_url":"https://api.github.com/users/tamird/received_events","type":"User","site_admin":false},"created_at":"2016-02-07T18:32:55Z","updated_at":"2016-02-07T18:32:55Z","body":"\n\n\n\nReviewed 7 of 7 files at r6.\nReview status: 7 of 10 files reviewed at latest revision, 9 unresolved discussions.\n\n---\n\n*[storage/queue.go, line 193 \\[r6\\]](https://reviewable.io:443/reviews/cockroachdb/cockroach/4172#-K9wje2foISmyUATHIM8:-K9wje2g8KHI_HKXMUaH:-688878737) ([raw file](https://github.com/cockroachdb/cockroach/blob/d4d6fd0d2e6f5aa7b4fc3c8ba19d76dfdbc232f4/storage/queue.go#L193)):*\nbaseQueue.mu was a sync.Locker so that the queue could be returned and embedded in the queueImpl by value. It's probably not worthwhile to keep that, but this method should s/make/new/ to reflect the new return type.\n\n---\n\n\n*Comments from the [review on Reviewable.io](https://reviewable.io:443/reviews/cockroachdb/cockroach/4172)*\n<!-- Sent from Reviewable.io -->\n"}}