{"action":"created","issue":{"url":"https://api.github.com/repos/akka/akka/issues/17997","labels_url":"https://api.github.com/repos/akka/akka/issues/17997/labels{/name}","comments_url":"https://api.github.com/repos/akka/akka/issues/17997/comments","events_url":"https://api.github.com/repos/akka/akka/issues/17997/events","html_url":"https://github.com/akka/akka/issues/17997","id":95124242,"number":17997,"title":"Clarify stream closing semantics for bidirectional components","user":{"login":"jrudolph","id":9868,"avatar_url":"https://avatars.githubusercontent.com/u/9868?v=3","gravatar_id":"","url":"https://api.github.com/users/jrudolph","html_url":"https://github.com/jrudolph","followers_url":"https://api.github.com/users/jrudolph/followers","following_url":"https://api.github.com/users/jrudolph/following{/other_user}","gists_url":"https://api.github.com/users/jrudolph/gists{/gist_id}","starred_url":"https://api.github.com/users/jrudolph/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jrudolph/subscriptions","organizations_url":"https://api.github.com/users/jrudolph/orgs","repos_url":"https://api.github.com/users/jrudolph/repos","events_url":"https://api.github.com/users/jrudolph/events{/privacy}","received_events_url":"https://api.github.com/users/jrudolph/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/akka/akka/labels/1%20-%20triaged","name":"1 - triaged","color":"5319e7"},{"url":"https://api.github.com/repos/akka/akka/labels/t:docs","name":"t:docs","color":"CCCCCC"},{"url":"https://api.github.com/repos/akka/akka/labels/t:stream","name":"t:stream","color":"cccccc"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/akka/akka/milestones/53","html_url":"https://github.com/akka/akka/milestones/streams-1.1","labels_url":"https://api.github.com/repos/akka/akka/milestones/53/labels","id":1206581,"number":53,"title":"streams-1.1","description":null,"creator":{"login":"ktoso","id":120979,"avatar_url":"https://avatars.githubusercontent.com/u/120979?v=3","gravatar_id":"","url":"https://api.github.com/users/ktoso","html_url":"https://github.com/ktoso","followers_url":"https://api.github.com/users/ktoso/followers","following_url":"https://api.github.com/users/ktoso/following{/other_user}","gists_url":"https://api.github.com/users/ktoso/gists{/gist_id}","starred_url":"https://api.github.com/users/ktoso/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ktoso/subscriptions","organizations_url":"https://api.github.com/users/ktoso/orgs","repos_url":"https://api.github.com/users/ktoso/repos","events_url":"https://api.github.com/users/ktoso/events{/privacy}","received_events_url":"https://api.github.com/users/ktoso/received_events","type":"User","site_admin":false},"open_issues":14,"closed_issues":3,"state":"open","created_at":"2015-07-14T07:39:51Z","updated_at":"2015-07-27T11:27:55Z","due_on":null,"closed_at":null},"comments":5,"created_at":"2015-07-15T07:20:43Z","updated_at":"2015-07-27T12:25:29Z","closed_at":null,"body":"As shown in #17992 a bidirectional components can easily provoke a race when the component is about to finish. When that happens completing the downstream side (regularly or with an error) is potentially racing against cancelling the upstream side.\r\n\r\nEventually, both must be done, but a better solution might be to complete the downstream side first, then wait for a grace period for the error to bubble through the counterpart in some form and only then cancel the upstream. The reasoning is that, especially in cases of an error, cancelling isn't able to transport any explanation about *why* the cancellation happened."},"comment":{"url":"https://api.github.com/repos/akka/akka/issues/comments/125186484","html_url":"https://github.com/akka/akka/issues/17997#issuecomment-125186484","issue_url":"https://api.github.com/repos/akka/akka/issues/17997","id":125186484,"user":{"login":"drewhk","id":932285,"avatar_url":"https://avatars.githubusercontent.com/u/932285?v=3","gravatar_id":"","url":"https://api.github.com/users/drewhk","html_url":"https://github.com/drewhk","followers_url":"https://api.github.com/users/drewhk/followers","following_url":"https://api.github.com/users/drewhk/following{/other_user}","gists_url":"https://api.github.com/users/drewhk/gists{/gist_id}","starred_url":"https://api.github.com/users/drewhk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/drewhk/subscriptions","organizations_url":"https://api.github.com/users/drewhk/orgs","repos_url":"https://api.github.com/users/drewhk/repos","events_url":"https://api.github.com/users/drewhk/events{/privacy}","received_events_url":"https://api.github.com/users/drewhk/received_events","type":"User","site_admin":false},"created_at":"2015-07-27T12:25:29Z","updated_at":"2015-07-27T12:25:29Z","body":"Ah, OK I see. Standardizing the error behavior on a certain set of BidiStages makes sense. Delaying the cancel is a bit tricky though, but probably worth the effort."}}