{"action":"closed","issue":{"url":"https://api.github.com/repos/Terracotta-OSS/terracotta-apis/issues/110","repository_url":"https://api.github.com/repos/Terracotta-OSS/terracotta-apis","labels_url":"https://api.github.com/repos/Terracotta-OSS/terracotta-apis/issues/110/labels{/name}","comments_url":"https://api.github.com/repos/Terracotta-OSS/terracotta-apis/issues/110/comments","events_url":"https://api.github.com/repos/Terracotta-OSS/terracotta-apis/issues/110/events","html_url":"https://github.com/Terracotta-OSS/terracotta-apis/issues/110","id":160899421,"number":110,"title":"InvocationBuilder should blockGetOnRetire, by default","user":{"login":"jd0-sag","id":16048428,"avatar_url":"https://avatars.githubusercontent.com/u/16048428?v=3","gravatar_id":"","url":"https://api.github.com/users/jd0-sag","html_url":"https://github.com/jd0-sag","followers_url":"https://api.github.com/users/jd0-sag/followers","following_url":"https://api.github.com/users/jd0-sag/following{/other_user}","gists_url":"https://api.github.com/users/jd0-sag/gists{/gist_id}","starred_url":"https://api.github.com/users/jd0-sag/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jd0-sag/subscriptions","organizations_url":"https://api.github.com/users/jd0-sag/orgs","repos_url":"https://api.github.com/users/jd0-sag/repos","events_url":"https://api.github.com/users/jd0-sag/events{/privacy}","received_events_url":"https://api.github.com/users/jd0-sag/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":{"login":"jd0-sag","id":16048428,"avatar_url":"https://avatars.githubusercontent.com/u/16048428?v=3","gravatar_id":"","url":"https://api.github.com/users/jd0-sag","html_url":"https://github.com/jd0-sag","followers_url":"https://api.github.com/users/jd0-sag/followers","following_url":"https://api.github.com/users/jd0-sag/following{/other_user}","gists_url":"https://api.github.com/users/jd0-sag/gists{/gist_id}","starred_url":"https://api.github.com/users/jd0-sag/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jd0-sag/subscriptions","organizations_url":"https://api.github.com/users/jd0-sag/orgs","repos_url":"https://api.github.com/users/jd0-sag/repos","events_url":"https://api.github.com/users/jd0-sag/events{/privacy}","received_events_url":"https://api.github.com/users/jd0-sag/received_events","type":"User","site_admin":false},"milestone":null,"comments":0,"created_at":"2016-06-17T14:21:33Z","updated_at":"2016-06-20T19:18:21Z","closed_at":"2016-06-20T19:18:21Z","body":"When the `RETIRE` ack was added, it was primarily used for internal re-send tracking logic.  The ability to use it to track application control flow was purely opt-in.\r\n\r\nWe now think that this was the wrong default behavior and, instead, the `get()` on the invoke should block on `RETIRE`, unless explicitly requested not to.\r\n\r\nWhile this is somewhat more expensive, as it needs to wait for another ack, the general-case is expected not to defer retirement and the \"double-tap\" of `COMPLETE` followed immediately by `RETIRE` is one which an implementation should probably optimize into a batched idiom, anyway.\r\n\r\nThe reason to change the default behavior is that the consequences of many completed invokes don't transfer well to duplication, on re-send, and finding all of these \"opt-in\" cases would be hard to prove complete.\r\n\r\nA simple example would be acquiring a lock.  On complete, if the client-side records that it has the lock, expecting to use that during reconnect to rebuild server state, but doesn't wait for retirement, it is possible that it will assume that it owns the lock but also re-send the intent to acquire it (since the `COMPLETE` would unblock the application but the `RETIRE` is required to remove something from the re-sent message set).  This would cause the lock to block on itself.\r\n\r\nIn the cases where an entity knows that `COMPLETE` and `RETIRE` can drift, and knows that it can safely handle _only_ the `COMPLETE`, it could then choose to \"opt-out\", as a client-side optimization."}}
{"actor":{"display_login":"myronkscott"}}