)]}'
{"neutron/objects/agent.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d880f94ba0668c8bb15bfba378e690a367e792ab","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        \u0027load\u0027: obj_fields.IntegerField(default\u003d0),"},{"line_number":46,"context_line":"    }"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    foreign_keys \u003d {\u0027RouterL3AgentBinding\u0027: {\u0027id\u0027: \u0027l3_agent_id\u0027}}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @classmethod"},{"line_number":51,"context_line":"    def modify_fields_to_db(cls, fields):"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_4beb3778","line":48,"updated":"2016-11-28 11:32:49.000000000","message":"I am not sure it\u0027s needed, see comment in binding object.","commit_id":"6f18f64561b6466353baf1cd69d781f05abacd51"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"a9615f59b3d036780010fb79eac51d560373226b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        \u0027load\u0027: obj_fields.IntegerField(default\u003d0),"},{"line_number":46,"context_line":"    }"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    foreign_keys \u003d {\u0027RouterL3AgentBinding\u0027: {\u0027id\u0027: \u0027l3_agent_id\u0027}}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @classmethod"},{"line_number":51,"context_line":"    def modify_fields_to_db(cls, fields):"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a71b18c_5b79db92","line":48,"in_reply_to":"5a74a57a_4beb3778","updated":"2016-12-01 17:38:16.000000000","message":"I think this is needed. I implemented a join using the synthetic field in the integration patch [1] and the corresponding tests passed. Let me know your thoughts on this.\n\n\n[1] https://review.openstack.org/#/c/377074/21/neutron/db/l3_agentschedulers_db.py@371","commit_id":"6f18f64561b6466353baf1cd69d781f05abacd51"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"4f5d8b9d6b92df997a8b76a94d4178754eb564a4","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \u0027load\u0027: obj_fields.IntegerField(default\u003d0),"},{"line_number":47,"context_line":"    }"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    foreign_keys \u003d {\u0027RouterL3AgentBinding\u0027: {\u0027id\u0027: \u0027l3_agent_id\u0027}}"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @classmethod"},{"line_number":52,"context_line":"    def modify_fields_to_db(cls, fields):"}],"source_content_type":"text/x-python","patch_set":34,"id":"1a6eadb0_c34aa254","line":49,"updated":"2016-12-16 15:08:10.000000000","message":"this should be in the RouterL3AgentBinding object and should be something like:\nforeign_keys \u003d {\u0027Agent\u0027: {\u0027l3_agent_id\u0027: \u0027id\u0027}}","commit_id":"63f9d921519cb8621af73cae8569df8c4b83bad7"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"5929f582513163aa971c3f9e886b0b9b3779dd63","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \u0027load\u0027: obj_fields.IntegerField(default\u003d0),"},{"line_number":47,"context_line":"    }"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    foreign_keys \u003d {\u0027RouterL3AgentBinding\u0027: {\u0027id\u0027: \u0027l3_agent_id\u0027}}"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @classmethod"},{"line_number":52,"context_line":"    def modify_fields_to_db(cls, fields):"}],"source_content_type":"text/x-python","patch_set":34,"id":"1a6eadb0_7efb2179","line":49,"in_reply_to":"1a6eadb0_c34aa254","updated":"2016-12-16 15:53:28.000000000","message":"I added the foreign key in the Agent object as I have a synthetic field for Agent object in the RouterL3AgentBinding object [1] as its needed for the integration of RouterL3AgentBinding\n\n\n[1]https://review.openstack.org/#/c/360908/34/neutron/objects/l3agent.py @38","commit_id":"63f9d921519cb8621af73cae8569df8c4b83bad7"}],"neutron/objects/l3agent.py":[{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"52770148f2cc67a9eb77b450d6ccb0f1c4d638d1","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from neutron.db.models import l3agent"},{"line_number":17,"context_line":"from neutron.objects import base"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOWEST_BINDING_INDEX \u003d 1"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a8bc5a2_3a43b143","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":20},"updated":"2016-09-26 11:40:46.000000000","message":"This should be imported from [1]\n\n[1] https://review.openstack.org/#/c/355719/16/neutron/db/models/l3agent.py@20","commit_id":"b3b4c591936d7614ec4d0d563ced94e650d8e2f5"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"89950d501383e955c127c5ba8fad256ecac8fc41","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from neutron.db.models import l3agent"},{"line_number":17,"context_line":"from neutron.objects import base"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOWEST_BINDING_INDEX \u003d 1"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a8bc5a2_68b1dc46","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":20},"in_reply_to":"5a8bc5a2_3a43b143","updated":"2016-09-26 17:08:13.000000000","message":"Done","commit_id":"b3b4c591936d7614ec4d0d563ced94e650d8e2f5"},{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"5956c2384b7fda38affbc4e33631d3f36535cd4c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from neutron.db.models import l3agent"},{"line_number":17,"context_line":"from neutron.objects import base"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOWEST_BINDING_INDEX \u003d 1"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a8bc5a2_dab8a4eb","line":19,"updated":"2016-09-27 22:02:18.000000000","message":"This variable is not required as it is already present in l3agent model [1] and that variable is being used.\n\n[1] - https://review.openstack.org/#/c/355719/18/neutron/db/models/l3agent.py@20","commit_id":"7f0e3e4bb2f33ac060900c11dc6c20106029057d"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"7988a55d52ebc83c93c01f02af57c9db9367f674","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from neutron.db.models import l3agent"},{"line_number":17,"context_line":"from neutron.objects import base"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOWEST_BINDING_INDEX \u003d 1"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a8bc5a2_307289ae","line":19,"in_reply_to":"5a8bc5a2_dab8a4eb","updated":"2016-09-27 23:10:48.000000000","message":"My bad I thought I removed it. Removed it now :)","commit_id":"7f0e3e4bb2f33ac060900c11dc6c20106029057d"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"24981baa08796169dd22cd1acf1d36d7bcc53f3c","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027l3_agent_id\u0027]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    foreign_keys \u003d {\u0027Router\u0027: {\u0027router_id\u0027: \u0027id\u0027},"},{"line_number":30,"context_line":"                    \u0027Agent\u0027: {\u0027l3_agent_id\u0027: \u0027id\u0027}}"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_12790bfd","line":29,"range":{"start_line":29,"start_character":20,"end_line":29,"end_character":49},"updated":"2016-11-07 16:52:00.000000000","message":"Given the current Router OVO definition[1] this foreign key is not required.\n\n[1] https://review.openstack.org/#/c/307964/28/neutron/objects/router.py@117","commit_id":"f668690194335a68a3b09db5d8f82b25831bc8d4"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"02a2771510968c8beb98920cee3955814d595f14","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027l3_agent_id\u0027]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    foreign_keys \u003d {\u0027Router\u0027: {\u0027router_id\u0027: \u0027id\u0027},"},{"line_number":30,"context_line":"                    \u0027Agent\u0027: {\u0027l3_agent_id\u0027: \u0027id\u0027}}"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_c2290a39","line":29,"range":{"start_line":29,"start_character":20,"end_line":29,"end_character":49},"in_reply_to":"9a629dbe_12790bfd","updated":"2016-11-09 23:22:17.000000000","message":"+1","commit_id":"f668690194335a68a3b09db5d8f82b25831bc8d4"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"614578e47ccba90a16aba20c8e0198b0d3fd77a0","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027l3_agent_id\u0027]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    foreign_keys \u003d {\u0027Router\u0027: {\u0027router_id\u0027: \u0027id\u0027},"},{"line_number":30,"context_line":"                    \u0027Agent\u0027: {\u0027l3_agent_id\u0027: \u0027id\u0027}}"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_0592da4b","line":29,"range":{"start_line":29,"start_character":20,"end_line":29,"end_character":49},"in_reply_to":"9a629dbe_12790bfd","updated":"2016-11-11 16:34:08.000000000","message":"Done","commit_id":"f668690194335a68a3b09db5d8f82b25831bc8d4"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"614578e47ccba90a16aba20c8e0198b0d3fd77a0","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027l3_agent_id\u0027]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    foreign_keys \u003d {\u0027Router\u0027: {\u0027router_id\u0027: \u0027id\u0027},"},{"line_number":30,"context_line":"                    \u0027Agent\u0027: {\u0027l3_agent_id\u0027: \u0027id\u0027}}"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_25951e32","line":29,"range":{"start_line":29,"start_character":20,"end_line":29,"end_character":49},"in_reply_to":"9a629dbe_c2290a39","updated":"2016-11-11 16:34:08.000000000","message":"Done","commit_id":"f668690194335a68a3b09db5d8f82b25831bc8d4"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"24981baa08796169dd22cd1acf1d36d7bcc53f3c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027l3_agent_id\u0027]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    foreign_keys \u003d {\u0027Router\u0027: {\u0027router_id\u0027: \u0027id\u0027},"},{"line_number":30,"context_line":"                    \u0027Agent\u0027: {\u0027l3_agent_id\u0027: \u0027id\u0027}}"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    fields \u003d {"},{"line_number":33,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_d2e5d3a8","line":30,"range":{"start_line":30,"start_character":20,"end_line":30,"end_character":50},"updated":"2016-11-07 16:52:00.000000000","message":"same thing [1]\n\n[1] https://review.openstack.org/#/c/297887/26/neutron/objects/agent.py@30","commit_id":"f668690194335a68a3b09db5d8f82b25831bc8d4"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"614578e47ccba90a16aba20c8e0198b0d3fd77a0","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027l3_agent_id\u0027]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    foreign_keys \u003d {\u0027Router\u0027: {\u0027router_id\u0027: \u0027id\u0027},"},{"line_number":30,"context_line":"                    \u0027Agent\u0027: {\u0027l3_agent_id\u0027: \u0027id\u0027}}"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    fields \u003d {"},{"line_number":33,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_05b9facb","line":30,"range":{"start_line":30,"start_character":20,"end_line":30,"end_character":50},"in_reply_to":"9a629dbe_c2b74af3","updated":"2016-11-11 16:34:08.000000000","message":"Done","commit_id":"f668690194335a68a3b09db5d8f82b25831bc8d4"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"02a2771510968c8beb98920cee3955814d595f14","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027l3_agent_id\u0027]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    foreign_keys \u003d {\u0027Router\u0027: {\u0027router_id\u0027: \u0027id\u0027},"},{"line_number":30,"context_line":"                    \u0027Agent\u0027: {\u0027l3_agent_id\u0027: \u0027id\u0027}}"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    fields \u003d {"},{"line_number":33,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_c2b74af3","line":30,"range":{"start_line":30,"start_character":20,"end_line":30,"end_character":50},"in_reply_to":"9a629dbe_d2e5d3a8","updated":"2016-11-09 23:22:17.000000000","message":"+1, I think the Foreign Key should be introduced in the Agent OVO","commit_id":"f668690194335a68a3b09db5d8f82b25831bc8d4"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"614578e47ccba90a16aba20c8e0198b0d3fd77a0","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027l3_agent_id\u0027]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    foreign_keys \u003d {\u0027Router\u0027: {\u0027router_id\u0027: \u0027id\u0027},"},{"line_number":30,"context_line":"                    \u0027Agent\u0027: {\u0027l3_agent_id\u0027: \u0027id\u0027}}"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    fields \u003d {"},{"line_number":33,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_e5a7a6a4","line":30,"range":{"start_line":30,"start_character":20,"end_line":30,"end_character":50},"in_reply_to":"9a629dbe_d2e5d3a8","updated":"2016-11-11 16:34:08.000000000","message":"Done","commit_id":"f668690194335a68a3b09db5d8f82b25831bc8d4"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"24981baa08796169dd22cd1acf1d36d7bcc53f3c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        \u0027l3_agent_id\u0027: obj_fields.UUIDField(),"},{"line_number":35,"context_line":"        \u0027binding_index\u0027: obj_fields.IntegerField("},{"line_number":36,"context_line":"                             default\u003dl3agent.LOWEST_BINDING_INDEX),"},{"line_number":37,"context_line":"        \u0027l3_agent\u0027: obj_fields.ListOfObjectsField(\u0027Agent\u0027)"},{"line_number":38,"context_line":"    }"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    synthetic_fields \u003d [\u0027l3_agent\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_32360f04","line":37,"range":{"start_line":37,"start_character":8,"end_line":37,"end_character":58},"updated":"2016-11-07 16:52:00.000000000","message":"Given that there is no integration phase in this patch there is no way to ensure that this synthetic field is needed, besides it should be ObjectField instead of ListOfObjectsField type.  So, can you remove it?","commit_id":"f668690194335a68a3b09db5d8f82b25831bc8d4"},{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"a006f63fc3947a8771c37a0e4767173009950446","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        \u0027l3_agent_id\u0027: obj_fields.UUIDField(),"},{"line_number":35,"context_line":"        \u0027binding_index\u0027: obj_fields.IntegerField("},{"line_number":36,"context_line":"                             default\u003dl3agent.LOWEST_BINDING_INDEX),"},{"line_number":37,"context_line":"        \u0027l3_agent\u0027: obj_fields.ListOfObjectsField(\u0027Agent\u0027)"},{"line_number":38,"context_line":"    }"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    synthetic_fields \u003d [\u0027l3_agent\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_f870480d","line":37,"range":{"start_line":37,"start_character":8,"end_line":37,"end_character":58},"in_reply_to":"9a629dbe_229e4663","updated":"2016-11-10 22:38:08.000000000","message":"We were discussing about this and 1 more synthetic field Router OVO  will be introduced for helping in joins.","commit_id":"f668690194335a68a3b09db5d8f82b25831bc8d4"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"614578e47ccba90a16aba20c8e0198b0d3fd77a0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        \u0027l3_agent_id\u0027: obj_fields.UUIDField(),"},{"line_number":35,"context_line":"        \u0027binding_index\u0027: obj_fields.IntegerField("},{"line_number":36,"context_line":"                             default\u003dl3agent.LOWEST_BINDING_INDEX),"},{"line_number":37,"context_line":"        \u0027l3_agent\u0027: obj_fields.ListOfObjectsField(\u0027Agent\u0027)"},{"line_number":38,"context_line":"    }"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    synthetic_fields \u003d [\u0027l3_agent\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_650e368d","line":37,"range":{"start_line":37,"start_character":8,"end_line":37,"end_character":58},"in_reply_to":"9a629dbe_32360f04","updated":"2016-11-11 16:34:08.000000000","message":"@Victor: As per our discussion we will need this synthetic field in the integration phase. So keeping it here. We might need some more synthetic fields in this. But not introducing them at this point, will introduce them in the integration patch","commit_id":"f668690194335a68a3b09db5d8f82b25831bc8d4"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"02a2771510968c8beb98920cee3955814d595f14","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        \u0027l3_agent_id\u0027: obj_fields.UUIDField(),"},{"line_number":35,"context_line":"        \u0027binding_index\u0027: obj_fields.IntegerField("},{"line_number":36,"context_line":"                             default\u003dl3agent.LOWEST_BINDING_INDEX),"},{"line_number":37,"context_line":"        \u0027l3_agent\u0027: obj_fields.ListOfObjectsField(\u0027Agent\u0027)"},{"line_number":38,"context_line":"    }"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    synthetic_fields \u003d [\u0027l3_agent\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_229e4663","line":37,"range":{"start_line":37,"start_character":8,"end_line":37,"end_character":58},"in_reply_to":"9a629dbe_32360f04","updated":"2016-11-09 23:22:17.000000000","message":"I think the Synthetic Field will be needed here:\nhttps://github.com/openstack/neutron/blob/master/neutron/scheduler/l3_agent_scheduler.py#L215","commit_id":"f668690194335a68a3b09db5d8f82b25831bc8d4"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"cf1ff87f7df13076481a4a32af39d39f44142557","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    db_model \u003d l3agent.RouterL3AgentBinding"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027l3_agent_id\u0027]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    fields \u003d {"},{"line_number":30,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":26,"id":"7a77a97e_e6497532","line":27,"updated":"2016-11-18 16:19:47.000000000","message":"those are foreign keys, you should define them as e.g. see here [1]\n[1] https://github.com/openstack/neutron/blob/master/neutron/objects/network.py#L51","commit_id":"25c9a27f52f29c4a44b355a8d8887c3a1c17b5ae"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6409d02eef1759eeea23a34641f6a3859dfc2751","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    db_model \u003d l3agent.RouterL3AgentBinding"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027l3_agent_id\u0027]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    fields \u003d {"},{"line_number":30,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":26,"id":"7a77a97e_d47bf827","line":27,"in_reply_to":"7a77a97e_9d3febd5","updated":"2016-11-21 21:30:55.000000000","message":"@Rossella, according to the documentation written by Artur[1] the foreign_key dictionary is used to populate synthetic fields.  In this case, Agent and Router OVO classes haven\u0027t a synthetic field which suggest to have defined here.  We\u0027re working of the integration for those objects which will proof if there is a missing field.\n\n[1] https://review.openstack.org/#/c/336518/10/doc/source/devref/objects_usage.rst@155","commit_id":"25c9a27f52f29c4a44b355a8d8887c3a1c17b5ae"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"bc33eeff8f79488660e37776b55ceb4132b0875b","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    db_model \u003d l3agent.RouterL3AgentBinding"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027l3_agent_id\u0027]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    fields \u003d {"},{"line_number":30,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":26,"id":"7a77a97e_9d3febd5","line":27,"in_reply_to":"7a77a97e_e6497532","updated":"2016-11-21 19:21:01.000000000","message":"As per Victo\u0027s comments in PS24 the foreign keys are not needed.","commit_id":"25c9a27f52f29c4a44b355a8d8887c3a1c17b5ae"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"05c50418ecc6b3a52d6b17f68af3a069302e5574","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    db_model \u003d l3agent.RouterL3AgentBinding"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027l3_agent_id\u0027]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    fields \u003d {"},{"line_number":30,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":29,"id":"5a74a57a_0de80510","line":27,"updated":"2016-11-23 15:12:43.000000000","message":"I dont know so I am curious :\nThe following code makes primary key a combination or router_id and l3_Agent_id , right?","commit_id":"29353d9708ab382cf05e237a8f629ec27ae17a0c"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"387d71fe79fda73c67ac2ea12deacb4d9b968166","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    db_model \u003d l3agent.RouterL3AgentBinding"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027l3_agent_id\u0027]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    fields \u003d {"},{"line_number":30,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":29,"id":"5a74a57a_07bc5904","line":27,"in_reply_to":"5a74a57a_0de80510","updated":"2016-11-23 19:01:01.000000000","message":"@Reedip: Yes","commit_id":"29353d9708ab382cf05e237a8f629ec27ae17a0c"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d880f94ba0668c8bb15bfba378e690a367e792ab","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":31,"context_line":"        \u0027l3_agent_id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027binding_index\u0027: obj_fields.IntegerField("},{"line_number":33,"context_line":"                             default\u003dl3agent.LOWEST_BINDING_INDEX),"},{"line_number":34,"context_line":"        \u0027l3_agent\u0027: obj_fields.ObjectField(\u0027Agent\u0027, nullable\u003dTrue)"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_2bb43b80","line":33,"updated":"2016-11-28 11:32:49.000000000","message":"if it\u0027s lowest, should we also limit it to !\u003d 0? I think we can do it with RangeConstrainedInteger","commit_id":"6f18f64561b6466353baf1cd69d781f05abacd51"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"f9e3222509b8f3b40954f7d99f0fd9608df873ee","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":31,"context_line":"        \u0027l3_agent_id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027binding_index\u0027: obj_fields.IntegerField("},{"line_number":33,"context_line":"                             default\u003dl3agent.LOWEST_BINDING_INDEX),"},{"line_number":34,"context_line":"        \u0027l3_agent\u0027: obj_fields.ObjectField(\u0027Agent\u0027, nullable\u003dTrue)"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_6d732b4e","line":33,"in_reply_to":"5a74a57a_1fa14146","updated":"2016-12-01 08:43:51.000000000","message":"Since it should never be created with the value \u00270\u0027 anyway, a limiter would be appropriate.","commit_id":"6f18f64561b6466353baf1cd69d781f05abacd51"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"be2991a403d5504f848beda7bcf15e56eec42c80","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":31,"context_line":"        \u0027l3_agent_id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027binding_index\u0027: obj_fields.IntegerField("},{"line_number":33,"context_line":"                             default\u003dl3agent.LOWEST_BINDING_INDEX),"},{"line_number":34,"context_line":"        \u0027l3_agent\u0027: obj_fields.ObjectField(\u0027Agent\u0027, nullable\u003dTrue)"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_1fa14146","line":33,"in_reply_to":"5a74a57a_211b6082","updated":"2016-11-29 11:23:43.000000000","message":"\u003e should that constant placed in a common place?\n\nNah, it seems very data model specific.","commit_id":"6f18f64561b6466353baf1cd69d781f05abacd51"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"362369985a3a5daeece91cd4dfc62c02d89c6790","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":31,"context_line":"        \u0027l3_agent_id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027binding_index\u0027: obj_fields.IntegerField("},{"line_number":33,"context_line":"                             default\u003dl3agent.LOWEST_BINDING_INDEX),"},{"line_number":34,"context_line":"        \u0027l3_agent\u0027: obj_fields.ObjectField(\u0027Agent\u0027, nullable\u003dTrue)"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_211b6082","line":33,"in_reply_to":"5a74a57a_2bb43b80","updated":"2016-11-28 22:12:45.000000000","message":"nit: ITOH, should that constant placed in a common place?","commit_id":"6f18f64561b6466353baf1cd69d781f05abacd51"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"a9615f59b3d036780010fb79eac51d560373226b","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":31,"context_line":"        \u0027l3_agent_id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027binding_index\u0027: obj_fields.IntegerField("},{"line_number":33,"context_line":"                             default\u003dl3agent.LOWEST_BINDING_INDEX),"},{"line_number":34,"context_line":"        \u0027l3_agent\u0027: obj_fields.ObjectField(\u0027Agent\u0027, nullable\u003dTrue)"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"3a71b18c_dbac0bf0","line":33,"in_reply_to":"5a74a57a_6d732b4e","updated":"2016-12-01 17:38:16.000000000","message":"@Ihar and @John: If we do it with RangeConstarinedInteger in this case, value for the start will be LOWEST_BINDING_INDEX what will be the end value.","commit_id":"6f18f64561b6466353baf1cd69d781f05abacd51"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d880f94ba0668c8bb15bfba378e690a367e792ab","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        \u0027l3_agent_id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027binding_index\u0027: obj_fields.IntegerField("},{"line_number":33,"context_line":"                             default\u003dl3agent.LOWEST_BINDING_INDEX),"},{"line_number":34,"context_line":"        \u0027l3_agent\u0027: obj_fields.ObjectField(\u0027Agent\u0027, nullable\u003dTrue)"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    synthetic_fields \u003d [\u0027l3_agent\u0027]"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_ebefa384","line":34,"updated":"2016-11-28 11:32:49.000000000","message":"I am not sure it\u0027s needed. This makes potentially redundant calls to fetch the info. Users can always fetch an Agent with l3_agent_id if needed.\n\nWe have some queries in neutron/db/l3_agentschedulers_db.py and neutron/db/l3_hascheduler_db.py that will need that, but I believe we should just expose the info later on Agent object itself thru custom filters, or methods defined on Agent object.","commit_id":"6f18f64561b6466353baf1cd69d781f05abacd51"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"a9615f59b3d036780010fb79eac51d560373226b","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        \u0027l3_agent_id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027binding_index\u0027: obj_fields.IntegerField("},{"line_number":33,"context_line":"                             default\u003dl3agent.LOWEST_BINDING_INDEX),"},{"line_number":34,"context_line":"        \u0027l3_agent\u0027: obj_fields.ObjectField(\u0027Agent\u0027, nullable\u003dTrue)"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    synthetic_fields \u003d [\u0027l3_agent\u0027]"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a71b18c_326d2305","line":34,"in_reply_to":"5a74a57a_ebefa384","updated":"2016-12-01 17:38:16.000000000","message":"I think this is needed. I implemented a join using the synthetic field in the integration patch [1] and the corresponding tests passed. Let me know your thoughts on this.\n\n\n[1] https://review.openstack.org/#/c/377074/21/neutron/db/l3_agentschedulers_db.py@371","commit_id":"6f18f64561b6466353baf1cd69d781f05abacd51"}],"neutron/objects/router_l3agent_binding.py":[{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"c632284230e18d65485c1a2acb1fc92a9535fda1","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    fields \u003d {"},{"line_number":35,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":36,"context_line":"        \u0027l3_agent_id\u0027: obj_fields.UUIDField(),"},{"line_number":37,"context_line":"        \u0027binding_index\u0027: obj_fields.IntegerField()"},{"line_number":38,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a8bc5a2_77f2509c","line":37,"range":{"start_line":37,"start_character":48,"end_line":37,"end_character":49},"updated":"2016-09-22 08:06:29.000000000","message":"Maybe we can add default here, which is LOWEST_BINDING_INDEX\u003d1.","commit_id":"9a6411a6f8d43ef4f8deeeaa3893129f9300d439"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"136b6658069f3a538978dca71272410e1bdc86de","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    fields \u003d {"},{"line_number":35,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":36,"context_line":"        \u0027l3_agent_id\u0027: obj_fields.UUIDField(),"},{"line_number":37,"context_line":"        \u0027binding_index\u0027: obj_fields.IntegerField()"},{"line_number":38,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a8bc5a2_bbd663c3","line":37,"range":{"start_line":37,"start_character":48,"end_line":37,"end_character":49},"in_reply_to":"5a8bc5a2_77f2509c","updated":"2016-09-22 16:03:24.000000000","message":"Done","commit_id":"9a6411a6f8d43ef4f8deeeaa3893129f9300d439"}],"neutron/tests/unit/objects/test_base.py":[{"author":{"_account_id":22524,"name":"Mohit Malik","email":"mohit.malik@intel.com","username":"mmalik4"},"change_message_id":"4acd41eb1466c91da7b4dd2f129541be9ecd8171","unresolved":false,"context_lines":[{"line_number":1099,"context_line":""},{"line_number":1100,"context_line":"    def _create_test_router(self):"},{"line_number":1101,"context_line":"        attrs \u003d {"},{"line_number":1102,"context_line":"            \u0027id\u0027: uuidutils.generate_uuid(),"},{"line_number":1103,"context_line":"            \u0027name\u0027: \u0027test_router\u0027,"},{"line_number":1104,"context_line":"        }"},{"line_number":1105,"context_line":"        #TODO(dasanind): replace with router.create() once we get an object"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a8bc5a2_e9020009","line":1102,"updated":"2016-09-27 20:45:32.000000000","message":"I think the \u0027id\u0027 field is taken care of by the create_object()","commit_id":"7f0e3e4bb2f33ac060900c11dc6c20106029057d"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"7988a55d52ebc83c93c01f02af57c9db9367f674","unresolved":false,"context_lines":[{"line_number":1099,"context_line":""},{"line_number":1100,"context_line":"    def _create_test_router(self):"},{"line_number":1101,"context_line":"        attrs \u003d {"},{"line_number":1102,"context_line":"            \u0027id\u0027: uuidutils.generate_uuid(),"},{"line_number":1103,"context_line":"            \u0027name\u0027: \u0027test_router\u0027,"},{"line_number":1104,"context_line":"        }"},{"line_number":1105,"context_line":"        #TODO(dasanind): replace with router.create() once we get an object"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a8bc5a2_101f4d5c","line":1102,"in_reply_to":"5a8bc5a2_7a9f9050","updated":"2016-09-27 23:10:48.000000000","message":"Done","commit_id":"7f0e3e4bb2f33ac060900c11dc6c20106029057d"},{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"5956c2384b7fda38affbc4e33631d3f36535cd4c","unresolved":false,"context_lines":[{"line_number":1099,"context_line":""},{"line_number":1100,"context_line":"    def _create_test_router(self):"},{"line_number":1101,"context_line":"        attrs \u003d {"},{"line_number":1102,"context_line":"            \u0027id\u0027: uuidutils.generate_uuid(),"},{"line_number":1103,"context_line":"            \u0027name\u0027: \u0027test_router\u0027,"},{"line_number":1104,"context_line":"        }"},{"line_number":1105,"context_line":"        #TODO(dasanind): replace with router.create() once we get an object"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a8bc5a2_7a9f9050","line":1102,"in_reply_to":"5a8bc5a2_e9020009","updated":"2016-09-27 22:02:18.000000000","message":"+1. I ran tests without the \u0027id\u0027, seems to pass.","commit_id":"7f0e3e4bb2f33ac060900c11dc6c20106029057d"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"7988a55d52ebc83c93c01f02af57c9db9367f674","unresolved":false,"context_lines":[{"line_number":1099,"context_line":""},{"line_number":1100,"context_line":"    def _create_test_router(self):"},{"line_number":1101,"context_line":"        attrs \u003d {"},{"line_number":1102,"context_line":"            \u0027id\u0027: uuidutils.generate_uuid(),"},{"line_number":1103,"context_line":"            \u0027name\u0027: \u0027test_router\u0027,"},{"line_number":1104,"context_line":"        }"},{"line_number":1105,"context_line":"        #TODO(dasanind): replace with router.create() once we get an object"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a8bc5a2_f029018b","line":1102,"in_reply_to":"5a8bc5a2_e9020009","updated":"2016-09-27 23:10:48.000000000","message":"Done","commit_id":"7f0e3e4bb2f33ac060900c11dc6c20106029057d"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"24981baa08796169dd22cd1acf1d36d7bcc53f3c","unresolved":false,"context_lines":[{"line_number":1179,"context_line":"        attrs \u003d {"},{"line_number":1180,"context_line":"            \u0027name\u0027: \u0027test_router\u0027,"},{"line_number":1181,"context_line":"        }"},{"line_number":1182,"context_line":"        #TODO(dasanind): replace with router.create() once we get an object"},{"line_number":1183,"context_line":"        # implementation of Routers"},{"line_number":1184,"context_line":"        self._router \u003d obj_db_api.create_object(self.context,"},{"line_number":1185,"context_line":"                                                l3_model.Router,"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_f51ac16d","line":1182,"updated":"2016-11-07 16:52:00.000000000","message":"this is not needed","commit_id":"f668690194335a68a3b09db5d8f82b25831bc8d4"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"614578e47ccba90a16aba20c8e0198b0d3fd77a0","unresolved":false,"context_lines":[{"line_number":1179,"context_line":"        attrs \u003d {"},{"line_number":1180,"context_line":"            \u0027name\u0027: \u0027test_router\u0027,"},{"line_number":1181,"context_line":"        }"},{"line_number":1182,"context_line":"        #TODO(dasanind): replace with router.create() once we get an object"},{"line_number":1183,"context_line":"        # implementation of Routers"},{"line_number":1184,"context_line":"        self._router \u003d obj_db_api.create_object(self.context,"},{"line_number":1185,"context_line":"                                                l3_model.Router,"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_85050a47","line":1182,"in_reply_to":"9a629dbe_f51ac16d","updated":"2016-11-11 16:34:08.000000000","message":"Done","commit_id":"f668690194335a68a3b09db5d8f82b25831bc8d4"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"1ab04caf94e23985abec1fce6ba0ea4c8eea863f","unresolved":false,"context_lines":[{"line_number":1190,"context_line":"            \u0027topic\u0027: \u0027fake_dhcp_agent\u0027,"},{"line_number":1191,"context_line":"            \u0027host\u0027: \u0027Fake HostC-%s\u0027 % tools.get_random_string(4),"},{"line_number":1192,"context_line":"            \u0027admin_state_up\u0027: True,"},{"line_number":1193,"context_line":"            \u0027created_at\u0027: datetime.date.today(),"},{"line_number":1194,"context_line":"            \u0027started_at\u0027: datetime.date.today(),"},{"line_number":1195,"context_line":"            \u0027heartbeat_timestamp\u0027: datetime.date.today(),"},{"line_number":1196,"context_line":"            \u0027configurations\u0027: \u0027test_configurations\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"7a77a97e_9434844a","line":1193,"range":{"start_line":1193,"start_character":26,"end_line":1193,"end_character":47},"updated":"2016-11-18 07:39:14.000000000","message":"timeutils.utcnow() ?","commit_id":"25c9a27f52f29c4a44b355a8d8887c3a1c17b5ae"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"bc33eeff8f79488660e37776b55ceb4132b0875b","unresolved":false,"context_lines":[{"line_number":1190,"context_line":"            \u0027topic\u0027: \u0027fake_dhcp_agent\u0027,"},{"line_number":1191,"context_line":"            \u0027host\u0027: \u0027Fake HostC-%s\u0027 % tools.get_random_string(4),"},{"line_number":1192,"context_line":"            \u0027admin_state_up\u0027: True,"},{"line_number":1193,"context_line":"            \u0027created_at\u0027: datetime.date.today(),"},{"line_number":1194,"context_line":"            \u0027started_at\u0027: datetime.date.today(),"},{"line_number":1195,"context_line":"            \u0027heartbeat_timestamp\u0027: datetime.date.today(),"},{"line_number":1196,"context_line":"            \u0027configurations\u0027: \u0027test_configurations\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"7a77a97e_ce57f224","line":1193,"range":{"start_line":1193,"start_character":26,"end_line":1193,"end_character":47},"in_reply_to":"7a77a97e_9434844a","updated":"2016-11-21 19:21:01.000000000","message":"Done","commit_id":"25c9a27f52f29c4a44b355a8d8887c3a1c17b5ae"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"362369985a3a5daeece91cd4dfc62c02d89c6790","unresolved":false,"context_lines":[{"line_number":1201,"context_line":"        attrs \u003d {"},{"line_number":1202,"context_line":"            \u0027name\u0027: \u0027test_router\u0027,"},{"line_number":1203,"context_line":"        }"},{"line_number":1204,"context_line":"        # TODO(sindhu): Replace with the router object once its ready"},{"line_number":1205,"context_line":"        self._router \u003d obj_db_api.create_object(self.context,"},{"line_number":1206,"context_line":"                                                l3_model.Router,"},{"line_number":1207,"context_line":"                                                attrs)"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_1085cc58","side":"PARENT","line":1204,"range":{"start_line":1204,"start_character":8,"end_line":1204,"end_character":69},"updated":"2016-11-28 22:12:45.000000000","message":"This comment shouldn\u0027t be removed until this method uses OVO","commit_id":"7ad681fd856199458f45243201dd13b7452d561f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d880f94ba0668c8bb15bfba378e690a367e792ab","unresolved":false,"context_lines":[{"line_number":1207,"context_line":"                                                attrs)"},{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"    def _create_test_agent(self):"},{"line_number":1210,"context_line":"        attrs \u003d {"},{"line_number":1211,"context_line":"            \u0027agent_type\u0027: \u0027Fake DHCP agent-%s\u0027 % tools.get_random_string(4),"},{"line_number":1212,"context_line":"            \u0027binary\u0027: \u0027fake-neutron-dhcp-agent\u0027,"},{"line_number":1213,"context_line":"            \u0027topic\u0027: \u0027fake_dhcp_agent\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_6b2713ca","line":1210,"updated":"2016-11-28 11:32:49.000000000","message":"Can\u0027t we generate those values with self.get_random_fields(obj_cls\u003dagent.Agent)?","commit_id":"6f18f64561b6466353baf1cd69d781f05abacd51"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"be2991a403d5504f848beda7bcf15e56eec42c80","unresolved":false,"context_lines":[{"line_number":1207,"context_line":"                                                attrs)"},{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"    def _create_test_agent(self):"},{"line_number":1210,"context_line":"        attrs \u003d {"},{"line_number":1211,"context_line":"            \u0027agent_type\u0027: \u0027Fake DHCP agent-%s\u0027 % tools.get_random_string(4),"},{"line_number":1212,"context_line":"            \u0027binary\u0027: \u0027fake-neutron-dhcp-agent\u0027,"},{"line_number":1213,"context_line":"            \u0027topic\u0027: \u0027fake_dhcp_agent\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_dfc189e5","line":1210,"in_reply_to":"5a74a57a_300ba8d7","updated":"2016-11-29 11:23:43.000000000","message":"I think it should work with your snippet, and I don\u0027t see where an import issue would emerge. Let\u0027s try it.","commit_id":"6f18f64561b6466353baf1cd69d781f05abacd51"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"362369985a3a5daeece91cd4dfc62c02d89c6790","unresolved":false,"context_lines":[{"line_number":1207,"context_line":"                                                attrs)"},{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"    def _create_test_agent(self):"},{"line_number":1210,"context_line":"        attrs \u003d {"},{"line_number":1211,"context_line":"            \u0027agent_type\u0027: \u0027Fake DHCP agent-%s\u0027 % tools.get_random_string(4),"},{"line_number":1212,"context_line":"            \u0027binary\u0027: \u0027fake-neutron-dhcp-agent\u0027,"},{"line_number":1213,"context_line":"            \u0027topic\u0027: \u0027fake_dhcp_agent\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_300ba8d7","line":1210,"in_reply_to":"5a74a57a_6b2713ca","updated":"2016-11-28 22:12:45.000000000","message":"It\u0027s possible, my only concern is that the caller(Unit Test class) does a cyclic import, but it\u0027s something that I need to test it.\n\n    def _create_test_agent(self):\n        self._agent \u003d self.get_random_fields(obj_cls\u003dagent.Agent)\n        self._agent.create()","commit_id":"6f18f64561b6466353baf1cd69d781f05abacd51"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"a9615f59b3d036780010fb79eac51d560373226b","unresolved":false,"context_lines":[{"line_number":1207,"context_line":"                                                attrs)"},{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"    def _create_test_agent(self):"},{"line_number":1210,"context_line":"        attrs \u003d {"},{"line_number":1211,"context_line":"            \u0027agent_type\u0027: \u0027Fake DHCP agent-%s\u0027 % tools.get_random_string(4),"},{"line_number":1212,"context_line":"            \u0027binary\u0027: \u0027fake-neutron-dhcp-agent\u0027,"},{"line_number":1213,"context_line":"            \u0027topic\u0027: \u0027fake_dhcp_agent\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a71b18c_9b5d33ec","line":1210,"in_reply_to":"5a74a57a_dfc189e5","updated":"2016-12-01 17:38:16.000000000","message":"@Ihar and @Victor: when I replace the attrs with the random fields the tests fail with the errors [1]\n\n\n[1] http://paste.openstack.org/show/591167/","commit_id":"6f18f64561b6466353baf1cd69d781f05abacd51"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d880f94ba0668c8bb15bfba378e690a367e792ab","unresolved":false,"context_lines":[{"line_number":1375,"context_line":"            # check that the stored database model does not have non-empty"},{"line_number":1376,"context_line":"            # relationships"},{"line_number":1377,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1378,"context_line":"            if getattr(obj.db_obj, dbattr, None):"},{"line_number":1379,"context_line":"                continue"},{"line_number":1380,"context_line":""},{"line_number":1381,"context_line":"            if isinstance(cls_.fields[field], obj_fields.ObjectField):"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_663caac8","line":1378,"updated":"2016-11-28 11:32:49.000000000","message":"what\u0027s the rationale for the change?","commit_id":"6f18f64561b6466353baf1cd69d781f05abacd51"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"be2991a403d5504f848beda7bcf15e56eec42c80","unresolved":false,"context_lines":[{"line_number":1375,"context_line":"            # check that the stored database model does not have non-empty"},{"line_number":1376,"context_line":"            # relationships"},{"line_number":1377,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1378,"context_line":"            if getattr(obj.db_obj, dbattr, None):"},{"line_number":1379,"context_line":"                continue"},{"line_number":1380,"context_line":""},{"line_number":1381,"context_line":"            if isinstance(cls_.fields[field], obj_fields.ObjectField):"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_9fa4714b","line":1378,"in_reply_to":"5a74a57a_50291a89","updated":"2016-11-29 11:23:43.000000000","message":"Gotcha. We may need to add some more test cases here for the cases where we f.e. replace a foreign key value with another non-null value, but that\u0027s beyond the patch.\n\nI only suggest to add a NOTE here before \u0027continue\u0027 explaining in which cases we want to skip the code below, and why.","commit_id":"6f18f64561b6466353baf1cd69d781f05abacd51"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"a1e4e5ddcbd19421592f540d453f535c9e32b325","unresolved":false,"context_lines":[{"line_number":1375,"context_line":"            # check that the stored database model does not have non-empty"},{"line_number":1376,"context_line":"            # relationships"},{"line_number":1377,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1378,"context_line":"            if getattr(obj.db_obj, dbattr, None):"},{"line_number":1379,"context_line":"                continue"},{"line_number":1380,"context_line":""},{"line_number":1381,"context_line":"            if isinstance(cls_.fields[field], obj_fields.ObjectField):"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_50291a89","line":1378,"in_reply_to":"5a74a57a_663caac8","updated":"2016-11-28 14:34:37.000000000","message":"The original assert is not True for all of the tested objects. There are objects that you need to create the related objects because of the foreign keys and then this assert is not fulfilled, since the db_obj will have the related object loaded. \n\nFor me, the original assert can be replaced with this \u0027if\u0027 because if the related object is already created, you do not need to execute all the lines below (L1381-1404) and create it one again.","commit_id":"6f18f64561b6466353baf1cd69d781f05abacd51"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"0e9bf565861d256576a747d7e5a930dff9ff2cc1","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"            \u0027heartbeat_timestamp\u0027: tools.get_random_datetime(),"},{"line_number":1221,"context_line":"            \u0027configurations\u0027: {},"},{"line_number":1222,"context_line":"        }"},{"line_number":1223,"context_line":"        self._agent \u003d agent.Agent(self.context, **attrs)"},{"line_number":1224,"context_line":"        self._agent.create()"},{"line_number":1225,"context_line":""},{"line_number":1226,"context_line":"    def _create_test_port(self, network):"}],"source_content_type":"text/x-python","patch_set":33,"id":"3a71b18c_57aa5cd3","line":1223,"updated":"2016-12-08 22:05:12.000000000","message":"@Anindita you can use get_random_fields and make it return just \u0027fields\u0027.\nThat should solve that error you mentioned in PS 31.\nFollow this patch: https://review.openstack.org/#/c/407007/\nand incorporate changes accordingly.","commit_id":"5a66eb2b4bb14c8edd627a0951555a3f00c74e5c"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"fec2f46c1838e4bc41d8c7752b2f7a20a978988e","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"            \u0027heartbeat_timestamp\u0027: tools.get_random_datetime(),"},{"line_number":1221,"context_line":"            \u0027configurations\u0027: {},"},{"line_number":1222,"context_line":"        }"},{"line_number":1223,"context_line":"        self._agent \u003d agent.Agent(self.context, **attrs)"},{"line_number":1224,"context_line":"        self._agent.create()"},{"line_number":1225,"context_line":""},{"line_number":1226,"context_line":"    def _create_test_port(self, network):"}],"source_content_type":"text/x-python","patch_set":33,"id":"1a6eadb0_306fb6c6","line":1223,"in_reply_to":"3a71b18c_57aa5cd3","updated":"2016-12-13 19:54:18.000000000","message":"As we discussed added a TODO will updated it once the above mentioned patch is merged","commit_id":"5a66eb2b4bb14c8edd627a0951555a3f00c74e5c"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"4f5d8b9d6b92df997a8b76a94d4178754eb564a4","unresolved":false,"context_lines":[{"line_number":1426,"context_line":"            # check that the stored database model does not have non-empty"},{"line_number":1427,"context_line":"            # relationships"},{"line_number":1428,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1429,"context_line":"            if getattr(obj.db_obj, dbattr, None):"},{"line_number":1430,"context_line":"                continue"},{"line_number":1431,"context_line":""},{"line_number":1432,"context_line":"            if isinstance(cls_.fields[field], obj_fields.ObjectField):"}],"source_content_type":"text/x-python","patch_set":34,"id":"1a6eadb0_a3f6868c","line":1429,"updated":"2016-12-16 15:08:10.000000000","message":"as already suggested please add a NOTE here explaining the change","commit_id":"63f9d921519cb8621af73cae8569df8c4b83bad7"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"5929f582513163aa971c3f9e886b0b9b3779dd63","unresolved":false,"context_lines":[{"line_number":1426,"context_line":"            # check that the stored database model does not have non-empty"},{"line_number":1427,"context_line":"            # relationships"},{"line_number":1428,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1429,"context_line":"            if getattr(obj.db_obj, dbattr, None):"},{"line_number":1430,"context_line":"                continue"},{"line_number":1431,"context_line":""},{"line_number":1432,"context_line":"            if isinstance(cls_.fields[field], obj_fields.ObjectField):"}],"source_content_type":"text/x-python","patch_set":34,"id":"1a6eadb0_1ecdcd30","line":1429,"in_reply_to":"1a6eadb0_a3f6868c","updated":"2016-12-16 15:53:28.000000000","message":"Done","commit_id":"63f9d921519cb8621af73cae8569df8c4b83bad7"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"803cdbe343b0ecdddf726cdc871a9814f189c823","unresolved":false,"context_lines":[{"line_number":1492,"context_line":"            # check that the stored database model does not have non-empty"},{"line_number":1493,"context_line":"            # relationships"},{"line_number":1494,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1495,"context_line":"            # NOTE This change is done because the original assert is not True"},{"line_number":1496,"context_line":"            # for all of the tested objects. There are objects that we need to"},{"line_number":1497,"context_line":"            # create the related objects because of the foreign keys and then"},{"line_number":1498,"context_line":"            # the assert is not fulfilled, since the db_obj will have the"},{"line_number":1499,"context_line":"            # related object loaded."}],"source_content_type":"text/x-python","patch_set":39,"id":"ba5201f7_03ceeeb3","line":1496,"range":{"start_line":1495,"start_character":19,"end_line":1496,"end_character":44},"updated":"2017-01-03 19:43:59.000000000","message":"This paragraph is not required, given that once original assert is removed could be hard to follow this.","commit_id":"8ffc36e5854b7477fd8525b7fcc316646693975b"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"d9ecfbe1915a6bda7b19f89b5ed984b84a70dc96","unresolved":false,"context_lines":[{"line_number":1492,"context_line":"            # check that the stored database model does not have non-empty"},{"line_number":1493,"context_line":"            # relationships"},{"line_number":1494,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1495,"context_line":"            # NOTE This change is done because the original assert is not True"},{"line_number":1496,"context_line":"            # for all of the tested objects. There are objects that we need to"},{"line_number":1497,"context_line":"            # create the related objects because of the foreign keys and then"},{"line_number":1498,"context_line":"            # the assert is not fulfilled, since the db_obj will have the"},{"line_number":1499,"context_line":"            # related object loaded."}],"source_content_type":"text/x-python","patch_set":39,"id":"ba5201f7_19cbab73","line":1496,"range":{"start_line":1495,"start_character":19,"end_line":1496,"end_character":44},"in_reply_to":"ba5201f7_03ceeeb3","updated":"2017-01-04 07:41:23.000000000","message":"I guess that this note can be reworded without mentioning non-existing code.","commit_id":"8ffc36e5854b7477fd8525b7fcc316646693975b"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"f1012750324e55e6c6a6b6dbfa80b45c5a3aa7e1","unresolved":false,"context_lines":[{"line_number":1492,"context_line":"            # check that the stored database model does not have non-empty"},{"line_number":1493,"context_line":"            # relationships"},{"line_number":1494,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1495,"context_line":"            # NOTE This change is done because the original assert is not True"},{"line_number":1496,"context_line":"            # for all of the tested objects. There are objects that we need to"},{"line_number":1497,"context_line":"            # create the related objects because of the foreign keys and then"},{"line_number":1498,"context_line":"            # the assert is not fulfilled, since the db_obj will have the"},{"line_number":1499,"context_line":"            # related object loaded."}],"source_content_type":"text/x-python","patch_set":39,"id":"ba5201f7_34d5b81b","line":1496,"range":{"start_line":1495,"start_character":19,"end_line":1496,"end_character":44},"in_reply_to":"ba5201f7_19cbab73","updated":"2017-01-04 19:34:40.000000000","message":"@Victor and Artur: I reworded the comment.","commit_id":"8ffc36e5854b7477fd8525b7fcc316646693975b"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"803cdbe343b0ecdddf726cdc871a9814f189c823","unresolved":false,"context_lines":[{"line_number":1497,"context_line":"            # create the related objects because of the foreign keys and then"},{"line_number":1498,"context_line":"            # the assert is not fulfilled, since the db_obj will have the"},{"line_number":1499,"context_line":"            # related object loaded."},{"line_number":1500,"context_line":"            if getattr(obj.db_obj, dbattr, None):"},{"line_number":1501,"context_line":"                continue"},{"line_number":1502,"context_line":""},{"line_number":1503,"context_line":"            if isinstance(cls_.fields[field], obj_fields.ObjectField):"},{"line_number":1504,"context_line":"                objclass_fields \u003d self._get_non_synth_fields(objclass,"}],"source_content_type":"text/x-python","patch_set":39,"id":"ba5201f7_c3f1466c","line":1501,"range":{"start_line":1500,"start_character":12,"end_line":1501,"end_character":24},"updated":"2017-01-03 19:43:59.000000000","message":"Removing this assertion affects the validation in the line 1523, basically doesn\u0027t warranty the change of the property.  I\u0027m not sure if this is the right approach.","commit_id":"8ffc36e5854b7477fd8525b7fcc316646693975b"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"d9ecfbe1915a6bda7b19f89b5ed984b84a70dc96","unresolved":false,"context_lines":[{"line_number":1497,"context_line":"            # create the related objects because of the foreign keys and then"},{"line_number":1498,"context_line":"            # the assert is not fulfilled, since the db_obj will have the"},{"line_number":1499,"context_line":"            # related object loaded."},{"line_number":1500,"context_line":"            if getattr(obj.db_obj, dbattr, None):"},{"line_number":1501,"context_line":"                continue"},{"line_number":1502,"context_line":""},{"line_number":1503,"context_line":"            if isinstance(cls_.fields[field], obj_fields.ObjectField):"},{"line_number":1504,"context_line":"                objclass_fields \u003d self._get_non_synth_fields(objclass,"}],"source_content_type":"text/x-python","patch_set":39,"id":"ba5201f7_d9e12300","line":1501,"range":{"start_line":1500,"start_character":12,"end_line":1501,"end_character":24},"in_reply_to":"ba5201f7_c3f1466c","updated":"2017-01-04 07:41:23.000000000","message":"I agree that, we can rework this \u0027if\u0027 to validate the assert from line 1523 before \u0027continue\u0027.","commit_id":"8ffc36e5854b7477fd8525b7fcc316646693975b"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"f1012750324e55e6c6a6b6dbfa80b45c5a3aa7e1","unresolved":false,"context_lines":[{"line_number":1497,"context_line":"            # create the related objects because of the foreign keys and then"},{"line_number":1498,"context_line":"            # the assert is not fulfilled, since the db_obj will have the"},{"line_number":1499,"context_line":"            # related object loaded."},{"line_number":1500,"context_line":"            if getattr(obj.db_obj, dbattr, None):"},{"line_number":1501,"context_line":"                continue"},{"line_number":1502,"context_line":""},{"line_number":1503,"context_line":"            if isinstance(cls_.fields[field], obj_fields.ObjectField):"},{"line_number":1504,"context_line":"                objclass_fields \u003d self._get_non_synth_fields(objclass,"}],"source_content_type":"text/x-python","patch_set":39,"id":"ba5201f7_548f9c29","line":1501,"range":{"start_line":1500,"start_character":12,"end_line":1501,"end_character":24},"in_reply_to":"ba5201f7_d9e12300","updated":"2017-01-04 19:34:40.000000000","message":"@Victor and Artur: I am not sure I understand how it affects the validation at line 1523. My understanding is that the assertion at line 1523 is an extra check to ensure that the dbattr is populated when the related objects are not loaded. I have added an explanation in the reworded notes. Let me know your thoughts.","commit_id":"8ffc36e5854b7477fd8525b7fcc316646693975b"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"03b0a38b8f2ffc8fa31562c510285565e86b72e3","unresolved":false,"context_lines":[{"line_number":1494,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1495,"context_line":"            # NOTE This change is done for the following reason:"},{"line_number":1496,"context_line":"            # 1) db_obj have the related object loaded - In this case we do not"},{"line_number":1497,"context_line":"            #    have to create the related objects and the loop can continue."},{"line_number":1498,"context_line":"            # 2) objects for which the related objects are not loaded - In this"},{"line_number":1499,"context_line":"            #    case they need to be created because of the foreign key"},{"line_number":1500,"context_line":"            #    relationships. But we still need to check whether the"}],"source_content_type":"text/x-python","patch_set":41,"id":"ba5201f7_6e474577","line":1497,"updated":"2017-01-05 18:54:46.000000000","message":"nit: maybe a line can be added here saying the \u0027if\u0027 statement is doing the same job as the assertTrue in line 1523 if dbattr is already retrieved.","commit_id":"13d3a27051ab9d08d6a2bf16118521ef7e3c6041"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"61d924c502d9e920cb5349ecd29ffe8c4231623a","unresolved":false,"context_lines":[{"line_number":1494,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1495,"context_line":"            # NOTE This change is done for the following reason:"},{"line_number":1496,"context_line":"            # 1) db_obj have the related object loaded - In this case we do not"},{"line_number":1497,"context_line":"            #    have to create the related objects and the loop can continue."},{"line_number":1498,"context_line":"            # 2) objects for which the related objects are not loaded - In this"},{"line_number":1499,"context_line":"            #    case they need to be created because of the foreign key"},{"line_number":1500,"context_line":"            #    relationships. But we still need to check whether the"}],"source_content_type":"text/x-python","patch_set":41,"id":"ba5201f7_db848d0c","line":1497,"in_reply_to":"ba5201f7_6e474577","updated":"2017-01-11 19:53:11.000000000","message":"as we discussed, keeping it as it is :)","commit_id":"13d3a27051ab9d08d6a2bf16118521ef7e3c6041"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"85ce0b5cac936db3fed88cafafceafb6bc6e0c06","unresolved":false,"context_lines":[{"line_number":1550,"context_line":"            # check that the stored database model does not have non-empty"},{"line_number":1551,"context_line":"            # relationships"},{"line_number":1552,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1553,"context_line":"            # NOTE This change is done for the following reason:"},{"line_number":1554,"context_line":"            # 1) db_obj have the related object loaded - In this case we do not"},{"line_number":1555,"context_line":"            #    have to create the related objects and the loop can continue."},{"line_number":1556,"context_line":"            # 2) objects for which the related objects are not loaded - In this"}],"source_content_type":"text/x-python","patch_set":45,"id":"3a461143_88f87a7e","line":1553,"updated":"2017-01-25 21:32:09.000000000","message":"nit: this line is redundant, and won\u0027t make much sense out of scope of the review. for a reader, it won\u0027t be clear which change you refer to.","commit_id":"9a93a6589dee401049971aca128c81fea1d5bc0f"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"51cd524c9da75c5036dc55606e87c13556e278a6","unresolved":false,"context_lines":[{"line_number":1550,"context_line":"            # check that the stored database model does not have non-empty"},{"line_number":1551,"context_line":"            # relationships"},{"line_number":1552,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1553,"context_line":"            # NOTE This change is done for the following reason:"},{"line_number":1554,"context_line":"            # 1) db_obj have the related object loaded - In this case we do not"},{"line_number":1555,"context_line":"            #    have to create the related objects and the loop can continue."},{"line_number":1556,"context_line":"            # 2) objects for which the related objects are not loaded - In this"}],"source_content_type":"text/x-python","patch_set":45,"id":"3a461143_53f9b67f","line":1553,"in_reply_to":"3a461143_88f87a7e","updated":"2017-01-26 17:09:53.000000000","message":"This is applicable only in case of objects which have synthetic field.   Removing this whole comment and retaining the existing code as the object does not have a synthetic field anymore.","commit_id":"9a93a6589dee401049971aca128c81fea1d5bc0f"}],"neutron/tests/unit/objects/test_l3agent.py":[{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"02a2771510968c8beb98920cee3955814d595f14","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        super(RouterL3AgentBindingDbObjTestCase, self).setUp()"},{"line_number":32,"context_line":"        for db_obj, obj_field, obj in zip("},{"line_number":33,"context_line":"                self.db_objs, self.obj_fields, self.objs):"},{"line_number":34,"context_line":"            self._create_test_router()"},{"line_number":35,"context_line":"            db_obj[\u0027router_id\u0027] \u003d self._router[\u0027id\u0027]"},{"line_number":36,"context_line":"            obj_field[\u0027router_id\u0027] \u003d self._router[\u0027id\u0027]"},{"line_number":37,"context_line":"            obj[\u0027router_id\u0027] \u003d self._router[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_e27e0e18","line":34,"updated":"2016-11-09 23:22:17.000000000","message":"I don\u0027t think both router and agent need to created inside the loop, one can be created outside.","commit_id":"f668690194335a68a3b09db5d8f82b25831bc8d4"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"614578e47ccba90a16aba20c8e0198b0d3fd77a0","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        super(RouterL3AgentBindingDbObjTestCase, self).setUp()"},{"line_number":32,"context_line":"        for db_obj, obj_field, obj in zip("},{"line_number":33,"context_line":"                self.db_objs, self.obj_fields, self.objs):"},{"line_number":34,"context_line":"            self._create_test_router()"},{"line_number":35,"context_line":"            db_obj[\u0027router_id\u0027] \u003d self._router[\u0027id\u0027]"},{"line_number":36,"context_line":"            obj_field[\u0027router_id\u0027] \u003d self._router[\u0027id\u0027]"},{"line_number":37,"context_line":"            obj[\u0027router_id\u0027] \u003d self._router[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_a0491c33","line":34,"in_reply_to":"9a629dbe_e27e0e18","updated":"2016-11-11 16:34:08.000000000","message":"Done","commit_id":"f668690194335a68a3b09db5d8f82b25831bc8d4"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"cf1ff87f7df13076481a4a32af39d39f44142557","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            obj[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_objects_queries_constant(self):"},{"line_number":44,"context_line":"        # TODO(dasanind): RouterL3AgentBinding is using Agent"},{"line_number":45,"context_line":"        # object as a synthetic field, which costs extra SQL query each time"},{"line_number":46,"context_line":"        # dhcp_agent field is loaded as part of get_object(s)."},{"line_number":47,"context_line":"        # RouterL3AgentBinding has defined relationship for"}],"source_content_type":"text/x-python","patch_set":26,"id":"7a77a97e_a3d3efd3","line":44,"updated":"2016-11-18 16:19:47.000000000","message":"this should already be handled in the code that process the synthetic fields, see [1]. Why is it not working?\n\n[1] https://review.openstack.org/#/c/334380","commit_id":"25c9a27f52f29c4a44b355a8d8887c3a1c17b5ae"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"bc33eeff8f79488660e37776b55ceb4132b0875b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            obj[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_objects_queries_constant(self):"},{"line_number":44,"context_line":"        # TODO(dasanind): RouterL3AgentBinding is using Agent"},{"line_number":45,"context_line":"        # object as a synthetic field, which costs extra SQL query each time"},{"line_number":46,"context_line":"        # dhcp_agent field is loaded as part of get_object(s)."},{"line_number":47,"context_line":"        # RouterL3AgentBinding has defined relationship for"}],"source_content_type":"text/x-python","patch_set":26,"id":"7a77a97e_c0409638","line":44,"in_reply_to":"7a77a97e_a3d3efd3","updated":"2016-11-21 19:21:01.000000000","message":"This is giving a Mismatch error [1]. Not able to find the root cause yet. This is a temporary workaround for now. \n\n[1] http://paste.openstack.org/show/589942/","commit_id":"25c9a27f52f29c4a44b355a8d8887c3a1c17b5ae"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"9833e6176836243da3f125f7c98635ea392c8188","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def test_get_objects_queries_constant(self):"},{"line_number":44,"context_line":"        # TODO(dasanind): RouterL3AgentBinding is using Agent"},{"line_number":45,"context_line":"        # object as a synthetic field, which costs extra SQL query each time"},{"line_number":46,"context_line":"        # dhcp_agent field is loaded as part of get_object(s)."},{"line_number":47,"context_line":"        # RouterL3AgentBinding has defined relationship for"},{"line_number":48,"context_line":"        # Agent, so it should be possible to reuse side loaded"},{"line_number":49,"context_line":"        # values for this. To be reworked in follow-up patch."}],"source_content_type":"text/x-python","patch_set":28,"id":"7a77a97e_f82529ae","line":46,"range":{"start_line":46,"start_character":10,"end_line":46,"end_character":20},"updated":"2016-11-22 12:32:13.000000000","message":"l3_agent","commit_id":"2ec6ba3dfece6a75e9339e50cd6fd5b1a855572d"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"1d9dc4c053e045f0fd0e4880fb50dbd330dac375","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def test_get_objects_queries_constant(self):"},{"line_number":44,"context_line":"        # TODO(dasanind): RouterL3AgentBinding is using Agent"},{"line_number":45,"context_line":"        # object as a synthetic field, which costs extra SQL query each time"},{"line_number":46,"context_line":"        # dhcp_agent field is loaded as part of get_object(s)."},{"line_number":47,"context_line":"        # RouterL3AgentBinding has defined relationship for"},{"line_number":48,"context_line":"        # Agent, so it should be possible to reuse side loaded"},{"line_number":49,"context_line":"        # values for this. To be reworked in follow-up patch."}],"source_content_type":"text/x-python","patch_set":28,"id":"7a77a97e_b28e6225","line":46,"range":{"start_line":46,"start_character":10,"end_line":46,"end_character":20},"in_reply_to":"7a77a97e_f82529ae","updated":"2016-11-22 15:39:39.000000000","message":"Done","commit_id":"2ec6ba3dfece6a75e9339e50cd6fd5b1a855572d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"be2991a403d5504f848beda7bcf15e56eec42c80","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            obj_field[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":41,"context_line":"            obj[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_objects_queries_constant(self):"},{"line_number":44,"context_line":"        # TODO(dasanind): RouterL3AgentBinding is using Agent"},{"line_number":45,"context_line":"        # object as a synthetic field, which costs extra SQL query each time"},{"line_number":46,"context_line":"        # l3_agent field is loaded as part of get_object(s)."}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_9f52b133","line":43,"updated":"2016-11-29 11:23:43.000000000","message":"If we indeed don\u0027t need \u0027agent\u0027 field in the object, then this test case may be left un-overridden.","commit_id":"6f18f64561b6466353baf1cd69d781f05abacd51"},{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"2abfbc8768c6260ecea0521240d79a0151b46048","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def setUp(self):"},{"line_number":31,"context_line":"        super(RouterL3AgentBindingDbObjTestCase, self).setUp()"},{"line_number":32,"context_line":"        self._create_test_router()"},{"line_number":33,"context_line":"        for db_obj, obj_field, obj in zip("},{"line_number":34,"context_line":"                self.db_objs, self.obj_fields, self.objs):"},{"line_number":35,"context_line":"            db_obj[\u0027router_id\u0027] \u003d self._router[\u0027id\u0027]"},{"line_number":36,"context_line":"            obj_field[\u0027router_id\u0027] \u003d self._router[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":33,"id":"3a71b18c_4357f4cd","line":33,"updated":"2016-12-02 17:34:39.000000000","message":"A new method called update_obj_fields() was introduced [1] and merged. Use example [2] to change appropriately. \n[1] - https://review.openstack.org/#/c/404259/ \n[2] - https://review.openstack.org/#/c/404259/5/neutron/tests/unit/objects/test_floatingip.py@34","commit_id":"5a66eb2b4bb14c8edd627a0951555a3f00c74e5c"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"0e9bf565861d256576a747d7e5a930dff9ff2cc1","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def setUp(self):"},{"line_number":31,"context_line":"        super(RouterL3AgentBindingDbObjTestCase, self).setUp()"},{"line_number":32,"context_line":"        self._create_test_router()"},{"line_number":33,"context_line":"        for db_obj, obj_field, obj in zip("},{"line_number":34,"context_line":"                self.db_objs, self.obj_fields, self.objs):"},{"line_number":35,"context_line":"            db_obj[\u0027router_id\u0027] \u003d self._router[\u0027id\u0027]"},{"line_number":36,"context_line":"            obj_field[\u0027router_id\u0027] \u003d self._router[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":33,"id":"3a71b18c_d7d2ec5a","line":33,"in_reply_to":"3a71b18c_4357f4cd","updated":"2016-12-08 22:05:12.000000000","message":"+1","commit_id":"5a66eb2b4bb14c8edd627a0951555a3f00c74e5c"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"fec2f46c1838e4bc41d8c7752b2f7a20a978988e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def setUp(self):"},{"line_number":31,"context_line":"        super(RouterL3AgentBindingDbObjTestCase, self).setUp()"},{"line_number":32,"context_line":"        self._create_test_router()"},{"line_number":33,"context_line":"        for db_obj, obj_field, obj in zip("},{"line_number":34,"context_line":"                self.db_objs, self.obj_fields, self.objs):"},{"line_number":35,"context_line":"            db_obj[\u0027router_id\u0027] \u003d self._router[\u0027id\u0027]"},{"line_number":36,"context_line":"            obj_field[\u0027router_id\u0027] \u003d self._router[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":33,"id":"1a6eadb0_102aba7e","line":33,"in_reply_to":"3a71b18c_4357f4cd","updated":"2016-12-13 19:54:18.000000000","message":"Done","commit_id":"5a66eb2b4bb14c8edd627a0951555a3f00c74e5c"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"fec2f46c1838e4bc41d8c7752b2f7a20a978988e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def setUp(self):"},{"line_number":31,"context_line":"        super(RouterL3AgentBindingDbObjTestCase, self).setUp()"},{"line_number":32,"context_line":"        self._create_test_router()"},{"line_number":33,"context_line":"        for db_obj, obj_field, obj in zip("},{"line_number":34,"context_line":"                self.db_objs, self.obj_fields, self.objs):"},{"line_number":35,"context_line":"            db_obj[\u0027router_id\u0027] \u003d self._router[\u0027id\u0027]"},{"line_number":36,"context_line":"            obj_field[\u0027router_id\u0027] \u003d self._router[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":33,"id":"1a6eadb0_703beed1","line":33,"in_reply_to":"3a71b18c_d7d2ec5a","updated":"2016-12-13 19:54:18.000000000","message":"Done","commit_id":"5a66eb2b4bb14c8edd627a0951555a3f00c74e5c"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"0e9bf565861d256576a747d7e5a930dff9ff2cc1","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            obj[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_objects_queries_constant(self):"},{"line_number":44,"context_line":"        # TODO(dasanind): RouterL3AgentBinding is using Agent"},{"line_number":45,"context_line":"        # object as a synthetic field, which costs extra SQL query each time"},{"line_number":46,"context_line":"        # l3_agent field is loaded as part of get_object(s)."},{"line_number":47,"context_line":"        # RouterL3AgentBinding has defined relationship for"}],"source_content_type":"text/x-python","patch_set":33,"id":"3a71b18c_1712a409","line":44,"updated":"2016-12-08 22:05:12.000000000","message":"This explanation is incorrect.\nUpdate it with : There is no lazy loading for Agent Relationship in the RouterL3AgentBinding model hence disabling this UT to avoid\nfailing. The relationship needs to be reworked to include lazy loading.","commit_id":"5a66eb2b4bb14c8edd627a0951555a3f00c74e5c"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"fec2f46c1838e4bc41d8c7752b2f7a20a978988e","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            obj[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_objects_queries_constant(self):"},{"line_number":44,"context_line":"        # TODO(dasanind): RouterL3AgentBinding is using Agent"},{"line_number":45,"context_line":"        # object as a synthetic field, which costs extra SQL query each time"},{"line_number":46,"context_line":"        # l3_agent field is loaded as part of get_object(s)."},{"line_number":47,"context_line":"        # RouterL3AgentBinding has defined relationship for"}],"source_content_type":"text/x-python","patch_set":33,"id":"1a6eadb0_355968ff","line":44,"in_reply_to":"3a71b18c_1712a409","updated":"2016-12-13 19:54:18.000000000","message":"Done","commit_id":"5a66eb2b4bb14c8edd627a0951555a3f00c74e5c"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"0a58694e58e2b35b1fa6af319e800918eb8ce773","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 Intel Corporation."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":49,"id":"da36d5c6_ed6e212e","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2017-02-21 23:27:04.000000000","message":"nit s/2016/2017","commit_id":"1253967f23a7c33d4b29cb6edef6f8c44b58b3d7"}],"neutron/tests/unit/objects/test_router_l3agent_binding.py":[{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"0e8c79ba6aad4f7e36fb95a4e17c52bb7c737fc7","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            obj_field[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":41,"context_line":"            obj[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_router_l3_agent_binding_object(self):"},{"line_number":44,"context_line":"        self._create_test_router()"},{"line_number":45,"context_line":"        self._create_test_agent()"},{"line_number":46,"context_line":"        fields \u003d self.obj_fields[0].copy()"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a8ec9b2_795f12e5","line":43,"updated":"2016-09-21 15:34:40.000000000","message":"Isn\u0027t this tested in the base test file itself?","commit_id":"9a6411a6f8d43ef4f8deeeaa3893129f9300d439"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"136b6658069f3a538978dca71272410e1bdc86de","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            obj_field[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":41,"context_line":"            obj[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_router_l3_agent_binding_object(self):"},{"line_number":44,"context_line":"        self._create_test_router()"},{"line_number":45,"context_line":"        self._create_test_agent()"},{"line_number":46,"context_line":"        fields \u003d self.obj_fields[0].copy()"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a8bc5a2_3b4c13c7","line":43,"in_reply_to":"5a8bc5a2_32c45691","updated":"2016-09-22 16:03:24.000000000","message":"Done","commit_id":"9a6411a6f8d43ef4f8deeeaa3893129f9300d439"},{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"b18eccd70567ba894e6ab4b9ededcaf43843d5f4","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            obj_field[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":41,"context_line":"            obj[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_router_l3_agent_binding_object(self):"},{"line_number":44,"context_line":"        self._create_test_router()"},{"line_number":45,"context_line":"        self._create_test_agent()"},{"line_number":46,"context_line":"        fields \u003d self.obj_fields[0].copy()"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a8ec9b2_b2944137","line":43,"in_reply_to":"7a8ec9b2_795f12e5","updated":"2016-09-21 20:52:49.000000000","message":"+1 It\u0027s taken care in test_filtering_by_fields() in test_base.","commit_id":"9a6411a6f8d43ef4f8deeeaa3893129f9300d439"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"136b6658069f3a538978dca71272410e1bdc86de","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            obj_field[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":41,"context_line":"            obj[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_router_l3_agent_binding_object(self):"},{"line_number":44,"context_line":"        self._create_test_router()"},{"line_number":45,"context_line":"        self._create_test_agent()"},{"line_number":46,"context_line":"        fields \u003d self.obj_fields[0].copy()"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a8bc5a2_bb5f4371","line":43,"in_reply_to":"7a8ec9b2_795f12e5","updated":"2016-09-22 16:03:24.000000000","message":"Done","commit_id":"9a6411a6f8d43ef4f8deeeaa3893129f9300d439"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"136b6658069f3a538978dca71272410e1bdc86de","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            obj_field[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":41,"context_line":"            obj[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_router_l3_agent_binding_object(self):"},{"line_number":44,"context_line":"        self._create_test_router()"},{"line_number":45,"context_line":"        self._create_test_agent()"},{"line_number":46,"context_line":"        fields \u003d self.obj_fields[0].copy()"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a8bc5a2_db540f56","line":43,"in_reply_to":"7a8ec9b2_b2944137","updated":"2016-09-22 16:03:24.000000000","message":"Done","commit_id":"9a6411a6f8d43ef4f8deeeaa3893129f9300d439"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"c632284230e18d65485c1a2acb1fc92a9535fda1","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            obj_field[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":41,"context_line":"            obj[\u0027l3_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_router_l3_agent_binding_object(self):"},{"line_number":44,"context_line":"        self._create_test_router()"},{"line_number":45,"context_line":"        self._create_test_agent()"},{"line_number":46,"context_line":"        fields \u003d self.obj_fields[0].copy()"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a8bc5a2_32c45691","line":43,"in_reply_to":"7a8ec9b2_b2944137","updated":"2016-09-22 08:06:29.000000000","message":"Yes, this test is covered in test_base, in test_get_object_create_delete().","commit_id":"9a6411a6f8d43ef4f8deeeaa3893129f9300d439"}]}
