)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"224c69d5bdc79418596a44274f093d604103e869","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     boding \u003clongddropt@163.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-12-31 08:14:01 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Configure security data into DF DB"},{"line_number":8,"context_line":"Sync neutron security group data into DF DB"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Change-Id: I44e68066e457d2cf077dcb70fe4aa7fc5a11c0fb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa69d971_5c2bd6eb","line":7,"updated":"2015-12-31 01:33:49.000000000","message":"need a blank line to separate title from contents.","commit_id":"2dbaf3b941f98b45793c7bd71610e6661e1aee9b"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"919acda0fcd9375d9330b0cbdc51cdc2acbc8487","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     boding \u003clongddropt@163.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-12-31 08:14:01 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Configure security data into DF DB"},{"line_number":8,"context_line":"Sync neutron security group data into DF DB"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Change-Id: I44e68066e457d2cf077dcb70fe4aa7fc5a11c0fb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa69d971_0d83ca05","line":7,"in_reply_to":"fa69d971_5c2bd6eb","updated":"2016-01-02 10:01:06.000000000","message":"Yes, thanks :)","commit_id":"2dbaf3b941f98b45793c7bd71610e6661e1aee9b"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"224c69d5bdc79418596a44274f093d604103e869","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2015-12-31 08:14:01 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Configure security data into DF DB"},{"line_number":8,"context_line":"Sync neutron security group data into DF DB"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Change-Id: I44e68066e457d2cf077dcb70fe4aa7fc5a11c0fb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa69d971_1c355e45","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":4},"updated":"2015-12-31 01:33:49.000000000","message":"What\u0027s your purpose on this patch? Bug? BP?\nI\u0027m sorry that I cannot get it.","commit_id":"2dbaf3b941f98b45793c7bd71610e6661e1aee9b"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"919acda0fcd9375d9330b0cbdc51cdc2acbc8487","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2015-12-31 08:14:01 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Configure security data into DF DB"},{"line_number":8,"context_line":"Sync neutron security group data into DF DB"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Change-Id: I44e68066e457d2cf077dcb70fe4aa7fc5a11c0fb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa69d971_2d86ce13","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":4},"in_reply_to":"fa69d971_1c355e45","updated":"2016-01-02 10:01:06.000000000","message":"I will fix it","commit_id":"2dbaf3b941f98b45793c7bd71610e6661e1aee9b"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"3b849344078a5cea6980241c0936c1d0cff6749b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Configure security data into DF DB"},{"line_number":8,"context_line":"Sync neutron security group data into DF DB"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Change-Id: I44e68066e457d2cf077dcb70fe4aa7fc5a11c0fb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa69d971_926cd59d","line":9,"updated":"2015-12-31 03:53:50.000000000","message":"ding bo, please add \"implements blueprint: security-group-dragonflow-driver\"\n\nAs Li Ma suggested, we all need to start keeping better track of the patches (setting blueprints/bugs so we can later search and filter better, thanks Li Ma for reminding us)","commit_id":"2dbaf3b941f98b45793c7bd71610e6661e1aee9b"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"919acda0fcd9375d9330b0cbdc51cdc2acbc8487","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Configure security data into DF DB"},{"line_number":8,"context_line":"Sync neutron security group data into DF DB"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Change-Id: I44e68066e457d2cf077dcb70fe4aa7fc5a11c0fb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa69d971_cd7db21d","line":9,"in_reply_to":"fa69d971_926cd59d","updated":"2016-01-02 10:01:06.000000000","message":"Ok, I will do it","commit_id":"2dbaf3b941f98b45793c7bd71610e6661e1aee9b"}],"dragonflow/controller/df_local_controller.py":[{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"6f6920efba03e360db52887aafaa5c0b08e82fef","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"            self.read_routers()"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"            self.read_secgroups()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"            self.sync_finished \u003d True"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba63e191_582be930","line":113,"updated":"2016-01-19 08:56:48.000000000","message":"This should probably be before the ports reading as we will need this information when we update ports.","commit_id":"04979d8ad5fcb8b61eb0555e882071dc7ff1d0ff"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"c21c9bc025fc1811ffdf8ba8a5a4d890c3b70702","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"            self.read_routers()"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"            self.read_secgroups()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"            self.sync_finished \u003d True"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a68dd71_24767da4","line":113,"in_reply_to":"ba63e191_582be930","updated":"2016-01-24 11:30:54.000000000","message":"Yes. And I think we can further only sync relevant security groups of local ports. It is only the first step.","commit_id":"04979d8ad5fcb8b61eb0555e882071dc7ff1d0ff"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"1e90365e828e881c2a63f2a62a572eb3c12b66f5","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        old_secgroup \u003d self.db_store.get_secgroup(secgroup.get_name())"},{"line_number":224,"context_line":"        if old_secgroup is None:"},{"line_number":225,"context_line":"            LOG.info(_LI(\"Security Group created \u003d %s\") %"},{"line_number":226,"context_line":"                     secgroup.__str__())"},{"line_number":227,"context_line":"            self._add_new_secgroup(secgroup)"},{"line_number":228,"context_line":"            return"},{"line_number":229,"context_line":"        self._update_secgroup_rules(old_secgroup, secgroup)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba63e191_7db00af5","line":226,"range":{"start_line":226,"start_character":21,"end_line":226,"end_character":39},"updated":"2016-01-19 14:26:30.000000000","message":"is it necessary to explicitly call \u0027__str__\u0027?","commit_id":"04979d8ad5fcb8b61eb0555e882071dc7ff1d0ff"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"c21c9bc025fc1811ffdf8ba8a5a4d890c3b70702","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        old_secgroup \u003d self.db_store.get_secgroup(secgroup.get_name())"},{"line_number":224,"context_line":"        if old_secgroup is None:"},{"line_number":225,"context_line":"            LOG.info(_LI(\"Security Group created \u003d %s\") %"},{"line_number":226,"context_line":"                     secgroup.__str__())"},{"line_number":227,"context_line":"            self._add_new_secgroup(secgroup)"},{"line_number":228,"context_line":"            return"},{"line_number":229,"context_line":"        self._update_secgroup_rules(old_secgroup, secgroup)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a68dd71_64b7953a","line":226,"range":{"start_line":226,"start_character":21,"end_line":226,"end_character":39},"in_reply_to":"ba63e191_7db00af5","updated":"2016-01-24 11:30:54.000000000","message":"Good point. I will remove it.","commit_id":"04979d8ad5fcb8b61eb0555e882071dc7ff1d0ff"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"1a972628c9f2e42d0105906bedad859134e58d4b","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        old_secgroup_rules \u003d old_secgroup.rules"},{"line_number":336,"context_line":"        for new_rule in new_secgroup_rules:"},{"line_number":337,"context_line":"            if new_rule not in old_secgroup_rules:"},{"line_number":338,"context_line":"                self._add_new_secgroup_rule(new_secgroup, new_rule)"},{"line_number":339,"context_line":"            else:"},{"line_number":340,"context_line":"                old_secgroup_rules.remove(new_rule)"},{"line_number":341,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_fc2c689a","line":338,"range":{"start_line":338,"start_character":21,"end_line":338,"end_character":43},"updated":"2016-01-25 08:29:19.000000000","message":"You need to remove from the ld_secgroup_rules.remove(new_rule) \nant way this not a rule you want to delete","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"eed92e8b720a56e07694b7d043c58341a7fcb37a","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        old_secgroup_rules \u003d old_secgroup.rules"},{"line_number":336,"context_line":"        for new_rule in new_secgroup_rules:"},{"line_number":337,"context_line":"            if new_rule not in old_secgroup_rules:"},{"line_number":338,"context_line":"                self._add_new_secgroup_rule(new_secgroup, new_rule)"},{"line_number":339,"context_line":"            else:"},{"line_number":340,"context_line":"                old_secgroup_rules.remove(new_rule)"},{"line_number":341,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_1d5b95f7","line":338,"range":{"start_line":338,"start_character":21,"end_line":338,"end_character":43},"in_reply_to":"7a5de9d1_f49b4464","updated":"2016-01-31 18:40:27.000000000","message":"Yes you are correct","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"81bba3e1c9098c3e6acdf0788010c5e9e1902a11","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        old_secgroup_rules \u003d old_secgroup.rules"},{"line_number":336,"context_line":"        for new_rule in new_secgroup_rules:"},{"line_number":337,"context_line":"            if new_rule not in old_secgroup_rules:"},{"line_number":338,"context_line":"                self._add_new_secgroup_rule(new_secgroup, new_rule)"},{"line_number":339,"context_line":"            else:"},{"line_number":340,"context_line":"                old_secgroup_rules.remove(new_rule)"},{"line_number":341,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_6e18e375","line":338,"range":{"start_line":338,"start_character":21,"end_line":338,"end_character":43},"in_reply_to":"9a68dd71_fc2c689a","updated":"2016-01-30 03:00:38.000000000","message":"Thanks for your comments. I will add full functions of security group add, delete and update(actually rule add or delete)","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"021cfc330d33a7c656dd3b1c2c66a2fe199e2293","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        old_secgroup_rules \u003d old_secgroup.rules"},{"line_number":336,"context_line":"        for new_rule in new_secgroup_rules:"},{"line_number":337,"context_line":"            if new_rule not in old_secgroup_rules:"},{"line_number":338,"context_line":"                self._add_new_secgroup_rule(new_secgroup, new_rule)"},{"line_number":339,"context_line":"            else:"},{"line_number":340,"context_line":"                old_secgroup_rules.remove(new_rule)"},{"line_number":341,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_f49b4464","line":338,"range":{"start_line":338,"start_character":21,"end_line":338,"end_character":43},"in_reply_to":"9a68dd71_fc2c689a","updated":"2016-01-30 07:13:15.000000000","message":"Yes, actually, I remove it from the old_secgroup_rules set to avoid remove them in the line 343.","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b23f92c8801fe35695a1e84f673b42dfd37ad04b","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            self._add_new_router_port(lrouter, new_port)"},{"line_number":329,"context_line":"        self.db_store.update_router(lrouter.get_name(), lrouter)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def read_secgroups(self):"},{"line_number":332,"context_line":"        secgroups_to_remove \u003d self.db_store.get_security_group_keys()"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        for secgroup in self.nb_api.get_security_groups():"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a5de9d1_fc547ffe","line":331,"updated":"2016-01-31 11:56:17.000000000","message":"Consider renaming to read_security_groups.\nIn general, consider using security_groups instead of secgroups. Shortcuts are generally less clear.","commit_id":"7b96711ed28124bebf5ca7d3d156aacb367ad142"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"2f7c4520151970e5a7081e6f74e6518234dcb1f8","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            self._add_new_router_port(lrouter, new_port)"},{"line_number":329,"context_line":"        self.db_store.update_router(lrouter.get_name(), lrouter)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def read_secgroups(self):"},{"line_number":332,"context_line":"        secgroups_to_remove \u003d self.db_store.get_security_group_keys()"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        for secgroup in self.nb_api.get_security_groups():"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a5de9d1_dffff563","line":331,"in_reply_to":"7a5de9d1_fc547ffe","updated":"2016-02-03 01:43:55.000000000","message":"Thanks for your comments. I will replace \"secgroup\" in all the method names with \"security_group\" :)","commit_id":"7b96711ed28124bebf5ca7d3d156aacb367ad142"},{"author":{"_account_id":14249,"name":"Lionel Zerbib","email":"ariel.zerbib@gmail.com","username":"lionelz"},"change_message_id":"fb156e13f7601fc44bbc7e34e0d8fa5463c598ed","unresolved":false,"context_lines":[{"line_number":336,"context_line":"            secgroups_to_remove.remove(secgroup.id)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"        for secgroup_to_remove in secgroups_to_remove:"},{"line_number":339,"context_line":"            self.security_group_updated(secgroup)"},{"line_number":340,"context_line":"            self._delete_old_secgroup(secgroup_to_remove)"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    def _update_secgroup_rules(self, old_secgroup, new_secgroup):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a5de9d1_28ecfcf1","line":339,"range":{"start_line":339,"start_character":40,"end_line":339,"end_character":48},"updated":"2016-02-01 11:14:46.000000000","message":"What is the value of the variable secgroup?","commit_id":"7b96711ed28124bebf5ca7d3d156aacb367ad142"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"2f7c4520151970e5a7081e6f74e6518234dcb1f8","unresolved":false,"context_lines":[{"line_number":336,"context_line":"            secgroups_to_remove.remove(secgroup.id)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"        for secgroup_to_remove in secgroups_to_remove:"},{"line_number":339,"context_line":"            self.security_group_updated(secgroup)"},{"line_number":340,"context_line":"            self._delete_old_secgroup(secgroup_to_remove)"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    def _update_secgroup_rules(self, old_secgroup, new_secgroup):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a5de9d1_ca55f1f9","line":339,"range":{"start_line":339,"start_character":40,"end_line":339,"end_character":48},"in_reply_to":"7a5de9d1_28ecfcf1","updated":"2016-02-03 01:43:55.000000000","message":"This line should have been deleted. Just ignore this.","commit_id":"7b96711ed28124bebf5ca7d3d156aacb367ad142"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b23f92c8801fe35695a1e84f673b42dfd37ad04b","unresolved":false,"context_lines":[{"line_number":364,"context_line":"    def _add_new_secgroup_rule(self, secgroup, secgroup_rule):"},{"line_number":365,"context_line":"        LOG.info(_LI(\"Adding new secgroup rule \u003d %s\") %"},{"line_number":366,"context_line":"                 secgroup_rule)"},{"line_number":367,"context_line":"        self.dispatcher.dispatch(\u0027add_new_secgroup_rule\u0027, secgroup\u003dsecgroup,"},{"line_number":368,"context_line":"                                 secgroup_rule\u003dsecgroup_rule)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def _delete_secgroup_rule(self, secgroup, secgroup_rule):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a5de9d1_fc6b1fb7","line":367,"updated":"2016-01-31 11:56:17.000000000","message":"Dispatcher has been moved out. Please use new API via self.open_flow_app and RyuDFAdapter.","commit_id":"7b96711ed28124bebf5ca7d3d156aacb367ad142"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"2f7c4520151970e5a7081e6f74e6518234dcb1f8","unresolved":false,"context_lines":[{"line_number":364,"context_line":"    def _add_new_secgroup_rule(self, secgroup, secgroup_rule):"},{"line_number":365,"context_line":"        LOG.info(_LI(\"Adding new secgroup rule \u003d %s\") %"},{"line_number":366,"context_line":"                 secgroup_rule)"},{"line_number":367,"context_line":"        self.dispatcher.dispatch(\u0027add_new_secgroup_rule\u0027, secgroup\u003dsecgroup,"},{"line_number":368,"context_line":"                                 secgroup_rule\u003dsecgroup_rule)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def _delete_secgroup_rule(self, secgroup, secgroup_rule):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a5de9d1_ea6f8dc1","line":367,"in_reply_to":"7a5de9d1_fc6b1fb7","updated":"2016-02-03 01:43:55.000000000","message":"Agree.","commit_id":"7b96711ed28124bebf5ca7d3d156aacb367ad142"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b23f92c8801fe35695a1e84f673b42dfd37ad04b","unresolved":false,"context_lines":[{"line_number":370,"context_line":"    def _delete_secgroup_rule(self, secgroup, secgroup_rule):"},{"line_number":371,"context_line":"        LOG.info(_LI(\"Removing secgroup rule \u003d %s\") %"},{"line_number":372,"context_line":"                 secgroup_rule)"},{"line_number":373,"context_line":"        self.dispatcher.dispatch(\u0027delete_secgroup_rule\u0027, secgroup\u003dsecgroup,"},{"line_number":374,"context_line":"                                 secgroup_rule\u003dsecgroup_rule)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7a5de9d1_bc6a87b1","line":373,"updated":"2016-01-31 11:56:17.000000000","message":"Same here.","commit_id":"7b96711ed28124bebf5ca7d3d156aacb367ad142"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"2f7c4520151970e5a7081e6f74e6518234dcb1f8","unresolved":false,"context_lines":[{"line_number":370,"context_line":"    def _delete_secgroup_rule(self, secgroup, secgroup_rule):"},{"line_number":371,"context_line":"        LOG.info(_LI(\"Removing secgroup rule \u003d %s\") %"},{"line_number":372,"context_line":"                 secgroup_rule)"},{"line_number":373,"context_line":"        self.dispatcher.dispatch(\u0027delete_secgroup_rule\u0027, secgroup\u003dsecgroup,"},{"line_number":374,"context_line":"                                 secgroup_rule\u003dsecgroup_rule)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7a5de9d1_2aa125f8","line":373,"in_reply_to":"7a5de9d1_bc6a87b1","updated":"2016-02-03 01:43:55.000000000","message":"ditto","commit_id":"7b96711ed28124bebf5ca7d3d156aacb367ad142"}],"dragonflow/db/api_nb.py":[{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"1e90365e828e881c2a63f2a62a572eb3c12b66f5","unresolved":false,"context_lines":[{"line_number":527,"context_line":"    def __init__(self, value):"},{"line_number":528,"context_line":"        self.secgroup \u003d jsonutils.loads(value)"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"    def get_name(self):"},{"line_number":531,"context_line":"        return self.secgroup.get(\u0027name\u0027)"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    def get_id(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba63e191_5de746e4","line":530,"range":{"start_line":530,"start_character":8,"end_line":530,"end_character":16},"updated":"2016-01-19 14:26:30.000000000","message":"@property\ndef name(self):\n...\n\nWe can just call secgroup.name instead of secgroup.get_name().","commit_id":"04979d8ad5fcb8b61eb0555e882071dc7ff1d0ff"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"c21c9bc025fc1811ffdf8ba8a5a4d890c3b70702","unresolved":false,"context_lines":[{"line_number":527,"context_line":"    def __init__(self, value):"},{"line_number":528,"context_line":"        self.secgroup \u003d jsonutils.loads(value)"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"    def get_name(self):"},{"line_number":531,"context_line":"        return self.secgroup.get(\u0027name\u0027)"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    def get_id(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a68dd71_24843d5c","line":530,"range":{"start_line":530,"start_character":8,"end_line":530,"end_character":16},"in_reply_to":"ba63e191_5de746e4","updated":"2016-01-24 11:30:54.000000000","message":"Good point.","commit_id":"04979d8ad5fcb8b61eb0555e882071dc7ff1d0ff"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"1e90365e828e881c2a63f2a62a572eb3c12b66f5","unresolved":false,"context_lines":[{"line_number":530,"context_line":"    def get_name(self):"},{"line_number":531,"context_line":"        return self.secgroup.get(\u0027name\u0027)"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    def get_id(self):"},{"line_number":534,"context_line":"        return self.secgroup.get(\u0027id\u0027)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    def get_rules(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba63e191_1dd22e01","line":533,"range":{"start_line":533,"start_character":8,"end_line":533,"end_character":14},"updated":"2016-01-19 14:26:30.000000000","message":"ditto.","commit_id":"04979d8ad5fcb8b61eb0555e882071dc7ff1d0ff"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"c21c9bc025fc1811ffdf8ba8a5a4d890c3b70702","unresolved":false,"context_lines":[{"line_number":530,"context_line":"    def get_name(self):"},{"line_number":531,"context_line":"        return self.secgroup.get(\u0027name\u0027)"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    def get_id(self):"},{"line_number":534,"context_line":"        return self.secgroup.get(\u0027id\u0027)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    def get_rules(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a68dd71_e4794583","line":533,"range":{"start_line":533,"start_character":8,"end_line":533,"end_character":14},"in_reply_to":"ba63e191_1dd22e01","updated":"2016-01-24 11:30:54.000000000","message":"same as above","commit_id":"04979d8ad5fcb8b61eb0555e882071dc7ff1d0ff"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"1e90365e828e881c2a63f2a62a572eb3c12b66f5","unresolved":false,"context_lines":[{"line_number":533,"context_line":"    def get_id(self):"},{"line_number":534,"context_line":"        return self.secgroup.get(\u0027id\u0027)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    def get_rules(self):"},{"line_number":537,"context_line":"        res \u003d []"},{"line_number":538,"context_line":"        for rule in self.secgroup.get(\u0027rules\u0027):"},{"line_number":539,"context_line":"            res.append(SecRule(rule))"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba63e191_1df9ce80","line":536,"range":{"start_line":536,"start_character":8,"end_line":536,"end_character":17},"updated":"2016-01-19 14:26:30.000000000","message":"ditto","commit_id":"04979d8ad5fcb8b61eb0555e882071dc7ff1d0ff"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"1e90365e828e881c2a63f2a62a572eb3c12b66f5","unresolved":false,"context_lines":[{"line_number":543,"context_line":"        return self.secgroup.__str__()"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"class SecRule(object):"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    def __init__(self, value):"},{"line_number":549,"context_line":"        self.secrule \u003d value"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba63e191_7d880ae8","line":546,"range":{"start_line":546,"start_character":6,"end_line":546,"end_character":13},"updated":"2016-01-19 14:26:30.000000000","message":"The same to the previous comments.","commit_id":"04979d8ad5fcb8b61eb0555e882071dc7ff1d0ff"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"1a972628c9f2e42d0105906bedad859134e58d4b","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                self.db_apply_failed \u003d True"},{"line_number":108,"context_line":"                time.sleep(1)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def apply_db_change(self, table, key, action, value):"},{"line_number":111,"context_line":"        if action \u003d\u003d \u0027sync\u0027:"},{"line_number":112,"context_line":"            self.controller.run_sync()"},{"line_number":113,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_21f73d5a","line":110,"range":{"start_line":110,"start_character":8,"end_line":110,"end_character":23},"updated":"2016-01-25 08:29:19.000000000","message":"Need to add handling for secgroup set and create delete","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"81bba3e1c9098c3e6acdf0788010c5e9e1902a11","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                self.db_apply_failed \u003d True"},{"line_number":108,"context_line":"                time.sleep(1)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def apply_db_change(self, table, key, action, value):"},{"line_number":111,"context_line":"        if action \u003d\u003d \u0027sync\u0027:"},{"line_number":112,"context_line":"            self.controller.run_sync()"},{"line_number":113,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_fcbc68bc","line":110,"range":{"start_line":110,"start_character":8,"end_line":110,"end_character":23},"in_reply_to":"9a68dd71_21f73d5a","updated":"2016-01-30 03:00:38.000000000","message":"Thanks. Got it. I will add it.","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"1a972628c9f2e42d0105906bedad859134e58d4b","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def sync(self):"},{"line_number":146,"context_line":"        pass"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def create_security_group(self, name, **columns):"},{"line_number":149,"context_line":"        secgroup \u003d {}"},{"line_number":150,"context_line":"        secgroup[\u0027name\u0027] \u003d name"},{"line_number":151,"context_line":"        for col, val in columns.items():"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_c14d019b","line":148,"range":{"start_line":148,"start_character":8,"end_line":148,"end_character":29},"updated":"2016-01-25 08:29:19.000000000","message":"Need to support delete","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"81bba3e1c9098c3e6acdf0788010c5e9e1902a11","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def sync(self):"},{"line_number":146,"context_line":"        pass"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def create_security_group(self, name, **columns):"},{"line_number":149,"context_line":"        secgroup \u003d {}"},{"line_number":150,"context_line":"        secgroup[\u0027name\u0027] \u003d name"},{"line_number":151,"context_line":"        for col, val in columns.items():"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_7c94f841","line":148,"range":{"start_line":148,"start_character":8,"end_line":148,"end_character":29},"in_reply_to":"9a68dd71_c14d019b","updated":"2016-01-30 03:00:38.000000000","message":"line 156 support delete a security group","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0b4aa6a39aee20e33ab66e6b20d10bef0e430156","unresolved":false,"context_lines":[{"line_number":348,"context_line":"            res.append(LogicalRouter(lrouter_value))"},{"line_number":349,"context_line":"        return res"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def get_secgroups(self):"},{"line_number":352,"context_line":"        res \u003d []"},{"line_number":353,"context_line":"        for secgroup_value in self.driver.get_all_entries(\u0027secgroup\u0027):"},{"line_number":354,"context_line":"            res.append(SecGroup(secgroup_value))"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_071c5669","line":351,"updated":"2016-01-26 06:08:50.000000000","message":"Consider renaming to get_security_groups, to match naming convention in rest of file.","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"fa61a605f0ac24b95f3f81a926de1d02ba15e649","unresolved":false,"context_lines":[{"line_number":348,"context_line":"            res.append(LogicalRouter(lrouter_value))"},{"line_number":349,"context_line":"        return res"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def get_secgroups(self):"},{"line_number":352,"context_line":"        res \u003d []"},{"line_number":353,"context_line":"        for secgroup_value in self.driver.get_all_entries(\u0027secgroup\u0027):"},{"line_number":354,"context_line":"            res.append(SecGroup(secgroup_value))"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_e16bf783","line":351,"in_reply_to":"9a68dd71_071c5669","updated":"2016-01-27 03:07:32.000000000","message":"+1","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"81bba3e1c9098c3e6acdf0788010c5e9e1902a11","unresolved":false,"context_lines":[{"line_number":348,"context_line":"            res.append(LogicalRouter(lrouter_value))"},{"line_number":349,"context_line":"        return res"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def get_secgroups(self):"},{"line_number":352,"context_line":"        res \u003d []"},{"line_number":353,"context_line":"        for secgroup_value in self.driver.get_all_entries(\u0027secgroup\u0027):"},{"line_number":354,"context_line":"            res.append(SecGroup(secgroup_value))"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_a376f4d4","line":351,"in_reply_to":"9a68dd71_071c5669","updated":"2016-01-30 03:00:38.000000000","message":"Thanks. I will correct it.","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0b4aa6a39aee20e33ab66e6b20d10bef0e430156","unresolved":false,"context_lines":[{"line_number":519,"context_line":"        return self.router_port.__str__()"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"class SecGroup(object):"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"    def __init__(self, value):"},{"line_number":525,"context_line":"        self.secgroup \u003d jsonutils.loads(value)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_47124e5a","line":522,"updated":"2016-01-26 06:08:50.000000000","message":"Consider renaming to SecurityGroup","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"81bba3e1c9098c3e6acdf0788010c5e9e1902a11","unresolved":false,"context_lines":[{"line_number":519,"context_line":"        return self.router_port.__str__()"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"class SecGroup(object):"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"    def __init__(self, value):"},{"line_number":525,"context_line":"        self.secgroup \u003d jsonutils.loads(value)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_437f00ab","line":522,"in_reply_to":"9a68dd71_47124e5a","updated":"2016-01-30 03:00:38.000000000","message":"ditto","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0b4aa6a39aee20e33ab66e6b20d10bef0e430156","unresolved":false,"context_lines":[{"line_number":543,"context_line":"        return self.secgroup.__str__()"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"class SecRule(object):"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    def __init__(self, value):"},{"line_number":549,"context_line":"        self.secrule \u003d value"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_670f522f","line":546,"updated":"2016-01-26 06:08:50.000000000","message":"Consider renaming to SecurityGroupRule","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"81bba3e1c9098c3e6acdf0788010c5e9e1902a11","unresolved":false,"context_lines":[{"line_number":543,"context_line":"        return self.secgroup.__str__()"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"class SecRule(object):"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    def __init__(self, value):"},{"line_number":549,"context_line":"        self.secrule \u003d value"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_034ca89c","line":546,"in_reply_to":"9a68dd71_670f522f","updated":"2016-01-30 03:00:38.000000000","message":"ditto","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"}],"dragonflow/db/db_api.py":[{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"1e90365e828e881c2a63f2a62a572eb3c12b66f5","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        \"\"\""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @abc.abstractmethod"},{"line_number":136,"context_line":"    def allocate_unique_key(self, group):"},{"line_number":137,"context_line":"        \"\"\"Allocate a unique id of the group in the system"},{"line_number":138,"context_line":"           Used to allocate ports and security groups unique numbers"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba63e191_9d2cde4b","line":136,"range":{"start_line":136,"start_character":34,"end_line":136,"end_character":39},"updated":"2016-01-19 14:26:30.000000000","message":"Calling it \u0027group\u0027 is a little bit weird for me. Why not use a common name like \u0027table\u0027 to indicate we create unique key for different table, or namespace is also suitable.","commit_id":"04979d8ad5fcb8b61eb0555e882071dc7ff1d0ff"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"c21c9bc025fc1811ffdf8ba8a5a4d890c3b70702","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        \"\"\""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @abc.abstractmethod"},{"line_number":136,"context_line":"    def allocate_unique_key(self, group):"},{"line_number":137,"context_line":"        \"\"\"Allocate a unique id of the group in the system"},{"line_number":138,"context_line":"           Used to allocate ports and security groups unique numbers"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a68dd71_047fb966","line":136,"range":{"start_line":136,"start_character":34,"end_line":136,"end_character":39},"in_reply_to":"ba63e191_9d2cde4b","updated":"2016-01-24 11:30:54.000000000","message":"This is the old design which requires a globally unique key per security group. I will remove it in the next patch.","commit_id":"04979d8ad5fcb8b61eb0555e882071dc7ff1d0ff"}],"dragonflow/db/db_store.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"1a972628c9f2e42d0105906bedad859134e58d4b","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        with self.lock:"},{"line_number":109,"context_line":"            return self.routers.values()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def update_secgroup(self, secgroup_id, secgroup):"},{"line_number":112,"context_line":"        with self.lock:"},{"line_number":113,"context_line":"            self.secgroups[secgroup_id] \u003d secgroup"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_bc591037","line":111,"range":{"start_line":111,"start_character":8,"end_line":111,"end_character":23},"updated":"2016-01-25 08:29:19.000000000","message":"do we not we need to add delete","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0b4aa6a39aee20e33ab66e6b20d10bef0e430156","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        with self.lock:"},{"line_number":109,"context_line":"            return self.routers.values()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def update_secgroup(self, secgroup_id, secgroup):"},{"line_number":112,"context_line":"        with self.lock:"},{"line_number":113,"context_line":"            self.secgroups[secgroup_id] \u003d secgroup"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_27195a7a","line":111,"range":{"start_line":111,"start_character":8,"end_line":111,"end_character":23},"in_reply_to":"9a68dd71_bc591037","updated":"2016-01-26 06:08:50.000000000","message":"Consider renaming to update_security_group","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"81bba3e1c9098c3e6acdf0788010c5e9e1902a11","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        with self.lock:"},{"line_number":109,"context_line":"            return self.routers.values()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def update_secgroup(self, secgroup_id, secgroup):"},{"line_number":112,"context_line":"        with self.lock:"},{"line_number":113,"context_line":"            self.secgroups[secgroup_id] \u003d secgroup"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_2e2d0b95","line":111,"range":{"start_line":111,"start_character":8,"end_line":111,"end_character":23},"in_reply_to":"9a68dd71_bc591037","updated":"2016-01-30 03:00:38.000000000","message":"Yes.","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0b4aa6a39aee20e33ab66e6b20d10bef0e430156","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        with self.lock:"},{"line_number":113,"context_line":"            self.secgroups[secgroup_id] \u003d secgroup"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def get_secgroup(self, secgroup_id):"},{"line_number":116,"context_line":"        with self.lock:"},{"line_number":117,"context_line":"            return self.secgroups.get(secgroup_id)"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_c724feb3","line":115,"updated":"2016-01-26 06:08:50.000000000","message":"Consider renaming to get_security_group","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"81bba3e1c9098c3e6acdf0788010c5e9e1902a11","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        with self.lock:"},{"line_number":113,"context_line":"            self.secgroups[secgroup_id] \u003d secgroup"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def get_secgroup(self, secgroup_id):"},{"line_number":116,"context_line":"        with self.lock:"},{"line_number":117,"context_line":"            return self.secgroups.get(secgroup_id)"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_ce1d5763","line":115,"in_reply_to":"9a68dd71_c724feb3","updated":"2016-01-30 03:00:38.000000000","message":"ok","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"}],"dragonflow/db/drivers/ramcloud_db_driver.py":[{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"6f6920efba03e360db52887aafaa5c0b08e82fef","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        return res"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def _allocate_unique_key(self, group):"},{"line_number":82,"context_line":"        table_id \u003d self.client.get_table_id(group)"},{"line_number":83,"context_line":"        key \u003d 1"},{"line_number":84,"context_line":"        version_exception \u003d True"},{"line_number":85,"context_line":"        while version_exception:"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba63e191_78058dc0","line":82,"updated":"2016-01-19 08:56:48.000000000","message":"Since we arent using this design, we dont need this.\n\nAlso, for RAMCloud and RethinkDB we use special \"create_tables\" scripts that create the supported DB tables at installation, so i dont think we can just do this like that here.","commit_id":"04979d8ad5fcb8b61eb0555e882071dc7ff1d0ff"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"c21c9bc025fc1811ffdf8ba8a5a4d890c3b70702","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        return res"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def _allocate_unique_key(self, group):"},{"line_number":82,"context_line":"        table_id \u003d self.client.get_table_id(group)"},{"line_number":83,"context_line":"        key \u003d 1"},{"line_number":84,"context_line":"        version_exception \u003d True"},{"line_number":85,"context_line":"        while version_exception:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a68dd71_2460bda4","line":82,"in_reply_to":"ba63e191_78058dc0","updated":"2016-01-24 11:30:54.000000000","message":"Got it. Will remove it. As discussed, I will add a local SG pool in DF DB which will allocate conjunction id \u0026 priority per SG per local controller","commit_id":"04979d8ad5fcb8b61eb0555e882071dc7ff1d0ff"}],"dragonflow/neutron/plugin.py":[{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"3b849344078a5cea6980241c0936c1d0cff6749b","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        sg_name \u003d sg_db[\u0027id\u0027]"},{"line_number":175,"context_line":"        rules \u003d sg_db.pop(\u0027security_group_rules\u0027)"},{"line_number":176,"context_line":"        self.nb_api.create_security_group(sg_name, rules\u003drules)"},{"line_number":177,"context_line":"        sg_db[\u0027security_group_rules\u0027] \u003d rules"},{"line_number":178,"context_line":"        "},{"line_number":179,"context_line":"        return sg_db"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa69d971_b28d597d","line":177,"updated":"2015-12-31 03:53:50.000000000","message":"Why you need to re-set rules here?","commit_id":"2dbaf3b941f98b45793c7bd71610e6661e1aee9b"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"16e461cac6ed2bddf9cce7336a272721d3bbb49a","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        sg_name \u003d sg_db[\u0027id\u0027]"},{"line_number":175,"context_line":"        rules \u003d sg_db.pop(\u0027security_group_rules\u0027)"},{"line_number":176,"context_line":"        self.nb_api.create_security_group(sg_name, rules\u003drules)"},{"line_number":177,"context_line":"        sg_db[\u0027security_group_rules\u0027] \u003d rules"},{"line_number":178,"context_line":"        "},{"line_number":179,"context_line":"        return sg_db"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa69d971_6816f4a8","line":177,"in_reply_to":"fa69d971_4d89c225","updated":"2016-01-02 15:24:20.000000000","message":"What i meant is, that you could use sg_db.get(\u0027security_group_rules\u0027) instead of pop and then you wouldn\u0027t need this line, unless i miss something","commit_id":"2dbaf3b941f98b45793c7bd71610e6661e1aee9b"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"4eae37fb10f16049554a29fbb2ff170f2a9d0ee9","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        sg_name \u003d sg_db[\u0027id\u0027]"},{"line_number":175,"context_line":"        rules \u003d sg_db.pop(\u0027security_group_rules\u0027)"},{"line_number":176,"context_line":"        self.nb_api.create_security_group(sg_name, rules\u003drules)"},{"line_number":177,"context_line":"        sg_db[\u0027security_group_rules\u0027] \u003d rules"},{"line_number":178,"context_line":"        "},{"line_number":179,"context_line":"        return sg_db"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa69d971_3e61163a","line":177,"in_reply_to":"fa69d971_6816f4a8","updated":"2016-01-03 00:41:18.000000000","message":"Yes, I misunderstood something at the beginning. Correct it in the next patch","commit_id":"2dbaf3b941f98b45793c7bd71610e6661e1aee9b"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"919acda0fcd9375d9330b0cbdc51cdc2acbc8487","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        sg_name \u003d sg_db[\u0027id\u0027]"},{"line_number":175,"context_line":"        rules \u003d sg_db.pop(\u0027security_group_rules\u0027)"},{"line_number":176,"context_line":"        self.nb_api.create_security_group(sg_name, rules\u003drules)"},{"line_number":177,"context_line":"        sg_db[\u0027security_group_rules\u0027] \u003d rules"},{"line_number":178,"context_line":"        "},{"line_number":179,"context_line":"        return sg_db"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa69d971_4d89c225","line":177,"in_reply_to":"fa69d971_b28d597d","updated":"2016-01-02 10:01:06.000000000","message":"because the rest api\u0027s response message should contain this field.","commit_id":"2dbaf3b941f98b45793c7bd71610e6661e1aee9b"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"842f99950633b98a93db69b2f12da3bf28e06d27","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        return sg_db"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def create_security_group_rule(self, context, security_group_rule):"},{"line_number":181,"context_line":"        # TODO(gsagie) add update logic to NB DB"},{"line_number":182,"context_line":"        sg_rule \u003d super(DFPlugin, self).create_security_group_rule("},{"line_number":183,"context_line":"            context, security_group_rule)"},{"line_number":184,"context_line":"        #rule \u003d security_group_rule[\u0027security_group_rule\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_2b62c10a","line":181,"updated":"2016-01-06 06:59:29.000000000","message":"remove comment","commit_id":"b0ccfc416134ed061818f3b9b2a39c0bb8c54bd4"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"67601c7ad08012b70fdb3e3b0f1217bb64a571df","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        return sg_db"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def create_security_group_rule(self, context, security_group_rule):"},{"line_number":181,"context_line":"        # TODO(gsagie) add update logic to NB DB"},{"line_number":182,"context_line":"        sg_rule \u003d super(DFPlugin, self).create_security_group_rule("},{"line_number":183,"context_line":"            context, security_group_rule)"},{"line_number":184,"context_line":"        #rule \u003d security_group_rule[\u0027security_group_rule\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_a0ac4336","line":181,"in_reply_to":"fa69d971_2b62c10a","updated":"2016-01-07 15:09:39.000000000","message":"I will remove it along with add full stack testing","commit_id":"b0ccfc416134ed061818f3b9b2a39c0bb8c54bd4"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"842f99950633b98a93db69b2f12da3bf28e06d27","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        # TODO(gsagie) add update logic to NB DB"},{"line_number":182,"context_line":"        sg_rule \u003d super(DFPlugin, self).create_security_group_rule("},{"line_number":183,"context_line":"            context, security_group_rule)"},{"line_number":184,"context_line":"        #rule \u003d security_group_rule[\u0027security_group_rule\u0027]"},{"line_number":185,"context_line":"        sg_id \u003d sg_rule[\u0027security_group_id\u0027]"},{"line_number":186,"context_line":"        self.nb_api.add_security_group_rules(sg_id, [sg_rule])"},{"line_number":187,"context_line":"        return sg_rule"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_cb1e856f","line":184,"updated":"2016-01-06 06:59:29.000000000","message":"remove comment","commit_id":"b0ccfc416134ed061818f3b9b2a39c0bb8c54bd4"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"67601c7ad08012b70fdb3e3b0f1217bb64a571df","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        # TODO(gsagie) add update logic to NB DB"},{"line_number":182,"context_line":"        sg_rule \u003d super(DFPlugin, self).create_security_group_rule("},{"line_number":183,"context_line":"            context, security_group_rule)"},{"line_number":184,"context_line":"        #rule \u003d security_group_rule[\u0027security_group_rule\u0027]"},{"line_number":185,"context_line":"        sg_id \u003d sg_rule[\u0027security_group_id\u0027]"},{"line_number":186,"context_line":"        self.nb_api.add_security_group_rules(sg_id, [sg_rule])"},{"line_number":187,"context_line":"        return sg_rule"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_40a9c723","line":184,"in_reply_to":"fa69d971_cb1e856f","updated":"2016-01-07 15:09:39.000000000","message":"see above","commit_id":"b0ccfc416134ed061818f3b9b2a39c0bb8c54bd4"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"842f99950633b98a93db69b2f12da3bf28e06d27","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        return sg_rule"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def delete_security_group_rule(self, context, id):"},{"line_number":190,"context_line":"        # TODO(gsagie) add update logic to NB DB"},{"line_number":191,"context_line":"        security_group_rule \u003d self.get_security_group_rule(context, id)"},{"line_number":192,"context_line":"        sg_id \u003d security_group_rule[\u0027security_group_id\u0027]"},{"line_number":193,"context_line":"        super(DFPlugin, self).delete_security_group_rule(context, id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_eb57c923","line":190,"updated":"2016-01-06 06:59:29.000000000","message":"remove comment","commit_id":"b0ccfc416134ed061818f3b9b2a39c0bb8c54bd4"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"67601c7ad08012b70fdb3e3b0f1217bb64a571df","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        return sg_rule"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def delete_security_group_rule(self, context, id):"},{"line_number":190,"context_line":"        # TODO(gsagie) add update logic to NB DB"},{"line_number":191,"context_line":"        security_group_rule \u003d self.get_security_group_rule(context, id)"},{"line_number":192,"context_line":"        sg_id \u003d security_group_rule[\u0027security_group_id\u0027]"},{"line_number":193,"context_line":"        super(DFPlugin, self).delete_security_group_rule(context, id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_0062ef16","line":190,"in_reply_to":"fa69d971_eb57c923","updated":"2016-01-07 15:09:39.000000000","message":"see above","commit_id":"b0ccfc416134ed061818f3b9b2a39c0bb8c54bd4"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"1e90365e828e881c2a63f2a62a572eb3c12b66f5","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        if updated_port.get(\u0027device_owner\u0027) \u003d\u003d const.DEVICE_OWNER_ROUTER_GW:"},{"line_number":347,"context_line":"            chassis \u003d None"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        if updated_port.get(\u0027security_groups\u0027) \u003d\u003d []:"},{"line_number":350,"context_line":"            sgids \u003d None"},{"line_number":351,"context_line":"        else:"},{"line_number":352,"context_line":"            sgids \u003d updated_port.get(\u0027security_groups\u0027, None)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        self.nb_api.update_lport(name\u003dupdated_port[\u0027id\u0027],"},{"line_number":355,"context_line":"                                 macs\u003d[updated_port[\u0027mac_address\u0027]], ips\u003dips,"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba63e191_ebdbd719","line":352,"range":{"start_line":349,"start_character":8,"end_line":352,"end_character":61},"updated":"2016-01-19 14:26:30.000000000","message":"This section is not that clear. I suggest to change it in this way:\n\nsgids \u003d updated_port.get(\u0027security_groups\u0027, None)\nsgids \u003d sgids if sgids \u003d\u003d [] else None","commit_id":"04979d8ad5fcb8b61eb0555e882071dc7ff1d0ff"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0b4aa6a39aee20e33ab66e6b20d10bef0e430156","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        if updated_port.get(\u0027security_groups\u0027) \u003d\u003d []:"},{"line_number":348,"context_line":"            sgids \u003d None"},{"line_number":349,"context_line":"        else:"},{"line_number":350,"context_line":"            sgids \u003d updated_port.get(\u0027security_groups\u0027, None)"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"        self.nb_api.update_lport(name\u003dupdated_port[\u0027id\u0027],"},{"line_number":353,"context_line":"                                 macs\u003d[updated_port[\u0027mac_address\u0027]], ips\u003dips,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_c7ce3eb7","line":350,"updated":"2016-01-26 06:08:50.000000000","message":"I second Li Ma. This condition looks a bit strange. You have two calls to updated_port.get, one of which is redundant, and None is the default value to the second parameter anyway.","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"81bba3e1c9098c3e6acdf0788010c5e9e1902a11","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        if updated_port.get(\u0027security_groups\u0027) \u003d\u003d []:"},{"line_number":348,"context_line":"            sgids \u003d None"},{"line_number":349,"context_line":"        else:"},{"line_number":350,"context_line":"            sgids \u003d updated_port.get(\u0027security_groups\u0027, None)"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"        self.nb_api.update_lport(name\u003dupdated_port[\u0027id\u0027],"},{"line_number":353,"context_line":"                                 macs\u003d[updated_port[\u0027mac_address\u0027]], ips\u003dips,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_4eb7273a","line":350,"in_reply_to":"9a68dd71_c7ce3eb7","updated":"2016-01-30 03:00:38.000000000","message":"agree :)","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0b4aa6a39aee20e33ab66e6b20d10bef0e430156","unresolved":false,"context_lines":[{"line_number":358,"context_line":"                                 chassis\u003dchassis,"},{"line_number":359,"context_line":"                                 device_owner\u003dupdated_port.get(\u0027device_owner\u0027,"},{"line_number":360,"context_line":"                                                               None),"},{"line_number":361,"context_line":"                                 sgids\u003dsgids)"},{"line_number":362,"context_line":"        return updated_port"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def _get_data_from_binding_profile(self, context, port):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_c75cfef2","line":361,"updated":"2016-01-26 06:08:50.000000000","message":"Consider changing column name from sgids to security_groups or security_group_ids","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"81bba3e1c9098c3e6acdf0788010c5e9e1902a11","unresolved":false,"context_lines":[{"line_number":358,"context_line":"                                 chassis\u003dchassis,"},{"line_number":359,"context_line":"                                 device_owner\u003dupdated_port.get(\u0027device_owner\u0027,"},{"line_number":360,"context_line":"                                                               None),"},{"line_number":361,"context_line":"                                 sgids\u003dsgids)"},{"line_number":362,"context_line":"        return updated_port"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def _get_data_from_binding_profile(self, context, port):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_6eb46334","line":361,"in_reply_to":"9a68dd71_c75cfef2","updated":"2016-01-30 03:00:38.000000000","message":"ditto","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"}],"dragonflow/tests/fullstack/test_neutron_api.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"bc96c99d14157b4383cf7b7537397e9eedcf5968","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        secgroup.delete()"},{"line_number":141,"context_line":"        self.assertFalse(secgroup.exists())"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def test_create_security_group_rule(self):"},{"line_number":144,"context_line":"        secgroup \u003d objects.SecGroupTestWrapper(self.neutron, self.nb_api)"},{"line_number":145,"context_line":"        secgroup.create()"},{"line_number":146,"context_line":"        self.assertTrue(secgroup.exists())"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a5de9d1_1d295537","line":143,"range":{"start_line":143,"start_character":8,"end_line":143,"end_character":39},"updated":"2016-01-31 18:52:15.000000000","message":"I think that we are missing a test that update a SG rule via the Neutron API with a specific value and check that that is the value that we get from the Dragonflow distributed DB via the nb_api","commit_id":"7b96711ed28124bebf5ca7d3d156aacb367ad142"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"2f7c4520151970e5a7081e6f74e6518234dcb1f8","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        secgroup.delete()"},{"line_number":141,"context_line":"        self.assertFalse(secgroup.exists())"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def test_create_security_group_rule(self):"},{"line_number":144,"context_line":"        secgroup \u003d objects.SecGroupTestWrapper(self.neutron, self.nb_api)"},{"line_number":145,"context_line":"        secgroup.create()"},{"line_number":146,"context_line":"        self.assertTrue(secgroup.exists())"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a5de9d1_fa8afc19","line":143,"range":{"start_line":143,"start_character":8,"end_line":143,"end_character":39},"in_reply_to":"7a5de9d1_1d295537","updated":"2016-02-03 01:43:55.000000000","message":"No update, only add or delete security group rule in neutron api","commit_id":"7b96711ed28124bebf5ca7d3d156aacb367ad142"}],"dragonflow/tests/fullstack/test_objects.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"501d93ca68c7c94409b1b140110716e4936fa839","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def rule_create(self, secrule\u003d{\u0027security_group_rule\u0027:"},{"line_number":79,"context_line":"                        {\u0027ethertype\u0027: \u0027IPv4\u0027, \u0027direction\u0027: \u0027ingress\u0027}}):"},{"line_number":80,"context_line":"        secrule[\u0027security_group_id\u0027] \u003d self.secgroup_id"},{"line_number":81,"context_line":"        new_secrule \u003d self.neutron.create_security_group_rule("},{"line_number":82,"context_line":"                        {\u0027security_group_rule\u0027: secrule})"},{"line_number":83,"context_line":"        return new_secrule[\u0027id\u0027]"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_028b4c69","line":81,"range":{"start_line":81,"start_character":35,"end_line":81,"end_character":61},"updated":"2016-01-11 05:43:46.000000000","message":"I think that you did not use the API correctly \n\nclient.create_security_group_rule(\n            parent_group_id\u003dsecuritygroup_id,\n            ip_protocol\u003dself.ip_protocol,\n            from_port\u003dself.from_port,\n            to_port\u003dself.to_port)","commit_id":"717723a51fbc353c63a13829b329fadf3d0c36d6"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"9ba6074417e12d4816a48029323dbd7cfb3ef48c","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def rule_create(self, secrule\u003d{\u0027security_group_rule\u0027:"},{"line_number":79,"context_line":"                        {\u0027ethertype\u0027: \u0027IPv4\u0027, \u0027direction\u0027: \u0027ingress\u0027}}):"},{"line_number":80,"context_line":"        secrule[\u0027security_group_id\u0027] \u003d self.secgroup_id"},{"line_number":81,"context_line":"        new_secrule \u003d self.neutron.create_security_group_rule("},{"line_number":82,"context_line":"                        {\u0027security_group_rule\u0027: secrule})"},{"line_number":83,"context_line":"        return new_secrule[\u0027id\u0027]"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_abd89ff0","line":81,"range":{"start_line":81,"start_character":35,"end_line":81,"end_character":61},"in_reply_to":"fa69d971_028b4c69","updated":"2016-01-12 09:05:43.000000000","message":"The reason is that I pass the nested key\"\u0027security_group_rule\u0027\". It should be like {\u0027security_group_rule\u0027:{\u0027ethertype\u0027: \u0027IPv4\u0027, \u0027direction\u0027:\u0027ingress\u0027}},not {\u0027security_group_rule\u0027:{\u0027security_group_rule\u0027:{\u0027ethertype\u0027: \u0027IPv4\u0027, \u0027direction\u0027:\u0027ingress\u0027}}}.","commit_id":"717723a51fbc353c63a13829b329fadf3d0c36d6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0b4aa6a39aee20e33ab66e6b20d10bef0e430156","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def exists(self):"},{"line_number":78,"context_line":"        secgroups \u003d self.nb_api.get_secgroups()"},{"line_number":79,"context_line":"        for secgroup in secgroups:"},{"line_number":80,"context_line":"            if secgroup.name \u003d\u003d self.secgroup_id:"},{"line_number":81,"context_line":"                return True"},{"line_number":82,"context_line":"        return False"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_67e3d206","line":80,"updated":"2016-01-26 06:08:50.000000000","message":"Is this correct? name \u003d\u003d id? I saw it in other places in this patch too, and it\u0027s very confusing.","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"81bba3e1c9098c3e6acdf0788010c5e9e1902a11","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def exists(self):"},{"line_number":78,"context_line":"        secgroups \u003d self.nb_api.get_secgroups()"},{"line_number":79,"context_line":"        for secgroup in secgroups:"},{"line_number":80,"context_line":"            if secgroup.name \u003d\u003d self.secgroup_id:"},{"line_number":81,"context_line":"                return True"},{"line_number":82,"context_line":"        return False"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_6e5d4314","line":80,"in_reply_to":"9a68dd71_67e3d206","updated":"2016-01-30 03:00:38.000000000","message":"Yes, in DF DB, name is actually id in neutron db","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0b4aa6a39aee20e33ab66e6b20d10bef0e430156","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            if secgroup.name \u003d\u003d self.secgroup_id:"},{"line_number":81,"context_line":"                return True"},{"line_number":82,"context_line":"        return False"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def rule_create(self, secrule\u003d{\u0027ethertype\u0027: \u0027IPv4\u0027,"},{"line_number":85,"context_line":"                                   \u0027direction\u0027: \u0027ingress\u0027}):"},{"line_number":86,"context_line":"        secrule[\u0027security_group_id\u0027] \u003d self.secgroup_id"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_8797e639","line":83,"updated":"2016-01-26 06:08:50.000000000","message":"Maybe the rule_* methods should be in their own wrapper class? It will allow easier testing of multiple rules, although I\u0027m not sure where the default security_group_id  will come from in that case...","commit_id":"ab931a6f3c9cc59107b98503c10eb073bb8e7ae0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b23f92c8801fe35695a1e84f673b42dfd37ad04b","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                return True"},{"line_number":82,"context_line":"        return False"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def rule_create(self, secrule\u003d{\u0027ethertype\u0027: \u0027IPv4\u0027,"},{"line_number":85,"context_line":"                                   \u0027direction\u0027: \u0027ingress\u0027}):"},{"line_number":86,"context_line":"        secrule[\u0027security_group_id\u0027] \u003d self.secgroup_id"},{"line_number":87,"context_line":"        new_secrule \u003d self.neutron.create_security_group_rule("}],"source_content_type":"text/x-python","patch_set":15,"id":"7a5de9d1_9c2f8b87","line":84,"updated":"2016-01-31 11:56:17.000000000","message":"Maybe the rule_* methods should be in their own wrapper class? It will allow easier testing of multiple rules, although I\u0027m not sure where the default security_group_id  will come from in that case...\n(You didn\u0027t respond to this comment)","commit_id":"7b96711ed28124bebf5ca7d3d156aacb367ad142"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"2f7c4520151970e5a7081e6f74e6518234dcb1f8","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                return True"},{"line_number":82,"context_line":"        return False"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def rule_create(self, secrule\u003d{\u0027ethertype\u0027: \u0027IPv4\u0027,"},{"line_number":85,"context_line":"                                   \u0027direction\u0027: \u0027ingress\u0027}):"},{"line_number":86,"context_line":"        secrule[\u0027security_group_id\u0027] \u003d self.secgroup_id"},{"line_number":87,"context_line":"        new_secrule \u003d self.neutron.create_security_group_rule("}],"source_content_type":"text/x-python","patch_set":15,"id":"7a5de9d1_0ae0e9cb","line":84,"in_reply_to":"7a5de9d1_9c2f8b87","updated":"2016-02-03 01:43:55.000000000","message":"Sorry for not responding in time. What I think is that the security group rule belongs to a specific security group, So I put rule test method in the same wrapper, and I didn\u0027t see inconvenience when testing this, please let me know if I have missed something.","commit_id":"7b96711ed28124bebf5ca7d3d156aacb367ad142"}]}
