)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"6cdbbe951ecedbae296385582ec4dc7878dd33ef","unresolved":false,"context_lines":[{"line_number":10,"context_line":"were rehomed to neutron-lib recently [1] and included a private"},{"line_number":11,"context_line":"version of the respective classes. However these private classes"},{"line_number":12,"context_line":"are used within neutron [2][3] in enough places that it makes"},{"line_number":13,"context_line":"sense to have them public in neutron-lib."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch makes those service classes public so they can more"},{"line_number":16,"context_line":"easily be consumed in neutron [2][3]."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a430d35_1b301e9e","line":13,"updated":"2017-02-06 07:13:42.000000000","message":"to me [3] seems suggesting the opposite.","commit_id":"f719a0d07f369027af50ba8fb953015e120135f3"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"43177b04b5c1f8f759cec21632f7a919a149907c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"were rehomed to neutron-lib recently [1] and included a private"},{"line_number":11,"context_line":"version of the respective classes. However these private classes"},{"line_number":12,"context_line":"are used within neutron [2][3] in enough places that it makes"},{"line_number":13,"context_line":"sense to have them public in neutron-lib."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch makes those service classes public so they can more"},{"line_number":16,"context_line":"easily be consumed in neutron [2][3]."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a430d35_8e39eef4","line":13,"in_reply_to":"1a430d35_0cbd1868","updated":"2017-02-07 11:42:48.000000000","message":"OK, let me take another look at this one.","commit_id":"f719a0d07f369027af50ba8fb953015e120135f3"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"05bb668311702ef7d85669eae210bba9db71f6b1","unresolved":false,"context_lines":[{"line_number":10,"context_line":"were rehomed to neutron-lib recently [1] and included a private"},{"line_number":11,"context_line":"version of the respective classes. However these private classes"},{"line_number":12,"context_line":"are used within neutron [2][3] in enough places that it makes"},{"line_number":13,"context_line":"sense to have them public in neutron-lib."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch makes those service classes public so they can more"},{"line_number":16,"context_line":"easily be consumed in neutron [2][3]."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a430d35_edab8a87","line":13,"in_reply_to":"1a430d35_1b301e9e","updated":"2017-02-06 13:05:53.000000000","message":"I need to update the link for [3]; it only searches in neutron.","commit_id":"f719a0d07f369027af50ba8fb953015e120135f3"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"194dcda9dc4245c1aedf0f9471b1717e36431a06","unresolved":false,"context_lines":[{"line_number":10,"context_line":"were rehomed to neutron-lib recently [1] and included a private"},{"line_number":11,"context_line":"version of the respective classes. However these private classes"},{"line_number":12,"context_line":"are used within neutron [2][3] in enough places that it makes"},{"line_number":13,"context_line":"sense to have them public in neutron-lib."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch makes those service classes public so they can more"},{"line_number":16,"context_line":"easily be consumed in neutron [2][3]."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a430d35_538faacb","line":13,"in_reply_to":"1a430d35_8e39eef4","updated":"2017-02-07 13:29:33.000000000","message":"I took another look at this, and I still think making the classes public in lib is the right way to go. I\u0027ve updated the commit message as such in PS3.\n\n\nIf you disagree, please propose an alternative so that we can discuss.","commit_id":"f719a0d07f369027af50ba8fb953015e120135f3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"3c8456d8f6f308dbca60cf7aabfb9cbda1f6bffd","unresolved":false,"context_lines":[{"line_number":10,"context_line":"were rehomed to neutron-lib recently [1] and included a private"},{"line_number":11,"context_line":"version of the respective classes. However these private classes"},{"line_number":12,"context_line":"are used within neutron [2][3] in enough places that it makes"},{"line_number":13,"context_line":"sense to have them public in neutron-lib."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch makes those service classes public so they can more"},{"line_number":16,"context_line":"easily be consumed in neutron [2][3]."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a430d35_0cbd1868","line":13,"in_reply_to":"1a430d35_edab8a87","updated":"2017-02-07 03:21:10.000000000","message":"i felt the same with the updated url (PS2)","commit_id":"f719a0d07f369027af50ba8fb953015e120135f3"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3827a0981029857f2994643e538db467c798a03b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Boden R \u003cbodenvmw@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-02-10 09:38:46 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make service classes public"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The PluginInterface and WorkerSupportServiceMixin classes"},{"line_number":10,"context_line":"were rehomed to neutron-lib recently [1] and included a private"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa31d9ce_98af5329","line":7,"updated":"2017-02-14 19:04:49.000000000","message":"not sure I see why these must be public yet, I saw them as an implementation detail and neutron would be better off using the derived class rather than consuming the base bits. Please give me some time to digest this.","commit_id":"bc2fe2f0f84b4f08714e004708b3cc7a29a2a925"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"9d910cdc36ab9d01dd0c0fbf1ed2c2d29fe49656","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"[1] https://review.openstack.org/412519/"},{"line_number":31,"context_line":"[2] http://codesearch.openstack.org/?q\u003dWorkerSupportServiceMixin"},{"line_number":32,"context_line":"[3] http://codesearch.openstack.org/?q\u003dPluginInterface"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Change-Id: I722252b845a4396f1b193459b22e4352c93241e6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"ba2be162_0b1376b9","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":54},"updated":"2017-03-01 22:13:47.000000000","message":"Correct me if I am wrong, but PluginInterface (except tests, has really no other use other than the building block of [1]). If that\u0027s the case, and considering that unit tests might have outlived their purpose, we might get away with simply dropping its use in the neutron tree. As for WorkerSupportServiceMixin, one way in which we can keep this private and thus discourage the use of Mixins in consuming projects is to eradicate the specific use of the worker mixin by defining a common base class that provides worker properties/methods, which is then used by both ServicePluginBase and a newly defined PluginBase (to be used in [2] for instance). Ultimately this translates into renaming _WorkerSupportServiceMixin into WorkerBase, so to an extent is in line with what you did already :)\n\n[1] http://git.openstack.org/cgit/openstack/neutron/tree/neutron/services/service_base.py#n33\n[2] http://git.openstack.org/cgit/openstack/neutron/tree/neutron/neutron_plugin_base_v2.py#n31","commit_id":"bc2fe2f0f84b4f08714e004708b3cc7a29a2a925"}],"neutron_lib/services/base.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"6cdbbe951ecedbae296385582ec4dc7878dd33ef","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        The __subclasshook__ method is a class method"},{"line_number":26,"context_line":"        that will be called every time a class is tested"},{"line_number":27,"context_line":"        using issubclass(klass, _PluginInterface)."},{"line_number":28,"context_line":"        In that case, it will check that every method"},{"line_number":29,"context_line":"        marked with the abstractmethod decorator is"},{"line_number":30,"context_line":"        provided by the plugin class."}],"source_content_type":"text/x-python","patch_set":1,"id":"1a430d35_bb6d4a9a","line":27,"range":{"start_line":27,"start_character":32,"end_line":27,"end_character":48},"updated":"2017-02-06 07:13:42.000000000","message":"update this.","commit_id":"f719a0d07f369027af50ba8fb953015e120135f3"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"05bb668311702ef7d85669eae210bba9db71f6b1","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        The __subclasshook__ method is a class method"},{"line_number":26,"context_line":"        that will be called every time a class is tested"},{"line_number":27,"context_line":"        using issubclass(klass, _PluginInterface)."},{"line_number":28,"context_line":"        In that case, it will check that every method"},{"line_number":29,"context_line":"        marked with the abstractmethod decorator is"},{"line_number":30,"context_line":"        provided by the plugin class."}],"source_content_type":"text/x-python","patch_set":1,"id":"1a430d35_ed82aaff","line":27,"range":{"start_line":27,"start_character":32,"end_line":27,"end_character":48},"in_reply_to":"1a430d35_bb6d4a9a","updated":"2017-02-06 13:05:53.000000000","message":"sure.","commit_id":"f719a0d07f369027af50ba8fb953015e120135f3"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"264af46fb18a6805ccfc8e6b0b17e8d989f741aa","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":77,"context_line":"class ServicePluginBase(_PluginInterface, WorkerBase):"},{"line_number":78,"context_line":"    \"\"\"Define base interface for any Advanced Service plugin.\"\"\""},{"line_number":79,"context_line":"    supported_extension_aliases \u003d []"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba2be162_6cbf28aa","line":77,"updated":"2017-03-04 01:30:16.000000000","message":"At this point, have you considered rolling _PluginInterface into this base class instead? Then we go back to a much saner single inheritance.","commit_id":"11651ad5b1eca3c03f5e90571de0ffa2db30fe80"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"57fa9e8f86d9707313560cd7027e513be868abcf","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":77,"context_line":"class ServicePluginBase(_PluginInterface, WorkerBase):"},{"line_number":78,"context_line":"    \"\"\"Define base interface for any Advanced Service plugin.\"\"\""},{"line_number":79,"context_line":"    supported_extension_aliases \u003d []"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba2be162_89e1802c","line":77,"in_reply_to":"ba2be162_6cbf28aa","updated":"2017-03-06 14:52:13.000000000","message":"Yeah that seems to make sense IMO.","commit_id":"11651ad5b1eca3c03f5e90571de0ffa2db30fe80"}]}
