)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"1a53ce2287de1db2f0b0174ac1e8c35af9c70c57","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"OVO for NetworkDhcpAgentBinding"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces OVO for NetworkDhcpAgentBinding and also"},{"line_number":10,"context_line":"implements it which means it will replace the use of"},{"line_number":11,"context_line":"NetworkDhcpAgentBinding model with NetworkDhcpAgentBinding OVO from"},{"line_number":12,"context_line":"objects/networks.py"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":37,"id":"7a3c09a3_0b98076a","line":10,"range":{"start_line":9,"start_character":1,"end_line":10,"end_character":52},"updated":"2017-01-19 00:53:38.000000000","message":"nit: This patch introduces and implements Oslo-Versioned Objects for NetworkDhcpAgentBinding which means it will replace the use of ...","commit_id":"86a70d6fd84d0d14ea54cf3adb90f00b85541942"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"4e8a136499fa3d3638392b487afefc9d5fd58d0e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"OVO for NetworkDhcpAgentBinding"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces OVO for NetworkDhcpAgentBinding and also"},{"line_number":10,"context_line":"implements it which means it will replace the use of"},{"line_number":11,"context_line":"NetworkDhcpAgentBinding model with NetworkDhcpAgentBinding OVO from"},{"line_number":12,"context_line":"objects/networks.py"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":37,"id":"5a3905b3_78953531","line":10,"range":{"start_line":9,"start_character":1,"end_line":10,"end_character":52},"in_reply_to":"7a3c09a3_0b98076a","updated":"2017-01-23 16:58:49.000000000","message":"Done","commit_id":"86a70d6fd84d0d14ea54cf3adb90f00b85541942"}],"neutron/db/agentschedulers_db.py":[{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"f438b329044489d4e9e515c0e03fe0d94a372c85","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from neutron.db.network_dhcp_agent_binding import models as ndab_model"},{"line_number":37,"context_line":"from neutron.extensions import agent as ext_agent"},{"line_number":38,"context_line":"from neutron.extensions import dhcpagentscheduler"},{"line_number":39,"context_line":"from neutron.objects import agent"},{"line_number":40,"context_line":"from neutron.objects import network"},{"line_number":41,"context_line":"from neutron import worker as neutron_worker"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_fdf604d6","line":39,"range":{"start_line":39,"start_character":28,"end_line":39,"end_character":33},"updated":"2016-11-08 12:43:38.000000000","message":"I would name it agent_obj to avoid name conflicts in lines 330-337.","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"4c4662d85f9e085bbe8de295fa69cb648d381c29","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from neutron.db.network_dhcp_agent_binding import models as ndab_model"},{"line_number":37,"context_line":"from neutron.extensions import agent as ext_agent"},{"line_number":38,"context_line":"from neutron.extensions import dhcpagentscheduler"},{"line_number":39,"context_line":"from neutron.objects import agent"},{"line_number":40,"context_line":"from neutron.objects import network"},{"line_number":41,"context_line":"from neutron import worker as neutron_worker"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_bafa8073","line":39,"range":{"start_line":39,"start_character":28,"end_line":39,"end_character":33},"in_reply_to":"9a629dbe_fdf604d6","updated":"2016-11-09 21:01:16.000000000","message":"Done","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"f438b329044489d4e9e515c0e03fe0d94a372c85","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            #                   filter is set, only agents which are \u0027up\u0027"},{"line_number":127,"context_line":"            #                   (i.e. have a recent heartbeat timestamp)"},{"line_number":128,"context_line":"            #                   are eligible, even if active is False"},{"line_number":129,"context_line":"            return not agents_db.AgentDbMixin.is_agent_down("},{"line_number":130,"context_line":"                agent[\u0027heartbeat_timestamp\u0027])"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def update_agent(self, context, id, agent):"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_7dbf54d0","line":129,"range":{"start_line":129,"start_character":12,"end_line":129,"end_character":60},"updated":"2016-11-08 12:43:38.000000000","message":"This is not relevant to this patch.","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"f04e6c0b7fa7b977d440dc2c13caab4827694738","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            #                   filter is set, only agents which are \u0027up\u0027"},{"line_number":127,"context_line":"            #                   (i.e. have a recent heartbeat timestamp)"},{"line_number":128,"context_line":"            #                   are eligible, even if active is False"},{"line_number":129,"context_line":"            return not agents_db.AgentDbMixin.is_agent_down("},{"line_number":130,"context_line":"                agent[\u0027heartbeat_timestamp\u0027])"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def update_agent(self, context, id, agent):"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_b8ea710d","line":129,"range":{"start_line":129,"start_character":12,"end_line":129,"end_character":60},"in_reply_to":"9a629dbe_7a338862","updated":"2016-11-10 10:43:32.000000000","message":"I have pushed PS24 reverting all wrong rebase changes.","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"4c4662d85f9e085bbe8de295fa69cb648d381c29","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            #                   filter is set, only agents which are \u0027up\u0027"},{"line_number":127,"context_line":"            #                   (i.e. have a recent heartbeat timestamp)"},{"line_number":128,"context_line":"            #                   are eligible, even if active is False"},{"line_number":129,"context_line":"            return not agents_db.AgentDbMixin.is_agent_down("},{"line_number":130,"context_line":"                agent[\u0027heartbeat_timestamp\u0027])"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def update_agent(self, context, id, agent):"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_7a338862","line":129,"range":{"start_line":129,"start_character":12,"end_line":129,"end_character":60},"in_reply_to":"9a629dbe_7dbf54d0","updated":"2016-11-09 21:01:16.000000000","message":"This might be because of a Rebase.","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"f438b329044489d4e9e515c0e03fe0d94a372c85","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        \"\"\""},{"line_number":300,"context_line":"        agent_dead_limit \u003d datetime.timedelta("},{"line_number":301,"context_line":"            seconds\u003dself.agent_dead_limit_seconds())"},{"line_number":302,"context_line":"        network_count_obj \u003d network.NetworkDhcpAgentBinding.count("},{"line_number":303,"context_line":"                context, dhcp_agent_id\u003dagent[\u0027id\u0027])"},{"line_number":304,"context_line":"        # amount of networks assigned to agent affect amount of time we give"},{"line_number":305,"context_line":"        # it so startup. Tests show that it\u0027s more or less sage to assume"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_bdb00cf6","line":302,"range":{"start_line":302,"start_character":9,"end_line":302,"end_character":23},"updated":"2016-11-08 12:43:38.000000000","message":"It is not and object, it will return only the count as integer.","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"4c4662d85f9e085bbe8de295fa69cb648d381c29","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        \"\"\""},{"line_number":300,"context_line":"        agent_dead_limit \u003d datetime.timedelta("},{"line_number":301,"context_line":"            seconds\u003dself.agent_dead_limit_seconds())"},{"line_number":302,"context_line":"        network_count_obj \u003d network.NetworkDhcpAgentBinding.count("},{"line_number":303,"context_line":"                context, dhcp_agent_id\u003dagent[\u0027id\u0027])"},{"line_number":304,"context_line":"        # amount of networks assigned to agent affect amount of time we give"},{"line_number":305,"context_line":"        # it so startup. Tests show that it\u0027s more or less sage to assume"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_ba41a0ab","line":302,"range":{"start_line":302,"start_character":9,"end_line":302,"end_character":23},"in_reply_to":"9a629dbe_bdb00cf6","updated":"2016-11-09 21:01:16.000000000","message":"Done","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"f438b329044489d4e9e515c0e03fe0d94a372c85","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                return"},{"line_number":328,"context_line":"            if not dhcp_notifier:"},{"line_number":329,"context_line":"                return"},{"line_number":330,"context_line":"            for agent_ in agents:"},{"line_number":331,"context_line":"                LOG.info(_LI(\"Adding network %(net)s to agent \""},{"line_number":332,"context_line":"                             \"%(agent)s on host %(host)s\"),"},{"line_number":333,"context_line":"                         {\u0027net\u0027: network_id,"},{"line_number":334,"context_line":"                          \u0027agent\u0027: agent_.id,"},{"line_number":335,"context_line":"                          \u0027host\u0027: agent_.host})"},{"line_number":336,"context_line":"                dhcp_notifier.network_added_to_agent("},{"line_number":337,"context_line":"                    context, network_id, agent_.host)"},{"line_number":338,"context_line":"        except Exception:"},{"line_number":339,"context_line":"            # catching any exception during scheduling"},{"line_number":340,"context_line":"            # so if _schedule_network is invoked in the loop it could"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_fd79a430","line":337,"range":{"start_line":330,"start_character":12,"end_line":337,"end_character":53},"updated":"2016-11-08 12:43:38.000000000","message":"After renaming the import, it should be reverted.","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"4c4662d85f9e085bbe8de295fa69cb648d381c29","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                return"},{"line_number":328,"context_line":"            if not dhcp_notifier:"},{"line_number":329,"context_line":"                return"},{"line_number":330,"context_line":"            for agent_ in agents:"},{"line_number":331,"context_line":"                LOG.info(_LI(\"Adding network %(net)s to agent \""},{"line_number":332,"context_line":"                             \"%(agent)s on host %(host)s\"),"},{"line_number":333,"context_line":"                         {\u0027net\u0027: network_id,"},{"line_number":334,"context_line":"                          \u0027agent\u0027: agent_.id,"},{"line_number":335,"context_line":"                          \u0027host\u0027: agent_.host})"},{"line_number":336,"context_line":"                dhcp_notifier.network_added_to_agent("},{"line_number":337,"context_line":"                    context, network_id, agent_.host)"},{"line_number":338,"context_line":"        except Exception:"},{"line_number":339,"context_line":"            # catching any exception during scheduling"},{"line_number":340,"context_line":"            # so if _schedule_network is invoked in the loop it could"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_1a452cb2","line":337,"range":{"start_line":330,"start_character":12,"end_line":337,"end_character":53},"in_reply_to":"9a629dbe_fd79a430","updated":"2016-11-09 21:01:16.000000000","message":"Done","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"f438b329044489d4e9e515c0e03fe0d94a372c85","unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        context \u003d ncontext.get_admin_context()"},{"line_number":382,"context_line":"        try:"},{"line_number":383,"context_line":"            #TODO(ndahiwade): down_bindings query(join) will be replaced with"},{"line_number":384,"context_line":"            #OVO instead of the db_model once the Agent OVO is implemented)"},{"line_number":385,"context_line":"            down_bindings \u003d ("},{"line_number":386,"context_line":"                context.session.query(ndab_model.NetworkDhcpAgentBinding)."},{"line_number":387,"context_line":"                join(agent_model.Agent)."}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_9db0a8df","line":384,"range":{"start_line":383,"start_character":12,"end_line":384,"end_character":75},"updated":"2016-11-08 12:43:38.000000000","message":"This patch is rebased on Agent OVO patch, so down_bindings can be implemented in this patch.","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"4c4662d85f9e085bbe8de295fa69cb648d381c29","unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        context \u003d ncontext.get_admin_context()"},{"line_number":382,"context_line":"        try:"},{"line_number":383,"context_line":"            #TODO(ndahiwade): down_bindings query(join) will be replaced with"},{"line_number":384,"context_line":"            #OVO instead of the db_model once the Agent OVO is implemented)"},{"line_number":385,"context_line":"            down_bindings \u003d ("},{"line_number":386,"context_line":"                context.session.query(ndab_model.NetworkDhcpAgentBinding)."},{"line_number":387,"context_line":"                join(agent_model.Agent)."}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_da257409","line":384,"range":{"start_line":383,"start_character":12,"end_line":384,"end_character":75},"in_reply_to":"9a629dbe_9db0a8df","updated":"2016-11-09 21:01:16.000000000","message":"Done","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"f438b329044489d4e9e515c0e03fe0d94a372c85","unresolved":false,"context_lines":[{"line_number":447,"context_line":"            hosts\u003dNone):"},{"line_number":448,"context_line":"        if not network_ids:"},{"line_number":449,"context_line":"            return []"},{"line_number":450,"context_line":"        query \u003d network.NetworkDhcpAgentBinding.get_objects(context)"},{"line_number":451,"context_line":"        if network_ids:"},{"line_number":452,"context_line":"            filters \u003d {\u0027network_id\u0027: network_ids}"},{"line_number":453,"context_line":"            query \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":454,"context_line":"                context, **filters)"},{"line_number":455,"context_line":"        if hosts:"},{"line_number":456,"context_line":"            query \u003d []"},{"line_number":457,"context_line":"            filters \u003d {\u0027host\u0027: hosts}"},{"line_number":458,"context_line":"            query_agent \u003d agent.Agent.get_objects(context, **filters)"},{"line_number":459,"context_line":"            for obj in query_agent:"},{"line_number":460,"context_line":"                nobj \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":461,"context_line":"                    context, dhcp_agent_id\u003dobj.id)"},{"line_number":462,"context_line":"                if nobj:"},{"line_number":463,"context_line":"                    query.append(nobj.pop())"},{"line_number":464,"context_line":"        if admin_state_up is not None:"},{"line_number":465,"context_line":"            query \u003d []"},{"line_number":466,"context_line":"            query_agents \u003d agent.Agent.get_objects("},{"line_number":467,"context_line":"                context, admin_state_up\u003dadmin_state_up)"},{"line_number":468,"context_line":"            for objs in query_agents:"},{"line_number":469,"context_line":"                nobjs \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":470,"context_line":"                    context, dhcp_agent_id\u003dobjs.id)"},{"line_number":471,"context_line":"                if nobjs:"},{"line_number":472,"context_line":"                    query.append(nobjs.pop())"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        return [binding_obj.dhcp_agent"},{"line_number":475,"context_line":"                for binding_obj in query"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_7d1d9472","line":472,"range":{"start_line":450,"start_character":8,"end_line":472,"end_character":45},"updated":"2016-11-08 12:43:38.000000000","message":"This is not correct.\n\nThis should look like:\n\nfilters \u003d {}\nif network_ids:\n    filters[\u0027network_id\u0027] \u003d network_ids\nif hosts:\n    filters[\u0027host\u0027] \u003d hosts\nif admin_state_up is not None:\n    dhcp_agent_ids \u003d [x.id for x in agent.Agent.get_objects(context, admin_state_up\u003dadmin_state_up)\n    filters[\u0027dhcp_agent_id\u0027] \u003d dhcp_agent_ids\nbindings \u003d network.NetworkDhcpAgentBinding.get_objects(context, **filters)","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"4c4662d85f9e085bbe8de295fa69cb648d381c29","unresolved":false,"context_lines":[{"line_number":447,"context_line":"            hosts\u003dNone):"},{"line_number":448,"context_line":"        if not network_ids:"},{"line_number":449,"context_line":"            return []"},{"line_number":450,"context_line":"        query \u003d network.NetworkDhcpAgentBinding.get_objects(context)"},{"line_number":451,"context_line":"        if network_ids:"},{"line_number":452,"context_line":"            filters \u003d {\u0027network_id\u0027: network_ids}"},{"line_number":453,"context_line":"            query \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":454,"context_line":"                context, **filters)"},{"line_number":455,"context_line":"        if hosts:"},{"line_number":456,"context_line":"            query \u003d []"},{"line_number":457,"context_line":"            filters \u003d {\u0027host\u0027: hosts}"},{"line_number":458,"context_line":"            query_agent \u003d agent.Agent.get_objects(context, **filters)"},{"line_number":459,"context_line":"            for obj in query_agent:"},{"line_number":460,"context_line":"                nobj \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":461,"context_line":"                    context, dhcp_agent_id\u003dobj.id)"},{"line_number":462,"context_line":"                if nobj:"},{"line_number":463,"context_line":"                    query.append(nobj.pop())"},{"line_number":464,"context_line":"        if admin_state_up is not None:"},{"line_number":465,"context_line":"            query \u003d []"},{"line_number":466,"context_line":"            query_agents \u003d agent.Agent.get_objects("},{"line_number":467,"context_line":"                context, admin_state_up\u003dadmin_state_up)"},{"line_number":468,"context_line":"            for objs in query_agents:"},{"line_number":469,"context_line":"                nobjs \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":470,"context_line":"                    context, dhcp_agent_id\u003dobjs.id)"},{"line_number":471,"context_line":"                if nobjs:"},{"line_number":472,"context_line":"                    query.append(nobjs.pop())"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        return [binding_obj.dhcp_agent"},{"line_number":475,"context_line":"                for binding_obj in query"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_5a8084c0","line":472,"range":{"start_line":450,"start_character":8,"end_line":472,"end_character":45},"in_reply_to":"9a629dbe_7d1d9472","updated":"2016-11-09 21:01:16.000000000","message":"Done","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"f438b329044489d4e9e515c0e03fe0d94a372c85","unresolved":false,"context_lines":[{"line_number":503,"context_line":"        try:"},{"line_number":504,"context_line":"            binding_obj \u003d network.NetworkDhcpAgentBinding.get_object("},{"line_number":505,"context_line":"                context, network_id\u003dnetwork_id, dhcp_agent_id\u003did)"},{"line_number":506,"context_line":"        except exc.NoResultFound:"},{"line_number":507,"context_line":"            raise dhcpagentscheduler.NetworkNotHostedByDhcpAgent("},{"line_number":508,"context_line":"                network_id\u003dnetwork_id, agent_id\u003did)"},{"line_number":509,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_b3467d21","line":506,"range":{"start_line":506,"start_character":8,"end_line":506,"end_character":33},"updated":"2016-11-08 12:43:38.000000000","message":"get_object does not raise NoResultFound exception.\nThere is .one() implementation in review somewhere, I need to take a look at how it is going.\n\nTill then, you can do:\nbinding_obj \u003d network.NetworkDhcpAgentBinding.get_object(\n                context, network_id\u003dnetwork_id, dhcp_agent_id\u003did)\nif not binding_obj:\n    raise dhcpagentscheduler.NetworkNotHostedByDhcpAgent(\n                network_id\u003dnetwork_id, agent_id\u003did)\n\n\nThe .one() is returning two exceptions: NoResultFound and MultipleResultsFound.\nThe above implementation will cover for NoResultFound.\nTo handle MultipleResultsFound, the implementation should look like:\nbinding_objs \u003d network.NetworkDhcpAgentBinding.get_objects(\n                context, network_id\u003dnetwork_id, dhcp_agent_id\u003did)\nif not binding_objs:\n    raise dhcpagentscheduler.NetworkNotHostedByDhcpAgent(\n                network_id\u003dnetwork_id, agent_id\u003did)\nif len(binding_objs) \u003e 1:\n    raise MultipleResulsFound","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"4c4662d85f9e085bbe8de295fa69cb648d381c29","unresolved":false,"context_lines":[{"line_number":503,"context_line":"        try:"},{"line_number":504,"context_line":"            binding_obj \u003d network.NetworkDhcpAgentBinding.get_object("},{"line_number":505,"context_line":"                context, network_id\u003dnetwork_id, dhcp_agent_id\u003did)"},{"line_number":506,"context_line":"        except exc.NoResultFound:"},{"line_number":507,"context_line":"            raise dhcpagentscheduler.NetworkNotHostedByDhcpAgent("},{"line_number":508,"context_line":"                network_id\u003dnetwork_id, agent_id\u003did)"},{"line_number":509,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_da6c9437","line":506,"range":{"start_line":506,"start_character":8,"end_line":506,"end_character":33},"in_reply_to":"9a629dbe_b3467d21","updated":"2016-11-09 21:01:16.000000000","message":"Done","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"f438b329044489d4e9e515c0e03fe0d94a372c85","unresolved":false,"context_lines":[{"line_number":518,"context_line":"        for port in ports:"},{"line_number":519,"context_line":"            port[\u0027device_id\u0027] \u003d n_const.DEVICE_ID_RESERVED_DHCP_PORT"},{"line_number":520,"context_line":"            self.update_port(context, port[\u0027id\u0027], dict(port\u003dport))"},{"line_number":521,"context_line":"        with context.session.begin():"},{"line_number":522,"context_line":"            binding_obj.delete()"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"        if not notify:"},{"line_number":525,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_f31d5510","line":522,"range":{"start_line":521,"start_character":8,"end_line":522,"end_character":32},"updated":"2016-11-08 12:43:38.000000000","message":"the delete() menthod has session management inside it.\nYou can simply:\nbinding_obj.delete()","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"4c4662d85f9e085bbe8de295fa69cb648d381c29","unresolved":false,"context_lines":[{"line_number":518,"context_line":"        for port in ports:"},{"line_number":519,"context_line":"            port[\u0027device_id\u0027] \u003d n_const.DEVICE_ID_RESERVED_DHCP_PORT"},{"line_number":520,"context_line":"            self.update_port(context, port[\u0027id\u0027], dict(port\u003dport))"},{"line_number":521,"context_line":"        with context.session.begin():"},{"line_number":522,"context_line":"            binding_obj.delete()"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"        if not notify:"},{"line_number":525,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_fa75d8f9","line":522,"range":{"start_line":521,"start_character":8,"end_line":522,"end_character":32},"in_reply_to":"9a629dbe_f31d5510","updated":"2016-11-09 21:01:16.000000000","message":"Done","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"ecb61565142ffddb1e97836fcfb74bb20760e27d","unresolved":false,"context_lines":[{"line_number":383,"context_line":"            #OVO instead of the db_model once the Agent OVO is implemented)"},{"line_number":384,"context_line":"            agent_objs \u003d agent_obj.Agent.get_objects(context)"},{"line_number":385,"context_line":"            dhcp_agent_ids \u003d []"},{"line_number":386,"context_line":"            for obj in agent_objs:"},{"line_number":387,"context_line":"                if obj.heartbeat_timestamp \u003c cutoff:"},{"line_number":388,"context_line":"                    dhcp_agent_ids.append(obj.id)"},{"line_number":389,"context_line":"            filters \u003d {\u0027dhcp_agent_id\u0027: dhcp_agent_ids}"},{"line_number":390,"context_line":"            down_bindings \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":391,"context_line":"                context, **filters)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_384d813e","line":388,"range":{"start_line":386,"start_character":12,"end_line":388,"end_character":49},"updated":"2016-11-10 10:50:34.000000000","message":"I wonder if this can be done in filter manner... not sure how to write it down:\nfilters{\u0027heartbeat_timestamp\u0027\u003c cutoff}\nagent_objs \u003d agent_obj.Agent.get_objects(context. **filters)","commit_id":"a0b46b7a304d98e46417196c4e3da48710c7ef76"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"2ae4d9ab8ae35327185fba97f794989893da40db","unresolved":false,"context_lines":[{"line_number":383,"context_line":"            #OVO instead of the db_model once the Agent OVO is implemented)"},{"line_number":384,"context_line":"            agent_objs \u003d agent_obj.Agent.get_objects(context)"},{"line_number":385,"context_line":"            dhcp_agent_ids \u003d []"},{"line_number":386,"context_line":"            for obj in agent_objs:"},{"line_number":387,"context_line":"                if obj.heartbeat_timestamp \u003c cutoff:"},{"line_number":388,"context_line":"                    dhcp_agent_ids.append(obj.id)"},{"line_number":389,"context_line":"            filters \u003d {\u0027dhcp_agent_id\u0027: dhcp_agent_ids}"},{"line_number":390,"context_line":"            down_bindings \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":391,"context_line":"                context, **filters)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_ce59fe36","line":388,"range":{"start_line":386,"start_character":12,"end_line":388,"end_character":49},"in_reply_to":"9a629dbe_384d813e","updated":"2016-11-10 23:46:07.000000000","message":"I tried with Filters \u003d {\u0027heartbeat_timestamp\u0027\u003c cutoff},but it didn\u0027t work.\nSo keeping it like this.","commit_id":"a0b46b7a304d98e46417196c4e3da48710c7ef76"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"ecb61565142ffddb1e97836fcfb74bb20760e27d","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        filters \u003d {}"},{"line_number":453,"context_line":"        if network_ids:"},{"line_number":454,"context_line":"            filters[\u0027network_id\u0027] \u003d network_ids"},{"line_number":455,"context_line":"        filter_host \u003d {}"},{"line_number":456,"context_line":"        if hosts:"},{"line_number":457,"context_line":"            filter_host[\u0027host\u0027] \u003d hosts"},{"line_number":458,"context_line":"        if admin_state_up is not None:"},{"line_number":459,"context_line":"            filter_host[\u0027admin_state_up\u0027] \u003d admin_state_up"},{"line_number":460,"context_line":"        if filter_host:"},{"line_number":461,"context_line":"            dhcp_agent_ids \u003d [x.id for x in agent_obj.Agent.get_objects("},{"line_number":462,"context_line":"                context, **filter_host)]"},{"line_number":463,"context_line":"            filters[\u0027dhcp_agent_id\u0027] \u003d dhcp_agent_ids"},{"line_number":464,"context_line":"        bindings \u003d network.NetworkDhcpAgentBinding.get_objects(context,"},{"line_number":465,"context_line":"                                                               **filters)"},{"line_number":466,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_f8da294a","line":463,"range":{"start_line":455,"start_character":8,"end_line":463,"end_character":53},"updated":"2016-11-10 10:50:34.000000000","message":"this needs some UT, if filter_host is applied correctly.","commit_id":"a0b46b7a304d98e46417196c4e3da48710c7ef76"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"2ae4d9ab8ae35327185fba97f794989893da40db","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        filters \u003d {}"},{"line_number":453,"context_line":"        if network_ids:"},{"line_number":454,"context_line":"            filters[\u0027network_id\u0027] \u003d network_ids"},{"line_number":455,"context_line":"        filter_host \u003d {}"},{"line_number":456,"context_line":"        if hosts:"},{"line_number":457,"context_line":"            filter_host[\u0027host\u0027] \u003d hosts"},{"line_number":458,"context_line":"        if admin_state_up is not None:"},{"line_number":459,"context_line":"            filter_host[\u0027admin_state_up\u0027] \u003d admin_state_up"},{"line_number":460,"context_line":"        if filter_host:"},{"line_number":461,"context_line":"            dhcp_agent_ids \u003d [x.id for x in agent_obj.Agent.get_objects("},{"line_number":462,"context_line":"                context, **filter_host)]"},{"line_number":463,"context_line":"            filters[\u0027dhcp_agent_id\u0027] \u003d dhcp_agent_ids"},{"line_number":464,"context_line":"        bindings \u003d network.NetworkDhcpAgentBinding.get_objects(context,"},{"line_number":465,"context_line":"                                                               **filters)"},{"line_number":466,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_6e7712a0","line":463,"range":{"start_line":455,"start_character":8,"end_line":463,"end_character":53},"in_reply_to":"9a629dbe_f8da294a","updated":"2016-11-10 23:46:07.000000000","message":"There are already UT\u0027s testing this here:https://github.com/openstack/neutron/blob/master/neutron/tests/unit/scheduler/test_dhcp_agent_scheduler.py#L676-L713\n\nThey are testing with multiple conditions/scenarios and it is passing.","commit_id":"a0b46b7a304d98e46417196c4e3da48710c7ef76"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"ecb61565142ffddb1e97836fcfb74bb20760e27d","unresolved":false,"context_lines":[{"line_number":498,"context_line":"        if not binding_obj:"},{"line_number":499,"context_line":"            raise dhcpagentscheduler.NetworkNotHostedByDhcpAgent("},{"line_number":500,"context_line":"                network_id\u003dnetwork_id, agent_id\u003did)"},{"line_number":501,"context_line":"        binding_objs \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":502,"context_line":"            context, network_id\u003dnetwork_id, dhcp_agent_id\u003did)"},{"line_number":503,"context_line":"        if not binding_objs:"},{"line_number":504,"context_line":"            raise dhcpagentscheduler.NetworkNotHostedByDhcpAgent("},{"line_number":505,"context_line":"                network_id\u003dnetwork_id, agent_id\u003did)"},{"line_number":506,"context_line":"        if len(binding_objs) \u003e 1:"},{"line_number":507,"context_line":"            # TODO(ndahiwade):Currently just printing multiple results found"},{"line_number":508,"context_line":"            # until a an exception for it is implemented in OVO"},{"line_number":509,"context_line":"            print(\u0027Exception: Multiple Results Found\u0027)"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        # reserve the port, so the ip is reused on a subsequent add"},{"line_number":512,"context_line":"        device_id \u003d utils.get_dhcp_agent_device_id(network_id,"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_5894f541","line":509,"range":{"start_line":501,"start_character":8,"end_line":509,"end_character":54},"updated":"2016-11-10 10:50:34.000000000","message":"When you done line 496-500, it is not needed.","commit_id":"a0b46b7a304d98e46417196c4e3da48710c7ef76"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"2ae4d9ab8ae35327185fba97f794989893da40db","unresolved":false,"context_lines":[{"line_number":498,"context_line":"        if not binding_obj:"},{"line_number":499,"context_line":"            raise dhcpagentscheduler.NetworkNotHostedByDhcpAgent("},{"line_number":500,"context_line":"                network_id\u003dnetwork_id, agent_id\u003did)"},{"line_number":501,"context_line":"        binding_objs \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":502,"context_line":"            context, network_id\u003dnetwork_id, dhcp_agent_id\u003did)"},{"line_number":503,"context_line":"        if not binding_objs:"},{"line_number":504,"context_line":"            raise dhcpagentscheduler.NetworkNotHostedByDhcpAgent("},{"line_number":505,"context_line":"                network_id\u003dnetwork_id, agent_id\u003did)"},{"line_number":506,"context_line":"        if len(binding_objs) \u003e 1:"},{"line_number":507,"context_line":"            # TODO(ndahiwade):Currently just printing multiple results found"},{"line_number":508,"context_line":"            # until a an exception for it is implemented in OVO"},{"line_number":509,"context_line":"            print(\u0027Exception: Multiple Results Found\u0027)"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        # reserve the port, so the ip is reused on a subsequent add"},{"line_number":512,"context_line":"        device_id \u003d utils.get_dhcp_agent_device_id(network_id,"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a629dbe_4e5dee13","line":509,"range":{"start_line":501,"start_character":8,"end_line":509,"end_character":54},"in_reply_to":"9a629dbe_5894f541","updated":"2016-11-10 23:46:07.000000000","message":"Sure,will do.","commit_id":"a0b46b7a304d98e46417196c4e3da48710c7ef76"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"d6fc8c5305b9a1d5fb1fc22818c464fe0fc5e7ae","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        context \u003d ncontext.get_admin_context()"},{"line_number":316,"context_line":"        try:"},{"line_number":317,"context_line":"            agent_objs \u003d agent_obj.Agent.get_objects(context)"},{"line_number":318,"context_line":"            dhcp_agent_ids \u003d []"},{"line_number":319,"context_line":"            for obj in agent_objs:"},{"line_number":320,"context_line":"                if obj.heartbeat_timestamp \u003c cutoff:"},{"line_number":321,"context_line":"                    dhcp_agent_ids.append(obj.id)"},{"line_number":322,"context_line":"            filters \u003d {\u0027dhcp_agent_id\u0027: dhcp_agent_ids}"},{"line_number":323,"context_line":"            down_bindings \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":324,"context_line":"                context, **filters)"},{"line_number":325,"context_line":"            dhcp_notifier \u003d self.agent_notifiers.get(constants.AGENT_TYPE_DHCP)"},{"line_number":326,"context_line":"            dead_bindings \u003d [b for b in"},{"line_number":327,"context_line":"                             self._filter_bindings(context, down_bindings)]"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_99905045","line":324,"range":{"start_line":317,"start_character":12,"end_line":324,"end_character":35},"updated":"2016-12-05 22:02:11.000000000","message":"could you consider to create a class method for this?","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"657d60c72a30a18a15d9503daf1078537fb9023f","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        context \u003d ncontext.get_admin_context()"},{"line_number":316,"context_line":"        try:"},{"line_number":317,"context_line":"            agent_objs \u003d agent_obj.Agent.get_objects(context)"},{"line_number":318,"context_line":"            dhcp_agent_ids \u003d []"},{"line_number":319,"context_line":"            for obj in agent_objs:"},{"line_number":320,"context_line":"                if obj.heartbeat_timestamp \u003c cutoff:"},{"line_number":321,"context_line":"                    dhcp_agent_ids.append(obj.id)"},{"line_number":322,"context_line":"            filters \u003d {\u0027dhcp_agent_id\u0027: dhcp_agent_ids}"},{"line_number":323,"context_line":"            down_bindings \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":324,"context_line":"                context, **filters)"},{"line_number":325,"context_line":"            dhcp_notifier \u003d self.agent_notifiers.get(constants.AGENT_TYPE_DHCP)"},{"line_number":326,"context_line":"            dead_bindings \u003d [b for b in"},{"line_number":327,"context_line":"                             self._filter_bindings(context, down_bindings)]"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_97918955","line":324,"range":{"start_line":317,"start_character":12,"end_line":324,"end_character":35},"in_reply_to":"3a71b18c_44530c17","updated":"2016-12-07 22:31:01.000000000","message":"Done","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"657d60c72a30a18a15d9503daf1078537fb9023f","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        context \u003d ncontext.get_admin_context()"},{"line_number":316,"context_line":"        try:"},{"line_number":317,"context_line":"            agent_objs \u003d agent_obj.Agent.get_objects(context)"},{"line_number":318,"context_line":"            dhcp_agent_ids \u003d []"},{"line_number":319,"context_line":"            for obj in agent_objs:"},{"line_number":320,"context_line":"                if obj.heartbeat_timestamp \u003c cutoff:"},{"line_number":321,"context_line":"                    dhcp_agent_ids.append(obj.id)"},{"line_number":322,"context_line":"            filters \u003d {\u0027dhcp_agent_id\u0027: dhcp_agent_ids}"},{"line_number":323,"context_line":"            down_bindings \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":324,"context_line":"                context, **filters)"},{"line_number":325,"context_line":"            dhcp_notifier \u003d self.agent_notifiers.get(constants.AGENT_TYPE_DHCP)"},{"line_number":326,"context_line":"            dead_bindings \u003d [b for b in"},{"line_number":327,"context_line":"                             self._filter_bindings(context, down_bindings)]"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_57aff193","line":324,"range":{"start_line":317,"start_character":12,"end_line":324,"end_character":35},"in_reply_to":"3a71b18c_99905045","updated":"2016-12-07 22:31:01.000000000","message":"Done","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"63068adb29b111d4b35d483b01e55a3507d99bba","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        context \u003d ncontext.get_admin_context()"},{"line_number":316,"context_line":"        try:"},{"line_number":317,"context_line":"            agent_objs \u003d agent_obj.Agent.get_objects(context)"},{"line_number":318,"context_line":"            dhcp_agent_ids \u003d []"},{"line_number":319,"context_line":"            for obj in agent_objs:"},{"line_number":320,"context_line":"                if obj.heartbeat_timestamp \u003c cutoff:"},{"line_number":321,"context_line":"                    dhcp_agent_ids.append(obj.id)"},{"line_number":322,"context_line":"            filters \u003d {\u0027dhcp_agent_id\u0027: dhcp_agent_ids}"},{"line_number":323,"context_line":"            down_bindings \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":324,"context_line":"                context, **filters)"},{"line_number":325,"context_line":"            dhcp_notifier \u003d self.agent_notifiers.get(constants.AGENT_TYPE_DHCP)"},{"line_number":326,"context_line":"            dead_bindings \u003d [b for b in"},{"line_number":327,"context_line":"                             self._filter_bindings(context, down_bindings)]"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_44530c17","line":324,"range":{"start_line":317,"start_character":12,"end_line":324,"end_character":35},"in_reply_to":"3a71b18c_99905045","updated":"2016-12-06 14:50:36.000000000","message":"Yes, I guess we can hide the details in classmethod, even using the original SQL query form, not to parse it in python.","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"d6fc8c5305b9a1d5fb1fc22818c464fe0fc5e7ae","unresolved":false,"context_lines":[{"line_number":382,"context_line":"            hosts\u003dNone):"},{"line_number":383,"context_line":"        if not network_ids:"},{"line_number":384,"context_line":"            return []"},{"line_number":385,"context_line":"        filters \u003d {}"},{"line_number":386,"context_line":"        if network_ids:"},{"line_number":387,"context_line":"            filters[\u0027network_id\u0027] \u003d network_ids"},{"line_number":388,"context_line":"        filter_host \u003d {}"},{"line_number":389,"context_line":"        if hosts:"},{"line_number":390,"context_line":"            filter_host[\u0027host\u0027] \u003d hosts"},{"line_number":391,"context_line":"        if admin_state_up is not None:"},{"line_number":392,"context_line":"            filter_host[\u0027admin_state_up\u0027] \u003d admin_state_up"},{"line_number":393,"context_line":"        if filter_host:"},{"line_number":394,"context_line":"            dhcp_agent_ids \u003d [x.id for x in agent_obj.Agent.get_objects("},{"line_number":395,"context_line":"                context, **filter_host)]"},{"line_number":396,"context_line":"            filters[\u0027dhcp_agent_id\u0027] \u003d dhcp_agent_ids"},{"line_number":397,"context_line":"        bindings \u003d network.NetworkDhcpAgentBinding.get_objects(context,"},{"line_number":398,"context_line":"                                                               **filters)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        return [binding_obj.dhcp_agent"},{"line_number":401,"context_line":"                for binding_obj in bindings"},{"line_number":402,"context_line":"                if self.is_eligible_agent(context, active,"},{"line_number":403,"context_line":"                                          binding_obj.dhcp_agent)]"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    def add_network_to_dhcp_agent(self, context, id, network_id):"},{"line_number":406,"context_line":"        self._get_network(context, network_id)"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_9905b07b","line":403,"range":{"start_line":385,"start_character":8,"end_line":403,"end_character":66},"updated":"2016-12-05 22:02:11.000000000","message":"same thing here","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"657d60c72a30a18a15d9503daf1078537fb9023f","unresolved":false,"context_lines":[{"line_number":382,"context_line":"            hosts\u003dNone):"},{"line_number":383,"context_line":"        if not network_ids:"},{"line_number":384,"context_line":"            return []"},{"line_number":385,"context_line":"        filters \u003d {}"},{"line_number":386,"context_line":"        if network_ids:"},{"line_number":387,"context_line":"            filters[\u0027network_id\u0027] \u003d network_ids"},{"line_number":388,"context_line":"        filter_host \u003d {}"},{"line_number":389,"context_line":"        if hosts:"},{"line_number":390,"context_line":"            filter_host[\u0027host\u0027] \u003d hosts"},{"line_number":391,"context_line":"        if admin_state_up is not None:"},{"line_number":392,"context_line":"            filter_host[\u0027admin_state_up\u0027] \u003d admin_state_up"},{"line_number":393,"context_line":"        if filter_host:"},{"line_number":394,"context_line":"            dhcp_agent_ids \u003d [x.id for x in agent_obj.Agent.get_objects("},{"line_number":395,"context_line":"                context, **filter_host)]"},{"line_number":396,"context_line":"            filters[\u0027dhcp_agent_id\u0027] \u003d dhcp_agent_ids"},{"line_number":397,"context_line":"        bindings \u003d network.NetworkDhcpAgentBinding.get_objects(context,"},{"line_number":398,"context_line":"                                                               **filters)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        return [binding_obj.dhcp_agent"},{"line_number":401,"context_line":"                for binding_obj in bindings"},{"line_number":402,"context_line":"                if self.is_eligible_agent(context, active,"},{"line_number":403,"context_line":"                                          binding_obj.dhcp_agent)]"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    def add_network_to_dhcp_agent(self, context, id, network_id):"},{"line_number":406,"context_line":"        self._get_network(context, network_id)"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_777b0d2a","line":403,"range":{"start_line":385,"start_character":8,"end_line":403,"end_character":66},"in_reply_to":"3a71b18c_9905b07b","updated":"2016-12-07 22:31:01.000000000","message":"The complete(almost) method is changed, would seem redundant to create another method for it.","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"d6fc8c5305b9a1d5fb1fc22818c464fe0fc5e7ae","unresolved":false,"context_lines":[{"line_number":415,"context_line":"                if id \u003d\u003d dhcp_agent.id:"},{"line_number":416,"context_line":"                    raise dhcpagentscheduler.NetworkHostedByDHCPAgent("},{"line_number":417,"context_line":"                        network_id\u003dnetwork_id, agent_id\u003did)"},{"line_number":418,"context_line":"            binding_obj \u003d network.NetworkDhcpAgentBinding("},{"line_number":419,"context_line":"                context, dhcp_agent_id\u003did, network_id\u003dnetwork_id)"},{"line_number":420,"context_line":"            binding_obj.create()"},{"line_number":421,"context_line":"        dhcp_notifier \u003d self.agent_notifiers.get(constants.AGENT_TYPE_DHCP)"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_f937844a","line":418,"range":{"start_line":418,"start_character":12,"end_line":418,"end_character":23},"updated":"2016-12-05 22:02:11.000000000","message":"it\u0027s not necessary to create a variable here.","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"657d60c72a30a18a15d9503daf1078537fb9023f","unresolved":false,"context_lines":[{"line_number":415,"context_line":"                if id \u003d\u003d dhcp_agent.id:"},{"line_number":416,"context_line":"                    raise dhcpagentscheduler.NetworkHostedByDHCPAgent("},{"line_number":417,"context_line":"                        network_id\u003dnetwork_id, agent_id\u003did)"},{"line_number":418,"context_line":"            binding_obj \u003d network.NetworkDhcpAgentBinding("},{"line_number":419,"context_line":"                context, dhcp_agent_id\u003did, network_id\u003dnetwork_id)"},{"line_number":420,"context_line":"            binding_obj.create()"},{"line_number":421,"context_line":"        dhcp_notifier \u003d self.agent_notifiers.get(constants.AGENT_TYPE_DHCP)"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_9778a92d","line":418,"range":{"start_line":418,"start_character":12,"end_line":418,"end_character":23},"in_reply_to":"3a71b18c_f937844a","updated":"2016-12-07 22:31:01.000000000","message":"Done","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"d6fc8c5305b9a1d5fb1fc22818c464fe0fc5e7ae","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        if not binding_obj:"},{"line_number":432,"context_line":"            raise dhcpagentscheduler.NetworkNotHostedByDhcpAgent("},{"line_number":433,"context_line":"                network_id\u003dnetwork_id, agent_id\u003did)"},{"line_number":434,"context_line":"        binding_objs \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":435,"context_line":"            context, network_id\u003dnetwork_id, dhcp_agent_id\u003did)"},{"line_number":436,"context_line":"        if not binding_objs:"},{"line_number":437,"context_line":"            raise dhcpagentscheduler.NetworkNotHostedByDhcpAgent("},{"line_number":438,"context_line":"                network_id\u003dnetwork_id, agent_id\u003did)"},{"line_number":439,"context_line":"        if len(binding_objs) \u003e 1:"},{"line_number":440,"context_line":"            # TODO(ndahiwade):Currently just printing multiple results found"},{"line_number":441,"context_line":"            # until a an exception for it is implemented in OVO"},{"line_number":442,"context_line":"            print(\u0027Exception: Multiple Results Found\u0027)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        # reserve the port, so the ip is reused on a subsequent add"},{"line_number":445,"context_line":"        device_id \u003d utils.get_dhcp_agent_device_id(network_id,"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_99ef7086","line":442,"range":{"start_line":434,"start_character":8,"end_line":442,"end_character":54},"updated":"2016-12-05 22:02:11.000000000","message":"What is the reason of this block of code?  It\u0027s for ensuring that there aren\u0027t more than one Network DHCP Agents after this point?","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"63068adb29b111d4b35d483b01e55a3507d99bba","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        if not binding_obj:"},{"line_number":432,"context_line":"            raise dhcpagentscheduler.NetworkNotHostedByDhcpAgent("},{"line_number":433,"context_line":"                network_id\u003dnetwork_id, agent_id\u003did)"},{"line_number":434,"context_line":"        binding_objs \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":435,"context_line":"            context, network_id\u003dnetwork_id, dhcp_agent_id\u003did)"},{"line_number":436,"context_line":"        if not binding_objs:"},{"line_number":437,"context_line":"            raise dhcpagentscheduler.NetworkNotHostedByDhcpAgent("},{"line_number":438,"context_line":"                network_id\u003dnetwork_id, agent_id\u003did)"},{"line_number":439,"context_line":"        if len(binding_objs) \u003e 1:"},{"line_number":440,"context_line":"            # TODO(ndahiwade):Currently just printing multiple results found"},{"line_number":441,"context_line":"            # until a an exception for it is implemented in OVO"},{"line_number":442,"context_line":"            print(\u0027Exception: Multiple Results Found\u0027)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        # reserve the port, so the ip is reused on a subsequent add"},{"line_number":445,"context_line":"        device_id \u003d utils.get_dhcp_agent_device_id(network_id,"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_a4fce0b8","line":442,"range":{"start_line":434,"start_character":8,"end_line":442,"end_character":54},"in_reply_to":"3a71b18c_99ef7086","updated":"2016-12-06 14:50:36.000000000","message":"Yes, it is because on the left side you have the \u0027one()\u0027 method that will raise exception when multiple entries will be found.\n\nBut I guess that we can drop it, since we do not care about that one() in other places.","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"a476d2877926e39d380f95edcacbba2ae575374d","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        if not binding_obj:"},{"line_number":425,"context_line":"            raise dhcpagentscheduler.NetworkNotHostedByDhcpAgent("},{"line_number":426,"context_line":"                network_id\u003dnetwork_id, agent_id\u003did)"},{"line_number":427,"context_line":"        binding_objs \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":428,"context_line":"            context, network_id\u003dnetwork_id, dhcp_agent_id\u003did)"},{"line_number":429,"context_line":"        if not binding_objs:"},{"line_number":430,"context_line":"            raise dhcpagentscheduler.NetworkNotHostedByDhcpAgent("},{"line_number":431,"context_line":"                network_id\u003dnetwork_id, agent_id\u003did)"},{"line_number":432,"context_line":"        if len(binding_objs) \u003e 1:"},{"line_number":433,"context_line":"            # TODO(ndahiwade):Currently just printing multiple results found"},{"line_number":434,"context_line":"            # until a an exception for it is implemented in OVO"},{"line_number":435,"context_line":"            print(\u0027Exception: Multiple Results Found\u0027)"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        # reserve the port, so the ip is reused on a subsequent add"},{"line_number":438,"context_line":"        device_id \u003d utils.get_dhcp_agent_device_id(network_id,"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a71b18c_d0569605","line":435,"range":{"start_line":427,"start_character":8,"end_line":435,"end_character":54},"updated":"2016-12-08 10:13:25.000000000","message":"This part is not needed. We can drop it.","commit_id":"9a9bb27c9f231f98a2f43693a0cd8376f1b805f9"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"5725fcd24510af8294a5b65ba659077bc1cbfc49","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        if not binding_obj:"},{"line_number":425,"context_line":"            raise dhcpagentscheduler.NetworkNotHostedByDhcpAgent("},{"line_number":426,"context_line":"                network_id\u003dnetwork_id, agent_id\u003did)"},{"line_number":427,"context_line":"        binding_objs \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":428,"context_line":"            context, network_id\u003dnetwork_id, dhcp_agent_id\u003did)"},{"line_number":429,"context_line":"        if not binding_objs:"},{"line_number":430,"context_line":"            raise dhcpagentscheduler.NetworkNotHostedByDhcpAgent("},{"line_number":431,"context_line":"                network_id\u003dnetwork_id, agent_id\u003did)"},{"line_number":432,"context_line":"        if len(binding_objs) \u003e 1:"},{"line_number":433,"context_line":"            # TODO(ndahiwade):Currently just printing multiple results found"},{"line_number":434,"context_line":"            # until a an exception for it is implemented in OVO"},{"line_number":435,"context_line":"            print(\u0027Exception: Multiple Results Found\u0027)"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        # reserve the port, so the ip is reused on a subsequent add"},{"line_number":438,"context_line":"        device_id \u003d utils.get_dhcp_agent_device_id(network_id,"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a71b18c_96d88481","line":435,"range":{"start_line":427,"start_character":8,"end_line":435,"end_character":54},"in_reply_to":"3a71b18c_d0569605","updated":"2016-12-08 16:50:33.000000000","message":"Done","commit_id":"9a9bb27c9f231f98a2f43693a0cd8376f1b805f9"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"1a53ce2287de1db2f0b0174ac1e8c35af9c70c57","unresolved":false,"context_lines":[{"line_number":376,"context_line":"            hosts\u003dNone):"},{"line_number":377,"context_line":"        if not network_ids:"},{"line_number":378,"context_line":"            return []"},{"line_number":379,"context_line":"        filters \u003d {}"},{"line_number":380,"context_line":"        if network_ids:"},{"line_number":381,"context_line":"            filters[\u0027network_id\u0027] \u003d network_ids"},{"line_number":382,"context_line":"        filter_host \u003d {}"},{"line_number":383,"context_line":"        if hosts:"},{"line_number":384,"context_line":"            filter_host[\u0027host\u0027] \u003d hosts"},{"line_number":385,"context_line":"        if admin_state_up is not None:"},{"line_number":386,"context_line":"            filter_host[\u0027admin_state_up\u0027] \u003d admin_state_up"},{"line_number":387,"context_line":"        if filter_host:"},{"line_number":388,"context_line":"            dhcp_agent_ids \u003d [x.id for x in agent_obj.Agent.get_objects("},{"line_number":389,"context_line":"                context, **filter_host)]"},{"line_number":390,"context_line":"            filters[\u0027dhcp_agent_id\u0027] \u003d dhcp_agent_ids"},{"line_number":391,"context_line":"        bindings \u003d network.NetworkDhcpAgentBinding.get_objects(context,"},{"line_number":392,"context_line":"                                                               **filters)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        return [binding_obj.dhcp_agent"},{"line_number":395,"context_line":"                for binding_obj in bindings"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a3c09a3_4bd04ff8","line":392,"range":{"start_line":379,"start_character":8,"end_line":392,"end_character":73},"updated":"2017-01-19 00:53:38.000000000","message":"It\u0027s not the best approach in terms of performance but it seems the way to implement it in the current OVO framework. could you include a note for future improvements?","commit_id":"86a70d6fd84d0d14ea54cf3adb90f00b85541942"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"4e8a136499fa3d3638392b487afefc9d5fd58d0e","unresolved":false,"context_lines":[{"line_number":376,"context_line":"            hosts\u003dNone):"},{"line_number":377,"context_line":"        if not network_ids:"},{"line_number":378,"context_line":"            return []"},{"line_number":379,"context_line":"        filters \u003d {}"},{"line_number":380,"context_line":"        if network_ids:"},{"line_number":381,"context_line":"            filters[\u0027network_id\u0027] \u003d network_ids"},{"line_number":382,"context_line":"        filter_host \u003d {}"},{"line_number":383,"context_line":"        if hosts:"},{"line_number":384,"context_line":"            filter_host[\u0027host\u0027] \u003d hosts"},{"line_number":385,"context_line":"        if admin_state_up is not None:"},{"line_number":386,"context_line":"            filter_host[\u0027admin_state_up\u0027] \u003d admin_state_up"},{"line_number":387,"context_line":"        if filter_host:"},{"line_number":388,"context_line":"            dhcp_agent_ids \u003d [x.id for x in agent_obj.Agent.get_objects("},{"line_number":389,"context_line":"                context, **filter_host)]"},{"line_number":390,"context_line":"            filters[\u0027dhcp_agent_id\u0027] \u003d dhcp_agent_ids"},{"line_number":391,"context_line":"        bindings \u003d network.NetworkDhcpAgentBinding.get_objects(context,"},{"line_number":392,"context_line":"                                                               **filters)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        return [binding_obj.dhcp_agent"},{"line_number":395,"context_line":"                for binding_obj in bindings"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a3905b3_18c4313e","line":392,"range":{"start_line":379,"start_character":8,"end_line":392,"end_character":73},"in_reply_to":"7a3c09a3_4bd04ff8","updated":"2017-01-23 16:58:49.000000000","message":"Changed to reduce the no. of db calls","commit_id":"86a70d6fd84d0d14ea54cf3adb90f00b85541942"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"1a53ce2287de1db2f0b0174ac1e8c35af9c70c57","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                context, network_id, agent.host)"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def list_networks_on_dhcp_agent(self, context, id):"},{"line_number":449,"context_line":"        query \u003d network.NetworkDhcpAgentBinding.get_objects(context,"},{"line_number":450,"context_line":"                                                           dhcp_agent_id\u003did)"},{"line_number":451,"context_line":"        net_ids \u003d [item.network_id for item in query]"},{"line_number":452,"context_line":"        if net_ids:"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a3c09a3_abee13b2","line":449,"range":{"start_line":449,"start_character":8,"end_line":449,"end_character":13},"updated":"2017-01-19 00:53:38.000000000","message":"nit: s/query/objs","commit_id":"86a70d6fd84d0d14ea54cf3adb90f00b85541942"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"4e8a136499fa3d3638392b487afefc9d5fd58d0e","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                context, network_id, agent.host)"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def list_networks_on_dhcp_agent(self, context, id):"},{"line_number":449,"context_line":"        query \u003d network.NetworkDhcpAgentBinding.get_objects(context,"},{"line_number":450,"context_line":"                                                           dhcp_agent_id\u003did)"},{"line_number":451,"context_line":"        net_ids \u003d [item.network_id for item in query]"},{"line_number":452,"context_line":"        if net_ids:"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a3905b3_b89b1d65","line":449,"range":{"start_line":449,"start_character":8,"end_line":449,"end_character":13},"in_reply_to":"7a3c09a3_abee13b2","updated":"2017-01-23 16:58:49.000000000","message":"Done","commit_id":"86a70d6fd84d0d14ea54cf3adb90f00b85541942"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"95b07ac5b54b3513fe4e813edd4e5e36166010b3","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            hosts\u003dNone):"},{"line_number":376,"context_line":"        if not network_ids:"},{"line_number":377,"context_line":"            return []"},{"line_number":378,"context_line":"        filters \u003d {}"},{"line_number":379,"context_line":"        if network_ids:"},{"line_number":380,"context_line":"            filters[\u0027network_id\u0027] \u003d network_ids"},{"line_number":381,"context_line":"        bindings \u003d network.NetworkDhcpAgentBinding.get_objects(context,"},{"line_number":382,"context_line":"                                                               **filters)"},{"line_number":383,"context_line":"        agent_objs \u003d [binding.dhcp_agent for binding in bindings]"},{"line_number":384,"context_line":"        if admin_state_up is not None:"},{"line_number":385,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_1f5cad4a","line":382,"range":{"start_line":378,"start_character":0,"end_line":382,"end_character":73},"updated":"2017-03-17 20:16:45.000000000","message":"You don\u0027t need that. In @376 you\u0027re ensuring that network_ids exist, so you can go straight to assigning filters:\n\n filters[\u0027network_id\u0027] \u003d network_ids\n\nor even use this already in bindings on @381\n\n bindings \u003d network...get_objects(context, network_id\u003dnetwork_ids)","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"a5f9ec32ccc57fc8eb339f466b0b04c213a5ed7a","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            hosts\u003dNone):"},{"line_number":376,"context_line":"        if not network_ids:"},{"line_number":377,"context_line":"            return []"},{"line_number":378,"context_line":"        filters \u003d {}"},{"line_number":379,"context_line":"        if network_ids:"},{"line_number":380,"context_line":"            filters[\u0027network_id\u0027] \u003d network_ids"},{"line_number":381,"context_line":"        bindings \u003d network.NetworkDhcpAgentBinding.get_objects(context,"},{"line_number":382,"context_line":"                                                               **filters)"},{"line_number":383,"context_line":"        agent_objs \u003d [binding.dhcp_agent for binding in bindings]"},{"line_number":384,"context_line":"        if admin_state_up is not None:"},{"line_number":385,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_c30a1221","line":382,"range":{"start_line":378,"start_character":0,"end_line":382,"end_character":73},"in_reply_to":"1a1ced50_1f5cad4a","updated":"2017-03-20 15:51:12.000000000","message":"Done","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"95b07ac5b54b3513fe4e813edd4e5e36166010b3","unresolved":false,"context_lines":[{"line_number":380,"context_line":"            filters[\u0027network_id\u0027] \u003d network_ids"},{"line_number":381,"context_line":"        bindings \u003d network.NetworkDhcpAgentBinding.get_objects(context,"},{"line_number":382,"context_line":"                                                               **filters)"},{"line_number":383,"context_line":"        agent_objs \u003d [binding.dhcp_agent for binding in bindings]"},{"line_number":384,"context_line":"        if admin_state_up is not None:"},{"line_number":385,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"},{"line_number":386,"context_line":"                if agent.admin_state_up \u003d\u003d admin_state_up]"},{"line_number":387,"context_line":"        if hosts:"},{"line_number":388,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"},{"line_number":389,"context_line":"                if agent.host in hosts]"},{"line_number":390,"context_line":"        return [agent_ for agent_ in agent_objs"},{"line_number":391,"context_line":"                if self.is_eligible_agent(context, active,"},{"line_number":392,"context_line":"                                          agent_)]"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    def add_network_to_dhcp_agent(self, context, id, network_id):"},{"line_number":395,"context_line":"        self._get_network(context, network_id)"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_82d04655","line":392,"range":{"start_line":383,"start_character":0,"end_line":392,"end_character":50},"updated":"2017-03-17 20:16:45.000000000","message":"Would it be possible to replace this block of code, and use Agent object? Then, at the end, combine both lists? It could spare some cycles of iterating over the same list 3 times.","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"a5f9ec32ccc57fc8eb339f466b0b04c213a5ed7a","unresolved":false,"context_lines":[{"line_number":380,"context_line":"            filters[\u0027network_id\u0027] \u003d network_ids"},{"line_number":381,"context_line":"        bindings \u003d network.NetworkDhcpAgentBinding.get_objects(context,"},{"line_number":382,"context_line":"                                                               **filters)"},{"line_number":383,"context_line":"        agent_objs \u003d [binding.dhcp_agent for binding in bindings]"},{"line_number":384,"context_line":"        if admin_state_up is not None:"},{"line_number":385,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"},{"line_number":386,"context_line":"                if agent.admin_state_up \u003d\u003d admin_state_up]"},{"line_number":387,"context_line":"        if hosts:"},{"line_number":388,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"},{"line_number":389,"context_line":"                if agent.host in hosts]"},{"line_number":390,"context_line":"        return [agent_ for agent_ in agent_objs"},{"line_number":391,"context_line":"                if self.is_eligible_agent(context, active,"},{"line_number":392,"context_line":"                                          agent_)]"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    def add_network_to_dhcp_agent(self, context, id, network_id):"},{"line_number":395,"context_line":"        self._get_network(context, network_id)"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_83eada0d","line":392,"range":{"start_line":383,"start_character":0,"end_line":392,"end_character":50},"in_reply_to":"1a1ced50_82d04655","updated":"2017-03-20 15:51:12.000000000","message":"It won\u0027t be possible to combine the two lists as the first list would be NetworkDhcpAgentBinding objects and the second would be Agent objects. I somehow need to filter out the synthetic field (Agent OVO) from the NDAB OVOs before applying the filter conditions. Hence keeping it unchanged.","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"7e9ed710a0de2ebb89bcb688cf6717a16662ea57","unresolved":false,"context_lines":[{"line_number":377,"context_line":"            return []"},{"line_number":378,"context_line":"        bindings \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":379,"context_line":"                       context, network_id\u003dnetwork_ids)"},{"line_number":380,"context_line":"        agent_objs \u003d [binding.dhcp_agent for binding in bindings]"},{"line_number":381,"context_line":"        if admin_state_up is not None:"},{"line_number":382,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"},{"line_number":383,"context_line":"                if agent.admin_state_up \u003d\u003d admin_state_up]"}],"source_content_type":"text/x-python","patch_set":40,"id":"ffe62b97_a00244b3","line":380,"range":{"start_line":380,"start_character":0,"end_line":380,"end_character":65},"updated":"2017-03-24 19:53:40.000000000","message":"If this is the only place we are using synthetic field to get the agent_obj then we can get rid of the synthetic field and directly use get_objects on agent using the agent_ids from NetworkDhcpAgentBinding and do the required filtering. If we remove the synthetic_field from the object then we will not need the change in test_base.py and also we will not need to skip any test in test_network.py. That will make the patch more simpler.\n\nThoughts?","commit_id":"e017ec3478a50b878f50a8e6176a9a72540398fd"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"e51f6c19677c155fb6c91404cd27a3b360f638de","unresolved":false,"context_lines":[{"line_number":377,"context_line":"            return []"},{"line_number":378,"context_line":"        bindings \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":379,"context_line":"                       context, network_id\u003dnetwork_ids)"},{"line_number":380,"context_line":"        agent_objs \u003d [binding.dhcp_agent for binding in bindings]"},{"line_number":381,"context_line":"        if admin_state_up is not None:"},{"line_number":382,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"},{"line_number":383,"context_line":"                if agent.admin_state_up \u003d\u003d admin_state_up]"}],"source_content_type":"text/x-python","patch_set":40,"id":"ffe62b97_bc20b7ad","line":380,"range":{"start_line":380,"start_character":0,"end_line":380,"end_character":65},"in_reply_to":"ffe62b97_a00244b3","updated":"2017-03-28 17:12:56.000000000","message":"This is not the only place where synthetic filed is being used. It\u0027s also used in https://github.com/openstack/neutron/blob/master/neutron/db/agentschedulers_db.py#L280-L290 which is part of the original sql orm-relationship. Modifying that and the test cases involved with it will require extra calls to DB for fetching the agent_obj from it\u0027s ids, which is being saved by using synthetic field here. Hence overall I feel it\u0027s not saving us DB calls, so keeping it unchanged.","commit_id":"e017ec3478a50b878f50a8e6176a9a72540398fd"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"7e9ed710a0de2ebb89bcb688cf6717a16662ea57","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        if hosts:"},{"line_number":385,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"},{"line_number":386,"context_line":"                if agent.host in hosts]"},{"line_number":387,"context_line":"        return [agent_ for agent_ in agent_objs"},{"line_number":388,"context_line":"                if self.is_eligible_agent(context, active,"},{"line_number":389,"context_line":"                                          agent_)]"},{"line_number":390,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"ffe62b97_356d5804","line":387,"range":{"start_line":387,"start_character":16,"end_line":387,"end_character":22},"updated":"2017-03-24 19:53:40.000000000","message":"Is there any specific reason to name it as agent_ instead of agent?","commit_id":"e017ec3478a50b878f50a8e6176a9a72540398fd"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"e51f6c19677c155fb6c91404cd27a3b360f638de","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        if hosts:"},{"line_number":385,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"},{"line_number":386,"context_line":"                if agent.host in hosts]"},{"line_number":387,"context_line":"        return [agent_ for agent_ in agent_objs"},{"line_number":388,"context_line":"                if self.is_eligible_agent(context, active,"},{"line_number":389,"context_line":"                                          agent_)]"},{"line_number":390,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"ffe62b97_7cd34fd6","line":387,"range":{"start_line":387,"start_character":16,"end_line":387,"end_character":22},"in_reply_to":"ffe62b97_356d5804","updated":"2017-03-28 17:12:56.000000000","message":"Done","commit_id":"e017ec3478a50b878f50a8e6176a9a72540398fd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c7ffb993ebf261bcf2b6f625f7f0e47ee4d5c16f","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        if not network_ids:"},{"line_number":377,"context_line":"            return []"},{"line_number":378,"context_line":"        bindings \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":379,"context_line":"                       context, network_id\u003dnetwork_ids)"},{"line_number":380,"context_line":"        agent_objs \u003d [binding.dhcp_agent for binding in bindings]"},{"line_number":381,"context_line":"        if admin_state_up is not None:"},{"line_number":382,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"}],"source_content_type":"text/x-python","patch_set":42,"id":"dfeb2761_d282ce4f","line":379,"updated":"2017-03-31 15:29:00.000000000","message":"unrelated to this path we should consider passing some flags to the get objects - this may save us the loop below. The get object loops over all of the entries - so we could do the filtering there","commit_id":"a7787e56ad4c748206eb7c8ae1c683ea11a9f9ad"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c7ffb993ebf261bcf2b6f625f7f0e47ee4d5c16f","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        if hosts:"},{"line_number":385,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"},{"line_number":386,"context_line":"                if agent.host in hosts]"},{"line_number":387,"context_line":"        return [agent for agent in agent_objs"},{"line_number":388,"context_line":"                if self.is_eligible_agent(context, active,"},{"line_number":389,"context_line":"                                          agent)]"},{"line_number":390,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"dfeb2761_b2974a91","line":387,"updated":"2017-03-31 15:29:00.000000000","message":"can we do this check above - will save the extra loop","commit_id":"a7787e56ad4c748206eb7c8ae1c683ea11a9f9ad"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"1f6a9069deaa02c6d836e4cdd119e86f15b953bf","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        if hosts:"},{"line_number":385,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"},{"line_number":386,"context_line":"                if agent.host in hosts]"},{"line_number":387,"context_line":"        return [agent for agent in agent_objs"},{"line_number":388,"context_line":"                if self.is_eligible_agent(context, active,"},{"line_number":389,"context_line":"                                          agent)]"},{"line_number":390,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"dfeb2761_a6e14b01","line":387,"in_reply_to":"dfeb2761_b2974a91","updated":"2017-03-31 16:09:22.000000000","message":"which check are you referring to? the is_eligible_agent or the hosts?\nAlso can you elaborate on how will it save the extra loop.\nI am adding comments for each operation here. Thanks.","commit_id":"a7787e56ad4c748206eb7c8ae1c683ea11a9f9ad"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d1610d07f32a808fd37c445eec159a20bb617773","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        # filter the dhcp_agent objects on admin_state_up"},{"line_number":385,"context_line":"        if admin_state_up is not None:"},{"line_number":386,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"},{"line_number":387,"context_line":"                if agent.admin_state_up \u003d\u003d admin_state_up]"},{"line_number":388,"context_line":"        # filter the dhcp_agent objects on hosts"},{"line_number":389,"context_line":"        if hosts:"},{"line_number":390,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_fda4340a","line":387,"updated":"2017-07-11 21:01:00.000000000","message":"nit: please align with start of [","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"459d3a73564e9bebddd6d909dc79cfdf23daf3df","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        # filter the dhcp_agent objects on admin_state_up"},{"line_number":385,"context_line":"        if admin_state_up is not None:"},{"line_number":386,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"},{"line_number":387,"context_line":"                if agent.admin_state_up \u003d\u003d admin_state_up]"},{"line_number":388,"context_line":"        # filter the dhcp_agent objects on hosts"},{"line_number":389,"context_line":"        if hosts:"},{"line_number":390,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"}],"source_content_type":"text/x-python","patch_set":49,"id":"1f1a1f67_e762b316","line":387,"in_reply_to":"3f1d235d_fda4340a","updated":"2017-07-13 22:55:37.000000000","message":"Done","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"719684104f1545968b63db50bc39ad2b9be6feaa","unresolved":false,"context_lines":[{"line_number":388,"context_line":"        # filter the dhcp_agent objects on hosts"},{"line_number":389,"context_line":"        if hosts:"},{"line_number":390,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"},{"line_number":391,"context_line":"                if agent.host in hosts]"},{"line_number":392,"context_line":"        # finally filter if the agents are eligible"},{"line_number":393,"context_line":"        return [agent for agent in agent_objs"},{"line_number":394,"context_line":"                if self.is_eligible_agent(context, active,"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_622b0a30","line":391,"updated":"2017-06-30 19:57:28.000000000","message":"nit: if you have to respin align the \u0027if\u0027 with the open bracket on the line above","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"459d3a73564e9bebddd6d909dc79cfdf23daf3df","unresolved":false,"context_lines":[{"line_number":388,"context_line":"        # filter the dhcp_agent objects on hosts"},{"line_number":389,"context_line":"        if hosts:"},{"line_number":390,"context_line":"            agent_objs \u003d [agent for agent in agent_objs"},{"line_number":391,"context_line":"                if agent.host in hosts]"},{"line_number":392,"context_line":"        # finally filter if the agents are eligible"},{"line_number":393,"context_line":"        return [agent for agent in agent_objs"},{"line_number":394,"context_line":"                if self.is_eligible_agent(context, active,"}],"source_content_type":"text/x-python","patch_set":49,"id":"1f1a1f67_07a80f1d","line":391,"in_reply_to":"3f1d235d_622b0a30","updated":"2017-07-13 22:55:37.000000000","message":"Done","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d1610d07f32a808fd37c445eec159a20bb617773","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        # finally filter if the agents are eligible"},{"line_number":393,"context_line":"        return [agent for agent in agent_objs"},{"line_number":394,"context_line":"                if self.is_eligible_agent(context, active,"},{"line_number":395,"context_line":"                                          agent)]"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def add_network_to_dhcp_agent(self, context, id, network_id):"},{"line_number":398,"context_line":"        self._get_network(context, network_id)"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_1d87f063","line":395,"updated":"2017-07-11 21:01:00.000000000","message":"doesn\u0027t seem there is now any need for a separate line, please join lines 394-395","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"459d3a73564e9bebddd6d909dc79cfdf23daf3df","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        # finally filter if the agents are eligible"},{"line_number":393,"context_line":"        return [agent for agent in agent_objs"},{"line_number":394,"context_line":"                if self.is_eligible_agent(context, active,"},{"line_number":395,"context_line":"                                          agent)]"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def add_network_to_dhcp_agent(self, context, id, network_id):"},{"line_number":398,"context_line":"        self._get_network(context, network_id)"}],"source_content_type":"text/x-python","patch_set":49,"id":"1f1a1f67_27ab0b1e","line":395,"in_reply_to":"3f1d235d_1d87f063","updated":"2017-07-13 22:55:37.000000000","message":"Done","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"}],"neutron/objects/agent.py":[{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"207237b0d0f700b29f344c6f80a4e6d65c3b58a8","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        \u0027created_at\u0027: obj_fields.DateTimeField(tzinfo_aware\u003dFalse),"},{"line_number":44,"context_line":"        \u0027heartbeat_timestamp\u0027: obj_fields.DateTimeField(tzinfo_aware\u003dFalse),"},{"line_number":45,"context_line":"        \u0027description\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":46,"context_line":"        \u0027configurations\u0027: common_types.DictOfStringsField(),"},{"line_number":47,"context_line":"        \u0027resource_versions\u0027: common_types.DictOfStringsField(nullable\u003dTrue),"},{"line_number":48,"context_line":"        \u0027load\u0027: obj_fields.IntegerField(default\u003d0),"},{"line_number":49,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_979b4372","line":46,"updated":"2017-01-09 13:41:50.000000000","message":"I have covered this in patch:\nhttps://review.openstack.org/#/c/411830\n\nAgent OVO should use DictOfMiscValuesField.","commit_id":"29bf281e4a44355db3dcffe5ba1cca7f89cba9cd"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"68d88883c15e40a030159082c2b481dd85c27043","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        \u0027created_at\u0027: obj_fields.DateTimeField(tzinfo_aware\u003dFalse),"},{"line_number":44,"context_line":"        \u0027heartbeat_timestamp\u0027: obj_fields.DateTimeField(tzinfo_aware\u003dFalse),"},{"line_number":45,"context_line":"        \u0027description\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":46,"context_line":"        \u0027configurations\u0027: common_types.DictOfStringsField(),"},{"line_number":47,"context_line":"        \u0027resource_versions\u0027: common_types.DictOfStringsField(nullable\u003dTrue),"},{"line_number":48,"context_line":"        \u0027load\u0027: obj_fields.IntegerField(default\u003d0),"},{"line_number":49,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":34,"id":"7a3c09a3_83184286","line":46,"in_reply_to":"ba5201f7_979b4372","updated":"2017-01-13 18:30:30.000000000","message":"Done","commit_id":"29bf281e4a44355db3dcffe5ba1cca7f89cba9cd"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"3bd6346c621885c4a0d2505af711cb4ae2e3bd23","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    db_model \u003d agent_model.Agent"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    foreign_keys \u003d {\u0027NetworkDhcpAgentBinding\u0027: {\u0027id\u0027: \u0027dhcp_agent_id\u0027}}"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    fields \u003d {"},{"line_number":36,"context_line":"        \u0027id\u0027: common_types.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":50,"id":"ff346bd7_0658ce2f","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":71},"updated":"2017-07-25 17:28:59.000000000","message":"shouldn\u0027t this be other way around and added on NetworkDhcpAgentBinding instead ?","commit_id":"6c1cc96411ec562d94b0cd8d4c2fc8f71137fecf"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"39d108a5eb47a288ace5a76e91f11154c01c000b","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    db_model \u003d agent_model.Agent"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    foreign_keys \u003d {\u0027NetworkDhcpAgentBinding\u0027: {\u0027id\u0027: \u0027dhcp_agent_id\u0027}}"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    fields \u003d {"},{"line_number":36,"context_line":"        \u0027id\u0027: common_types.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":50,"id":"ff346bd7_1ccb761e","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":71},"in_reply_to":"ff346bd7_0658ce2f","updated":"2017-07-26 01:55:01.000000000","message":"According to the usage in \u003chttps://review.openstack.org/#/c/370452/50/neutron/db/agentschedulers_db.py\u003e Line 383, \"Agent\" should be a synthetic field of \"NetworkDhcpAgentBinding\". Thus, the foreign_keys definition seems correct here. \n\nBut I wonder how we can load \"Agent\" as the child object of \"NetworkDhcpAgentBinding\". Maybe we should remove this synthetic field relationship and choose to use .db_obj.agent instead.","commit_id":"6c1cc96411ec562d94b0cd8d4c2fc8f71137fecf"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"ad68e48783902b6e9452ed8d7f33687487da516e","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    db_model \u003d agent_model.Agent"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    foreign_keys \u003d {\u0027NetworkDhcpAgentBinding\u0027: {\u0027id\u0027: \u0027dhcp_agent_id\u0027}}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027id\u0027: common_types.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":57,"id":"7f287b81_f572dcac","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":71},"updated":"2017-08-28 08:22:00.000000000","message":"I have one question. We do not use \"Agent\" as a synthetic field of \"NetworkDhcpAgentBinding\". Do we still need to keep this foreign_keys?","commit_id":"f004b1cd200d4e40c27ba1c366e80704566be268"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"3ac54608cedba26a74e9a808fd477b95344a8a3e","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    db_model \u003d agent_model.Agent"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    foreign_keys \u003d {\u0027NetworkDhcpAgentBinding\u0027: {\u0027id\u0027: \u0027dhcp_agent_id\u0027}}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027id\u0027: common_types.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":57,"id":"7f287b81_5dbba7c3","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":71},"in_reply_to":"7f287b81_f572dcac","updated":"2017-08-31 19:29:36.000000000","message":"I think you are right. Let me check.","commit_id":"f004b1cd200d4e40c27ba1c366e80704566be268"}],"neutron/objects/common_types.py":[{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"a476d2877926e39d380f95edcacbba2ae575374d","unresolved":false,"context_lines":[{"line_number":213,"context_line":"class CustomString(obj_fields.FieldType):"},{"line_number":214,"context_line":"    \"\"\"String Custom Field."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    This custom field has been added to override the String()"},{"line_number":217,"context_line":"    field from oslo lib in order to accept list and dict as valid value types"},{"line_number":218,"context_line":"    for any DictOfStringsField type field. Currently this is being used for"},{"line_number":219,"context_line":"    Agent OVO and it\u0027s integration but can be used for any Oslo-Versioned"},{"line_number":220,"context_line":"    Object which has DictofStringsField type."},{"line_number":221,"context_line":"    \"\"\""},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a71b18c_30934aa5","line":220,"range":{"start_line":216,"start_character":4,"end_line":220,"end_character":45},"updated":"2016-12-08 10:13:25.000000000","message":"I do not get it, any example of what is not working for String()?","commit_id":"9a9bb27c9f231f98a2f43693a0cd8376f1b805f9"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"5725fcd24510af8294a5b65ba659077bc1cbfc49","unresolved":false,"context_lines":[{"line_number":213,"context_line":"class CustomString(obj_fields.FieldType):"},{"line_number":214,"context_line":"    \"\"\"String Custom Field."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    This custom field has been added to override the String()"},{"line_number":217,"context_line":"    field from oslo lib in order to accept list and dict as valid value types"},{"line_number":218,"context_line":"    for any DictOfStringsField type field. Currently this is being used for"},{"line_number":219,"context_line":"    Agent OVO and it\u0027s integration but can be used for any Oslo-Versioned"},{"line_number":220,"context_line":"    Object which has DictofStringsField type."},{"line_number":221,"context_line":"    \"\"\""},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a71b18c_96e24400","line":220,"range":{"start_line":216,"start_character":4,"end_line":220,"end_character":45},"in_reply_to":"3a71b18c_30934aa5","updated":"2016-12-08 16:50:33.000000000","message":"\u003cneutron.db.models.agent.Agent[object at 7f0fac7ba490] {id\u003du\u00273057ad21-cac4-4090-b176-d16e52278a3f\u0027, agent_type\u003du\u0027Open vSwitch agent\u0027, binary\u003du\u0027neutron-openvswitch-agent\u0027, topic\u003du\u0027N/A\u0027, host\u003du\u0027dhcp-host-a\u0027, availability_zone\u003dNone, admin_state_up\u003dTrue, created_at\u003ddatetime.datetime(2016, 12, 8, 16, 20, 6, 933829), started_at\u003ddatetime.datetime(2016, 12, 8, 16, 20, 6, 933829), heartbeat_timestamp\u003ddatetime.datetime(2016, 12, 8, 16, 20, 6, 933829), description\u003dNone, configurations\u003du\u0027{\"tunnel_types\": [\"vxlan\"], \"tunneling_ip\": \"20.0.0.1\", \"bridge_mappings\": {\"phys_net1\": \"br-eth-1\"}}\u0027, resource_versions\u003dNone, load\u003d0}\u003e]\n\nFor object like this I get the following two errors:\nhttp://paste.openstack.org/show/591827/\nhttp://paste.openstack.org/show/591831/\n\nAnd the root cause for this is the String() field in Oslo doesn\u0027t have \n\u0027list\u0027 and \u0027dict\u0027 as acceptable types. Hence this change.\nWill introduce this in Oslo as well later.","commit_id":"9a9bb27c9f231f98a2f43693a0cd8376f1b805f9"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"207237b0d0f700b29f344c6f80a4e6d65c3b58a8","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"# TODO(ndahiwade): Remove this when DictofMiscField patch gets merged"},{"line_number":237,"context_line":"class CustomString(obj_fields.FieldType):"},{"line_number":238,"context_line":"    \"\"\"String Custom Field."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    This custom field has been added to override the String()"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_9702630a","line":237,"updated":"2017-01-09 13:41:50.000000000","message":"This can re removed now and rebase on top of:\nhttps://review.openstack.org/#/c/411830/","commit_id":"29bf281e4a44355db3dcffe5ba1cca7f89cba9cd"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"68d88883c15e40a030159082c2b481dd85c27043","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"# TODO(ndahiwade): Remove this when DictofMiscField patch gets merged"},{"line_number":237,"context_line":"class CustomString(obj_fields.FieldType):"},{"line_number":238,"context_line":"    \"\"\"String Custom Field."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    This custom field has been added to override the String()"}],"source_content_type":"text/x-python","patch_set":34,"id":"7a3c09a3_e317464f","line":237,"in_reply_to":"ba5201f7_9702630a","updated":"2017-01-13 18:30:30.000000000","message":"Done","commit_id":"29bf281e4a44355db3dcffe5ba1cca7f89cba9cd"}],"neutron/objects/network.py":[{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"dcc8c8941e2d7907d27610996a55f22f39edd028","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from neutron.db import api as db_api"},{"line_number":19,"context_line":"from neutron.db import dns_db"},{"line_number":20,"context_line":"from neutron.db import models_v2"},{"line_number":21,"context_line":"from neutron.db.network_dhcp_agent_binding import models as ndab_models"},{"line_number":22,"context_line":"from neutron.db.port_security import models as ps_models"},{"line_number":23,"context_line":"from neutron.db.qos import models as qos_models"},{"line_number":24,"context_line":"from neutron.db import rbac_db_models"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_8661d93b","line":21,"range":{"start_line":21,"start_character":60,"end_line":21,"end_character":71},"updated":"2016-09-21 15:27:28.000000000","message":"nit: Try to use something more relevant","commit_id":"aa61e4441814abe9c81cb68a42885a555cd27f81"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"2400626276f971623875eb5085098ebcd0122713","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from neutron.db import api as db_api"},{"line_number":19,"context_line":"from neutron.db import dns_db"},{"line_number":20,"context_line":"from neutron.db import models_v2"},{"line_number":21,"context_line":"from neutron.db.network_dhcp_agent_binding import models as ndab_models"},{"line_number":22,"context_line":"from neutron.db.port_security import models as ps_models"},{"line_number":23,"context_line":"from neutron.db.qos import models as qos_models"},{"line_number":24,"context_line":"from neutron.db import rbac_db_models"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_4c9307a4","line":21,"range":{"start_line":21,"start_character":60,"end_line":21,"end_character":71},"in_reply_to":"7a8ec9b2_8661d93b","updated":"2016-09-22 07:13:09.000000000","message":"For me it is OK.","commit_id":"aa61e4441814abe9c81cb68a42885a555cd27f81"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"25d668a72db1eece234dbb749034180eef417ef2","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    primary_keys \u003d [\u0027network_id\u0027, \u0027dhcp_agent_id\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    foreign_keys \u003d {\u0027Network\u0027: {\u0027network_id\u0027: \u0027id\u0027},"},{"line_number":44,"context_line":"                    \u0027Agent\u0027: {\u0027dhcp_agent_id\u0027: \u0027id\u0027}}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    fields \u003d {"},{"line_number":47,"context_line":"        \u0027network_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a95cdbc_7aeab5ad","line":44,"range":{"start_line":44,"start_character":20,"end_line":44,"end_character":52},"updated":"2016-10-06 20:08:37.000000000","message":"this is not necessary","commit_id":"f1926e0ca93081774ca052fb04949feeeab34bcc"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"92de9f43e659dc98a5832b28c2631432144d93f4","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    primary_keys \u003d [\u0027network_id\u0027, \u0027dhcp_agent_id\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    foreign_keys \u003d {\u0027Network\u0027: {\u0027network_id\u0027: \u0027id\u0027},"},{"line_number":44,"context_line":"                    \u0027Agent\u0027: {\u0027dhcp_agent_id\u0027: \u0027id\u0027}}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    fields \u003d {"},{"line_number":47,"context_line":"        \u0027network_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a95cdbc_8adaa0e6","line":44,"range":{"start_line":44,"start_character":20,"end_line":44,"end_character":52},"in_reply_to":"1a95cdbc_7aeab5ad","updated":"2016-10-07 21:35:35.000000000","message":"I will wait till the Agent OVO is ready and NetworkDhcpAgentBinding is introduced as a foreign key.","commit_id":"f1926e0ca93081774ca052fb04949feeeab34bcc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"25d668a72db1eece234dbb749034180eef417ef2","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    fields \u003d {"},{"line_number":47,"context_line":"        \u0027network_id\u0027: obj_fields.UUIDField(),"},{"line_number":48,"context_line":"        \u0027dhcp_agent_id\u0027: obj_fields.UUIDField(),"},{"line_number":49,"context_line":"        \u0027dhcp_agent\u0027: obj_fields.ListOfObjectsField(\u0027Agent\u0027)"},{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    synthetic_fields \u003d [\u0027dhcp_agent\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a95cdbc_7a5d5578","line":49,"range":{"start_line":49,"start_character":33,"end_line":49,"end_character":51},"updated":"2016-10-06 20:08:37.000000000","message":"s/ListOfObjectsField/ObjectField","commit_id":"f1926e0ca93081774ca052fb04949feeeab34bcc"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"92de9f43e659dc98a5832b28c2631432144d93f4","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    fields \u003d {"},{"line_number":47,"context_line":"        \u0027network_id\u0027: obj_fields.UUIDField(),"},{"line_number":48,"context_line":"        \u0027dhcp_agent_id\u0027: obj_fields.UUIDField(),"},{"line_number":49,"context_line":"        \u0027dhcp_agent\u0027: obj_fields.ListOfObjectsField(\u0027Agent\u0027)"},{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    synthetic_fields \u003d [\u0027dhcp_agent\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a95cdbc_eaefa484","line":49,"range":{"start_line":49,"start_character":33,"end_line":49,"end_character":51},"in_reply_to":"1a95cdbc_7a5d5578","updated":"2016-10-07 21:35:35.000000000","message":"Done","commit_id":"f1926e0ca93081774ca052fb04949feeeab34bcc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"25d668a72db1eece234dbb749034180eef417ef2","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        self.qos_policy_id \u003d qos_policy_id"},{"line_number":189,"context_line":"        self.obj_reset_changes([\u0027qos_policy_id\u0027])"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def _set_dns_domain(self, dns_domain):"},{"line_number":192,"context_line":"        obj_db_api.delete_objects("},{"line_number":193,"context_line":"            self.obj_context, dns.NetworkDNSDomain, network_id\u003dself.id,"},{"line_number":194,"context_line":"        )"},{"line_number":195,"context_line":"        if dns_domain:"},{"line_number":196,"context_line":"            obj_db_api.create_object("},{"line_number":197,"context_line":"                self.obj_context, dns.NetworkDNSDomain,"},{"line_number":198,"context_line":"                {\u0027network_id\u0027: self.id, \u0027dns_domain\u0027: dns_domain}"},{"line_number":199,"context_line":"            )"},{"line_number":200,"context_line":"        self.dns_domain \u003d dns_domain"},{"line_number":201,"context_line":"        self.obj_reset_changes([\u0027dns_domain\u0027])"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a95cdbc_7a471577","line":199,"range":{"start_line":191,"start_character":4,"end_line":199,"end_character":13},"updated":"2016-10-06 20:08:37.000000000","message":"Shouldn\u0027t this function use OVO functions?","commit_id":"f1926e0ca93081774ca052fb04949feeeab34bcc"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"92de9f43e659dc98a5832b28c2631432144d93f4","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        self.qos_policy_id \u003d qos_policy_id"},{"line_number":189,"context_line":"        self.obj_reset_changes([\u0027qos_policy_id\u0027])"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def _set_dns_domain(self, dns_domain):"},{"line_number":192,"context_line":"        obj_db_api.delete_objects("},{"line_number":193,"context_line":"            self.obj_context, dns.NetworkDNSDomain, network_id\u003dself.id,"},{"line_number":194,"context_line":"        )"},{"line_number":195,"context_line":"        if dns_domain:"},{"line_number":196,"context_line":"            obj_db_api.create_object("},{"line_number":197,"context_line":"                self.obj_context, dns.NetworkDNSDomain,"},{"line_number":198,"context_line":"                {\u0027network_id\u0027: self.id, \u0027dns_domain\u0027: dns_domain}"},{"line_number":199,"context_line":"            )"},{"line_number":200,"context_line":"        self.dns_domain \u003d dns_domain"},{"line_number":201,"context_line":"        self.obj_reset_changes([\u0027dns_domain\u0027])"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a95cdbc_ca53c837","line":199,"range":{"start_line":191,"start_character":4,"end_line":199,"end_character":13},"in_reply_to":"1a95cdbc_7a471577","updated":"2016-10-07 21:35:35.000000000","message":"NetworkDNSDomain OVO is not merged yet,I just rebased this patch on top of Relocate DNS Db model patch to solve the cyclic import issue I was facing during the Integration of NetworkDhcpAgentBinding OVO.\nCynic Import: neutron.db.agentschedulers_db -\u003e neutron.objects.network -\u003e neutron.db.dns_db -\u003e neutron.db.l3_db -\u003e neutron.db.l3_agentschedulers_db","commit_id":"f1926e0ca93081774ca052fb04949feeeab34bcc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"9d856a8dc1393007eb3760f890c2f324ad094851","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    primary_keys \u003d [\u0027network_id\u0027, \u0027dhcp_agent_id\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    foreign_keys \u003d {\u0027Network\u0027: {\u0027network_id\u0027: \u0027id\u0027},"},{"line_number":44,"context_line":"                    \u0027Agent\u0027: {\u0027dhcp_agent_id\u0027: \u0027id\u0027}}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    fields \u003d {"},{"line_number":47,"context_line":"        \u0027network_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa6399be_9be6a1ae","line":44,"range":{"start_line":43,"start_character":4,"end_line":44,"end_character":53},"updated":"2016-10-13 14:25:33.000000000","message":"IMHO, those are not needed, for me these mean that Network and Agent OVO classes have synthetic fields of NetworkDhcpAgentBinding type.  AFAIK, OVO foreign keys are used to populate synthetic fields only, usually they\u0027re the same as DB foreign keys.","commit_id":"dfda9940c4d7078130098c64b1556fa2c41faab3"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"1e854b4aaf6f50b242a893b2a14a7ab60efe7380","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    fields \u003d {"},{"line_number":47,"context_line":"        \u0027network_id\u0027: obj_fields.UUIDField(),"},{"line_number":48,"context_line":"        \u0027dhcp_agent_id\u0027: obj_fields.UUIDField(),"},{"line_number":49,"context_line":"        \u0027dhcp_agent\u0027: obj_fields.ObjectField(\u0027Agent\u0027)"},{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    synthetic_fields \u003d [\u0027dhcp_agent\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa6399be_f4a49809","line":49,"range":{"start_line":49,"start_character":22,"end_line":49,"end_character":53},"updated":"2016-10-10 21:53:20.000000000","message":"Shouldn\u0027t this be obj_fields.ListOfObjectsField(\u0027Agent\u0027) as the relationship between networkdhcpagentbindings and agents is one to many.","commit_id":"dfda9940c4d7078130098c64b1556fa2c41faab3"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"c9c5af44619ec006d778873d53aea7540b86e2ce","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    fields \u003d {"},{"line_number":47,"context_line":"        \u0027network_id\u0027: obj_fields.UUIDField(),"},{"line_number":48,"context_line":"        \u0027dhcp_agent_id\u0027: obj_fields.UUIDField(),"},{"line_number":49,"context_line":"        \u0027dhcp_agent\u0027: obj_fields.ObjectField(\u0027Agent\u0027)"},{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    synthetic_fields \u003d [\u0027dhcp_agent\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa6399be_1fd48445","line":49,"range":{"start_line":49,"start_character":22,"end_line":49,"end_character":53},"in_reply_to":"fa6399be_f4a49809","updated":"2016-10-12 09:04:04.000000000","message":"Hmm it looks like it is only one agent from code usage:\n\nhttps://github.com/openstack/neutron/blob/master/neutron/db/agentschedulers_db.py#L464","commit_id":"dfda9940c4d7078130098c64b1556fa2c41faab3"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"f438b329044489d4e9e515c0e03fe0d94a372c85","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from oslo_versionedobjects import fields as obj_fields"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from neutron.db import api as db_api"},{"line_number":19,"context_line":"from neutron.db.models import dns"},{"line_number":20,"context_line":"from neutron.db.models import segment as segment_model"},{"line_number":21,"context_line":"from neutron.db import models_v2"},{"line_number":22,"context_line":"from neutron.db.network_dhcp_agent_binding import models as ndab_models"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_1382c994","line":19,"range":{"start_line":19,"start_character":15,"end_line":19,"end_character":33},"updated":"2016-11-08 12:43:38.000000000","message":"It is not related to this PS.","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"4c4662d85f9e085bbe8de295fa69cb648d381c29","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from oslo_versionedobjects import fields as obj_fields"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from neutron.db import api as db_api"},{"line_number":19,"context_line":"from neutron.db.models import dns"},{"line_number":20,"context_line":"from neutron.db.models import segment as segment_model"},{"line_number":21,"context_line":"from neutron.db import models_v2"},{"line_number":22,"context_line":"from neutron.db.network_dhcp_agent_binding import models as ndab_models"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_dadad4e7","line":19,"range":{"start_line":19,"start_character":15,"end_line":19,"end_character":33},"in_reply_to":"9a629dbe_1382c994","updated":"2016-11-09 21:01:16.000000000","message":"This was done initially to avoid the cyclic import in PS 5.\nneutron.db.agentschedulers_db -\u003e neutron.objects.network -\u003e neutron.db.dns_db -\u003e neutron.db.l3_db -\u003e neutron.db.l3_agentschedulers_db","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"207237b0d0f700b29f344c6f80a4e6d65c3b58a8","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @classmethod"},{"line_number":53,"context_line":"    def get_down_bindings(cls, context, cutoff):"},{"line_number":54,"context_line":"        agent_objs \u003d agent_obj.Agent.get_objects(context)"},{"line_number":55,"context_line":"        dhcp_agent_ids \u003d []"},{"line_number":56,"context_line":"        for obj in agent_objs:"},{"line_number":57,"context_line":"            if obj.heartbeat_timestamp \u003c cutoff:"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_5a64a2e4","line":54,"updated":"2017-01-09 13:41:50.000000000","message":"I\u0027m thinking of using original sql query and do the load_object before returning. It would make it less compute on python side.","commit_id":"29bf281e4a44355db3dcffe5ba1cca7f89cba9cd"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"1a53ce2287de1db2f0b0174ac1e8c35af9c70c57","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @classmethod"},{"line_number":53,"context_line":"    def get_down_bindings(cls, context, cutoff):"},{"line_number":54,"context_line":"        agent_objs \u003d agent_obj.Agent.get_objects(context)"},{"line_number":55,"context_line":"        dhcp_agent_ids \u003d []"},{"line_number":56,"context_line":"        for obj in agent_objs:"},{"line_number":57,"context_line":"            if obj.heartbeat_timestamp \u003c cutoff:"},{"line_number":58,"context_line":"                dhcp_agent_ids.append(obj.id)"},{"line_number":59,"context_line":"        filters \u003d {\u0027dhcp_agent_id\u0027: dhcp_agent_ids}"},{"line_number":60,"context_line":"        return cls.get_objects(context, **filters)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a3c09a3_8b1f97b6","line":60,"range":{"start_line":55,"start_character":8,"end_line":60,"end_character":50},"updated":"2017-01-19 00:53:38.000000000","message":"Same thing here, you should add a comment mentioning that the current framework doesn\u0027t support operators like \u0027\u003c\u0027 or \u0027\u003e\u0027","commit_id":"86a70d6fd84d0d14ea54cf3adb90f00b85541942"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"4e8a136499fa3d3638392b487afefc9d5fd58d0e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @classmethod"},{"line_number":53,"context_line":"    def get_down_bindings(cls, context, cutoff):"},{"line_number":54,"context_line":"        agent_objs \u003d agent_obj.Agent.get_objects(context)"},{"line_number":55,"context_line":"        dhcp_agent_ids \u003d []"},{"line_number":56,"context_line":"        for obj in agent_objs:"},{"line_number":57,"context_line":"            if obj.heartbeat_timestamp \u003c cutoff:"},{"line_number":58,"context_line":"                dhcp_agent_ids.append(obj.id)"},{"line_number":59,"context_line":"        filters \u003d {\u0027dhcp_agent_id\u0027: dhcp_agent_ids}"},{"line_number":60,"context_line":"        return cls.get_objects(context, **filters)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a3905b3_38bf2dab","line":60,"range":{"start_line":55,"start_character":8,"end_line":60,"end_character":50},"in_reply_to":"7a3c09a3_8b1f97b6","updated":"2017-01-23 16:58:49.000000000","message":"Done","commit_id":"86a70d6fd84d0d14ea54cf3adb90f00b85541942"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"95b07ac5b54b3513fe4e813edd4e5e36166010b3","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    @classmethod"},{"line_number":55,"context_line":"    def get_down_bindings(cls, context, cutoff):"},{"line_number":56,"context_line":"        agent_objs \u003d agent_obj.Agent.get_objects(context)"},{"line_number":57,"context_line":"        dhcp_agent_ids \u003d []"},{"line_number":58,"context_line":"        for obj in agent_objs:"},{"line_number":59,"context_line":"            if obj.heartbeat_timestamp \u003c cutoff:"},{"line_number":60,"context_line":"                dhcp_agent_ids.append(obj.id)"},{"line_number":61,"context_line":"        filters \u003d {\u0027dhcp_agent_id\u0027: dhcp_agent_ids}"},{"line_number":62,"context_line":"        return cls.get_objects(context, **filters)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_c20f9edf","line":60,"range":{"start_line":57,"start_character":0,"end_line":60,"end_character":45},"updated":"2017-03-17 20:16:45.000000000","message":"note: this can be rewritten, using list comprehension:\n\n dhcp_agent_ids \u003d [obj.id for obj in agent_objs if obj.hearbeat_timestamp \u003c cutoff]","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"a5f9ec32ccc57fc8eb339f466b0b04c213a5ed7a","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    @classmethod"},{"line_number":55,"context_line":"    def get_down_bindings(cls, context, cutoff):"},{"line_number":56,"context_line":"        agent_objs \u003d agent_obj.Agent.get_objects(context)"},{"line_number":57,"context_line":"        dhcp_agent_ids \u003d []"},{"line_number":58,"context_line":"        for obj in agent_objs:"},{"line_number":59,"context_line":"            if obj.heartbeat_timestamp \u003c cutoff:"},{"line_number":60,"context_line":"                dhcp_agent_ids.append(obj.id)"},{"line_number":61,"context_line":"        filters \u003d {\u0027dhcp_agent_id\u0027: dhcp_agent_ids}"},{"line_number":62,"context_line":"        return cls.get_objects(context, **filters)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_c3f4d2f3","line":60,"range":{"start_line":57,"start_character":0,"end_line":60,"end_character":45},"in_reply_to":"1a1ced50_c20f9edf","updated":"2017-03-20 15:51:12.000000000","message":"Done","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"95b07ac5b54b3513fe4e813edd4e5e36166010b3","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        for obj in agent_objs:"},{"line_number":59,"context_line":"            if obj.heartbeat_timestamp \u003c cutoff:"},{"line_number":60,"context_line":"                dhcp_agent_ids.append(obj.id)"},{"line_number":61,"context_line":"        filters \u003d {\u0027dhcp_agent_id\u0027: dhcp_agent_ids}"},{"line_number":62,"context_line":"        return cls.get_objects(context, **filters)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_a231c2a4","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":50},"updated":"2017-03-17 20:16:45.000000000","message":"You could just use dhcp_agent_ids like\n\n return cls.get_objects(context, dhcp_agent_id\u003ddhcp_agent_ids)","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"a5f9ec32ccc57fc8eb339f466b0b04c213a5ed7a","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        for obj in agent_objs:"},{"line_number":59,"context_line":"            if obj.heartbeat_timestamp \u003c cutoff:"},{"line_number":60,"context_line":"                dhcp_agent_ids.append(obj.id)"},{"line_number":61,"context_line":"        filters \u003d {\u0027dhcp_agent_id\u0027: dhcp_agent_ids}"},{"line_number":62,"context_line":"        return cls.get_objects(context, **filters)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_e3f70ef3","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":50},"in_reply_to":"1a1ced50_a231c2a4","updated":"2017-03-20 15:51:12.000000000","message":"Done","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"}],"neutron/objects/network_dhcp_agent_binding.py":[{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"658c08f4c0999dffa10ab2a69231b2bcfad5691f","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":25,"context_line":"class NetworkDhcpAgentBinding(base.NeutronDbObject):"},{"line_number":26,"context_line":"    # Version 1.0: Initial version"},{"line_number":27,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_692d8e94","line":25,"range":{"start_line":25,"start_character":6,"end_line":25,"end_character":29},"updated":"2016-09-15 19:35:58.000000000","message":"Nakul, could you move it to neutron/object/network, like Artur pointed?","commit_id":"418692d3299af21f1edd6414f37fea6d7333c477"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"0bcd62f37034a2c63c71acbc4805377a91f050d0","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":25,"context_line":"class NetworkDhcpAgentBinding(base.NeutronDbObject):"},{"line_number":26,"context_line":"    # Version 1.0: Initial version"},{"line_number":27,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_2739c3f2","line":25,"range":{"start_line":25,"start_character":6,"end_line":25,"end_character":29},"in_reply_to":"7a8ec9b2_46b26695","updated":"2016-09-16 14:50:07.000000000","message":"Thanks for confirming that Artur. I will start working on the integration patch, both would be follow-up patches to your network patch.","commit_id":"418692d3299af21f1edd6414f37fea6d7333c477"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"9fa70b5fc4082c521f4a8d2e77fc6be5b68be82a","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":25,"context_line":"class NetworkDhcpAgentBinding(base.NeutronDbObject):"},{"line_number":26,"context_line":"    # Version 1.0: Initial version"},{"line_number":27,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_c9fb02c0","line":25,"range":{"start_line":25,"start_character":6,"end_line":25,"end_character":29},"in_reply_to":"7a8ec9b2_692d8e94","updated":"2016-09-15 19:42:26.000000000","message":"Yes, I will but Artur said that Ihar had asked him to remove it previously,so I am not sure whether this is needed or not.","commit_id":"418692d3299af21f1edd6414f37fea6d7333c477"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"7e9c74d4c3438e4e3c3ce0a258a77f34897e639c","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":25,"context_line":"class NetworkDhcpAgentBinding(base.NeutronDbObject):"},{"line_number":26,"context_line":"    # Version 1.0: Initial version"},{"line_number":27,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_46b26695","line":25,"range":{"start_line":25,"start_character":6,"end_line":25,"end_character":29},"in_reply_to":"7a8ec9b2_c9fb02c0","updated":"2016-09-16 09:34:05.000000000","message":"NetworkDhcpAgentBinding is needed as database facade. It was not needed in Network patch for the rush to merge the Network OVO definition. We will need to add NetworkDhcpAgentBinding as follow-up patch.","commit_id":"418692d3299af21f1edd6414f37fea6d7333c477"}],"neutron/scheduler/dhcp_agent_scheduler.py":[{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"f438b329044489d4e9e515c0e03fe0d94a372c85","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            binding_obj \u003d network.NetworkDhcpAgentBinding("},{"line_number":186,"context_line":"                context, dhcp_agent_id\u003dagent_id, network_id\u003dnetwork_id)"},{"line_number":187,"context_line":"            try:"},{"line_number":188,"context_line":"                with db_api.autonested_transaction(context.session):"},{"line_number":189,"context_line":"                    binding_obj.create()"},{"line_number":190,"context_line":"                    # try to actually write the changes and catch integrity"},{"line_number":191,"context_line":"                    # DBDuplicateEntry"},{"line_number":192,"context_line":"            except base.NeutronDbObjectDuplicateEntry:"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_5fc5238c","line":189,"range":{"start_line":188,"start_character":16,"end_line":189,"end_character":40},"updated":"2016-11-08 12:43:38.000000000","message":"create() method has the transaction management inside.\nSo it can be just binding_obj.create().","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"4c4662d85f9e085bbe8de295fa69cb648d381c29","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            binding_obj \u003d network.NetworkDhcpAgentBinding("},{"line_number":186,"context_line":"                context, dhcp_agent_id\u003dagent_id, network_id\u003dnetwork_id)"},{"line_number":187,"context_line":"            try:"},{"line_number":188,"context_line":"                with db_api.autonested_transaction(context.session):"},{"line_number":189,"context_line":"                    binding_obj.create()"},{"line_number":190,"context_line":"                    # try to actually write the changes and catch integrity"},{"line_number":191,"context_line":"                    # DBDuplicateEntry"},{"line_number":192,"context_line":"            except base.NeutronDbObjectDuplicateEntry:"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_1a736c16","line":189,"range":{"start_line":188,"start_character":16,"end_line":189,"end_character":40},"in_reply_to":"9a629dbe_5fc5238c","updated":"2016-11-09 21:01:16.000000000","message":"Done","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"d6fc8c5305b9a1d5fb1fc22818c464fe0fc5e7ae","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            # saving agent_id to use it after rollback to avoid"},{"line_number":182,"context_line":"            # DetachedInstanceError"},{"line_number":183,"context_line":"            agent_id \u003d agent.id"},{"line_number":184,"context_line":"            binding_obj \u003d network.NetworkDhcpAgentBinding("},{"line_number":185,"context_line":"                context, dhcp_agent_id\u003dagent_id, network_id\u003dnetwork_id)"},{"line_number":186,"context_line":"            try:"},{"line_number":187,"context_line":"                binding_obj.create()"},{"line_number":188,"context_line":"                # try to actually write the changes and catch integrity"},{"line_number":189,"context_line":"                # DBDuplicateEntry"},{"line_number":190,"context_line":"            except exceptions.NeutronDbObjectDuplicateEntry:"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_b4535116","line":187,"range":{"start_line":184,"start_character":12,"end_line":187,"end_character":36},"updated":"2016-12-05 22:02:11.000000000","message":"It\u0027s not required to keep the reference to the variable, so you can call the method in the same method.","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"657d60c72a30a18a15d9503daf1078537fb9023f","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            # saving agent_id to use it after rollback to avoid"},{"line_number":182,"context_line":"            # DetachedInstanceError"},{"line_number":183,"context_line":"            agent_id \u003d agent.id"},{"line_number":184,"context_line":"            binding_obj \u003d network.NetworkDhcpAgentBinding("},{"line_number":185,"context_line":"                context, dhcp_agent_id\u003dagent_id, network_id\u003dnetwork_id)"},{"line_number":186,"context_line":"            try:"},{"line_number":187,"context_line":"                binding_obj.create()"},{"line_number":188,"context_line":"                # try to actually write the changes and catch integrity"},{"line_number":189,"context_line":"                # DBDuplicateEntry"},{"line_number":190,"context_line":"            except exceptions.NeutronDbObjectDuplicateEntry:"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_979fc94f","line":187,"range":{"start_line":184,"start_character":12,"end_line":187,"end_character":36},"in_reply_to":"3a71b18c_b4535116","updated":"2016-12-07 22:31:01.000000000","message":"Done","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"207237b0d0f700b29f344c6f80a4e6d65c3b58a8","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                network.NetworkDhcpAgentBinding(context,"},{"line_number":186,"context_line":"                     dhcp_agent_id\u003dagent_id, network_id\u003dnetwork_id).create()"},{"line_number":187,"context_line":"                # try to actually write the changes and catch integrity"},{"line_number":188,"context_line":"                # DBDuplicateEntry"},{"line_number":189,"context_line":"            except exceptions.NeutronDbObjectDuplicateEntry:"},{"line_number":190,"context_line":"                # it\u0027s totally ok, someone just did our job!"},{"line_number":191,"context_line":"                bound_agents.remove(agent)"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_da85f259","line":188,"range":{"start_line":188,"start_character":18,"end_line":188,"end_character":34},"updated":"2017-01-09 13:41:50.000000000","message":"This exception comment is no longer valid.","commit_id":"29bf281e4a44355db3dcffe5ba1cca7f89cba9cd"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"68d88883c15e40a030159082c2b481dd85c27043","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                network.NetworkDhcpAgentBinding(context,"},{"line_number":186,"context_line":"                     dhcp_agent_id\u003dagent_id, network_id\u003dnetwork_id).create()"},{"line_number":187,"context_line":"                # try to actually write the changes and catch integrity"},{"line_number":188,"context_line":"                # DBDuplicateEntry"},{"line_number":189,"context_line":"            except exceptions.NeutronDbObjectDuplicateEntry:"},{"line_number":190,"context_line":"                # it\u0027s totally ok, someone just did our job!"},{"line_number":191,"context_line":"                bound_agents.remove(agent)"}],"source_content_type":"text/x-python","patch_set":34,"id":"7a3c09a3_030d323e","line":188,"range":{"start_line":188,"start_character":18,"end_line":188,"end_character":34},"in_reply_to":"ba5201f7_da85f259","updated":"2017-01-13 18:30:30.000000000","message":"Done","commit_id":"29bf281e4a44355db3dcffe5ba1cca7f89cba9cd"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"207237b0d0f700b29f344c6f80a4e6d65c3b58a8","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        # getting hosted_agents as well(which should not be the case)"},{"line_number":277,"context_line":"        active_dhcp_agents \u003d {agent[\u0027id\u0027]: agent for agent in"},{"line_number":278,"context_line":"                              active_dhcp_agents}"},{"line_number":279,"context_line":"        hosted_agents \u003d {agent[\u0027id\u0027]: agent for agent in hosted_agents}"},{"line_number":280,"context_line":"        if not active_dhcp_agents:"},{"line_number":281,"context_line":"            return {\u0027n_agents\u0027: 0, \u0027hostable_agents\u0027: [],"},{"line_number":282,"context_line":"                    \u0027hosted_agents\u0027: hosted_agents}"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_b0720daf","line":279,"range":{"start_line":279,"start_character":8,"end_line":279,"end_character":21},"updated":"2017-01-09 13:41:50.000000000","message":"hosted_agents are returned in dict by this method, so changing a list to dict will change the output of this method. Maybe better would be to create hosted_agent_ids and then use it in line 285?\n\nThe best would be to use agent OVO everywhere... not mixing dicts and OVOs.","commit_id":"29bf281e4a44355db3dcffe5ba1cca7f89cba9cd"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"68d88883c15e40a030159082c2b481dd85c27043","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        # getting hosted_agents as well(which should not be the case)"},{"line_number":277,"context_line":"        active_dhcp_agents \u003d {agent[\u0027id\u0027]: agent for agent in"},{"line_number":278,"context_line":"                              active_dhcp_agents}"},{"line_number":279,"context_line":"        hosted_agents \u003d {agent[\u0027id\u0027]: agent for agent in hosted_agents}"},{"line_number":280,"context_line":"        if not active_dhcp_agents:"},{"line_number":281,"context_line":"            return {\u0027n_agents\u0027: 0, \u0027hostable_agents\u0027: [],"},{"line_number":282,"context_line":"                    \u0027hosted_agents\u0027: hosted_agents}"}],"source_content_type":"text/x-python","patch_set":34,"id":"7a3c09a3_230a2e27","line":279,"range":{"start_line":279,"start_character":8,"end_line":279,"end_character":21},"in_reply_to":"ba5201f7_b0720daf","updated":"2017-01-13 18:30:30.000000000","message":"Done","commit_id":"29bf281e4a44355db3dcffe5ba1cca7f89cba9cd"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"207237b0d0f700b29f344c6f80a4e6d65c3b58a8","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                    \u0027hosted_agents\u0027: hosted_agents}"},{"line_number":283,"context_line":"        hostable_dhcp_agents \u003d ["},{"line_number":284,"context_line":"            agent for agent_id, agent in active_dhcp_agents.items()"},{"line_number":285,"context_line":"            if agent_id not in hosted_agents and plugin.is_eligible_agent("},{"line_number":286,"context_line":"                context, True, agent)]"},{"line_number":287,"context_line":"        hostable_dhcp_agents \u003d self._filter_agents_with_network_access("},{"line_number":288,"context_line":"            plugin, context, network, hostable_dhcp_agents)"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_d077919d","line":285,"range":{"start_line":285,"start_character":31,"end_line":285,"end_character":44},"updated":"2017-01-09 13:41:50.000000000","message":"It can be only list of ids.","commit_id":"29bf281e4a44355db3dcffe5ba1cca7f89cba9cd"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"68d88883c15e40a030159082c2b481dd85c27043","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                    \u0027hosted_agents\u0027: hosted_agents}"},{"line_number":283,"context_line":"        hostable_dhcp_agents \u003d ["},{"line_number":284,"context_line":"            agent for agent_id, agent in active_dhcp_agents.items()"},{"line_number":285,"context_line":"            if agent_id not in hosted_agents and plugin.is_eligible_agent("},{"line_number":286,"context_line":"                context, True, agent)]"},{"line_number":287,"context_line":"        hostable_dhcp_agents \u003d self._filter_agents_with_network_access("},{"line_number":288,"context_line":"            plugin, context, network, hostable_dhcp_agents)"}],"source_content_type":"text/x-python","patch_set":34,"id":"7a3c09a3_43073a1c","line":285,"range":{"start_line":285,"start_character":31,"end_line":285,"end_character":44},"in_reply_to":"ba5201f7_d077919d","updated":"2017-01-13 18:30:30.000000000","message":"Done","commit_id":"29bf281e4a44355db3dcffe5ba1cca7f89cba9cd"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"95b07ac5b54b3513fe4e813edd4e5e36166010b3","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        # NOTE(ndahiwade): Changed this part of the code because hosted_agents"},{"line_number":272,"context_line":"        # was a list of OVOs and active_dhcp_agents a list of dicts because of"},{"line_number":273,"context_line":"        # which the filtering wasn\u0027t correct and hostable_dhcp_agents was"},{"line_number":274,"context_line":"        # getting hosted_agents as well(which should not be the case)"},{"line_number":275,"context_line":"        active_dhcp_agents \u003d {agent[\u0027id\u0027]: agent for agent in"},{"line_number":276,"context_line":"                              active_dhcp_agents}"},{"line_number":277,"context_line":"        hosted_agent_ids \u003d [agent[\u0027id\u0027] for agent in hosted_agents]"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_a2d8e254","line":274,"updated":"2017-03-17 20:16:45.000000000","message":"missing whitespace","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"a5f9ec32ccc57fc8eb339f466b0b04c213a5ed7a","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        # NOTE(ndahiwade): Changed this part of the code because hosted_agents"},{"line_number":272,"context_line":"        # was a list of OVOs and active_dhcp_agents a list of dicts because of"},{"line_number":273,"context_line":"        # which the filtering wasn\u0027t correct and hostable_dhcp_agents was"},{"line_number":274,"context_line":"        # getting hosted_agents as well(which should not be the case)"},{"line_number":275,"context_line":"        active_dhcp_agents \u003d {agent[\u0027id\u0027]: agent for agent in"},{"line_number":276,"context_line":"                              active_dhcp_agents}"},{"line_number":277,"context_line":"        hosted_agent_ids \u003d [agent[\u0027id\u0027] for agent in hosted_agents]"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_43e9c213","line":274,"in_reply_to":"1a1ced50_a2d8e254","updated":"2017-03-20 15:51:12.000000000","message":"Done","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"ef094071a92cc649e2cc8b737cd88afcf7593565","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        az_hints \u003d (network.get(az_ext.AZ_HINTS) or"},{"line_number":269,"context_line":"                    cfg.CONF.default_availability_zones)"},{"line_number":270,"context_line":"        active_dhcp_agents \u003d self._get_active_agents(plugin, context, az_hints)"},{"line_number":271,"context_line":"        # NOTE(ndahiwade): Changed this part of the code because hosted_agents"},{"line_number":272,"context_line":"        # was a list of OVOs and active_dhcp_agents a list of dicts because of"},{"line_number":273,"context_line":"        # which the filtering wasn\u0027t correct and hostable_dhcp_agents was"},{"line_number":274,"context_line":"        # getting hosted_agents as well (which should not be the case)"}],"source_content_type":"text/x-python","patch_set":45,"id":"7ffa3b31_512b6293","line":271,"updated":"2017-04-16 09:36:12.000000000","message":"This note needs to be fixed a bit. A NOTE should tell someone about the code that is there, not about why something was changed. Otherwise, someone reading the code once it has merged won\u0027t know which \u0027change\u0027 you are referring to without going back through git blame. Is this NOTE even relevant after the patch has merged?","commit_id":"b59dcb5b7f6ea819cc41051efcf4857033a0f720"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d1610d07f32a808fd37c445eec159a20bb617773","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        az_hints \u003d (network.get(az_ext.AZ_HINTS) or"},{"line_number":269,"context_line":"                    cfg.CONF.default_availability_zones)"},{"line_number":270,"context_line":"        active_dhcp_agents \u003d self._get_active_agents(plugin, context, az_hints)"},{"line_number":271,"context_line":"        # NOTE(ndahiwade) hosting_agents is now list of OVOs."},{"line_number":272,"context_line":"        active_dhcp_agents \u003d {agent[\u0027id\u0027]: agent for agent in"},{"line_number":273,"context_line":"                              active_dhcp_agents}"},{"line_number":274,"context_line":"        hosted_agent_ids \u003d [agent[\u0027id\u0027] for agent in hosted_agents]"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_bdc59c90","line":271,"updated":"2017-07-11 21:01:00.000000000","message":"this comment is of little help, remove","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"459d3a73564e9bebddd6d909dc79cfdf23daf3df","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        az_hints \u003d (network.get(az_ext.AZ_HINTS) or"},{"line_number":269,"context_line":"                    cfg.CONF.default_availability_zones)"},{"line_number":270,"context_line":"        active_dhcp_agents \u003d self._get_active_agents(plugin, context, az_hints)"},{"line_number":271,"context_line":"        # NOTE(ndahiwade) hosting_agents is now list of OVOs."},{"line_number":272,"context_line":"        active_dhcp_agents \u003d {agent[\u0027id\u0027]: agent for agent in"},{"line_number":273,"context_line":"                              active_dhcp_agents}"},{"line_number":274,"context_line":"        hosted_agent_ids \u003d [agent[\u0027id\u0027] for agent in hosted_agents]"}],"source_content_type":"text/x-python","patch_set":49,"id":"1f1a1f67_1d35fcda","line":271,"in_reply_to":"3f1d235d_bdc59c90","updated":"2017-07-13 22:55:37.000000000","message":"Done","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d1610d07f32a808fd37c445eec159a20bb617773","unresolved":false,"context_lines":[{"line_number":269,"context_line":"                    cfg.CONF.default_availability_zones)"},{"line_number":270,"context_line":"        active_dhcp_agents \u003d self._get_active_agents(plugin, context, az_hints)"},{"line_number":271,"context_line":"        # NOTE(ndahiwade) hosting_agents is now list of OVOs."},{"line_number":272,"context_line":"        active_dhcp_agents \u003d {agent[\u0027id\u0027]: agent for agent in"},{"line_number":273,"context_line":"                              active_dhcp_agents}"},{"line_number":274,"context_line":"        hosted_agent_ids \u003d [agent[\u0027id\u0027] for agent in hosted_agents]"},{"line_number":275,"context_line":"        if not active_dhcp_agents:"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_5de1e829","line":272,"updated":"2017-07-11 21:01:00.000000000","message":"it\u0027s more common to wrap as:\n\n{....\n for x in ...}","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"459d3a73564e9bebddd6d909dc79cfdf23daf3df","unresolved":false,"context_lines":[{"line_number":269,"context_line":"                    cfg.CONF.default_availability_zones)"},{"line_number":270,"context_line":"        active_dhcp_agents \u003d self._get_active_agents(plugin, context, az_hints)"},{"line_number":271,"context_line":"        # NOTE(ndahiwade) hosting_agents is now list of OVOs."},{"line_number":272,"context_line":"        active_dhcp_agents \u003d {agent[\u0027id\u0027]: agent for agent in"},{"line_number":273,"context_line":"                              active_dhcp_agents}"},{"line_number":274,"context_line":"        hosted_agent_ids \u003d [agent[\u0027id\u0027] for agent in hosted_agents]"},{"line_number":275,"context_line":"        if not active_dhcp_agents:"}],"source_content_type":"text/x-python","patch_set":49,"id":"1f1a1f67_fd3120ee","line":272,"in_reply_to":"3f1d235d_5de1e829","updated":"2017-07-13 22:55:37.000000000","message":"Done","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d1610d07f32a808fd37c445eec159a20bb617773","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            return {\u0027n_agents\u0027: 0, \u0027hostable_agents\u0027: [],"},{"line_number":277,"context_line":"                    \u0027hosted_agents\u0027: hosted_agents}"},{"line_number":278,"context_line":"        hostable_dhcp_agents \u003d ["},{"line_number":279,"context_line":"            agent for agent_id, agent in active_dhcp_agents.items()"},{"line_number":280,"context_line":"            if agent_id not in hosted_agent_ids and plugin.is_eligible_agent("},{"line_number":281,"context_line":"                context, True, agent)]"},{"line_number":282,"context_line":"        hostable_dhcp_agents \u003d self._filter_agents_with_network_access("}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_bd4a3c24","line":279,"range":{"start_line":279,"start_character":22,"end_line":279,"end_character":31},"updated":"2017-07-11 21:01:00.000000000","message":"this is not really used anywhere except in single place (line 280) and you could extract it there right away, so I suggest we transform active_dhcp_agents into a simple list.","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"459d3a73564e9bebddd6d909dc79cfdf23daf3df","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            return {\u0027n_agents\u0027: 0, \u0027hostable_agents\u0027: [],"},{"line_number":277,"context_line":"                    \u0027hosted_agents\u0027: hosted_agents}"},{"line_number":278,"context_line":"        hostable_dhcp_agents \u003d ["},{"line_number":279,"context_line":"            agent for agent_id, agent in active_dhcp_agents.items()"},{"line_number":280,"context_line":"            if agent_id not in hosted_agent_ids and plugin.is_eligible_agent("},{"line_number":281,"context_line":"                context, True, agent)]"},{"line_number":282,"context_line":"        hostable_dhcp_agents \u003d self._filter_agents_with_network_access("}],"source_content_type":"text/x-python","patch_set":49,"id":"1f1a1f67_dd4c2478","line":279,"range":{"start_line":279,"start_character":22,"end_line":279,"end_character":31},"in_reply_to":"3f1d235d_bd4a3c24","updated":"2017-07-13 22:55:37.000000000","message":"Done","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"}],"neutron/tests/functional/scheduler/test_dhcp_agent_scheduler.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"d6fc8c5305b9a1d5fb1fc22818c464fe0fc5e7ae","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        return {\u0027availability_zone_hints\u0027: az_hints}"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def _get_hosted_networks_on_dhcp_agent(self, agent_id):"},{"line_number":378,"context_line":"        return network.NetworkDhcpAgentBinding.get_objects("},{"line_number":379,"context_line":"            self.ctx, dhcp_agent_id\u003dagent_id)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def _test_auto_schedule(self, host_index):"},{"line_number":382,"context_line":"        self.config(dhcp_agents_per_network\u003dself.max_agents_per_network)"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_7450d9d4","line":379,"range":{"start_line":378,"start_character":8,"end_line":379,"end_character":45},"updated":"2016-12-05 22:02:11.000000000","message":"AFAIK, This is only returning the network_id of the objects.","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"657d60c72a30a18a15d9503daf1078537fb9023f","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        return {\u0027availability_zone_hints\u0027: az_hints}"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def _get_hosted_networks_on_dhcp_agent(self, agent_id):"},{"line_number":378,"context_line":"        return network.NetworkDhcpAgentBinding.get_objects("},{"line_number":379,"context_line":"            self.ctx, dhcp_agent_id\u003dagent_id)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def _test_auto_schedule(self, host_index):"},{"line_number":382,"context_line":"        self.config(dhcp_agents_per_network\u003dself.max_agents_per_network)"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_f7b47dd5","line":379,"range":{"start_line":378,"start_character":8,"end_line":379,"end_character":45},"in_reply_to":"3a71b18c_2492904c","updated":"2016-12-07 22:31:01.000000000","message":"Done","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"63068adb29b111d4b35d483b01e55a3507d99bba","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        return {\u0027availability_zone_hints\u0027: az_hints}"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def _get_hosted_networks_on_dhcp_agent(self, agent_id):"},{"line_number":378,"context_line":"        return network.NetworkDhcpAgentBinding.get_objects("},{"line_number":379,"context_line":"            self.ctx, dhcp_agent_id\u003dagent_id)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def _test_auto_schedule(self, host_index):"},{"line_number":382,"context_line":"        self.config(dhcp_agents_per_network\u003dself.max_agents_per_network)"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_2492904c","line":379,"range":{"start_line":378,"start_character":8,"end_line":379,"end_character":45},"in_reply_to":"3a71b18c_7450d9d4","updated":"2016-12-06 14:50:36.000000000","message":"+1","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"657d60c72a30a18a15d9503daf1078537fb9023f","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        return {\u0027availability_zone_hints\u0027: az_hints}"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def _get_hosted_networks_on_dhcp_agent(self, agent_id):"},{"line_number":378,"context_line":"        return network.NetworkDhcpAgentBinding.get_objects("},{"line_number":379,"context_line":"            self.ctx, dhcp_agent_id\u003dagent_id)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def _test_auto_schedule(self, host_index):"},{"line_number":382,"context_line":"        self.config(dhcp_agents_per_network\u003dself.max_agents_per_network)"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_b7acc58d","line":379,"range":{"start_line":378,"start_character":8,"end_line":379,"end_character":45},"in_reply_to":"3a71b18c_7450d9d4","updated":"2016-12-07 22:31:01.000000000","message":"Done","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"95b07ac5b54b3513fe4e813edd4e5e36166010b3","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        # the latest change of actually validating uuids instead of using"},{"line_number":396,"context_line":"        # string uuids. Subsequently the rest of the test is modified"},{"line_number":397,"context_line":"        # accordingly."},{"line_number":398,"context_line":"        # create networks"},{"line_number":399,"context_line":"        self._networks \u003d [network.Network(self.ctx,"},{"line_number":400,"context_line":"            id\u003duuidutils.generate_uuid(), name\u003d\u0027%s-network-%s\u0027 %"},{"line_number":401,"context_line":"            (host_index, i)) for i in range(self.network_count)]"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_a2bf02cf","line":398,"range":{"start_line":398,"start_character":0,"end_line":398,"end_character":25},"updated":"2017-03-17 20:16:45.000000000","message":"leftover?","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"a5f9ec32ccc57fc8eb339f466b0b04c213a5ed7a","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        # the latest change of actually validating uuids instead of using"},{"line_number":396,"context_line":"        # string uuids. Subsequently the rest of the test is modified"},{"line_number":397,"context_line":"        # accordingly."},{"line_number":398,"context_line":"        # create networks"},{"line_number":399,"context_line":"        self._networks \u003d [network.Network(self.ctx,"},{"line_number":400,"context_line":"            id\u003duuidutils.generate_uuid(), name\u003d\u0027%s-network-%s\u0027 %"},{"line_number":401,"context_line":"            (host_index, i)) for i in range(self.network_count)]"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_63e4fe3a","line":398,"range":{"start_line":398,"start_character":0,"end_line":398,"end_character":25},"in_reply_to":"1a1ced50_a2bf02cf","updated":"2017-03-20 15:51:12.000000000","message":"Done","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"ef094071a92cc649e2cc8b737cd88afcf7593565","unresolved":false,"context_lines":[{"line_number":391,"context_line":"                 for i in range(self.agent_count)]"},{"line_number":392,"context_line":"        dhcp_agents \u003d self._create_and_set_agents_down(hosts)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        # NOTE(ndahiwade): Network creation was changed here to incorporate"},{"line_number":395,"context_line":"        # the latest change of actually validating uuids instead of using"},{"line_number":396,"context_line":"        # string uuids. Subsequently the rest of the test is modified"},{"line_number":397,"context_line":"        # accordingly."}],"source_content_type":"text/x-python","patch_set":45,"id":"7ffa3b31_b124e6c7","line":394,"updated":"2017-04-16 09:36:12.000000000","message":"remove this NOTE, it\u0027s not relevant once this patch has merged.","commit_id":"b59dcb5b7f6ea819cc41051efcf4857033a0f720"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d1610d07f32a808fd37c445eec159a20bb617773","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        return {\u0027availability_zone_hints\u0027: az_hints}"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def _get_hosted_networks_on_dhcp_agent(self, agent_id):"},{"line_number":378,"context_line":"        net_objs \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":379,"context_line":"            self.ctx, dhcp_agent_id\u003dagent_id)"},{"line_number":380,"context_line":"        return [item.network_id for item in net_objs]"},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_7d54a4ca","line":378,"range":{"start_line":378,"start_character":8,"end_line":378,"end_character":16},"updated":"2017-07-11 21:01:00.000000000","message":"it\u0027s binding_objs, not net_objs","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"459d3a73564e9bebddd6d909dc79cfdf23daf3df","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        return {\u0027availability_zone_hints\u0027: az_hints}"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def _get_hosted_networks_on_dhcp_agent(self, agent_id):"},{"line_number":378,"context_line":"        net_objs \u003d network.NetworkDhcpAgentBinding.get_objects("},{"line_number":379,"context_line":"            self.ctx, dhcp_agent_id\u003dagent_id)"},{"line_number":380,"context_line":"        return [item.network_id for item in net_objs]"},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"1f1a1f67_e261813b","line":378,"range":{"start_line":378,"start_character":8,"end_line":378,"end_character":16},"in_reply_to":"3f1d235d_7d54a4ca","updated":"2017-07-13 22:55:37.000000000","message":"Done","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d1610d07f32a808fd37c445eec159a20bb617773","unresolved":false,"context_lines":[{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        # create networks"},{"line_number":394,"context_line":"        self._networks \u003d [network.Network(self.ctx,"},{"line_number":395,"context_line":"            id\u003duuidutils.generate_uuid(), name\u003d\u0027%s-network-%s\u0027 %"},{"line_number":396,"context_line":"            (host_index, i)) for i in range(self.network_count)]"},{"line_number":397,"context_line":"        self._network_ids \u003d [net.id for net in self._networks]"},{"line_number":398,"context_line":"        self._net_create \u003d [net.create() for net in self._networks]"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_7d6dc496","line":395,"updated":"2017-07-11 21:01:00.000000000","message":"wrapping here could use some love, like:\n\nself._networks \u003d [\n    network.Network(\n        self.ctx,\n        id\u003d...,\n        name\u003d\u0027...\u0027 % (host_index, i))\n    for i in range(...)\n]","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"459d3a73564e9bebddd6d909dc79cfdf23daf3df","unresolved":false,"context_lines":[{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        # create networks"},{"line_number":394,"context_line":"        self._networks \u003d [network.Network(self.ctx,"},{"line_number":395,"context_line":"            id\u003duuidutils.generate_uuid(), name\u003d\u0027%s-network-%s\u0027 %"},{"line_number":396,"context_line":"            (host_index, i)) for i in range(self.network_count)]"},{"line_number":397,"context_line":"        self._network_ids \u003d [net.id for net in self._networks]"},{"line_number":398,"context_line":"        self._net_create \u003d [net.create() for net in self._networks]"}],"source_content_type":"text/x-python","patch_set":49,"id":"1f1a1f67_e2ef4185","line":395,"in_reply_to":"3f1d235d_7d6dc496","updated":"2017-07-13 22:55:37.000000000","message":"Done","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d1610d07f32a808fd37c445eec159a20bb617773","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        self._networks \u003d [network.Network(self.ctx,"},{"line_number":395,"context_line":"            id\u003duuidutils.generate_uuid(), name\u003d\u0027%s-network-%s\u0027 %"},{"line_number":396,"context_line":"            (host_index, i)) for i in range(self.network_count)]"},{"line_number":397,"context_line":"        self._network_ids \u003d [net.id for net in self._networks]"},{"line_number":398,"context_line":"        self._net_create \u003d [net.create() for net in self._networks]"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        # pre schedule the networks to the agents defined in"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_5deb28db","line":397,"updated":"2017-07-11 21:01:00.000000000","message":"it\u0027s used in a single place, same method, so no need to store it on self.","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d1610d07f32a808fd37c445eec159a20bb617773","unresolved":false,"context_lines":[{"line_number":395,"context_line":"            id\u003duuidutils.generate_uuid(), name\u003d\u0027%s-network-%s\u0027 %"},{"line_number":396,"context_line":"            (host_index, i)) for i in range(self.network_count)]"},{"line_number":397,"context_line":"        self._network_ids \u003d [net.id for net in self._networks]"},{"line_number":398,"context_line":"        self._net_create \u003d [net.create() for net in self._networks]"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        # pre schedule the networks to the agents defined in"},{"line_number":401,"context_line":"        # self.hosted_networks before calling auto_schedule_network"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_9dcae06b","line":398,"range":{"start_line":398,"start_character":28,"end_line":398,"end_character":40},"updated":"2017-07-11 21:01:00.000000000","message":".create() removes None so self._net_create is basically a list of Nones at this point.","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d1610d07f32a808fd37c445eec159a20bb617773","unresolved":false,"context_lines":[{"line_number":395,"context_line":"            id\u003duuidutils.generate_uuid(), name\u003d\u0027%s-network-%s\u0027 %"},{"line_number":396,"context_line":"            (host_index, i)) for i in range(self.network_count)]"},{"line_number":397,"context_line":"        self._network_ids \u003d [net.id for net in self._networks]"},{"line_number":398,"context_line":"        self._net_create \u003d [net.create() for net in self._networks]"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        # pre schedule the networks to the agents defined in"},{"line_number":401,"context_line":"        # self.hosted_networks before calling auto_schedule_network"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_ddb858e6","line":398,"range":{"start_line":398,"start_character":8,"end_line":398,"end_character":28},"updated":"2017-07-11 21:01:00.000000000","message":"this attribute is not used anywhere, remove","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d1610d07f32a808fd37c445eec159a20bb617773","unresolved":false,"context_lines":[{"line_number":405,"context_line":"                net_index \u003d self._extract_index(net)"},{"line_number":406,"context_line":"                scheduler.resource_filter.bind(self.ctx,"},{"line_number":407,"context_line":"                                               [dhcp_agents[agent_index]],"},{"line_number":408,"context_line":"                                               self._network_ids[net_index])"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"        retval \u003d scheduler.auto_schedule_networks(self, self.ctx,"},{"line_number":411,"context_line":"                                                  hosts[host_index])"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_9d8f802d","line":408,"range":{"start_line":408,"start_character":52,"end_line":408,"end_character":63},"updated":"2017-07-11 21:01:00.000000000","message":"you already have self._networks, so just extract [\u0027id\u0027] from there, and then you can get rid of self._network_ids","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d1610d07f32a808fd37c445eec159a20bb617773","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        agent_id \u003d dhcp_agents[host_index].id"},{"line_number":416,"context_line":"        hosted_networks \u003d self._get_hosted_networks_on_dhcp_agent(agent_id)"},{"line_number":417,"context_line":"        hosted_net_names \u003d [self._strip_host_index(net[\u0027name\u0027])"},{"line_number":418,"context_line":"            for net in network.Network.get_objects("},{"line_number":419,"context_line":"                self.ctx, id\u003dhosted_networks)]"},{"line_number":420,"context_line":"        expected_hosted_networks \u003d self.expected_hosted_networks[\u0027agent-%s\u0027 %"},{"line_number":421,"context_line":"                                                                 host_index]"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_9d78a02b","line":418,"updated":"2017-07-11 21:01:00.000000000","message":"please fix wrapping here:\n\nhosted_net_names \u003d [\n   self._strip_host_index(...)\n   for net in ...get_objects(self.ctx, id\u003d...)\n]","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"459d3a73564e9bebddd6d909dc79cfdf23daf3df","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        agent_id \u003d dhcp_agents[host_index].id"},{"line_number":416,"context_line":"        hosted_networks \u003d self._get_hosted_networks_on_dhcp_agent(agent_id)"},{"line_number":417,"context_line":"        hosted_net_names \u003d [self._strip_host_index(net[\u0027name\u0027])"},{"line_number":418,"context_line":"            for net in network.Network.get_objects("},{"line_number":419,"context_line":"                self.ctx, id\u003dhosted_networks)]"},{"line_number":420,"context_line":"        expected_hosted_networks \u003d self.expected_hosted_networks[\u0027agent-%s\u0027 %"},{"line_number":421,"context_line":"                                                                 host_index]"}],"source_content_type":"text/x-python","patch_set":49,"id":"1f1a1f67_5d3b74d0","line":418,"in_reply_to":"3f1d235d_9d78a02b","updated":"2017-07-13 22:55:37.000000000","message":"Done","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"3dfcae170efa2c457d9149fd421ab7a545a487d2","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        ]"},{"line_number":401,"context_line":"        for i in range(len(self._networks)):"},{"line_number":402,"context_line":"            self._networks[i].create()"},{"line_number":403,"context_line":"        self._network_ids \u003d [net.id for net in self._networks]"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        # pre schedule the networks to the agents defined in"},{"line_number":406,"context_line":"        # self.hosted_networks before calling auto_schedule_network"}],"source_content_type":"text/x-python","patch_set":55,"id":"7f287b81_36122a5a","line":403,"range":{"start_line":403,"start_character":8,"end_line":403,"end_character":13},"updated":"2017-08-22 21:06:48.000000000","message":"why do we store it on self?","commit_id":"02e741c8d350d74a093280ac3180ebb9ce1e15b1"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"c0116741d1317ad145d14a3c428055ea1be7a2b1","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        ]"},{"line_number":401,"context_line":"        for i in range(len(self._networks)):"},{"line_number":402,"context_line":"            self._networks[i].create()"},{"line_number":403,"context_line":"        self._network_ids \u003d [net.id for net in self._networks]"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        # pre schedule the networks to the agents defined in"},{"line_number":406,"context_line":"        # self.hosted_networks before calling auto_schedule_network"}],"source_content_type":"text/x-python","patch_set":55,"id":"7f287b81_1435ca46","line":403,"range":{"start_line":403,"start_character":8,"end_line":403,"end_character":13},"in_reply_to":"7f287b81_36122a5a","updated":"2017-08-23 18:32:51.000000000","message":"carried forward from previous PS","commit_id":"02e741c8d350d74a093280ac3180ebb9ce1e15b1"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"2521dbab53ca0c34aa856d34d292599d0e533ee2","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        ]"},{"line_number":401,"context_line":"        for i in range(len(self._networks)):"},{"line_number":402,"context_line":"            self._networks[i].create()"},{"line_number":403,"context_line":"        _network_ids \u003d [net.id for net in self._networks]"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        # pre schedule the networks to the agents defined in"},{"line_number":406,"context_line":"        # self.hosted_networks before calling auto_schedule_network"}],"source_content_type":"text/x-python","patch_set":56,"id":"7f287b81_4a05e6c1","line":403,"range":{"start_line":403,"start_character":8,"end_line":403,"end_character":9},"updated":"2017-08-23 21:12:10.000000000","message":"nit: at this point the underscore doesn\u0027t make sense","commit_id":"152074d5553b3001e6f44cc40110bad905c4edb2"}],"neutron/tests/unit/objects/test_base.py":[{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"658c08f4c0999dffa10ab2a69231b2bcfad5691f","unresolved":false,"context_lines":[{"line_number":1205,"context_line":"    def test_filtering_by_fields(self):"},{"line_number":1206,"context_line":"        obj \u003d self._make_object(self.obj_fields[0])"},{"line_number":1207,"context_line":"        obj.create()"},{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"        for field in remove_timestamps_from_fields(get_obj_db_fields(obj)):"},{"line_number":1210,"context_line":"            filters \u003d {field: [self.objs[0][field]]}"},{"line_number":1211,"context_line":"            new \u003d self._test_class.get_objects(self.context, **filters)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_ce5dc848","side":"PARENT","line":1208,"updated":"2016-09-15 19:35:58.000000000","message":"this is not related to your change. Please revert this.","commit_id":"cb99ce5c4465dbe8b63a5d2444ed6a6099b472a7"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"dcc8c8941e2d7907d27610996a55f22f39edd028","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"            \u0027heartbeat_timestamp\u0027: datetime.date.today(),"},{"line_number":1133,"context_line":"            \u0027configurations\u0027: \u0027test_configurations\u0027,"},{"line_number":1134,"context_line":"        }"},{"line_number":1135,"context_line":"        self._agent \u003d obj_db_api.create_object(self.context,"},{"line_number":1136,"context_line":"                                               agents_db.Agent,"},{"line_number":1137,"context_line":"                                               attrs)"},{"line_number":1138,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_a60a5588","line":1135,"updated":"2016-09-21 15:27:28.000000000","message":"Add a note to replace this with actual object once the object implementation is complete","commit_id":"aa61e4441814abe9c81cb68a42885a555cd27f81"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"a0f0795d5e228c3f0205afcfdd5b20dc539362d6","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"            \u0027heartbeat_timestamp\u0027: datetime.date.today(),"},{"line_number":1133,"context_line":"            \u0027configurations\u0027: \u0027test_configurations\u0027,"},{"line_number":1134,"context_line":"        }"},{"line_number":1135,"context_line":"        self._agent \u003d obj_db_api.create_object(self.context,"},{"line_number":1136,"context_line":"                                               agents_db.Agent,"},{"line_number":1137,"context_line":"                                               attrs)"},{"line_number":1138,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_2f74c49a","line":1135,"in_reply_to":"5a8bc5a2_0c81ff4a","updated":"2016-09-22 18:34:51.000000000","message":"Done","commit_id":"aa61e4441814abe9c81cb68a42885a555cd27f81"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"2400626276f971623875eb5085098ebcd0122713","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"            \u0027heartbeat_timestamp\u0027: datetime.date.today(),"},{"line_number":1133,"context_line":"            \u0027configurations\u0027: \u0027test_configurations\u0027,"},{"line_number":1134,"context_line":"        }"},{"line_number":1135,"context_line":"        self._agent \u003d obj_db_api.create_object(self.context,"},{"line_number":1136,"context_line":"                                               agents_db.Agent,"},{"line_number":1137,"context_line":"                                               attrs)"},{"line_number":1138,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_0c81ff4a","line":1135,"in_reply_to":"7a8ec9b2_a60a5588","updated":"2016-09-22 07:13:09.000000000","message":"+1","commit_id":"aa61e4441814abe9c81cb68a42885a555cd27f81"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"a0f0795d5e228c3f0205afcfdd5b20dc539362d6","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"            \u0027heartbeat_timestamp\u0027: datetime.date.today(),"},{"line_number":1133,"context_line":"            \u0027configurations\u0027: \u0027test_configurations\u0027,"},{"line_number":1134,"context_line":"        }"},{"line_number":1135,"context_line":"        self._agent \u003d obj_db_api.create_object(self.context,"},{"line_number":1136,"context_line":"                                               agents_db.Agent,"},{"line_number":1137,"context_line":"                                               attrs)"},{"line_number":1138,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_0f32a8f1","line":1135,"in_reply_to":"7a8ec9b2_a60a5588","updated":"2016-09-22 18:34:51.000000000","message":"Done","commit_id":"aa61e4441814abe9c81cb68a42885a555cd27f81"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"7ecad7e79acdb4dc6377570dd8219fd2f902f1f7","unresolved":false,"context_lines":[{"line_number":1272,"context_line":"    def test_filtering_by_fields(self):"},{"line_number":1273,"context_line":"        obj \u003d self._make_object(self.obj_fields[0])"},{"line_number":1274,"context_line":"        obj.create()"},{"line_number":1275,"context_line":""},{"line_number":1276,"context_line":"        for field in remove_timestamps_from_fields(get_obj_db_fields(obj)):"},{"line_number":1277,"context_line":"            if not isinstance(self.objs[0][field], list):"},{"line_number":1278,"context_line":"                filters \u003d {field: [self.objs[0][field]]}"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a8bc5a2_cfffc9a8","side":"PARENT","line":1275,"updated":"2016-09-23 06:28:44.000000000","message":"This change is not related to this patch. Leave the blank line.","commit_id":"718998b0d653458b8814b31c5d9ed005fc5e5e3c"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"10e8c94d51563dfce96070b8a8c6f58384507169","unresolved":false,"context_lines":[{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":"    def _create_test_agent(self):"},{"line_number":1123,"context_line":"        attrs \u003d {"},{"line_number":1124,"context_line":"            \u0027id\u0027: uuidutils.generate_uuid(),"},{"line_number":1125,"context_line":"            \u0027agent_type\u0027: \u0027Fake DHCP agent-%s\u0027 % tools.get_random_string(4),"},{"line_number":1126,"context_line":"            \u0027binary\u0027: \u0027fake-neutron-dhcp-agent\u0027,"},{"line_number":1127,"context_line":"            \u0027topic\u0027: \u0027fake_dhcp_agent\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a98d1f4_ac518f10","line":1124,"updated":"2016-09-29 21:04:11.000000000","message":"The \u0027id\u0027 field is taken care of by the create_object(). It\u0027s not needed here.","commit_id":"292ae1a3cac216c24af6fa4ff30ac8d6863d177f"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"38aa57b58feb7005c80685a0cd0771bc49d150d9","unresolved":false,"context_lines":[{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":"    def _create_test_agent(self):"},{"line_number":1123,"context_line":"        attrs \u003d {"},{"line_number":1124,"context_line":"            \u0027id\u0027: uuidutils.generate_uuid(),"},{"line_number":1125,"context_line":"            \u0027agent_type\u0027: \u0027Fake DHCP agent-%s\u0027 % tools.get_random_string(4),"},{"line_number":1126,"context_line":"            \u0027binary\u0027: \u0027fake-neutron-dhcp-agent\u0027,"},{"line_number":1127,"context_line":"            \u0027topic\u0027: \u0027fake_dhcp_agent\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a98d1f4_b696fced","line":1124,"in_reply_to":"3a98d1f4_ac518f10","updated":"2016-09-30 20:23:59.000000000","message":"Done","commit_id":"292ae1a3cac216c24af6fa4ff30ac8d6863d177f"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"f438b329044489d4e9e515c0e03fe0d94a372c85","unresolved":false,"context_lines":[{"line_number":1339,"context_line":""},{"line_number":1340,"context_line":"            # check that the stored database model does not have non-empty"},{"line_number":1341,"context_line":"            # relationships"},{"line_number":1342,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1343,"context_line":"            self.assertFalse(getattr(obj.db_obj, dbattr, None))"},{"line_number":1344,"context_line":""},{"line_number":1345,"context_line":"            if isinstance(cls_.fields[field], obj_fields.ObjectField):"},{"line_number":1346,"context_line":"                objclass_fields \u003d self._get_non_synth_fields(objclass,"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_1de81810","line":1343,"range":{"start_line":1342,"start_character":11,"end_line":1343,"end_character":63},"updated":"2016-11-08 12:43:38.000000000","message":"I think that we should change this assert into \u0027if\u0027 statement -\nif getattr(obj.db_obj, dbattr, None):\n   continue\n\nSo if this field already in DB, there is not need to perform lines 1345-1368. \n\nThe synthetic field being already in DB means that is has been fetched by get_object(s)/create/update.","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"4c4662d85f9e085bbe8de295fa69cb648d381c29","unresolved":false,"context_lines":[{"line_number":1339,"context_line":""},{"line_number":1340,"context_line":"            # check that the stored database model does not have non-empty"},{"line_number":1341,"context_line":"            # relationships"},{"line_number":1342,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1343,"context_line":"            self.assertFalse(getattr(obj.db_obj, dbattr, None))"},{"line_number":1344,"context_line":""},{"line_number":1345,"context_line":"            if isinstance(cls_.fields[field], obj_fields.ObjectField):"},{"line_number":1346,"context_line":"                objclass_fields \u003d self._get_non_synth_fields(objclass,"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_7a58e88a","line":1343,"range":{"start_line":1342,"start_character":11,"end_line":1343,"end_character":63},"in_reply_to":"9a629dbe_1de81810","updated":"2016-11-09 21:01:16.000000000","message":"Done","commit_id":"b835c1f2b95cb98b853417acb2062f61afddbc0f"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"d6fc8c5305b9a1d5fb1fc22818c464fe0fc5e7ae","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"                                                l3_model.Router,"},{"line_number":1213,"context_line":"                                                attrs)"},{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"    def _create_test_agent(self):"},{"line_number":1216,"context_line":"        attrs \u003d {"},{"line_number":1217,"context_line":"            \u0027agent_type\u0027: \u0027Fake DHCP agent-%s\u0027 % tools.get_random_string(4),"},{"line_number":1218,"context_line":"            \u0027binary\u0027: \u0027fake-neutron-dhcp-agent\u0027,"},{"line_number":1219,"context_line":"            \u0027topic\u0027: \u0027fake_dhcp_agent\u0027,"},{"line_number":1220,"context_line":"            \u0027host\u0027: \u0027Fake HostC-%s\u0027 % tools.get_random_string(4),"},{"line_number":1221,"context_line":"            \u0027admin_state_up\u0027: True,"},{"line_number":1222,"context_line":"            \u0027created_at\u0027: tools.get_random_datetime(),"},{"line_number":1223,"context_line":"            \u0027started_at\u0027: tools.get_random_datetime(),"},{"line_number":1224,"context_line":"            \u0027heartbeat_timestamp\u0027: tools.get_random_datetime(),"},{"line_number":1225,"context_line":"            \u0027configurations\u0027: {},"},{"line_number":1226,"context_line":"        }"},{"line_number":1227,"context_line":"        self._agent \u003d agent.Agent(self.context, **attrs)"},{"line_number":1228,"context_line":"        self._agent.create()"},{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":"    def _create_test_port(self, network):"},{"line_number":1231,"context_line":"        self._port \u003d self._create_port(network_id\u003dnetwork[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_f4286935","line":1228,"range":{"start_line":1215,"start_character":4,"end_line":1228,"end_character":28},"updated":"2016-12-05 22:02:11.000000000","message":"I know that you are aware of this change, but I\u0027m gonna include the link for other reviews about this chance\n\n* https://review.openstack.org/#/c/361443/31/neutron/tests/unit/objects/test_base.py@1252","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"657d60c72a30a18a15d9503daf1078537fb9023f","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"                                                l3_model.Router,"},{"line_number":1213,"context_line":"                                                attrs)"},{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"    def _create_test_agent(self):"},{"line_number":1216,"context_line":"        attrs \u003d {"},{"line_number":1217,"context_line":"            \u0027agent_type\u0027: \u0027Fake DHCP agent-%s\u0027 % tools.get_random_string(4),"},{"line_number":1218,"context_line":"            \u0027binary\u0027: \u0027fake-neutron-dhcp-agent\u0027,"},{"line_number":1219,"context_line":"            \u0027topic\u0027: \u0027fake_dhcp_agent\u0027,"},{"line_number":1220,"context_line":"            \u0027host\u0027: \u0027Fake HostC-%s\u0027 % tools.get_random_string(4),"},{"line_number":1221,"context_line":"            \u0027admin_state_up\u0027: True,"},{"line_number":1222,"context_line":"            \u0027created_at\u0027: tools.get_random_datetime(),"},{"line_number":1223,"context_line":"            \u0027started_at\u0027: tools.get_random_datetime(),"},{"line_number":1224,"context_line":"            \u0027heartbeat_timestamp\u0027: tools.get_random_datetime(),"},{"line_number":1225,"context_line":"            \u0027configurations\u0027: {},"},{"line_number":1226,"context_line":"        }"},{"line_number":1227,"context_line":"        self._agent \u003d agent.Agent(self.context, **attrs)"},{"line_number":1228,"context_line":"        self._agent.create()"},{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":"    def _create_test_port(self, network):"},{"line_number":1231,"context_line":"        self._port \u003d self._create_port(network_id\u003dnetwork[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_77c94d5a","line":1228,"range":{"start_line":1215,"start_character":4,"end_line":1228,"end_character":28},"in_reply_to":"3a71b18c_f4286935","updated":"2016-12-07 22:31:01.000000000","message":"Done","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"d6fc8c5305b9a1d5fb1fc22818c464fe0fc5e7ae","unresolved":false,"context_lines":[{"line_number":1381,"context_line":"            # check that the stored database model does not have non-empty"},{"line_number":1382,"context_line":"            # relationships"},{"line_number":1383,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1384,"context_line":"            if getattr(obj.db_obj, dbattr, None):"},{"line_number":1385,"context_line":"                continue"},{"line_number":1386,"context_line":""},{"line_number":1387,"context_line":"            if isinstance(cls_.fields[field], obj_fields.ObjectField):"},{"line_number":1388,"context_line":"                objclass_fields \u003d self._get_non_synth_fields(objclass,"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_74ec59f3","line":1385,"range":{"start_line":1384,"start_character":12,"end_line":1385,"end_character":24},"updated":"2016-12-05 22:02:11.000000000","message":"What is the reason behind this change?","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"63068adb29b111d4b35d483b01e55a3507d99bba","unresolved":false,"context_lines":[{"line_number":1381,"context_line":"            # check that the stored database model does not have non-empty"},{"line_number":1382,"context_line":"            # relationships"},{"line_number":1383,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1384,"context_line":"            if getattr(obj.db_obj, dbattr, None):"},{"line_number":1385,"context_line":"                continue"},{"line_number":1386,"context_line":""},{"line_number":1387,"context_line":"            if isinstance(cls_.fields[field], obj_fields.ObjectField):"},{"line_number":1388,"context_line":"                objclass_fields \u003d self._get_non_synth_fields(objclass,"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_04ed94b6","line":1385,"range":{"start_line":1384,"start_character":12,"end_line":1385,"end_character":24},"in_reply_to":"3a71b18c_74ec59f3","updated":"2016-12-06 14:50:36.000000000","message":"Victor:\nhttps://review.openstack.org/#/c/370452/22/neutron/tests/unit/objects/test_base.py@1343","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"1a53ce2287de1db2f0b0174ac1e8c35af9c70c57","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":37,"id":"7a3c09a3_4b012f39","line":1553,"range":{"start_line":1553,"start_character":19,"end_line":1553,"end_character":64},"updated":"2017-01-19 00:53:38.000000000","message":"Usually this comments explain the code below and not the change between commits","commit_id":"86a70d6fd84d0d14ea54cf3adb90f00b85541942"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"ee7b43585599a90e2b810d27587d3eb54bd38554","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":37,"id":"5a3905b3_a0bab708","line":1553,"range":{"start_line":1553,"start_character":19,"end_line":1553,"end_character":64},"in_reply_to":"7a3c09a3_4b012f39","updated":"2017-01-24 22:15:41.000000000","message":"As per our discussion, kept it unchanged.","commit_id":"86a70d6fd84d0d14ea54cf3adb90f00b85541942"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"95b07ac5b54b3513fe4e813edd4e5e36166010b3","unresolved":false,"context_lines":[{"line_number":1572,"context_line":"            # 2) objects for which the related objects are not loaded - In this"},{"line_number":1573,"context_line":"            #    case they need to be created because of the foreign key"},{"line_number":1574,"context_line":"            #    relationships. But we still need to check whether the"},{"line_number":1575,"context_line":"            #    relationships are loaded or not. That is acheived by the"},{"line_number":1576,"context_line":"            #    assertTrue statement after retrieving the dbaattr."},{"line_number":1577,"context_line":"            if getattr(obj.db_obj, dbattr, None):"},{"line_number":1578,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_e2873a0d","line":1575,"range":{"start_line":1575,"start_character":58,"end_line":1575,"end_character":66},"updated":"2017-03-17 20:16:45.000000000","message":"typo","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"a5f9ec32ccc57fc8eb339f466b0b04c213a5ed7a","unresolved":false,"context_lines":[{"line_number":1572,"context_line":"            # 2) objects for which the related objects are not loaded - In this"},{"line_number":1573,"context_line":"            #    case they need to be created because of the foreign key"},{"line_number":1574,"context_line":"            #    relationships. But we still need to check whether the"},{"line_number":1575,"context_line":"            #    relationships are loaded or not. That is acheived by the"},{"line_number":1576,"context_line":"            #    assertTrue statement after retrieving the dbaattr."},{"line_number":1577,"context_line":"            if getattr(obj.db_obj, dbattr, None):"},{"line_number":1578,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_c3cbf2a3","line":1575,"range":{"start_line":1575,"start_character":58,"end_line":1575,"end_character":66},"in_reply_to":"1a1ced50_e2873a0d","updated":"2017-03-20 15:51:12.000000000","message":"Done","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"95b07ac5b54b3513fe4e813edd4e5e36166010b3","unresolved":false,"context_lines":[{"line_number":1573,"context_line":"            #    case they need to be created because of the foreign key"},{"line_number":1574,"context_line":"            #    relationships. But we still need to check whether the"},{"line_number":1575,"context_line":"            #    relationships are loaded or not. That is acheived by the"},{"line_number":1576,"context_line":"            #    assertTrue statement after retrieving the dbaattr."},{"line_number":1577,"context_line":"            if getattr(obj.db_obj, dbattr, None):"},{"line_number":1578,"context_line":"                continue"},{"line_number":1579,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_c2823e00","line":1576,"range":{"start_line":1576,"start_character":59,"end_line":1576,"end_character":66},"updated":"2017-03-17 20:16:45.000000000","message":"typo","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"a5f9ec32ccc57fc8eb339f466b0b04c213a5ed7a","unresolved":false,"context_lines":[{"line_number":1573,"context_line":"            #    case they need to be created because of the foreign key"},{"line_number":1574,"context_line":"            #    relationships. But we still need to check whether the"},{"line_number":1575,"context_line":"            #    relationships are loaded or not. That is acheived by the"},{"line_number":1576,"context_line":"            #    assertTrue statement after retrieving the dbaattr."},{"line_number":1577,"context_line":"            if getattr(obj.db_obj, dbattr, None):"},{"line_number":1578,"context_line":"                continue"},{"line_number":1579,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_03c6ea99","line":1576,"range":{"start_line":1576,"start_character":59,"end_line":1576,"end_character":66},"in_reply_to":"1a1ced50_c2823e00","updated":"2017-03-20 15:51:12.000000000","message":"Done","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"ef094071a92cc649e2cc8b737cd88afcf7593565","unresolved":false,"context_lines":[{"line_number":1561,"context_line":"            # check that the stored database model does not have non-empty"},{"line_number":1562,"context_line":"            # relationships"},{"line_number":1563,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1564,"context_line":"            # NOTE This change is done for the following reason:"},{"line_number":1565,"context_line":"            # 1) db_obj have the related object loaded - In this case we do not"},{"line_number":1566,"context_line":"            #    have to create the related objects and the loop can continue."},{"line_number":1567,"context_line":"            # 2) objects for which the related objects are not loaded - In this"}],"source_content_type":"text/x-python","patch_set":45,"id":"7ffa3b31_9121eab7","line":1564,"updated":"2017-04-16 09:36:12.000000000","message":"This NOTE is good, just remove the sentence \"This change is done for the following reason\" and replace it with \"We skip empty relationships for the following reason\".","commit_id":"b59dcb5b7f6ea819cc41051efcf4857033a0f720"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d1610d07f32a808fd37c445eec159a20bb617773","unresolved":false,"context_lines":[{"line_number":1599,"context_line":"            # check that the stored database model does not have non-empty"},{"line_number":1600,"context_line":"            # relationships"},{"line_number":1601,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1602,"context_line":"            # Skipping empty relationships for the following reasons:"},{"line_number":1603,"context_line":"            # 1) db_obj have the related object loaded - In this case we do not"},{"line_number":1604,"context_line":"            #    have to create the related objects and the loop can continue."},{"line_number":1605,"context_line":"            # 2) objects for which the related objects are not loaded - In this"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_1dbb70c4","line":1602,"updated":"2017-07-11 21:01:00.000000000","message":"If/when we lazy load agents for binding models, this may no longer be needed.","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"459d3a73564e9bebddd6d909dc79cfdf23daf3df","unresolved":false,"context_lines":[{"line_number":1599,"context_line":"            # check that the stored database model does not have non-empty"},{"line_number":1600,"context_line":"            # relationships"},{"line_number":1601,"context_line":"            dbattr \u003d obj.fields_need_translation.get(field, field)"},{"line_number":1602,"context_line":"            # Skipping empty relationships for the following reasons:"},{"line_number":1603,"context_line":"            # 1) db_obj have the related object loaded - In this case we do not"},{"line_number":1604,"context_line":"            #    have to create the related objects and the loop can continue."},{"line_number":1605,"context_line":"            # 2) objects for which the related objects are not loaded - In this"}],"source_content_type":"text/x-python","patch_set":49,"id":"1f1a1f67_c498a71c","line":1602,"in_reply_to":"3f1d235d_1dbb70c4","updated":"2017-07-13 22:55:37.000000000","message":"I still see some tests fail without this, I\u0027ll send changes without it for now and will followup on next PS.","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"3dfcae170efa2c457d9149fd421ab7a545a487d2","unresolved":false,"context_lines":[{"line_number":1712,"context_line":"            # Skipping empty relationships for the following reasons:"},{"line_number":1713,"context_line":"            # 1) db_obj have the related object loaded - In this case we do not"},{"line_number":1714,"context_line":"            #    have to create the related objects and the loop can continue."},{"line_number":1715,"context_line":"            # 2) objects for which the related objects are not loaded - In this"},{"line_number":1716,"context_line":"            #    case they need to be created because of the foreign key"},{"line_number":1717,"context_line":"            #    relationships. But we still need to check whether the"},{"line_number":1718,"context_line":"            #    relationships are loaded or not. That is achieved by the"}],"source_content_type":"text/x-python","patch_set":55,"id":"7f287b81_56749699","line":1715,"range":{"start_line":1715,"start_character":17,"end_line":1715,"end_character":72},"updated":"2017-08-22 21:06:48.000000000","message":"this doesn\u0027t sound like a \u0027reason\u0027 but a \u0027noun [with adjectives]\u0027 (see wording in line 1712). please reword so that it\u0027s more clear what you want to say.","commit_id":"02e741c8d350d74a093280ac3180ebb9ce1e15b1"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"c0116741d1317ad145d14a3c428055ea1be7a2b1","unresolved":false,"context_lines":[{"line_number":1712,"context_line":"            # Skipping empty relationships for the following reasons:"},{"line_number":1713,"context_line":"            # 1) db_obj have the related object loaded - In this case we do not"},{"line_number":1714,"context_line":"            #    have to create the related objects and the loop can continue."},{"line_number":1715,"context_line":"            # 2) objects for which the related objects are not loaded - In this"},{"line_number":1716,"context_line":"            #    case they need to be created because of the foreign key"},{"line_number":1717,"context_line":"            #    relationships. But we still need to check whether the"},{"line_number":1718,"context_line":"            #    relationships are loaded or not. That is achieved by the"}],"source_content_type":"text/x-python","patch_set":55,"id":"7f287b81_0f5a53f2","line":1715,"range":{"start_line":1715,"start_character":17,"end_line":1715,"end_character":72},"in_reply_to":"7f287b81_56749699","updated":"2017-08-23 18:32:51.000000000","message":"Done","commit_id":"02e741c8d350d74a093280ac3180ebb9ce1e15b1"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"3dfcae170efa2c457d9149fd421ab7a545a487d2","unresolved":false,"context_lines":[{"line_number":1714,"context_line":"            #    have to create the related objects and the loop can continue."},{"line_number":1715,"context_line":"            # 2) objects for which the related objects are not loaded - In this"},{"line_number":1716,"context_line":"            #    case they need to be created because of the foreign key"},{"line_number":1717,"context_line":"            #    relationships. But we still need to check whether the"},{"line_number":1718,"context_line":"            #    relationships are loaded or not. That is achieved by the"},{"line_number":1719,"context_line":"            #    assertTrue statement after retrieving the dbattr."},{"line_number":1720,"context_line":"            if getattr(obj.db_obj, dbattr, None):"},{"line_number":1721,"context_line":"                continue"},{"line_number":1722,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"7f287b81_d631a6ee","line":1719,"range":{"start_line":1717,"start_character":31,"end_line":1719,"end_character":66},"updated":"2017-08-22 21:06:48.000000000","message":"which part of the code does it refer to?","commit_id":"02e741c8d350d74a093280ac3180ebb9ce1e15b1"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"c0116741d1317ad145d14a3c428055ea1be7a2b1","unresolved":false,"context_lines":[{"line_number":1714,"context_line":"            #    have to create the related objects and the loop can continue."},{"line_number":1715,"context_line":"            # 2) objects for which the related objects are not loaded - In this"},{"line_number":1716,"context_line":"            #    case they need to be created because of the foreign key"},{"line_number":1717,"context_line":"            #    relationships. But we still need to check whether the"},{"line_number":1718,"context_line":"            #    relationships are loaded or not. That is achieved by the"},{"line_number":1719,"context_line":"            #    assertTrue statement after retrieving the dbattr."},{"line_number":1720,"context_line":"            if getattr(obj.db_obj, dbattr, None):"},{"line_number":1721,"context_line":"                continue"},{"line_number":1722,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"7f287b81_4fddfb12","line":1719,"range":{"start_line":1717,"start_character":31,"end_line":1719,"end_character":66},"in_reply_to":"7f287b81_d631a6ee","updated":"2017-08-23 18:32:51.000000000","message":"I think it is referring to https://github.com/openstack/neutron/blob/master/neutron/tests/unit/objects/test_base.py#L1740","commit_id":"02e741c8d350d74a093280ac3180ebb9ce1e15b1"}],"neutron/tests/unit/objects/test_network.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"25d668a72db1eece234dbb749034180eef417ef2","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        super(NetworkDhcpAgentBindingDbObjectTestCase, self).setUp()"},{"line_number":36,"context_line":"        for db_objs, obj_fields, objs in zip(self.db_objs,"},{"line_number":37,"context_line":"                                            self.obj_fields, self.objs):"},{"line_number":38,"context_line":"            self._create_test_network()"},{"line_number":39,"context_line":"            db_objs[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":40,"context_line":"            obj_fields[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":41,"context_line":"            objs[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a95cdbc_8523a6a6","line":38,"range":{"start_line":38,"start_character":12,"end_line":38,"end_character":39},"updated":"2016-10-06 20:08:37.000000000","message":"do you need to create a network for every iteration?","commit_id":"f1926e0ca93081774ca052fb04949feeeab34bcc"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"92de9f43e659dc98a5832b28c2631432144d93f4","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        super(NetworkDhcpAgentBindingDbObjectTestCase, self).setUp()"},{"line_number":36,"context_line":"        for db_objs, obj_fields, objs in zip(self.db_objs,"},{"line_number":37,"context_line":"                                            self.obj_fields, self.objs):"},{"line_number":38,"context_line":"            self._create_test_network()"},{"line_number":39,"context_line":"            db_objs[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":40,"context_line":"            obj_fields[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":41,"context_line":"            objs[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a95cdbc_4a3ed8da","line":38,"range":{"start_line":38,"start_character":12,"end_line":38,"end_character":39},"in_reply_to":"1a95cdbc_8523a6a6","updated":"2016-10-07 21:35:35.000000000","message":"Done","commit_id":"f1926e0ca93081774ca052fb04949feeeab34bcc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"25d668a72db1eece234dbb749034180eef417ef2","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            db_objs[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":40,"context_line":"            obj_fields[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":41,"context_line":"            objs[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":42,"context_line":"            self._create_test_agent()"},{"line_number":43,"context_line":"            db_objs[\u0027dhcp_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":44,"context_line":"            obj_fields[\u0027dhcp_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":45,"context_line":"            objs[\u0027dhcp_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a95cdbc_c5392ed9","line":42,"range":{"start_line":42,"start_character":12,"end_line":42,"end_character":36},"updated":"2016-10-06 20:08:37.000000000","message":"do you need to create an agent for every iteration?","commit_id":"f1926e0ca93081774ca052fb04949feeeab34bcc"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"92de9f43e659dc98a5832b28c2631432144d93f4","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            db_objs[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":40,"context_line":"            obj_fields[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":41,"context_line":"            objs[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":42,"context_line":"            self._create_test_agent()"},{"line_number":43,"context_line":"            db_objs[\u0027dhcp_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":44,"context_line":"            obj_fields[\u0027dhcp_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":45,"context_line":"            objs[\u0027dhcp_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a95cdbc_ea196489","line":42,"range":{"start_line":42,"start_character":12,"end_line":42,"end_character":36},"in_reply_to":"1a95cdbc_c5392ed9","updated":"2016-10-07 21:35:35.000000000","message":"I need one of the two in the loop(for the uniqueness) as both are primary keys.","commit_id":"f1926e0ca93081774ca052fb04949feeeab34bcc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"d6fc8c5305b9a1d5fb1fc22818c464fe0fc5e7ae","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    _test_class \u003d network.NetworkDhcpAgentBinding"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class NetworkDhcpAgentBindingDbObjectTestCase(obj_test_base."},{"line_number":29,"context_line":"                                              BaseDbObjectTestCase,"},{"line_number":30,"context_line":"                                              testlib_api.SqlTestCase):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    _test_class \u003d network.NetworkDhcpAgentBinding"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_d4960d3d","line":29,"range":{"start_line":28,"start_character":46,"end_line":29,"end_character":66},"updated":"2016-12-05 22:02:11.000000000","message":"if this doesn\u0027t fit on this line you can start it in the next one and it\u0027ll be a valid format","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"657d60c72a30a18a15d9503daf1078537fb9023f","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    _test_class \u003d network.NetworkDhcpAgentBinding"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class NetworkDhcpAgentBindingDbObjectTestCase(obj_test_base."},{"line_number":29,"context_line":"                                              BaseDbObjectTestCase,"},{"line_number":30,"context_line":"                                              testlib_api.SqlTestCase):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    _test_class \u003d network.NetworkDhcpAgentBinding"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_f7db9d1f","line":29,"range":{"start_line":28,"start_character":46,"end_line":29,"end_character":66},"in_reply_to":"3a71b18c_d4960d3d","updated":"2016-12-07 22:31:01.000000000","message":"Done","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"63068adb29b111d4b35d483b01e55a3507d99bba","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def setUp(self):"},{"line_number":35,"context_line":"        super(NetworkDhcpAgentBindingDbObjectTestCase, self).setUp()"},{"line_number":36,"context_line":"        self._create_test_network()"},{"line_number":37,"context_line":"        for db_objs, obj_fields, objs in zip(self.db_objs,"},{"line_number":38,"context_line":"                                            self.obj_fields, self.objs):"},{"line_number":39,"context_line":"            db_objs[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":40,"context_line":"            obj_fields[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_44186cd3","line":37,"updated":"2016-12-06 14:50:36.000000000","message":"Maybe you can use update_obj_fields here?","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"d6fc8c5305b9a1d5fb1fc22818c464fe0fc5e7ae","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            db_objs[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":40,"context_line":"            obj_fields[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":41,"context_line":"            objs[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":42,"context_line":"            self._create_test_agent()"},{"line_number":43,"context_line":"            db_objs[\u0027dhcp_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":44,"context_line":"            obj_fields[\u0027dhcp_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":45,"context_line":"            objs[\u0027dhcp_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_3494a141","line":42,"updated":"2016-12-05 22:02:11.000000000","message":"nit: can you add a break line here to make it easier to read.","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"657d60c72a30a18a15d9503daf1078537fb9023f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            db_objs[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":40,"context_line":"            obj_fields[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":41,"context_line":"            objs[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":42,"context_line":"            self._create_test_agent()"},{"line_number":43,"context_line":"            db_objs[\u0027dhcp_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":44,"context_line":"            obj_fields[\u0027dhcp_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"},{"line_number":45,"context_line":"            objs[\u0027dhcp_agent_id\u0027] \u003d self._agent[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_d71ce1c3","line":42,"in_reply_to":"3a71b18c_3494a141","updated":"2016-12-07 22:31:01.000000000","message":"Done","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"a476d2877926e39d380f95edcacbba2ae575374d","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # TODO(ndahiwade): NetworkDhcpAgentBinding is using Agent"},{"line_number":48,"context_line":"        # object as a synthetic field, which costs extra SQL query each time"},{"line_number":49,"context_line":"        # dhcp_agent field is loaded as part of get_object(s)."},{"line_number":50,"context_line":"        # NetworkDhcpAgentBinding has defined relationship for"},{"line_number":51,"context_line":"        # Agent, so it should be possible to reuse side loaded"},{"line_number":52,"context_line":"        # values for this. To be reworked in follow-up patch."},{"line_number":53,"context_line":"        pass"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"3a71b18c_30ad0a32","line":52,"range":{"start_line":50,"start_character":10,"end_line":52,"end_character":61},"updated":"2016-12-08 10:13:25.000000000","message":"It is not true.\nThis should state that Agent relationship is not lazy loaded, so the relationship needs to be reworked to include lazy loading.","commit_id":"9a9bb27c9f231f98a2f43693a0cd8376f1b805f9"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"5725fcd24510af8294a5b65ba659077bc1cbfc49","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # TODO(ndahiwade): NetworkDhcpAgentBinding is using Agent"},{"line_number":48,"context_line":"        # object as a synthetic field, which costs extra SQL query each time"},{"line_number":49,"context_line":"        # dhcp_agent field is loaded as part of get_object(s)."},{"line_number":50,"context_line":"        # NetworkDhcpAgentBinding has defined relationship for"},{"line_number":51,"context_line":"        # Agent, so it should be possible to reuse side loaded"},{"line_number":52,"context_line":"        # values for this. To be reworked in follow-up patch."},{"line_number":53,"context_line":"        pass"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"3a71b18c_56cd0cb6","line":52,"range":{"start_line":50,"start_character":10,"end_line":52,"end_character":61},"in_reply_to":"3a71b18c_30ad0a32","updated":"2016-12-08 16:50:33.000000000","message":"Done","commit_id":"9a9bb27c9f231f98a2f43693a0cd8376f1b805f9"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"95b07ac5b54b3513fe4e813edd4e5e36166010b3","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            {\u0027network_id\u0027: self._network.id,"},{"line_number":41,"context_line":"             \u0027dhcp_agent_id\u0027: getter})"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_objects_queries_constant(self):"},{"line_number":44,"context_line":"        # TODO(ndahiwade): There is no lazy loading for Agent Relationship"},{"line_number":45,"context_line":"        # in the NetworkDhcpAgentBinding hence disabling this UT to avoid"},{"line_number":46,"context_line":"        # failing. The relationship needs to be reworked to include lazy"},{"line_number":47,"context_line":"        # loading."},{"line_number":48,"context_line":"        pass"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class NetworkPortSecurityIfaceObjTestCase("}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_a2bb82c3","line":48,"range":{"start_line":43,"start_character":0,"end_line":48,"end_character":12},"updated":"2017-03-17 20:16:45.000000000","message":"You can try to use skipTest, which will give explicit information, why this one is skipped, not just write pass and ignore function.\n\n self.skipTest(\u0027Reason\u0027)","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"a5f9ec32ccc57fc8eb339f466b0b04c213a5ed7a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            {\u0027network_id\u0027: self._network.id,"},{"line_number":41,"context_line":"             \u0027dhcp_agent_id\u0027: getter})"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_objects_queries_constant(self):"},{"line_number":44,"context_line":"        # TODO(ndahiwade): There is no lazy loading for Agent Relationship"},{"line_number":45,"context_line":"        # in the NetworkDhcpAgentBinding hence disabling this UT to avoid"},{"line_number":46,"context_line":"        # failing. The relationship needs to be reworked to include lazy"},{"line_number":47,"context_line":"        # loading."},{"line_number":48,"context_line":"        pass"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class NetworkPortSecurityIfaceObjTestCase("}],"source_content_type":"text/x-python","patch_set":39,"id":"1a1ced50_43c0e27b","line":48,"range":{"start_line":43,"start_character":0,"end_line":48,"end_character":12},"in_reply_to":"1a1ced50_a2bb82c3","updated":"2017-03-20 15:51:12.000000000","message":"Done","commit_id":"543946d3ffc680522130230dceeea7c8d7f204d9"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"ef094071a92cc649e2cc8b737cd88afcf7593565","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        # TODO(ndahiwade): There is no lazy loading for Agent Relationship"},{"line_number":45,"context_line":"        # in the NetworkDhcpAgentBinding hence disabling this UT to avoid"},{"line_number":46,"context_line":"        # failing. The relationship needs to be reworked to include lazy"},{"line_number":47,"context_line":"        # loading."},{"line_number":48,"context_line":"        self.skipTest(\u0027Missing lazy loading for Agent Realtionship\u0027)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7ffa3b31_712e5ea6","line":47,"updated":"2017-04-16 09:36:12.000000000","message":"please file a bug for that and put the bug number in the skipTest so we can follow-up","commit_id":"b59dcb5b7f6ea819cc41051efcf4857033a0f720"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"9c70a576e900f4e63862604042bcd583bc3131d5","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def setUp(self):"},{"line_number":34,"context_line":"        super(NetworkDhcpAgentBindingDbObjectTestCase, self).setUp()"},{"line_number":35,"context_line":"        self._network \u003d self._create_test_network()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        def getter():"},{"line_number":38,"context_line":"            return self._create_test_agent_id()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self.update_obj_fields("},{"line_number":41,"context_line":"            {\u0027network_id\u0027: self._network.id,"},{"line_number":42,"context_line":"             \u0027dhcp_agent_id\u0027: getter})"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_get_objects_queries_constant(self):"},{"line_number":45,"context_line":"        # TODO(ndahiwade): There is no lazy loading for Agent Relationship"}],"source_content_type":"text/x-python","patch_set":47,"id":"df140735_1dcb0ea5","line":42,"range":{"start_line":35,"start_character":0,"end_line":42,"end_character":38},"updated":"2017-06-05 07:27:49.000000000","message":"Since [1] has been merged, I guess we can get rid of getter() here and only leave update_obj_fields().\n\n[1] https://review.openstack.org/#/c/425800/","commit_id":"35993417205daf07e694d9c8fd65a1d0f28f7a6d"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"6741b4ddf59e7204928bcea70fe043f12f25055e","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def setUp(self):"},{"line_number":34,"context_line":"        super(NetworkDhcpAgentBindingDbObjectTestCase, self).setUp()"},{"line_number":35,"context_line":"        self._network \u003d self._create_test_network()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        def getter():"},{"line_number":38,"context_line":"            return self._create_test_agent_id()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self.update_obj_fields("},{"line_number":41,"context_line":"            {\u0027network_id\u0027: self._network.id,"},{"line_number":42,"context_line":"             \u0027dhcp_agent_id\u0027: getter})"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_get_objects_queries_constant(self):"},{"line_number":45,"context_line":"        # TODO(ndahiwade): There is no lazy loading for Agent Relationship"}],"source_content_type":"text/x-python","patch_set":47,"id":"7f231b9d_e1a718a7","line":42,"range":{"start_line":35,"start_character":0,"end_line":42,"end_character":38},"in_reply_to":"df140735_1dcb0ea5","updated":"2017-06-12 22:36:31.000000000","message":"https://review.openstack.org/#/c/425800/6/neutron/tests/unit/objects/test_auto_allocate.py, it can\u0027t be update_obj_fields(), it need at least one argument values dict. I see lambda is being used https://review.openstack.org/#/c/425800/6/neutron/tests/unit/objects/test_auto_allocate.py","commit_id":"35993417205daf07e694d9c8fd65a1d0f28f7a6d"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"719684104f1545968b63db50bc39ad2b9be6feaa","unresolved":false,"context_lines":[{"line_number":39,"context_line":"             \u0027dhcp_agent_id\u0027: lambda: self._create_test_agent_id()})"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def test_get_objects_queries_constant(self):"},{"line_number":42,"context_line":"        # TODO(ndahiwade): There is no lazy loading for Agent Relationship"},{"line_number":43,"context_line":"        # in the NetworkDhcpAgentBinding hence disabling this UT to avoid"},{"line_number":44,"context_line":"        # failing. The relationship needs to be reworked to include lazy"},{"line_number":45,"context_line":"        # loading."}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_82286634","line":42,"updated":"2017-06-30 19:57:28.000000000","message":"we should probably add lazy loading then if every get_objects call is going to result in linear queries","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d1610d07f32a808fd37c445eec159a20bb617773","unresolved":false,"context_lines":[{"line_number":39,"context_line":"             \u0027dhcp_agent_id\u0027: lambda: self._create_test_agent_id()})"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def test_get_objects_queries_constant(self):"},{"line_number":42,"context_line":"        # TODO(ndahiwade): There is no lazy loading for Agent Relationship"},{"line_number":43,"context_line":"        # in the NetworkDhcpAgentBinding hence disabling this UT to avoid"},{"line_number":44,"context_line":"        # failing. The relationship needs to be reworked to include lazy"},{"line_number":45,"context_line":"        # loading."}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_fdb1d4e2","line":42,"in_reply_to":"3f1d235d_82286634","updated":"2017-07-11 21:01:00.000000000","message":"Yep+.","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"459d3a73564e9bebddd6d909dc79cfdf23daf3df","unresolved":false,"context_lines":[{"line_number":39,"context_line":"             \u0027dhcp_agent_id\u0027: lambda: self._create_test_agent_id()})"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def test_get_objects_queries_constant(self):"},{"line_number":42,"context_line":"        # TODO(ndahiwade): There is no lazy loading for Agent Relationship"},{"line_number":43,"context_line":"        # in the NetworkDhcpAgentBinding hence disabling this UT to avoid"},{"line_number":44,"context_line":"        # failing. The relationship needs to be reworked to include lazy"},{"line_number":45,"context_line":"        # loading."}],"source_content_type":"text/x-python","patch_set":49,"id":"1f1a1f67_448497b1","line":42,"in_reply_to":"3f1d235d_fdb1d4e2","updated":"2017-07-13 22:55:37.000000000","message":"Done","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"}],"neutron/tests/unit/objects/test_network_dhcp_agent_binding.py":[{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"658c08f4c0999dffa10ab2a69231b2bcfad5691f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def setUp(self):"},{"line_number":35,"context_line":"        super(NetworkDhcpAgentBindingDbObjectTestCase, self).setUp()"},{"line_number":36,"context_line":"        for db_objs, obj_fields, objs in zip(self.db_objs, self.obj_fields,"},{"line_number":37,"context_line":"                                           self.objs):"},{"line_number":38,"context_line":"            self._create_test_network()"},{"line_number":39,"context_line":"            db_objs[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"},{"line_number":40,"context_line":"            obj_fields[\u0027network_id\u0027] \u003d self._network[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_6e3914f2","line":37,"updated":"2016-09-15 19:35:58.000000000","message":"indentation","commit_id":"418692d3299af21f1edd6414f37fea6d7333c477"}],"neutron/tests/unit/objects/test_objects.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"d6fc8c5305b9a1d5fb1fc22818c464fe0fc5e7ae","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    \u0027IPAllocationPool\u0027: \u00271.0-371016a6480ed0b4299319cb46d9215d\u0027,"},{"line_number":40,"context_line":"    \u0027Network\u0027: \u00271.0-f2f6308f79731a767b92b26b0f4f3849\u0027,"},{"line_number":41,"context_line":"    \u0027NetworkDNSDomain\u0027: \u00271.0-420db7910294608534c1e2e30d6d8319\u0027,"},{"line_number":42,"context_line":"    \u0027NetworkDhcpAgentBinding\u0027: \u00271.0-51d87e5a7021ed71be30a2c4e5334506\u0027,"},{"line_number":43,"context_line":"    \u0027NetworkPortSecurity\u0027: \u00271.0-b30802391a87945ee9c07582b4ff95e3\u0027,"},{"line_number":44,"context_line":"    \u0027NetworkSegment\u0027: \u00271.0-40707ef6bd9a0bf095038158d995cc7d\u0027,"},{"line_number":45,"context_line":"    \u0027Port\u0027: \u00271.0-638f6b09a3809ebd8b2b46293f56871b\u0027,"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_d4ad2d85","line":42,"range":{"start_line":42,"start_character":5,"end_line":42,"end_character":28},"updated":"2016-12-05 22:02:11.000000000","message":"This should be before NetworkDNSDomain","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"657d60c72a30a18a15d9503daf1078537fb9023f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    \u0027IPAllocationPool\u0027: \u00271.0-371016a6480ed0b4299319cb46d9215d\u0027,"},{"line_number":40,"context_line":"    \u0027Network\u0027: \u00271.0-f2f6308f79731a767b92b26b0f4f3849\u0027,"},{"line_number":41,"context_line":"    \u0027NetworkDNSDomain\u0027: \u00271.0-420db7910294608534c1e2e30d6d8319\u0027,"},{"line_number":42,"context_line":"    \u0027NetworkDhcpAgentBinding\u0027: \u00271.0-51d87e5a7021ed71be30a2c4e5334506\u0027,"},{"line_number":43,"context_line":"    \u0027NetworkPortSecurity\u0027: \u00271.0-b30802391a87945ee9c07582b4ff95e3\u0027,"},{"line_number":44,"context_line":"    \u0027NetworkSegment\u0027: \u00271.0-40707ef6bd9a0bf095038158d995cc7d\u0027,"},{"line_number":45,"context_line":"    \u0027Port\u0027: \u00271.0-638f6b09a3809ebd8b2b46293f56871b\u0027,"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_177d79e7","line":42,"range":{"start_line":42,"start_character":5,"end_line":42,"end_character":28},"in_reply_to":"3a71b18c_d4ad2d85","updated":"2016-12-07 22:31:01.000000000","message":"Done","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"}],"neutron/tests/unit/scheduler/test_dhcp_agent_scheduler.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"d6fc8c5305b9a1d5fb1fc22818c464fe0fc5e7ae","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        self._test_reschedule_vs_network_on_dead_agent(False)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def _get_agent_binding_from_db(self, agent):"},{"line_number":138,"context_line":"        query_obj \u003d network_obj.NetworkDhcpAgentBinding.get_objects("},{"line_number":139,"context_line":"            self.ctx, dhcp_agent_id\u003dagent[0].id)"},{"line_number":140,"context_line":"        return query_obj"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_b40a7188","line":138,"range":{"start_line":138,"start_character":8,"end_line":138,"end_character":17},"updated":"2016-12-05 22:02:11.000000000","message":"It looks like you don\u0027t have to create a reference for this.","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"657d60c72a30a18a15d9503daf1078537fb9023f","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        self._test_reschedule_vs_network_on_dead_agent(False)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def _get_agent_binding_from_db(self, agent):"},{"line_number":138,"context_line":"        query_obj \u003d network_obj.NetworkDhcpAgentBinding.get_objects("},{"line_number":139,"context_line":"            self.ctx, dhcp_agent_id\u003dagent[0].id)"},{"line_number":140,"context_line":"        return query_obj"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_5787f1d6","line":138,"range":{"start_line":138,"start_character":8,"end_line":138,"end_character":17},"in_reply_to":"3a71b18c_b40a7188","updated":"2016-12-07 22:31:01.000000000","message":"Done","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"d6fc8c5305b9a1d5fb1fc22818c464fe0fc5e7ae","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        observed_ret_value \u003d scheduler.auto_schedule_networks("},{"line_number":290,"context_line":"            plugin, self.ctx, host)"},{"line_number":291,"context_line":"        self.assertEqual(expected_result, observed_ret_value)"},{"line_number":292,"context_line":"        hosted_agents_obj \u003d network_obj.NetworkDhcpAgentBinding.get_objects("},{"line_number":293,"context_line":"            self.ctx)"},{"line_number":294,"context_line":"        self.assertEqual(expected_hosted_agents, len(hosted_agents_obj))"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_54f03d91","line":292,"range":{"start_line":292,"start_character":64,"end_line":292,"end_character":75},"updated":"2016-12-05 22:02:11.000000000","message":"Can you use the count method here?","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"657d60c72a30a18a15d9503daf1078537fb9023f","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        observed_ret_value \u003d scheduler.auto_schedule_networks("},{"line_number":290,"context_line":"            plugin, self.ctx, host)"},{"line_number":291,"context_line":"        self.assertEqual(expected_result, observed_ret_value)"},{"line_number":292,"context_line":"        hosted_agents_obj \u003d network_obj.NetworkDhcpAgentBinding.get_objects("},{"line_number":293,"context_line":"            self.ctx)"},{"line_number":294,"context_line":"        self.assertEqual(expected_hosted_agents, len(hosted_agents_obj))"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"3a71b18c_776ced36","line":292,"range":{"start_line":292,"start_character":64,"end_line":292,"end_character":75},"in_reply_to":"3a71b18c_54f03d91","updated":"2016-12-07 22:31:01.000000000","message":"Done","commit_id":"c0d9b994619c4fd92862d936a21fdbdba70022c0"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"7e9ed710a0de2ebb89bcb688cf6717a16662ea57","unresolved":false,"context_lines":[{"line_number":406,"context_line":"                           sched_db.DhcpAgentSchedulerDbMixin,"},{"line_number":407,"context_line":"                           common_db_mixin.CommonDbMixin):"},{"line_number":408,"context_line":"    def test_reschedule_network_from_down_agent(self):"},{"line_number":409,"context_line":"        _uuid \u003d uuidutils.generate_uuid()"},{"line_number":410,"context_line":"        agents \u003d self._create_and_set_agents_down([\u0027host-a\u0027, \u0027host-b\u0027], 1)"},{"line_number":411,"context_line":"        self._test_schedule_bind_network([agents[0]], self.network_id)"},{"line_number":412,"context_line":"        self._save_networks([_uuid])"}],"source_content_type":"text/x-python","patch_set":40,"id":"ffe62b97_e0972c90","line":409,"range":{"start_line":409,"start_character":7,"end_line":409,"end_character":13},"updated":"2017-03-24 19:53:40.000000000","message":"Can we just name this as net_id or something similar for this and all the test cases below?","commit_id":"e017ec3478a50b878f50a8e6176a9a72540398fd"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"e51f6c19677c155fb6c91404cd27a3b360f638de","unresolved":false,"context_lines":[{"line_number":406,"context_line":"                           sched_db.DhcpAgentSchedulerDbMixin,"},{"line_number":407,"context_line":"                           common_db_mixin.CommonDbMixin):"},{"line_number":408,"context_line":"    def test_reschedule_network_from_down_agent(self):"},{"line_number":409,"context_line":"        _uuid \u003d uuidutils.generate_uuid()"},{"line_number":410,"context_line":"        agents \u003d self._create_and_set_agents_down([\u0027host-a\u0027, \u0027host-b\u0027], 1)"},{"line_number":411,"context_line":"        self._test_schedule_bind_network([agents[0]], self.network_id)"},{"line_number":412,"context_line":"        self._save_networks([_uuid])"}],"source_content_type":"text/x-python","patch_set":40,"id":"ffe62b97_bf054913","line":409,"range":{"start_line":409,"start_character":7,"end_line":409,"end_character":13},"in_reply_to":"ffe62b97_e0972c90","updated":"2017-03-28 17:12:56.000000000","message":"Done","commit_id":"e017ec3478a50b878f50a8e6176a9a72540398fd"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d1610d07f32a808fd37c445eec159a20bb617773","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    def _test_schedule_bind_network(self, agents, network_id):"},{"line_number":75,"context_line":"        scheduler \u003d dhcp_agent_scheduler.ChanceScheduler()"},{"line_number":76,"context_line":"        scheduler.resource_filter.bind(self.ctx, agents, network_id)"},{"line_number":77,"context_line":"        results_obj \u003d network_obj.NetworkDhcpAgentBinding.get_objects("},{"line_number":78,"context_line":"            self.ctx, network_id\u003dnetwork_id)"},{"line_number":79,"context_line":"        self.assertEqual(len(agents), len(results_obj))"},{"line_number":80,"context_line":"        for result in results_obj:"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_1de010cc","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":19},"updated":"2017-07-11 21:01:00.000000000","message":"results_obj is a \u0027object that contains results\u0027, not a \u0027list of objects each corresponding to a result\u0027. Please rename into \u0027result_objs\u0027 or even better, \u0027binding_objs\u0027","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"459d3a73564e9bebddd6d909dc79cfdf23daf3df","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    def _test_schedule_bind_network(self, agents, network_id):"},{"line_number":75,"context_line":"        scheduler \u003d dhcp_agent_scheduler.ChanceScheduler()"},{"line_number":76,"context_line":"        scheduler.resource_filter.bind(self.ctx, agents, network_id)"},{"line_number":77,"context_line":"        results_obj \u003d network_obj.NetworkDhcpAgentBinding.get_objects("},{"line_number":78,"context_line":"            self.ctx, network_id\u003dnetwork_id)"},{"line_number":79,"context_line":"        self.assertEqual(len(agents), len(results_obj))"},{"line_number":80,"context_line":"        for result in results_obj:"}],"source_content_type":"text/x-python","patch_set":49,"id":"1f1a1f67_048e9fcf","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":19},"in_reply_to":"3f1d235d_1de010cc","updated":"2017-07-13 22:55:37.000000000","message":"Done","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d1610d07f32a808fd37c445eec159a20bb617773","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    def test_network_not_rescheduled_when_db_returns_all_hosts(self):"},{"line_number":136,"context_line":"        self._test_reschedule_vs_network_on_dead_agent(False)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def _get_agent_binding_from_db(self, agent):"},{"line_number":139,"context_line":"        return network_obj.NetworkDhcpAgentBinding.get_objects("},{"line_number":140,"context_line":"            self.ctx, dhcp_agent_id\u003dagent[0].id)"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_5dd568e4","line":138,"range":{"start_line":138,"start_character":27,"end_line":138,"end_character":36},"updated":"2017-07-11 21:01:00.000000000","message":"(No action required) this \u0027from_db\u0027 part may not exactly reflect what we do here (objects can in theory be not backed by database).","commit_id":"64d18971e19c66df851cebdeb4a8eb39af49cbae"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"236bbb38267da7af96ffd3815cf9a089f33b2b13","unresolved":false,"context_lines":[{"line_number":495,"context_line":"                                   heartbeat_timestamp\u003dtimestamp,"},{"line_number":496,"context_line":"                                   configurations\u003d{},"},{"line_number":497,"context_line":"                                   load\u003d0)"},{"line_number":498,"context_line":"        dhcp_agent_2.create()"},{"line_number":499,"context_line":"        return [dhcp_agent_1.id, dhcp_agent_2.id]"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    def test_filter_bindings(self):"}],"source_content_type":"text/x-python","patch_set":53,"id":"df3967d1_c9543924","line":498,"range":{"start_line":498,"start_character":8,"end_line":498,"end_character":29},"updated":"2017-08-01 05:02:30.000000000","message":"Do we miss \n        dhcp_agent_1.create()\nhere?\n\nI tried to add dhcp_agent_1.create() and change the hosts for each of the agents to \"fake_host_1\" and \"fake_host_2\" respectively (otherwise we will violate composite unique key constraint between agent_type and host). Then this UT is no longer failing.","commit_id":"db58d534718f9824d2d3edf1c9597768c4a3eeb8"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"eab0210b5155755efcc16ca55c125bccc7179526","unresolved":false,"context_lines":[{"line_number":495,"context_line":"                                   heartbeat_timestamp\u003dtimestamp,"},{"line_number":496,"context_line":"                                   configurations\u003d{},"},{"line_number":497,"context_line":"                                   load\u003d0)"},{"line_number":498,"context_line":"        dhcp_agent_2.create()"},{"line_number":499,"context_line":"        return [dhcp_agent_1.id, dhcp_agent_2.id]"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    def test_filter_bindings(self):"}],"source_content_type":"text/x-python","patch_set":53,"id":"df3967d1_31eafa74","line":498,"range":{"start_line":498,"start_character":8,"end_line":498,"end_character":29},"in_reply_to":"df3967d1_c9543924","updated":"2017-08-01 17:04:26.000000000","message":"oh yea I had it locally may be i used some vim shortcut mistakenly and removed it.","commit_id":"db58d534718f9824d2d3edf1c9597768c4a3eeb8"}]}
