)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"577c7197e4bf6f4f937e59fec20e90fdaf3dbeb4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"cDOT 8.3 includes numerous new networking features, at least one"},{"line_number":10,"context_line":"of which (broadcast domains) must be used when creating network"},{"line_number":11,"context_line":"interfaces.  This patch enables the multi-SVM driver on cDOT 8.3"},{"line_number":12,"context_line":"by ensuring each port on which a LIF is created is added to a"},{"line_number":13,"context_line":"broadcast domain.  A couple of other API tweaks are included that"},{"line_number":14,"context_line":"also impeded operation on cDOT 8.3."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa32b979_bdfc4340","line":12,"updated":"2015-06-27 02:42:21.000000000","message":"\"is created is added\" -\u003e \"is created and added\"","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"07f6e57face6703ebf855df5894c6998d48019b2","unresolved":false,"context_lines":[{"line_number":9,"context_line":"cDOT 8.3 includes numerous new networking features, at least one"},{"line_number":10,"context_line":"of which (broadcast domains) must be used when creating network"},{"line_number":11,"context_line":"interfaces.  This patch enables the multi-SVM driver on cDOT 8.3"},{"line_number":12,"context_line":"by ensuring each port on which a LIF is created is added to a"},{"line_number":13,"context_line":"broadcast domain.  A couple of other API tweaks are included that"},{"line_number":14,"context_line":"also impeded operation on cDOT 8.3."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ba3cc151_a5231657","line":12,"in_reply_to":"ba3cc151_d93f33b2","updated":"2015-07-11 00:17:19.000000000","message":"As Mark says, the English was correct.  But I\u0027ve reworded it to read more easily.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"942974479863352a1504febc79fcb00393ffa3b5","unresolved":false,"context_lines":[{"line_number":9,"context_line":"cDOT 8.3 includes numerous new networking features, at least one"},{"line_number":10,"context_line":"of which (broadcast domains) must be used when creating network"},{"line_number":11,"context_line":"interfaces.  This patch enables the multi-SVM driver on cDOT 8.3"},{"line_number":12,"context_line":"by ensuring each port on which a LIF is created is added to a"},{"line_number":13,"context_line":"broadcast domain.  A couple of other API tweaks are included that"},{"line_number":14,"context_line":"also impeded operation on cDOT 8.3."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ba3cc151_d93f33b2","line":12,"in_reply_to":"fa32b979_bdfc4340","updated":"2015-07-03 06:57:00.000000000","message":"It\u0027s correct with the double \"is\" but it might read easier if \"on which a LIF is created\" was treated as a parenthetical expression by surrounding it with commas or perhaps dashes.  That would make it easier to read, but I\u0027m not sure if that would suggest that that part is optional.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"}],"manila/share/drivers/netapp/dataontap/client/client_base.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ff160765064e6c1b088a2aaae71fa55532ba2af8","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                self.defined_features \u003d set()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"            def add_feature(self, name, supported\u003dTrue):"},{"line_number":59,"context_line":"                self.defined_features.add(name)"},{"line_number":60,"context_line":"                setattr(self, name, bool(supported))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"            def __getattr__(self, name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_ddf1e36b","line":59,"updated":"2015-07-07 13:41:29.000000000","message":"Where \"self.defined_features\" is used? Maybe would be better to write there dict instead of string with names and use it instead of calling attrs and definition of \"__getattr__\" method?","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"07f6e57face6703ebf855df5894c6998d48019b2","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                self.defined_features \u003d set()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"            def add_feature(self, name, supported\u003dTrue):"},{"line_number":59,"context_line":"                self.defined_features.add(name)"},{"line_number":60,"context_line":"                setattr(self, name, bool(supported))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"            def __getattr__(self, name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_963883ef","line":59,"in_reply_to":"ba3cc151_19065f1c","updated":"2015-07-11 00:17:19.000000000","message":"I moved Features out to an independent class to make it reusable, and I added thorough unit tests for it.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"f33c1203d870c86c62cae55892276db3c8d95fc9","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                self.defined_features \u003d set()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"            def add_feature(self, name, supported\u003dTrue):"},{"line_number":59,"context_line":"                self.defined_features.add(name)"},{"line_number":60,"context_line":"                setattr(self, name, bool(supported))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"            def __getattr__(self, name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_19065f1c","line":59,"in_reply_to":"ba3cc151_ddf1e36b","updated":"2015-07-08 01:31:40.000000000","message":"I needed a clean way to check whether one or more features was available on a storage controller.  The wrong way is to do version checking all over the code.  So my intent here was to write a class that functions like a dynamic enum, so that during driver initialization I can check the version in one place and write something like:\n\n    self.features.add_feature(\u0027BROADCAST_DOMAINS\u0027)\n\nand then use it very cleanly in the code:\n\n    if self.features.BROADCAST_DOMAINS:\n        \u003cdo stuff with the feature\u003e\n\nI tried several alternatives and like the simplicity here, but I\u0027m always open to better ideas.  As time passes, most driver maintainers will eventually need to handle new features, so I\u0027m open to placing this mechanism in a more common location if others find it useful.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"942974479863352a1504febc79fcb00393ffa3b5","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"            def add_feature(self, name, supported\u003dTrue):"},{"line_number":59,"context_line":"                self.defined_features.add(name)"},{"line_number":60,"context_line":"                setattr(self, name, bool(supported))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"            def __getattr__(self, name):"},{"line_number":63,"context_line":"                # NOTE(cknight): Needed to keep pylint happy."}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_f9f1d701","line":60,"updated":"2015-07-03 06:57:00.000000000","message":"Would be  more striaghtforward if you didn\u0027t use bool() and just used the boolean parameter.  That way bool(\"False\") doesn\u0027t end up meaning True.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"07f6e57face6703ebf855df5894c6998d48019b2","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"            def add_feature(self, name, supported\u003dTrue):"},{"line_number":59,"context_line":"                self.defined_features.add(name)"},{"line_number":60,"context_line":"                setattr(self, name, bool(supported))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"            def __getattr__(self, name):"},{"line_number":63,"context_line":"                # NOTE(cknight): Needed to keep pylint happy."}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_5d745e66","line":60,"in_reply_to":"ba3cc151_190c1feb","updated":"2015-07-11 00:17:19.000000000","message":"Done.  Instead I added a check to ensure a bool is passed in.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ff160765064e6c1b088a2aaae71fa55532ba2af8","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"            def add_feature(self, name, supported\u003dTrue):"},{"line_number":59,"context_line":"                self.defined_features.add(name)"},{"line_number":60,"context_line":"                setattr(self, name, bool(supported))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"            def __getattr__(self, name):"},{"line_number":63,"context_line":"                # NOTE(cknight): Needed to keep pylint happy."}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_9ab7e1f4","line":60,"in_reply_to":"ba3cc151_e81c5579","updated":"2015-07-07 13:41:29.000000000","message":"+1","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5d9a554de06cee9faedadd9162a2ffd2026ae014","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"            def add_feature(self, name, supported\u003dTrue):"},{"line_number":59,"context_line":"                self.defined_features.add(name)"},{"line_number":60,"context_line":"                setattr(self, name, bool(supported))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"            def __getattr__(self, name):"},{"line_number":63,"context_line":"                # NOTE(cknight): Needed to keep pylint happy."}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_e81c5579","line":60,"in_reply_to":"ba3cc151_f9f1d701","updated":"2015-07-06 17:03:44.000000000","message":"+1. This should be changed.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"f33c1203d870c86c62cae55892276db3c8d95fc9","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"            def add_feature(self, name, supported\u003dTrue):"},{"line_number":59,"context_line":"                self.defined_features.add(name)"},{"line_number":60,"context_line":"                setattr(self, name, bool(supported))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"            def __getattr__(self, name):"},{"line_number":63,"context_line":"                # NOTE(cknight): Needed to keep pylint happy."}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_190c1feb","line":60,"in_reply_to":"ba3cc151_f9f1d701","updated":"2015-07-08 01:31:40.000000000","message":"Makes sense, thanks, Mark.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ff160765064e6c1b088a2aaae71fa55532ba2af8","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"            def __getattr__(self, name):"},{"line_number":63,"context_line":"                # NOTE(cknight): Needed to keep pylint happy."},{"line_number":64,"context_line":"                return False"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        self.features \u003d Features()"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_fa814d90","line":64,"updated":"2015-07-07 13:41:29.000000000","message":"I am not sure that it is good idea to just return \u0027False\u0027 here. It should raise \u0027AttributeError\u0027 that is expected behavior. Now, it can cause some bugs, maybe with future feature addons.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"942974479863352a1504febc79fcb00393ffa3b5","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"            def __getattr__(self, name):"},{"line_number":63,"context_line":"                # NOTE(cknight): Needed to keep pylint happy."},{"line_number":64,"context_line":"                return False"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        self.features \u003d Features()"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_19435b14","line":64,"updated":"2015-07-03 06:57:00.000000000","message":"why not return getattr(self, name, False) ?","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"eea0f65730a3cff677e090b42cd6050daca488be","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"            def __getattr__(self, name):"},{"line_number":63,"context_line":"                # NOTE(cknight): Needed to keep pylint happy."},{"line_number":64,"context_line":"                return False"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        self.features \u003d Features()"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_4a61e4d2","line":64,"in_reply_to":"ba3cc151_19435b14","updated":"2015-07-04 07:13:27.000000000","message":"Nevermind. Very bad idea.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"07f6e57face6703ebf855df5894c6998d48019b2","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"            def __getattr__(self, name):"},{"line_number":63,"context_line":"                # NOTE(cknight): Needed to keep pylint happy."},{"line_number":64,"context_line":"                return False"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        self.features \u003d Features()"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_c5b88ee8","line":64,"in_reply_to":"ba3cc151_d942373e","updated":"2015-07-11 00:17:19.000000000","message":"Turns out it\u0027s best after all to raise AttributeError in __getattr__().  So that\u0027s done.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"f33c1203d870c86c62cae55892276db3c8d95fc9","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"            def __getattr__(self, name):"},{"line_number":63,"context_line":"                # NOTE(cknight): Needed to keep pylint happy."},{"line_number":64,"context_line":"                return False"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        self.features \u003d Features()"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_d942373e","line":64,"in_reply_to":"ba3cc151_fa814d90","updated":"2015-07-08 01:31:40.000000000","message":"As I implied in the comment, I didn\u0027t want to override __getattr__() at all, but pylint couldn\u0027t handle this class otherwise.  Note that __getattr__() is called in rare circumstances, but I think the desired behavior for a class that contains a dynamic list of features is to return False for a missing one to indicate non-support of that feature.\n\nhttps://docs.python.org/2/reference/datamodel.html#object.__getattr__","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"}],"manila/share/drivers/netapp/dataontap/client/client_cmode.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ff160765064e6c1b088a2aaae71fa55532ba2af8","unresolved":false,"context_lines":[{"line_number":280,"context_line":"                },"},{"line_number":281,"context_line":"            },"},{"line_number":282,"context_line":"            \u0027desired-attributes\u0027: {"},{"line_number":283,"context_line":"                \u0027net-port-info\u0027: {"},{"line_number":284,"context_line":"                    \u0027port\u0027: None,"},{"line_number":285,"context_line":"                    \u0027node\u0027: None,"},{"line_number":286,"context_line":"                    \u0027operational-speed\u0027: None,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_da024909","line":283,"updated":"2015-07-07 13:41:29.000000000","message":"Will it work on old versions?","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"f33c1203d870c86c62cae55892276db3c8d95fc9","unresolved":false,"context_lines":[{"line_number":280,"context_line":"                },"},{"line_number":281,"context_line":"            },"},{"line_number":282,"context_line":"            \u0027desired-attributes\u0027: {"},{"line_number":283,"context_line":"                \u0027net-port-info\u0027: {"},{"line_number":284,"context_line":"                    \u0027port\u0027: None,"},{"line_number":285,"context_line":"                    \u0027node\u0027: None,"},{"line_number":286,"context_line":"                    \u0027operational-speed\u0027: None,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_b9ebb3db","line":283,"in_reply_to":"ba3cc151_da024909","updated":"2015-07-08 01:31:40.000000000","message":"Yes, this was a typo that shouldn\u0027t have ever worked, and the newer controller OS caught it.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"eea0f65730a3cff677e090b42cd6050daca488be","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        if self.features.BROADCAST_DOMAINS:"},{"line_number":369,"context_line":"            self._ensure_broadcast_domain_for_port("},{"line_number":370,"context_line":"                node, home_port_name, domain\u003dDEFAULT_BROADCAST_DOMAIN,"},{"line_number":371,"context_line":"                ipspace\u003dDEFAULT_IPSPACE)"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        interface_name \u003d (lif_name_template %"},{"line_number":374,"context_line":"                          {\u0027node\u0027: node, \u0027net_allocation_id\u0027: allocation_id})"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_caf17403","line":371,"updated":"2015-07-04 07:13:27.000000000","message":"You don\u0027t need to include the default params.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"07f6e57face6703ebf855df5894c6998d48019b2","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        if self.features.BROADCAST_DOMAINS:"},{"line_number":369,"context_line":"            self._ensure_broadcast_domain_for_port("},{"line_number":370,"context_line":"                node, home_port_name, domain\u003dDEFAULT_BROADCAST_DOMAIN,"},{"line_number":371,"context_line":"                ipspace\u003dDEFAULT_IPSPACE)"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        interface_name \u003d (lif_name_template %"},{"line_number":374,"context_line":"                          {\u0027node\u0027: node, \u0027net_allocation_id\u0027: allocation_id})"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_9de426e0","line":371,"in_reply_to":"ba3cc151_caf17403","updated":"2015-07-11 00:17:19.000000000","message":"Indeed not!  Fixed.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5d9a554de06cee9faedadd9162a2ffd2026ae014","unresolved":false,"context_lines":[{"line_number":497,"context_line":"            }"},{"line_number":498,"context_line":"            self.send_request(\u0027net-port-broadcast-domain-add-ports\u0027, api_args)"},{"line_number":499,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":500,"context_line":"            if e.code \u003d\u003d netapp_api.\\"},{"line_number":501,"context_line":"                    E_VIFMGR_PORT_ALREADY_ASSIGNED_TO_BROADCAST_DOMAIN:"},{"line_number":502,"context_line":"                LOG.debug(\u0027Port %(port)s already exists in broadcast domain \u0027"},{"line_number":503,"context_line":"                          \u0027%(domain)s\u0027, {\u0027port\u0027: port, \u0027domain\u0027: domain})"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_e81695a6","line":500,"updated":"2015-07-06 17:03:44.000000000","message":"Replace \\ with () if you are doing another patch.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"07f6e57face6703ebf855df5894c6998d48019b2","unresolved":false,"context_lines":[{"line_number":497,"context_line":"            }"},{"line_number":498,"context_line":"            self.send_request(\u0027net-port-broadcast-domain-add-ports\u0027, api_args)"},{"line_number":499,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":500,"context_line":"            if e.code \u003d\u003d netapp_api.\\"},{"line_number":501,"context_line":"                    E_VIFMGR_PORT_ALREADY_ASSIGNED_TO_BROADCAST_DOMAIN:"},{"line_number":502,"context_line":"                LOG.debug(\u0027Port %(port)s already exists in broadcast domain \u0027"},{"line_number":503,"context_line":"                          \u0027%(domain)s\u0027, {\u0027port\u0027: port, \u0027domain\u0027: domain})"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_bd832aca","line":500,"in_reply_to":"ba3cc151_bde97f1c","updated":"2015-07-11 00:17:19.000000000","message":"Done","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ff160765064e6c1b088a2aaae71fa55532ba2af8","unresolved":false,"context_lines":[{"line_number":497,"context_line":"            }"},{"line_number":498,"context_line":"            self.send_request(\u0027net-port-broadcast-domain-add-ports\u0027, api_args)"},{"line_number":499,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":500,"context_line":"            if e.code \u003d\u003d netapp_api.\\"},{"line_number":501,"context_line":"                    E_VIFMGR_PORT_ALREADY_ASSIGNED_TO_BROADCAST_DOMAIN:"},{"line_number":502,"context_line":"                LOG.debug(\u0027Port %(port)s already exists in broadcast domain \u0027"},{"line_number":503,"context_line":"                          \u0027%(domain)s\u0027, {\u0027port\u0027: port, \u0027domain\u0027: domain})"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_bde97f1c","line":500,"in_reply_to":"ba3cc151_e81695a6","updated":"2015-07-07 13:41:29.000000000","message":"Actually it violates rule H904 that is skipped for Manila for the moment. So, it \u0027should\u0027 be changed.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"}],"manila/tests/share/drivers/netapp/dataontap/client/test_client_cmode.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ff160765064e6c1b088a2aaae71fa55532ba2af8","unresolved":false,"context_lines":[{"line_number":584,"context_line":""},{"line_number":585,"context_line":"        self.assertListEqual([], result)"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"    @ddt.data(True, False)"},{"line_number":588,"context_line":"    def test_create_network_interface(self, broadcast_domains_supported):"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        self.client.features.add_feature(\u0027BROADCAST_DOMAINS\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_7de777e4","line":587,"updated":"2015-07-07 13:41:29.000000000","message":"Please, add also coverage for string variants \u0027True\u0027, \u0027False\u0027, \u00271\u0027, \u00270\u0027, etc. These should be verified, at least, for proper exception.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"07f6e57face6703ebf855df5894c6998d48019b2","unresolved":false,"context_lines":[{"line_number":584,"context_line":""},{"line_number":585,"context_line":"        self.assertListEqual([], result)"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"    @ddt.data(True, False)"},{"line_number":588,"context_line":"    def test_create_network_interface(self, broadcast_domains_supported):"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        self.client.features.add_feature(\u0027BROADCAST_DOMAINS\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_f6cb0f1c","line":587,"in_reply_to":"ba3cc151_7de777e4","updated":"2015-07-11 00:17:19.000000000","message":"Since I updated the Features class to only accept booleans, I think it\u0027s sufficient to leave this as is.\n\nBut I did add coverage for several non-bool variants in the new unit tests for the Features class.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ff160765064e6c1b088a2aaae71fa55532ba2af8","unresolved":false,"context_lines":[{"line_number":585,"context_line":"        self.assertListEqual([], result)"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"    @ddt.data(True, False)"},{"line_number":588,"context_line":"    def test_create_network_interface(self, broadcast_domains_supported):"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        self.client.features.add_feature(\u0027BROADCAST_DOMAINS\u0027,"},{"line_number":591,"context_line":"                                         broadcast_domains_supported)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_9d0fdb87","line":588,"updated":"2015-07-07 13:41:29.000000000","message":"Also, this and following test can be combined into one method using magic of \"ddt\".","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"07f6e57face6703ebf855df5894c6998d48019b2","unresolved":false,"context_lines":[{"line_number":585,"context_line":"        self.assertListEqual([], result)"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"    @ddt.data(True, False)"},{"line_number":588,"context_line":"    def test_create_network_interface(self, broadcast_domains_supported):"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        self.client.features.add_feature(\u0027BROADCAST_DOMAINS\u0027,"},{"line_number":591,"context_line":"                                         broadcast_domains_supported)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_00d8ad51","line":588,"in_reply_to":"ba3cc151_9d0fdb87","updated":"2015-07-11 00:17:19.000000000","message":"OK, I did this.  It saves lines, although I\u0027m not convinced it\u0027s an improvement in readability.","commit_id":"954e5f53d522aa0ab41304d8968a0f0634d04609"}]}
