)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"1cb141eb88a222e59e2749aae3bb565eb8e5ede0","unresolved":false,"context_lines":[{"line_number":7,"context_line":"QOS: Provide get methods for policy \u0026 network/port binding"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"These methods were missing in the qos api."},{"line_number":10,"context_line":"These have been added to provide the ability to read the policy"},{"line_number":11,"context_line":"and network/port binding."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Closes-bug: #1556812"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1af94dfe_1e753c31","line":10,"updated":"2016-03-17 15:04:13.000000000","message":"This should be added to the QosPolicy object itself (neutron/objects/qos/policy.py)\n\nand the NSX plugin should leverage this [1] standard interface, instead of subclassing the QoS Plugin [2]\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/services/qos/notification_drivers/qos_base.py#L17\n\n[2]  https://review.openstack.org/#/c/292803/3/vmware_nsx/services/qos/nsx_v3/plugin.py\n\nPlease let me know if that would work for you.\n\nand, I\u0027m starting to think, that we must have called that, \"service_provider\" as for the other services :/","commit_id":"e5b5462296e7f108889e252d9a4f03bb48d67ce4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"35b2dddfc29c590ccccf393fc16e75249686a7b1","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"These methods were missing in the qos api."},{"line_number":10,"context_line":"These have been added to provide the ability to read the policy"},{"line_number":11,"context_line":"and network/port binding."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Closes-bug: #1556812"},{"line_number":14,"context_line":"Change-Id: I34e4851c0fec2cd037206868846644b99dfd7def"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1af94dfe_e3fb9dbf","line":11,"updated":"2016-03-17 14:51:09.000000000","message":"Before we going this route, could you please describe why you need to access those objects directly thru db? When qos plugin is enabled, notification driver is triggered on each policy update. You can hook into the notification mechanism to get updates about policy changes.\n\nI would like to first see a plugin patch to understand how you plan to use those functions.","commit_id":"e5b5462296e7f108889e252d9a4f03bb48d67ce4"}],"neutron/db/qos/api.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"85f9f1a92fe2afc676853e7c41c27be5936cf08f","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    except orm_exc.NoResultFound:"},{"line_number":41,"context_line":"        raise n_exc.NetworkQosBindingNotFound(net_id\u003dnetwork_id,"},{"line_number":42,"context_line":"                                              policy_id\u003dpolicy_id)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"def get_network_ids_by_policy_network_binding(context, policy_id):"},{"line_number":46,"context_line":"    query \u003d (db.model_query(context, models.QosNetworkPolicyBinding)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_1e541cc8","line":43,"updated":"2016-03-17 15:02:47.000000000","message":"I don\u0027t think those callables here are supposed to be a public API for plugin consumption. It was never an intent.","commit_id":"e5b5462296e7f108889e252d9a4f03bb48d67ce4"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"768c36f6bde0be62f655ee86a8d24793751ec380","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                                              policy_id\u003dpolicy_id)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"def get_network_ids_by_policy_network_binding(context, policy_id):"},{"line_number":46,"context_line":"    query \u003d (db.model_query(context, models.QosNetworkPolicyBinding)"},{"line_number":47,"context_line":"            .filter_by(policy_id\u003dpolicy_id).all())"},{"line_number":48,"context_line":"    return [entry.network_id for entry in query]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_0ab85e29","line":45,"updated":"2016-03-17 14:06:39.000000000","message":"How these new api\u0027s will be called? Are we planning to extend the neutronclient part as well?","commit_id":"e5b5462296e7f108889e252d9a4f03bb48d67ce4"},{"author":{"_account_id":14033,"name":"James Reeves","email":"james.reeves5546@gmail.com","username":"trombongod"},"change_message_id":"8f1377d99031798d3a1add3d61811853999694a2","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                                              policy_id\u003dpolicy_id)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"def get_network_ids_by_policy_network_binding(context, policy_id):"},{"line_number":46,"context_line":"    query \u003d (db.model_query(context, models.QosNetworkPolicyBinding)"},{"line_number":47,"context_line":"            .filter_by(policy_id\u003dpolicy_id).all())"},{"line_number":48,"context_line":"    return [entry.network_id for entry in query]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_63d5cd1a","line":45,"range":{"start_line":45,"start_character":23,"end_line":45,"end_character":45},"updated":"2016-03-17 14:51:51.000000000","message":"Small perhaps, but shouldn\u0027t this be \u0027get_network_ids_by_network_policy_binding\u0027 to more resemble the table it\u0027s being called against?","commit_id":"e5b5462296e7f108889e252d9a4f03bb48d67ce4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"85f9f1a92fe2afc676853e7c41c27be5936cf08f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                                              policy_id\u003dpolicy_id)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"def get_network_ids_by_policy_network_binding(context, policy_id):"},{"line_number":46,"context_line":"    query \u003d (db.model_query(context, models.QosNetworkPolicyBinding)"},{"line_number":47,"context_line":"            .filter_by(policy_id\u003dpolicy_id).all())"},{"line_number":48,"context_line":"    return [entry.network_id for entry in query]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_bef888c4","line":45,"range":{"start_line":45,"start_character":23,"end_line":45,"end_character":45},"in_reply_to":"1af94dfe_63d5cd1a","updated":"2016-03-17 15:02:47.000000000","message":"If you want something like that for your plugins, you should expose it thru policy object, and rely on the object as your API.","commit_id":"e5b5462296e7f108889e252d9a4f03bb48d67ce4"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"1cb141eb88a222e59e2749aae3bb565eb8e5ede0","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                                              policy_id\u003dpolicy_id)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"def get_network_ids_by_policy_network_binding(context, policy_id):"},{"line_number":46,"context_line":"    query \u003d (db.model_query(context, models.QosNetworkPolicyBinding)"},{"line_number":47,"context_line":"            .filter_by(policy_id\u003dpolicy_id).all())"},{"line_number":48,"context_line":"    return [entry.network_id for entry in query]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_7e44401a","line":45,"range":{"start_line":45,"start_character":23,"end_line":45,"end_character":45},"in_reply_to":"1af94dfe_63d5cd1a","updated":"2016-03-17 15:04:13.000000000","message":"This may go into the QoSPolicy neutron object instead as an object method.\n\nthen you would do: \n     qos_policy.get_bound_networks()\n\nor qos_policy.get_bound_ports()","commit_id":"e5b5462296e7f108889e252d9a4f03bb48d67ce4"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"e6be382384bd06f132e0ed0d29b4b8a6d0b6dd9a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"def get_network_ids_by_network_policy_binding(context, policy_id):"},{"line_number":46,"context_line":"    query \u003d (db.model_query(context, models.QosNetworkPolicyBinding)"},{"line_number":47,"context_line":"            .filter_by(policy_id\u003dpolicy_id).all())"},{"line_number":48,"context_line":"    return [entry.network_id for entry in query]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"def create_policy_port_binding(context, policy_id, port_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa0719c6_65b09fde","line":48,"updated":"2016-03-21 11:57:51.000000000","message":"(No action required): we could use an iterator here (entry.network ....   ) but that would make the query longer lived, I guess. I\u0027m good as it is.","commit_id":"0d431a45021e326dc02056e1049a088c738b70a5"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"e6be382384bd06f132e0ed0d29b4b8a6d0b6dd9a","unresolved":false,"context_lines":[{"line_number":74,"context_line":"def get_port_ids_by_port_policy_binding(context, policy_id):"},{"line_number":75,"context_line":"    query \u003d (db.model_query(context, models.QosPortPolicyBinding)"},{"line_number":76,"context_line":"            .filter_by(policy_id\u003dpolicy_id).all())"},{"line_number":77,"context_line":"    return [entry.port_id for entry in query]"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa0719c6_85c7b344","line":77,"updated":"2016-03-21 11:57:51.000000000","message":"(No action required) Ditto.","commit_id":"0d431a45021e326dc02056e1049a088c738b70a5"}],"neutron/objects/qos/policy.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"e6be382384bd06f132e0ed0d29b4b8a6d0b6dd9a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"class QosPolicy(base.NeutronDbObject):"},{"line_number":39,"context_line":"    # Version 1.0: Initial version"},{"line_number":40,"context_line":"    # Version 1.1: QosDscpMarkingRule introduced"},{"line_number":41,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    # required by RbacNeutronMetaclass"},{"line_number":44,"context_line":"    rbac_db_model \u003d QosPolicyRBAC"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa0719c6_25c7c713","line":41,"updated":"2016-03-21 11:57:51.000000000","message":"I suspect we may need to bump this to VERSION\u003d\u00271.2\u0027 because of the added methods. Am I right @ihar? (I now doubt if we only care about fields, which is the serializable part).\n\nPlease don\u0027t action until Ihar replies.","commit_id":"0d431a45021e326dc02056e1049a088c738b70a5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7c73dff67c1cf8183b28dff2bfe3298e85746ece","unresolved":false,"context_lines":[{"line_number":38,"context_line":"class QosPolicy(base.NeutronDbObject):"},{"line_number":39,"context_line":"    # Version 1.0: Initial version"},{"line_number":40,"context_line":"    # Version 1.1: QosDscpMarkingRule introduced"},{"line_number":41,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    # required by RbacNeutronMetaclass"},{"line_number":44,"context_line":"    rbac_db_model \u003d QosPolicyRBAC"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa0719c6_a15f2b71","line":41,"in_reply_to":"fa0719c6_25c7c713","updated":"2016-03-21 22:07:01.000000000","message":"I don\u0027t think you should bump version on method expansion.","commit_id":"0d431a45021e326dc02056e1049a088c738b70a5"},{"author":{"_account_id":20363,"name":"Adit Sarfaty","email":"asarfaty@vmware.com","username":"asarfaty"},"change_message_id":"65fed842c4399e375c8f19408dda3d9a61b913f9","unresolved":false,"context_lines":[{"line_number":38,"context_line":"class QosPolicy(base.NeutronDbObject):"},{"line_number":39,"context_line":"    # Version 1.0: Initial version"},{"line_number":40,"context_line":"    # Version 1.1: QosDscpMarkingRule introduced"},{"line_number":41,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    # required by RbacNeutronMetaclass"},{"line_number":44,"context_line":"    rbac_db_model \u003d QosPolicyRBAC"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa0719c6_37eb52b2","line":41,"in_reply_to":"fa0719c6_a15f2b71","updated":"2016-03-22 07:51:22.000000000","message":"Thanks","commit_id":"0d431a45021e326dc02056e1049a088c738b70a5"}],"neutron/tests/unit/objects/qos/test_policy.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"35b2dddfc29c590ccccf393fc16e75249686a7b1","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        self.assertRaises(n_exc.NetworkQosBindingNotFound,"},{"line_number":148,"context_line":"                          obj.attach_network, \u0027non-existent-network\u0027)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def test_attach_network_get_policy_network(self):"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        obj \u003d self._create_test_policy()"},{"line_number":153,"context_line":"        obj.attach_network(self._network[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_28056213","line":150,"updated":"2016-03-17 14:51:09.000000000","message":"that test is misplaced. It would belong to a file that would target the new db api functions.","commit_id":"e5b5462296e7f108889e252d9a4f03bb48d67ce4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"35b2dddfc29c590ccccf393fc16e75249686a7b1","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                                                      self._port[\u0027id\u0027])"},{"line_number":192,"context_line":"        self.assertEqual(obj, policy_obj)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def test_attach_port_get_policy_port(self):"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        obj \u003d self._create_test_policy()"},{"line_number":197,"context_line":"        obj.attach_port(self._port[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_0802260b","line":194,"updated":"2016-03-17 14:51:09.000000000","message":"ditto","commit_id":"e5b5462296e7f108889e252d9a4f03bb48d67ce4"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"e6be382384bd06f132e0ed0d29b4b8a6d0b6dd9a","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def test_attach_network_get_policy_network(self):"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        obj \u003d self._create_test_policy()"},{"line_number":165,"context_line":"        obj.attach_network(self._network[\u0027id\u0027])"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        networks \u003d obj.get_bound_networks()"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa0719c6_e5778f00","line":164,"updated":"2016-03-21 11:57:51.000000000","message":"could you try with several networks?","commit_id":"0d431a45021e326dc02056e1049a088c738b70a5"},{"author":{"_account_id":20363,"name":"Adit Sarfaty","email":"asarfaty@vmware.com","username":"asarfaty"},"change_message_id":"65fed842c4399e375c8f19408dda3d9a61b913f9","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def test_attach_network_get_policy_network(self):"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        obj \u003d self._create_test_policy()"},{"line_number":165,"context_line":"        obj.attach_network(self._network[\u0027id\u0027])"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        networks \u003d obj.get_bound_networks()"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa0719c6_77c66a4a","line":164,"in_reply_to":"fa0719c6_e5778f00","updated":"2016-03-22 07:51:22.000000000","message":"Done","commit_id":"0d431a45021e326dc02056e1049a088c738b70a5"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"e6be382384bd06f132e0ed0d29b4b8a6d0b6dd9a","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    def test_attach_port_get_policy_port(self):"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        obj \u003d self._create_test_policy()"},{"line_number":208,"context_line":"        obj.attach_port(self._port[\u0027id\u0027])"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        ports \u003d obj.get_bound_ports()"},{"line_number":211,"context_line":"        self.assertEqual(1, len(ports))"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa0719c6_25606735","line":208,"updated":"2016-03-21 11:57:51.000000000","message":"Ditto for ports.","commit_id":"0d431a45021e326dc02056e1049a088c738b70a5"},{"author":{"_account_id":20363,"name":"Adit Sarfaty","email":"asarfaty@vmware.com","username":"asarfaty"},"change_message_id":"65fed842c4399e375c8f19408dda3d9a61b913f9","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    def test_attach_port_get_policy_port(self):"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        obj \u003d self._create_test_policy()"},{"line_number":208,"context_line":"        obj.attach_port(self._port[\u0027id\u0027])"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        ports \u003d obj.get_bound_ports()"},{"line_number":211,"context_line":"        self.assertEqual(1, len(ports))"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa0719c6_b7c0022c","line":208,"in_reply_to":"fa0719c6_25606735","updated":"2016-03-22 07:51:22.000000000","message":"Done","commit_id":"0d431a45021e326dc02056e1049a088c738b70a5"}]}
