{"action":"created","issue":{"url":"https://api.github.com/repos/crate/crate/issues/3277","repository_url":"https://api.github.com/repos/crate/crate","labels_url":"https://api.github.com/repos/crate/crate/issues/3277/labels{/name}","comments_url":"https://api.github.com/repos/crate/crate/issues/3277/comments","events_url":"https://api.github.com/repos/crate/crate/issues/3277/events","html_url":"https://github.com/crate/crate/pull/3277","id":135407417,"number":3277,"title":"internal paging: Use ShardId instead of int as key for exhausted iteraters","user":{"login":"mfussenegger","id":38700,"avatar_url":"https://avatars.githubusercontent.com/u/38700?v=3","gravatar_id":"","url":"https://api.github.com/users/mfussenegger","html_url":"https://github.com/mfussenegger","followers_url":"https://api.github.com/users/mfussenegger/followers","following_url":"https://api.github.com/users/mfussenegger/following{/other_user}","gists_url":"https://api.github.com/users/mfussenegger/gists{/gist_id}","starred_url":"https://api.github.com/users/mfussenegger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mfussenegger/subscriptions","organizations_url":"https://api.github.com/users/mfussenegger/orgs","repos_url":"https://api.github.com/users/mfussenegger/repos","events_url":"https://api.github.com/users/mfussenegger/events{/privacy}","received_events_url":"https://api.github.com/users/mfussenegger/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2016-02-22T12:48:35Z","updated_at":"2016-02-22T12:58:15Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/crate/crate/pulls/3277","html_url":"https://github.com/crate/crate/pull/3277","diff_url":"https://github.com/crate/crate/pull/3277.diff","patch_url":"https://github.com/crate/crate/pull/3277.patch"},"body":"The internal paging logic was broken for queries on partitioned tables.\n\nThere is a PagingIterator which is backed by multiple iterators and\nkeeps track which of them got exhausted.\n\nThe problem was that only the integer part of the ShardId was used to\ntrack which backing iterator is exhausted.\n\nIf a partitioned table is queried this id isn't unique since there are\nmultiple indices which all can have the same shardids.\n\nFor example in the following case:\n\n    2 Collectors for ShardId(index1, 0) and ShardId(index2, 0)\n\n    ShardId(index1, 0) becoming exhausted.\n\n    getCollector for 0\n    -> returns Collector for ShardId(index2, 0) instead of index1\n\nThis would cause an endless-recursion until a StackOverflow got raised."},"comment":{"url":"https://api.github.com/repos/crate/crate/issues/comments/187159539","html_url":"https://github.com/crate/crate/pull/3277#issuecomment-187159539","issue_url":"https://api.github.com/repos/crate/crate/issues/3277","id":187159539,"user":{"login":"seut","id":219690,"avatar_url":"https://avatars.githubusercontent.com/u/219690?v=3","gravatar_id":"","url":"https://api.github.com/users/seut","html_url":"https://github.com/seut","followers_url":"https://api.github.com/users/seut/followers","following_url":"https://api.github.com/users/seut/following{/other_user}","gists_url":"https://api.github.com/users/seut/gists{/gist_id}","starred_url":"https://api.github.com/users/seut/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seut/subscriptions","organizations_url":"https://api.github.com/users/seut/orgs","repos_url":"https://api.github.com/users/seut/repos","events_url":"https://api.github.com/users/seut/events{/privacy}","received_events_url":"https://api.github.com/users/seut/received_events","type":"User","site_admin":false},"created_at":"2016-02-22T12:58:15Z","updated_at":"2016-02-22T12:58:15Z","body":"add CHANGES  entry, otherwise ack"}}