{"action":"created","issue":{"url":"https://api.github.com/repos/zopefoundation/ZODB/issues/76","repository_url":"https://api.github.com/repos/zopefoundation/ZODB","labels_url":"https://api.github.com/repos/zopefoundation/ZODB/issues/76/labels{/name}","comments_url":"https://api.github.com/repos/zopefoundation/ZODB/issues/76/comments","events_url":"https://api.github.com/repos/zopefoundation/ZODB/issues/76/events","html_url":"https://github.com/zopefoundation/ZODB/pull/76","id":163266633,"number":76,"title":"Define a new interface for storages that support the new commit protocol.","user":{"login":"jimfulton","id":772727,"avatar_url":"https://avatars.githubusercontent.com/u/772727?v=3","gravatar_id":"","url":"https://api.github.com/users/jimfulton","html_url":"https://github.com/jimfulton","followers_url":"https://api.github.com/users/jimfulton/followers","following_url":"https://api.github.com/users/jimfulton/following{/other_user}","gists_url":"https://api.github.com/users/jimfulton/gists{/gist_id}","starred_url":"https://api.github.com/users/jimfulton/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jimfulton/subscriptions","organizations_url":"https://api.github.com/users/jimfulton/orgs","repos_url":"https://api.github.com/users/jimfulton/repos","events_url":"https://api.github.com/users/jimfulton/events{/privacy}","received_events_url":"https://api.github.com/users/jimfulton/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":5,"created_at":"2016-06-30T21:03:47Z","updated_at":"2016-07-01T12:29:44Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/zopefoundation/ZODB/pulls/76","html_url":"https://github.com/zopefoundation/ZODB/pull/76","diff_url":"https://github.com/zopefoundation/ZODB/pull/76.diff","patch_url":"https://github.com/zopefoundation/ZODB/pull/76.patch"},"body":"This allows interface incompatibilities:\r\n\r\n- Future version of ZODB that requires the new protocol being\r\n  configured with a storage that doesn't implement the new protocol\r\n\r\n- ZEO has a client that uses the old protocol can't use a storage that\r\n  implements the new protocol.\r\n\r\nTo be caught early.\r\n\r\nThis commit also clarifies that the serial returned by ``undo()`` is ignored."},"comment":{"url":"https://api.github.com/repos/zopefoundation/ZODB/issues/comments/229934574","html_url":"https://github.com/zopefoundation/ZODB/pull/76#issuecomment-229934574","issue_url":"https://api.github.com/repos/zopefoundation/ZODB/issues/76","id":229934574,"user":{"login":"jamadden","id":1256082,"avatar_url":"https://avatars.githubusercontent.com/u/1256082?v=3","gravatar_id":"","url":"https://api.github.com/users/jamadden","html_url":"https://github.com/jamadden","followers_url":"https://api.github.com/users/jamadden/followers","following_url":"https://api.github.com/users/jamadden/following{/other_user}","gists_url":"https://api.github.com/users/jamadden/gists{/gist_id}","starred_url":"https://api.github.com/users/jamadden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jamadden/subscriptions","organizations_url":"https://api.github.com/users/jamadden/orgs","repos_url":"https://api.github.com/users/jamadden/repos","events_url":"https://api.github.com/users/jamadden/events{/privacy}","received_events_url":"https://api.github.com/users/jamadden/received_events","type":"User","site_admin":false},"created_at":"2016-07-01T12:29:44Z","updated_at":"2016-07-01T12:29:44Z","body":"> In order for IMultiCommitStorage to extend IStorage, it should conform to IStorage, which is why the allowable return values in IStorage were expanded. I don't think you're objecting to this.\r\n\r\nNo, not at all. Just the duplication and the fact that the IStorage docs become rather difficult to parse given all the conditionals. Since there's a new interface that defines the expected return types for the new protocol, if it were me, I would have the IStorage docs say something like:\r\n```python\r\ndef tpc_vote(...):\r\n   \"\"\"\r\n   ...\r\n   Returns <whatever it returns>.\r\n\r\n   If the return value is not as specified here, it is allowed if and only if the implementation \r\n   provides a subclass of IStorage that further specifies the return value.\r\n   \"\"\"\r\n```\r\n\r\nBut that's me. Others may still prefer having the root interface explicitly list everything that all its subclasses support too."}}
{"actor":{"display_login":"jamadden"}}