)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"918a0783bc9ffbfbf78efd4492238fc322331d69","unresolved":false,"context_lines":[{"line_number":25,"context_line":"vendor specific API calls and features is part of what"},{"line_number":26,"context_line":"put us in this mess in the first place, but regardless."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"The only compelling argument I\u0027ve heard abot moving"},{"line_number":29,"context_line":"things back into a single base VolumeDriver is that"},{"line_number":30,"context_line":"if a vendor implements a \"special\" feature like"},{"line_number":31,"context_line":"consistency groups, that they may not implement all"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a41bdd9_b0f4e65a","line":28,"updated":"2015-07-15 14:36:35.000000000","message":"about","commit_id":"cf07cfd928d0afab40526ea76237d53d2e13151b"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"5803c4904dfb36e2c9728bf6ff9aaf581043db6e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     John Griffith \u003cjohn.griffith8@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-15 08:44:19 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make base driver sane again"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The introduction of abc metaclasses was a great idea,"},{"line_number":10,"context_line":"however it ended up going a bit too far."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a41bdd9_5bfd7b6c","line":7,"updated":"2015-07-15 14:49:36.000000000","message":"The summary needs to be more descriptive.","commit_id":"4def1f510a07498579963d6e1aa0dd4a833d23ff"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"7c72475a311117af1eec56e90fb6950bcbe450f6","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     John Griffith \u003cjohn.griffith8@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-15 08:44:19 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make base driver sane again"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The introduction of abc metaclasses was a great idea,"},{"line_number":10,"context_line":"however it ended up going a bit too far."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a41bdd9_c12c3e9b","line":7,"in_reply_to":"9a41bdd9_5bfd7b6c","updated":"2015-07-15 15:16:35.000000000","message":"IMHO the summary is pretty spot on, but I\u0027ll try and write something else.","commit_id":"4def1f510a07498579963d6e1aa0dd4a833d23ff"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"cd02c113dc39371338d545076edc27939f464564","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     John Griffith \u003cjohn.griffith8@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-15 08:44:19 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make base driver sane again"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The introduction of abc metaclasses was a great idea,"},{"line_number":10,"context_line":"however it ended up going a bit too far."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a41bdd9_c9f4605c","line":7,"in_reply_to":"9a41bdd9_c12c3e9b","updated":"2015-07-15 16:49:07.000000000","message":"It\u0027s not.  It doesn\u0027t explain what this patch set does.  I don\u0027t want to be sitting around in two months going \"hmm which strong adjective was it that John used as that patch summary so I can find the patch that poked at all that abc code...\"\n\nPlease look over https://wiki.openstack.org/wiki/GitCommitMessages  \"The first commit line is the most important.\" section.","commit_id":"4def1f510a07498579963d6e1aa0dd4a833d23ff"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"5803c4904dfb36e2c9728bf6ff9aaf581043db6e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"We went from having a single base driver to inherit"},{"line_number":13,"context_line":"from using single inheritance models, to having a"},{"line_number":14,"context_line":"composition of base classes where the base class"},{"line_number":15,"context_line":"inherited 12 classes."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Some will argue that this improves code quality"},{"line_number":18,"context_line":"by forcing drivers to implement methods; that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a41bdd9_dbf18b96","line":15,"updated":"2015-07-15 14:49:36.000000000","message":"Having a bunch of classes when using abc is not really a surprise we hit after implementing it. That\u0027s how it was designed. I guess I\u0027m confused as to why this is an issue now.","commit_id":"4def1f510a07498579963d6e1aa0dd4a833d23ff"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"7c72475a311117af1eec56e90fb6950bcbe450f6","unresolved":false,"context_lines":[{"line_number":12,"context_line":"We went from having a single base driver to inherit"},{"line_number":13,"context_line":"from using single inheritance models, to having a"},{"line_number":14,"context_line":"composition of base classes where the base class"},{"line_number":15,"context_line":"inherited 12 classes."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Some will argue that this improves code quality"},{"line_number":18,"context_line":"by forcing drivers to implement methods; that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a41bdd9_d605e213","line":15,"in_reply_to":"9a41bdd9_dbf18b96","updated":"2015-07-15 15:16:35.000000000","message":"I objected to breaking out all of the classes based on function early on, and regardless of historians pulling quotes from IRC or etherpads stating I said or didn\u0027t say XYZ, the bottom line is what we have now IMO offers little or no value.  It\u0027s actually made the problem worse because now a driver can just pick and choose which modules (if any) they want to use.\n\nTo be completely honest I\u0027ve had issues with it since the patches started going in, and after living with it for a while and seeing what it\u0027s like I\u0027m even less of a fan.\n\nIf the expectation is that decisions are set in stone and can never be revisited or nothing is to ever be learned from experience that\u0027s news to me.  If everybody objects and disagrees with me... well... that fine; but at least rather than complaining about it I am trying to do something about it.","commit_id":"4def1f510a07498579963d6e1aa0dd4a833d23ff"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"5803c4904dfb36e2c9728bf6ff9aaf581043db6e","unresolved":false,"context_lines":[{"line_number":45,"context_line":"-- FakeISERDriver(FakeISCSIDriver):"},{"line_number":46,"context_line":"-- FibreChannelDriver(VolumeDriver):"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"As of Kilo, the number of classes in driver.py jumped to 25!!"},{"line_number":49,"context_line":"This includes classes that are a single one line method that"},{"line_number":50,"context_line":"are only used by a single driver."},{"line_number":51,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a41bdd9_1b4373b3","line":48,"updated":"2015-07-15 14:49:36.000000000","message":"See above","commit_id":"4def1f510a07498579963d6e1aa0dd4a833d23ff"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"7c72475a311117af1eec56e90fb6950bcbe450f6","unresolved":false,"context_lines":[{"line_number":45,"context_line":"-- FakeISERDriver(FakeISCSIDriver):"},{"line_number":46,"context_line":"-- FibreChannelDriver(VolumeDriver):"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"As of Kilo, the number of classes in driver.py jumped to 25!!"},{"line_number":49,"context_line":"This includes classes that are a single one line method that"},{"line_number":50,"context_line":"are only used by a single driver."},{"line_number":51,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a41bdd9_a1081adb","line":48,"in_reply_to":"9a41bdd9_1b4373b3","updated":"2015-07-15 15:16:35.000000000","message":"And see my comment above.  I\u0027m uncertain how anybody can honestly look at a case where a base class inherits 12 classes to build it, and all o f those are supposed \"abstract\" classes to begin with.\n\nMy problem here is that it\u0027s not necessary, we can achieve the same result (and I would argue better results) just using a single base driver with the abc decorator.\n\nFurthermore, the fact that we all agreed and decided to start down the path of allowing vendor features in the API that some backends would implement and others wouldn\u0027t was wrong.  We should\u0027ve done it differently, and I plan to submit patches to suggest alternate ways of dealing with that going forward as well, making a number of this inheritance structure and enforcement obsolete.","commit_id":"4def1f510a07498579963d6e1aa0dd4a833d23ff"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"5803c4904dfb36e2c9728bf6ff9aaf581043db6e","unresolved":false,"context_lines":[{"line_number":70,"context_line":"-- FibreChannelDriver(VolumeDriver):"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"This patch takes us back to a more sane base driver, and still"},{"line_number":73,"context_line":"provides the benefits of abc for required methods.  It\u0027s also"},{"line_number":74,"context_line":"trivial to add abc tags as new methods are deemed required."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Change-Id: Ie0b3336066176454b37c7dfcb52afb828e5fb50b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a41bdd9_7b0e3f8d","line":73,"updated":"2015-07-15 14:49:36.000000000","message":"What benefits does this new style provide and what benefits are being lost?","commit_id":"4def1f510a07498579963d6e1aa0dd4a833d23ff"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"7c72475a311117af1eec56e90fb6950bcbe450f6","unresolved":false,"context_lines":[{"line_number":70,"context_line":"-- FibreChannelDriver(VolumeDriver):"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"This patch takes us back to a more sane base driver, and still"},{"line_number":73,"context_line":"provides the benefits of abc for required methods.  It\u0027s also"},{"line_number":74,"context_line":"trivial to add abc tags as new methods are deemed required."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Change-Id: Ie0b3336066176454b37c7dfcb52afb828e5fb50b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a41bdd9_81287634","line":73,"in_reply_to":"9a41bdd9_7b0e3f8d","updated":"2015-07-15 15:16:35.000000000","message":"The only loss here is that Vendor only methods aren\u0027t grouped in their own class.  That\u0027s really it, and I\u0027m not even sure how/why that\u0027s considered an advantage at this point.\n\nThe advantage is a base driver that can actually be figured out, read and maintained.  It turns out there a number of drivers that don\u0027t inherit from this anyway and just do their own thing, which I suppose is still fine if that\u0027s what people want to do.","commit_id":"4def1f510a07498579963d6e1aa0dd4a833d23ff"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"9ebab020f282bb838bb9eed101d7d395d992c010","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Note that this is not full-proof, and in reality no"},{"line_number":31,"context_line":"implementation of ABC will be, because there\u0027s"},{"line_number":32,"context_line":"nothign to force the inheritance of the parent classes."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Change-Id: Ie0b3336066176454b37c7dfcb52afb828e5fb50b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a41bdd9_ae8a3562","line":32,"updated":"2015-07-15 21:13:32.000000000","message":"nothign","commit_id":"27ee8044660bc5822d5f29de080192df7ce91fe1"}],"cinder/volume/driver.py":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"9ebab020f282bb838bb9eed101d7d395d992c010","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"       Note that methods deemed as base functionality or required to be"},{"line_number":286,"context_line":"       implemented are marked with and abc decorator.  This decorator will"},{"line_number":287,"context_line":"       cause an attempt to load any subclass that doesn\u0027t impelment the"},{"line_number":288,"context_line":"       itnerface decorated by abc to result in a failure."},{"line_number":289,"context_line":"    \"\"\""},{"line_number":290,"context_line":"    VERSION \u003d \"N/A\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_cec77994","line":287,"updated":"2015-07-15 21:13:32.000000000","message":"implement","commit_id":"27ee8044660bc5822d5f29de080192df7ce91fe1"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"dc683943e1b6bbb37454dd5bf831875ffe165ed0","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"       Note that methods deemed as base functionality or required to be"},{"line_number":286,"context_line":"       implemented are marked with and abc decorator.  This decorator will"},{"line_number":287,"context_line":"       cause an attempt to load any subclass that doesn\u0027t impelment the"},{"line_number":288,"context_line":"       itnerface decorated by abc to result in a failure."},{"line_number":289,"context_line":"    \"\"\""},{"line_number":290,"context_line":"    VERSION \u003d \"N/A\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_c54d17c5","line":287,"in_reply_to":"9a41bdd9_cec77994","updated":"2015-07-15 21:44:30.000000000","message":"Done","commit_id":"27ee8044660bc5822d5f29de080192df7ce91fe1"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"9ebab020f282bb838bb9eed101d7d395d992c010","unresolved":false,"context_lines":[{"line_number":285,"context_line":"       Note that methods deemed as base functionality or required to be"},{"line_number":286,"context_line":"       implemented are marked with and abc decorator.  This decorator will"},{"line_number":287,"context_line":"       cause an attempt to load any subclass that doesn\u0027t impelment the"},{"line_number":288,"context_line":"       itnerface decorated by abc to result in a failure."},{"line_number":289,"context_line":"    \"\"\""},{"line_number":290,"context_line":"    VERSION \u003d \"N/A\""},{"line_number":291,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_eec27d84","line":288,"updated":"2015-07-15 21:13:32.000000000","message":"interface","commit_id":"27ee8044660bc5822d5f29de080192df7ce91fe1"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"dc683943e1b6bbb37454dd5bf831875ffe165ed0","unresolved":false,"context_lines":[{"line_number":285,"context_line":"       Note that methods deemed as base functionality or required to be"},{"line_number":286,"context_line":"       implemented are marked with and abc decorator.  This decorator will"},{"line_number":287,"context_line":"       cause an attempt to load any subclass that doesn\u0027t impelment the"},{"line_number":288,"context_line":"       itnerface decorated by abc to result in a failure."},{"line_number":289,"context_line":"    \"\"\""},{"line_number":290,"context_line":"    VERSION \u003d \"N/A\""},{"line_number":291,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_e5485bb5","line":288,"in_reply_to":"9a41bdd9_eec27d84","updated":"2015-07-15 21:44:30.000000000","message":"Done","commit_id":"27ee8044660bc5822d5f29de080192df7ce91fe1"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"9ebab020f282bb838bb9eed101d7d395d992c010","unresolved":false,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    # #######  BEGIN Interface methods for DataPath (Connector) ########"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"    # These are required as denoted by the abc decorator"},{"line_number":545,"context_line":"    @abc.abstractmethod"},{"line_number":546,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":547,"context_line":"        \"\"\"Synchronously recreates an export for a volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_aebeb5ab","line":544,"updated":"2015-07-15 21:13:32.000000000","message":"Only these or all decorated?","commit_id":"27ee8044660bc5822d5f29de080192df7ce91fe1"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"dc683943e1b6bbb37454dd5bf831875ffe165ed0","unresolved":false,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    # #######  BEGIN Interface methods for DataPath (Connector) ########"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"    # These are required as denoted by the abc decorator"},{"line_number":545,"context_line":"    @abc.abstractmethod"},{"line_number":546,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":547,"context_line":"        \"\"\"Synchronously recreates an export for a volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_05069f51","line":544,"in_reply_to":"9a41bdd9_aebeb5ab","updated":"2015-07-15 21:44:30.000000000","message":"yeah ,that comment probably just creates confusion, I\u0027ll leave it out.","commit_id":"27ee8044660bc5822d5f29de080192df7ce91fe1"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"8d981aeae6a0415e9fdf392027ecefc145959d50","unresolved":false,"context_lines":[{"line_number":1905,"context_line":"        data[\"storage_protocol\"] \u003d \u0027FC\u0027"},{"line_number":1906,"context_line":"        data[\"pools\"] \u003d []"},{"line_number":1907,"context_line":""},{"line_number":1908,"context_line":"        self._update_pools_and_stats(data)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_738cd135","side":"PARENT","line":1908,"updated":"2015-07-17 00:04:31.000000000","message":"Why this method is not called at _update_volume_stats anymore? Seems data[\u0027pool\u0027] is empty list.","commit_id":"c4c7acc2aef894abfd225b75f53e519bffccb7b9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3b5d813327f2c775c76229f963ee4d3f4dea3a63","unresolved":false,"context_lines":[{"line_number":1905,"context_line":"        data[\"storage_protocol\"] \u003d \u0027FC\u0027"},{"line_number":1906,"context_line":"        data[\"pools\"] \u003d []"},{"line_number":1907,"context_line":""},{"line_number":1908,"context_line":"        self._update_pools_and_stats(data)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_e1a9e67c","side":"PARENT","line":1908,"in_reply_to":"9a41bdd9_738cd135","updated":"2015-07-17 04:38:32.000000000","message":"+1","commit_id":"c4c7acc2aef894abfd225b75f53e519bffccb7b9"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"8d981aeae6a0415e9fdf392027ecefc145959d50","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        # Use Brick\u0027s code to do attach/detach"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        # NOTE(jdg): Is this valuable, only seems to be a few drivers"},{"line_number":365,"context_line":"        # that actually use it... and manager doesn\u0027t call it?"},{"line_number":366,"context_line":"        connector \u003d attach_info[\u0027connector\u0027]"},{"line_number":367,"context_line":"        connector.disconnect_volume(attach_info[\u0027conn\u0027][\u0027data\u0027],"},{"line_number":368,"context_line":"                                    attach_info[\u0027device\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_736291af","line":365,"updated":"2015-07-17 00:04:31.000000000","message":"This patch implements _detach_volume, attach_volume, copy_volume_data into manager.py. Therefore, in the future, these methods will be unnecessary in driver.py\n\nhttps://review.openstack.org/#/c/187270/","commit_id":"ada9aef2dc66f042f1f8923fc7746e90298f5fa1"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"a66aefe783759d3e8e3efaf666b43340c96cd514","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        # Use Brick\u0027s code to do attach/detach"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        # NOTE(jdg): Is this valuable, only seems to be a few drivers"},{"line_number":365,"context_line":"        # that actually use it... and manager doesn\u0027t call it?"},{"line_number":366,"context_line":"        connector \u003d attach_info[\u0027connector\u0027]"},{"line_number":367,"context_line":"        connector.disconnect_volume(attach_info[\u0027conn\u0027][\u0027data\u0027],"},{"line_number":368,"context_line":"                                    attach_info[\u0027device\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_40daf179","line":365,"in_reply_to":"9a41bdd9_017c0a1f","updated":"2015-07-17 14:49:22.000000000","message":"Hi Xing, Thank you for the confirmation. I missed that impact.","commit_id":"ada9aef2dc66f042f1f8923fc7746e90298f5fa1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3b5d813327f2c775c76229f963ee4d3f4dea3a63","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        # Use Brick\u0027s code to do attach/detach"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        # NOTE(jdg): Is this valuable, only seems to be a few drivers"},{"line_number":365,"context_line":"        # that actually use it... and manager doesn\u0027t call it?"},{"line_number":366,"context_line":"        connector \u003d attach_info[\u0027connector\u0027]"},{"line_number":367,"context_line":"        connector.disconnect_volume(attach_info[\u0027conn\u0027][\u0027data\u0027],"},{"line_number":368,"context_line":"                                    attach_info[\u0027device\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_017c0a1f","line":365,"in_reply_to":"9a41bdd9_736291af","updated":"2015-07-17 04:38:32.000000000","message":"If _detach_volume and _attach_volume are removed from driver.py, that will be a problem for backup.  create_backup in the backup manager calls backup_volume in volume driver (driver.py).  backup_volume calls _attach_volume and _detach_volume in driver.py.  Not sure how the call will happen if they are in volume manager only.  I added comments in the patch you mentioned.","commit_id":"ada9aef2dc66f042f1f8923fc7746e90298f5fa1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2a852dac66f0f88a765745af5757d0c16b1a7c2c","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        Returns a dict of volume properties eg. provider_location,"},{"line_number":517,"context_line":"        boolean indicating whether cloning occurred"},{"line_number":518,"context_line":"        \"\"\""},{"line_number":519,"context_line":"        return None, False"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"    @abc.abstractmethod"},{"line_number":522,"context_line":"    def create_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a41bdd9_7ded57b6","line":519,"updated":"2015-07-17 15:54:26.000000000","message":"I don\u0027t think clone_image is supposed to be an abc.abstractmethod.  Returning False as the second item in the tuple here tells the create flow to use a different path for copy_image_to_volume.  This will make it fail, since this method isn\u0027t supposed to be abstract.  I think.","commit_id":"ada9aef2dc66f042f1f8923fc7746e90298f5fa1"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"8c379222e99cb37a1f5807ca5dc6866d0f7ece32","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        Returns a dict of volume properties eg. provider_location,"},{"line_number":517,"context_line":"        boolean indicating whether cloning occurred"},{"line_number":518,"context_line":"        \"\"\""},{"line_number":519,"context_line":"        return None, False"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"    @abc.abstractmethod"},{"line_number":522,"context_line":"    def create_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_cd3160a4","line":519,"in_reply_to":"9a41bdd9_7ded57b6","updated":"2015-07-20 20:01:55.000000000","message":"Yeah so this was confusing for me:  https://github.com/openstack/cinder/blob/master/cinder/volume/driver.py#L954\n\nBut then we also have:\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/driver.py#L1351\n\nI would agree that it shouldn\u0027t be required though.","commit_id":"ada9aef2dc66f042f1f8923fc7746e90298f5fa1"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"1d07b16ef3f4e7f9cc85949bfb714fa1a76242fa","unresolved":false,"context_lines":[{"line_number":1901,"context_line":"        data[\"storage_protocol\"] \u003d \u0027FC\u0027"},{"line_number":1902,"context_line":"        data[\"pools\"] \u003d []"},{"line_number":1903,"context_line":""},{"line_number":1904,"context_line":"        self._update_pools_and_stats(data)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a50d1a3_74e33034","side":"PARENT","line":1904,"updated":"2015-07-20 21:38:14.000000000","message":"Still missing this line.","commit_id":"94e3098238f4af32f6ffa85833d0107cab07c14c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8d77f393919201ae8fa10809b21735c6a07de1b2","unresolved":false,"context_lines":[{"line_number":1901,"context_line":"        data[\"storage_protocol\"] \u003d \u0027FC\u0027"},{"line_number":1902,"context_line":"        data[\"pools\"] \u003d []"},{"line_number":1903,"context_line":""},{"line_number":1904,"context_line":"        self._update_pools_and_stats(data)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a50d1a3_b49f784f","side":"PARENT","line":1904,"in_reply_to":"3a50d1a3_74e33034","updated":"2015-07-20 21:44:24.000000000","message":"+1. This line should be added backup.","commit_id":"94e3098238f4af32f6ffa85833d0107cab07c14c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8d77f393919201ae8fa10809b21735c6a07de1b2","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        # Use Brick\u0027s code to do attach/detach"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        # NOTE(jdg): Is this valuable, only seems to be a few drivers"},{"line_number":361,"context_line":"        # that actually use it... and manager doesn\u0027t call it?"},{"line_number":362,"context_line":"        connector \u003d attach_info[\u0027connector\u0027]"},{"line_number":363,"context_line":"        connector.disconnect_volume(attach_info[\u0027conn\u0027][\u0027data\u0027],"},{"line_number":364,"context_line":"                                    attach_info[\u0027device\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a50d1a3_74c0102b","line":361,"updated":"2015-07-20 21:44:24.000000000","message":"This is needed for backup volume and copy_volume_data.","commit_id":"ee4d3b911049e6d747fade1d1fa0a7fa5aa7cace"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"6e7fd62651051bc1302832acafaed77815f80ced","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        # Use Brick\u0027s code to do attach/detach"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        # NOTE(jdg): Is this valuable, only seems to be a few drivers"},{"line_number":361,"context_line":"        # that actually use it... and manager doesn\u0027t call it?"},{"line_number":362,"context_line":"        connector \u003d attach_info[\u0027connector\u0027]"},{"line_number":363,"context_line":"        connector.disconnect_volume(attach_info[\u0027conn\u0027][\u0027data\u0027],"},{"line_number":364,"context_line":"                                    attach_info[\u0027device\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a50d1a3_f9c25352","line":361,"in_reply_to":"3a50d1a3_74c0102b","updated":"2015-07-23 01:16:23.000000000","message":"Thanks for the clarification","commit_id":"ee4d3b911049e6d747fade1d1fa0a7fa5aa7cace"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8d77f393919201ae8fa10809b21735c6a07de1b2","unresolved":false,"context_lines":[{"line_number":993,"context_line":"        the model_update and volumes_model_update and return them or"},{"line_number":994,"context_line":"        return None, None."},{"line_number":995,"context_line":"        \"\"\""},{"line_number":996,"context_line":"        raise NotImplementedError()"},{"line_number":997,"context_line":""},{"line_number":998,"context_line":"    def delete_consistencygroup(self, context, group):"},{"line_number":999,"context_line":"        \"\"\"Deletes a consistency group.\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a50d1a3_14b74cd9","line":996,"updated":"2015-07-20 21:44:24.000000000","message":"Do we still need NotImplementedError here? Other 4 CG functions just return. Is this because this was added later and considered optional for CG?","commit_id":"ee4d3b911049e6d747fade1d1fa0a7fa5aa7cace"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"6e7fd62651051bc1302832acafaed77815f80ced","unresolved":false,"context_lines":[{"line_number":993,"context_line":"        the model_update and volumes_model_update and return them or"},{"line_number":994,"context_line":"        return None, None."},{"line_number":995,"context_line":"        \"\"\""},{"line_number":996,"context_line":"        raise NotImplementedError()"},{"line_number":997,"context_line":""},{"line_number":998,"context_line":"    def delete_consistencygroup(self, context, group):"},{"line_number":999,"context_line":"        \"\"\"Deletes a consistency group.\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a50d1a3_39c99b59","line":996,"in_reply_to":"3a50d1a3_14b74cd9","updated":"2015-07-23 01:16:23.000000000","message":"Ah, yeah... I should have each of them raise since the abc decorator is not there.","commit_id":"ee4d3b911049e6d747fade1d1fa0a7fa5aa7cace"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8d77f393919201ae8fa10809b21735c6a07de1b2","unresolved":false,"context_lines":[{"line_number":1025,"context_line":"        If the driver throws an exception, the status of the group as well as"},{"line_number":1026,"context_line":"        those of the volumes to be added/removed will be set to \u0027error\u0027."},{"line_number":1027,"context_line":"        \"\"\""},{"line_number":1028,"context_line":"        raise NotImplementedError()"},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"    # #######  END Interface methods for Consistency Group ########"},{"line_number":1031,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a50d1a3_f4b3c0e7","line":1028,"updated":"2015-07-20 21:44:24.000000000","message":"same as above","commit_id":"ee4d3b911049e6d747fade1d1fa0a7fa5aa7cace"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"01826e02a58696eecd224e981f340101f15ca84b","unresolved":false,"context_lines":[{"line_number":1710,"context_line":"        data[\"vendor_name\"] \u003d \u0027Open Source\u0027"},{"line_number":1711,"context_line":"        data[\"driver_version\"] \u003d \u00271.0\u0027"},{"line_number":1712,"context_line":"        data[\"storage_protocol\"] \u003d \u0027FC\u0027"},{"line_number":1713,"context_line":"        data[\"pools\"] \u003d []"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a50d1a3_eed1abce","line":1713,"updated":"2015-07-21 01:23:10.000000000","message":"self._update_pools_and_stats() got lost","commit_id":"ee4d3b911049e6d747fade1d1fa0a7fa5aa7cace"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"6e7fd62651051bc1302832acafaed77815f80ced","unresolved":false,"context_lines":[{"line_number":1710,"context_line":"        data[\"vendor_name\"] \u003d \u0027Open Source\u0027"},{"line_number":1711,"context_line":"        data[\"driver_version\"] \u003d \u00271.0\u0027"},{"line_number":1712,"context_line":"        data[\"storage_protocol\"] \u003d \u0027FC\u0027"},{"line_number":1713,"context_line":"        data[\"pools\"] \u003d []"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a50d1a3_19061f52","line":1713,"in_reply_to":"3a50d1a3_eed1abce","updated":"2015-07-23 01:16:23.000000000","message":"Oops, yeah, my bad.  But, now that you mention it; I don\u0027t think this should be implemented anyway, _update_volume_stats should be a required method so IMO these should go away, be placed in base class and considered mandatory.","commit_id":"ee4d3b911049e6d747fade1d1fa0a7fa5aa7cace"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e4a00179b465de95db4b72a85b2ba124ec4acee7","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        the secondary volume."},{"line_number":350,"context_line":"        \"\"\""},{"line_number":351,"context_line":"        return"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    # #######  BEGIN Interface methods for DataPath (Connector) ########"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_b6b25805","line":352,"updated":"2015-07-23 22:05:49.000000000","message":"I think extend_volume is also required and it is missing here.","commit_id":"984a970fd0b58415c7275999d31b8b8098e9d4f7"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"ef523b41292b8cfb7c08d0938ec40d9240b7b71d","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        the secondary volume."},{"line_number":350,"context_line":"        \"\"\""},{"line_number":351,"context_line":"        return"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    # #######  BEGIN Interface methods for DataPath (Connector) ########"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_f3f72457","line":352,"in_reply_to":"3a50d1a3_b6b25805","updated":"2015-07-27 14:47:54.000000000","message":"Done","commit_id":"984a970fd0b58415c7275999d31b8b8098e9d4f7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e4a00179b465de95db4b72a85b2ba124ec4acee7","unresolved":false,"context_lines":[{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot):"},{"line_number":1017,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""},{"line_number":1018,"context_line":"        return"},{"line_number":1019,"context_line":""},{"line_number":1020,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot):"},{"line_number":1021,"context_line":"        \"\"\"Deletes a cgsnapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_565e7413","line":1018,"updated":"2015-07-23 22:05:49.000000000","message":"I thought you are going to change all CG functions to raise NotImplementedError() to be consistent?","commit_id":"984a970fd0b58415c7275999d31b8b8098e9d4f7"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"ef523b41292b8cfb7c08d0938ec40d9240b7b71d","unresolved":false,"context_lines":[{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot):"},{"line_number":1017,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""},{"line_number":1018,"context_line":"        return"},{"line_number":1019,"context_line":""},{"line_number":1020,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot):"},{"line_number":1021,"context_line":"        \"\"\"Deletes a cgsnapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_73a2344d","line":1018,"in_reply_to":"3a50d1a3_565e7413","updated":"2015-07-27 14:47:54.000000000","message":"Done","commit_id":"984a970fd0b58415c7275999d31b8b8098e9d4f7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e4a00179b465de95db4b72a85b2ba124ec4acee7","unresolved":false,"context_lines":[{"line_number":1661,"context_line":"    # FIXME(jdg): This is an abc method and not implemented in"},{"line_number":1662,"context_line":"    # VolumeDriver, probably no value in having it here and it should"},{"line_number":1663,"context_line":"    # probably be removed?"},{"line_number":1664,"context_line":""},{"line_number":1665,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":1666,"context_line":"        \"\"\"Initializes the connection and returns connection info."},{"line_number":1667,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_b65578fb","line":1664,"updated":"2015-07-23 22:05:49.000000000","message":"I think the benefit of keeping it here is to show example return values that are specific to FC drivers.","commit_id":"984a970fd0b58415c7275999d31b8b8098e9d4f7"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"ef523b41292b8cfb7c08d0938ec40d9240b7b71d","unresolved":false,"context_lines":[{"line_number":1661,"context_line":"    # FIXME(jdg): This is an abc method and not implemented in"},{"line_number":1662,"context_line":"    # VolumeDriver, probably no value in having it here and it should"},{"line_number":1663,"context_line":"    # probably be removed?"},{"line_number":1664,"context_line":""},{"line_number":1665,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":1666,"context_line":"        \"\"\"Initializes the connection and returns connection info."},{"line_number":1667,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_f3a5e446","line":1664,"in_reply_to":"3a50d1a3_b65578fb","updated":"2015-07-27 14:47:54.000000000","message":"Oh... maybe, we should figure something different out in the future to make the more clear I think though.","commit_id":"984a970fd0b58415c7275999d31b8b8098e9d4f7"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"7958d0da168fd038f7852db528b606cc7490f81f","unresolved":false,"context_lines":[{"line_number":254,"context_line":"CONF.register_opts(iser_opts)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"class BaseDriver(object):"},{"line_number":258,"context_line":"    \"\"\"Pure Abstract base driver class."},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    This Base Driver is the parent for all sub-classes and"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_9b84920b","line":257,"updated":"2015-07-28 09:18:42.000000000","message":"Not using the ABC metaclass will make this class instanceable although functions are not implemented properly. Is this what we want?","commit_id":"3aad48f8732e8fd93ddbb623e5f7e01ce735fb79"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"7958d0da168fd038f7852db528b606cc7490f81f","unresolved":false,"context_lines":[{"line_number":282,"context_line":"    def check_for_setup_error(self):"},{"line_number":283,"context_line":"        return"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    @abc.abstractmethod"},{"line_number":286,"context_line":"    def create_volume(self, volume):"},{"line_number":287,"context_line":"        \"\"\"Creates a volume. Can optionally return a Dictionary of"},{"line_number":288,"context_line":"        changes to the volume object to be persisted."}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_3b28dee1","line":285,"updated":"2015-07-28 09:18:42.000000000","message":"Why do we use this decorator at all if we deactivate the ABC meta parent class. This will make this decorator useless.\n\nSee [1]: \n Using this decorator requires that the class’s metaclass is ABCMeta or is   \n derived from it.\n\n[1]: https://docs.python.org/2/library/abc.html","commit_id":"3aad48f8732e8fd93ddbb623e5f7e01ce735fb79"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"7958d0da168fd038f7852db528b606cc7490f81f","unresolved":false,"context_lines":[{"line_number":296,"context_line":"            volume[\u0027replication_extended_status\u0027] \u003d driver specific value"},{"line_number":297,"context_line":"            volume[\u0027driver_data\u0027] \u003d driver specific value"},{"line_number":298,"context_line":"        \"\"\""},{"line_number":299,"context_line":"        return"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    @abc.abstractmethod"},{"line_number":302,"context_line":"    def delete_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_dbf45a5c","line":299,"updated":"2015-07-28 09:18:42.000000000","message":"Simply returning wont throw any exception if a driver doesn\u0027t have this functionality. For me this implementation is much more problematic than raising NotImplemented exceptions.","commit_id":"3aad48f8732e8fd93ddbb623e5f7e01ce735fb79"}],"cinder/volume/drivers/ibm/ibmnas.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e10881f509869bacb02755ab9e857d54e965a3c9","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                 self.configuration.ibmnas_platform_type)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def get_version(self):"},{"line_number":97,"context_line":"        return self.VERSION"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def set_execute(self, execute):"},{"line_number":100,"context_line":"        self._execute \u003d utils.execute"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a41bdd9_53123f58","line":97,"updated":"2015-07-15 16:00:01.000000000","message":"Is this an intended change?","commit_id":"4def1f510a07498579963d6e1aa0dd4a833d23ff"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"eab4ecff8661a814d59767819739cfe10c9a25b0","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                 self.configuration.ibmnas_platform_type)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def get_version(self):"},{"line_number":97,"context_line":"        return self.VERSION"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def set_execute(self, execute):"},{"line_number":100,"context_line":"        self._execute \u003d utils.execute"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a41bdd9_84595f90","line":97,"in_reply_to":"9a41bdd9_53123f58","updated":"2015-07-15 17:01:56.000000000","message":"yes, this driver was relying on the base impl of this, and it\u0027s the only driver that does so, so I just moved it here.\n\nIt also exposes an interesting case of the abc meta tag being circumvented anyway through the inheritance chain.","commit_id":"4def1f510a07498579963d6e1aa0dd4a833d23ff"}],"cinder/volume/drivers/pure.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e10881f509869bacb02755ab9e857d54e965a3c9","unresolved":false,"context_lines":[{"line_number":651,"context_line":"                                   check_exit_code\u003dcheck_exit_code)"},{"line_number":652,"context_line":"        LOG.debug(\"iscsiadm %(command)s: stdout\u003d%(out)s stderr\u003d%(err)s\","},{"line_number":653,"context_line":"                  {\u0027command\u0027: iscsi_command, \u0027out\u0027: out, \u0027err\u0027: err})"},{"line_number":654,"context_line":"        return (out, err)"},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"    def _get_target_iscsi_port(self):"},{"line_number":657,"context_line":"        \"\"\"Return dictionary describing iSCSI-enabled port on target array.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a41bdd9_30df71da","line":654,"updated":"2015-07-15 16:00:01.000000000","message":"Do you really want to add this here?  This looks exactly the same as the function in the ISCSIDriver.","commit_id":"4def1f510a07498579963d6e1aa0dd4a833d23ff"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"eab4ecff8661a814d59767819739cfe10c9a25b0","unresolved":false,"context_lines":[{"line_number":651,"context_line":"                                   check_exit_code\u003dcheck_exit_code)"},{"line_number":652,"context_line":"        LOG.debug(\"iscsiadm %(command)s: stdout\u003d%(out)s stderr\u003d%(err)s\","},{"line_number":653,"context_line":"                  {\u0027command\u0027: iscsi_command, \u0027out\u0027: out, \u0027err\u0027: err})"},{"line_number":654,"context_line":"        return (out, err)"},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"    def _get_target_iscsi_port(self):"},{"line_number":657,"context_line":"        \"\"\"Return dictionary describing iSCSI-enabled port on target array.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a41bdd9_5f123e58","line":654,"in_reply_to":"9a41bdd9_30df71da","updated":"2015-07-15 17:01:56.000000000","message":"Yes, so the SanDriver was modified by the ABC work to inherit from the BaseVD instead of the ISCSIDriver directly so my changes kinda messed that up.  I actually *should* go back and fix up san.py and I\u0027ll do that, then this can be removed again and won\u0027t be needed.\n\nThanks for pointing it out!","commit_id":"4def1f510a07498579963d6e1aa0dd4a833d23ff"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"273d6d90c9d7df242dde382ca50ab125ad5d4370","unresolved":false,"context_lines":[{"line_number":651,"context_line":"                                   check_exit_code\u003dcheck_exit_code)"},{"line_number":652,"context_line":"        LOG.debug(\"iscsiadm %(command)s: stdout\u003d%(out)s stderr\u003d%(err)s\","},{"line_number":653,"context_line":"                  {\u0027command\u0027: iscsi_command, \u0027out\u0027: out, \u0027err\u0027: err})"},{"line_number":654,"context_line":"        return (out, err)"},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"    def _get_target_iscsi_port(self):"},{"line_number":657,"context_line":"        \"\"\"Return dictionary describing iSCSI-enabled port on target array.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a41bdd9_95466779","line":654,"in_reply_to":"9a41bdd9_5f123e58","updated":"2015-07-15 18:13:29.000000000","message":"Ahh.. ok, had to run it again to remember :)  The inheritance stuff in the Pure driver is all absolutely good/correct as is the san.py stuff.\n\nI noticed when working on this that the Pure driver was the ONLY driver using this method, so I moved it out of the ISCSIDriver class and implemented it here.  Let me know if you\u0027d prefer it be left in the base class.","commit_id":"4def1f510a07498579963d6e1aa0dd4a833d23ff"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"1862868f998684b5650df13e131f4739482d59e1","unresolved":false,"context_lines":[{"line_number":651,"context_line":"                                   check_exit_code\u003dcheck_exit_code)"},{"line_number":652,"context_line":"        LOG.debug(\"iscsiadm %(command)s: stdout\u003d%(out)s stderr\u003d%(err)s\","},{"line_number":653,"context_line":"                  {\u0027command\u0027: iscsi_command, \u0027out\u0027: out, \u0027err\u0027: err})"},{"line_number":654,"context_line":"        return (out, err)"},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"    def _get_target_iscsi_port(self):"},{"line_number":657,"context_line":"        \"\"\"Return dictionary describing iSCSI-enabled port on target array.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a41bdd9_3a3e68c1","line":654,"in_reply_to":"9a41bdd9_5f123e58","updated":"2015-07-15 17:34:08.000000000","message":"I\u0027ll have to check... if the alternative iscsi portal stuff has been merged in nova we may not even need to do this anymore at all and it wont matter if we have this method or not.","commit_id":"4def1f510a07498579963d6e1aa0dd4a833d23ff"}],"cinder/volume/drivers/remotefs.py":[{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"1eba0a08a1effdff839da136b7ff3aa45b2a6cb5","unresolved":false,"context_lines":[{"line_number":616,"context_line":""},{"line_number":617,"context_line":"    # Obviously it\u0027s implemented here, if it\u0027s required"},{"line_number":618,"context_line":"    # that it\u0027s done elsewhere it should raise NotImpl,"},{"line_number":619,"context_line":"    # or use abc decorator.  Regardless doc string"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":622,"context_line":"        self._remotefsclient \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_df7ac9bc","line":619,"updated":"2015-07-15 19:21:53.000000000","message":"Should we file a bug or something to get this addressed?","commit_id":"27ee8044660bc5822d5f29de080192df7ce91fe1"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"dc683943e1b6bbb37454dd5bf831875ffe165ed0","unresolved":false,"context_lines":[{"line_number":616,"context_line":""},{"line_number":617,"context_line":"    # Obviously it\u0027s implemented here, if it\u0027s required"},{"line_number":618,"context_line":"    # that it\u0027s done elsewhere it should raise NotImpl,"},{"line_number":619,"context_line":"    # or use abc decorator.  Regardless doc string"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":622,"context_line":"        self._remotefsclient \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a41bdd9_65b8cb75","line":619,"in_reply_to":"9a41bdd9_df7ac9bc","updated":"2015-07-15 21:44:30.000000000","message":"I just removed the comment, we can address later/outside of this patch.","commit_id":"27ee8044660bc5822d5f29de080192df7ce91fe1"}]}
