)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"882d1b953f4c7edd93808ba4e18c8158810e45c7","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Implements: blueprint vif-details"},{"line_number":31,"context_line":"Related-Bug: 1112912"},{"line_number":32,"context_line":"Change-Id: I34be746fcfa73c70f72b4f9add8eff3ac88c723f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAUX%2F%2B8k4%3D","line":32,"updated":"2014-02-18 02:37:44.000000000","message":"Does this need a \"DocImpact\" flag since we\u0027re changing the port binding API extension?","commit_id":"f3c4346be2792868133e41fd3a425681657c2e24"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"37759e3c70999fafaa8e78347e4732492a32126d","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Implements: blueprint vif-details"},{"line_number":31,"context_line":"Related-Bug: 1112912"},{"line_number":32,"context_line":"Change-Id: I34be746fcfa73c70f72b4f9add8eff3ac88c723f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAUX%2F%2B1BY%3D","line":32,"in_reply_to":"AAAAUX%2F%2B8k4%3D","updated":"2014-02-18 18:57:23.000000000","message":"Done","commit_id":"f3c4346be2792868133e41fd3a425681657c2e24"}],"neutron/db/migration/alembic_migrations/versions/50d5ba354c23_ml2_binding_vif_details.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"a2212ffec8a6d2732bd4f66b119eb09424912c1d","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# revision identifiers, used by Alembic."},{"line_number":27,"context_line":"revision \u003d \u002750d5ba354c23\u0027"},{"line_number":28,"context_line":"down_revision \u003d \u00274ca36cfc898c\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# Change to [\u0027*\u0027] if this migration applies to all plugins"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F%2Blg%3D","line":28,"updated":"2014-02-23 05:52:27.000000000","message":"down revision was changed","commit_id":"e28618053b08f95b82fc18210a55a80e6d1ae6ee"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"52f88ba7bb1b87822cba14438101caf2abcf5af8","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# revision identifiers, used by Alembic."},{"line_number":27,"context_line":"revision \u003d \u002750d5ba354c23\u0027"},{"line_number":28,"context_line":"down_revision \u003d \u00274ca36cfc898c\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# Change to [\u0027*\u0027] if this migration applies to all plugins"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F8MY%3D","line":28,"in_reply_to":"AAAAU3%2F%2F%2Blg%3D","updated":"2014-02-24 03:53:57.000000000","message":"Done","commit_id":"e28618053b08f95b82fc18210a55a80e6d1ae6ee"}],"neutron/plugins/ml2/driver_context.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3eacf2735f197c4eef37ba111ee68700958ef39f","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        # TODO(rkukura) Verify binding allowed, segment in network"},{"line_number":109,"context_line":"        self._binding.segment \u003d segment_id"},{"line_number":110,"context_line":"        self._binding.vif_type \u003d vif_type"},{"line_number":111,"context_line":"        self._binding.vif_details \u003d jsonutils.dumps(vif_details)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FX6Q%3D","line":111,"updated":"2014-02-13 16:40:26.000000000","message":"Just a question: why do we need to store vif_details in JSON format in PortContext?","commit_id":"f6fe67e13ee397ab5efaf8cd22ac8e739bf3ec93"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"ea3cd2e1c10b6cd68fb934d50d2f59199a48ec76","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        # TODO(rkukura) Verify binding allowed, segment in network"},{"line_number":109,"context_line":"        self._binding.segment \u003d segment_id"},{"line_number":110,"context_line":"        self._binding.vif_type \u003d vif_type"},{"line_number":111,"context_line":"        self._binding.vif_details \u003d jsonutils.dumps(vif_details)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FWYs%3D","line":111,"in_reply_to":"AAAAUX%2F%2FX6Q%3D","updated":"2014-02-14 04:16:27.000000000","message":"Using JSON format allows whatever key/value pairs various mechanism drivers need to include in binding:vif_details to be stored in a single column in the plugin\u0027s binding table. This is similar to how the configurations attribute in the agents extension is handled.","commit_id":"f6fe67e13ee397ab5efaf8cd22ac8e739bf3ec93"}],"neutron/plugins/ml2/drivers/mech_agent.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"222875778ce72726ec959d0742740f0a01ce4b15","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        LOG.debug(_(\"Attempting to bind port %(port)s on \""},{"line_number":59,"context_line":"                    \"network %(network)s\"),"},{"line_number":60,"context_line":"                  {\u0027port\u0027: context.current[\u0027id\u0027],"},{"line_number":61,"context_line":"                   \u0027network\u0027: context.network.current[\u0027id\u0027]})"},{"line_number":62,"context_line":"        for agent in context.host_agents(self.agent_type):"},{"line_number":63,"context_line":"            LOG.debug(_(\"Checking agent: %s\"), agent)"},{"line_number":64,"context_line":"            if agent[\u0027alive\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUX%2F%2FuLs%3D","line":61,"updated":"2014-02-11 08:41:05.000000000","message":"Why no call into MD for additional vif_details in case vif_type is known?","commit_id":"4012c1e10a2f1c7fc2eacd958a21c9c0d148b7bc"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"1d465be2be1c17b173c28969db2eaa6dc08f535e","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        LOG.debug(_(\"Attempting to bind port %(port)s on \""},{"line_number":59,"context_line":"                    \"network %(network)s\"),"},{"line_number":60,"context_line":"                  {\u0027port\u0027: context.current[\u0027id\u0027],"},{"line_number":61,"context_line":"                   \u0027network\u0027: context.network.current[\u0027id\u0027]})"},{"line_number":62,"context_line":"        for agent in context.host_agents(self.agent_type):"},{"line_number":63,"context_line":"            LOG.debug(_(\"Checking agent: %s\"), agent)"},{"line_number":64,"context_line":"            if agent[\u0027alive\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUX%2F%2FmdY%3D","line":61,"in_reply_to":"AAAAUX%2F%2FuLs%3D","updated":"2014-02-12 04:00:52.000000000","message":"Mechanism drivers that inherit this base class have two options for supplying vif_type and vif_details. If both are always fixed values, the driver can pass these values as parameters to __init__() and the base class will take care of calling PortContext.set_binding() with them. But if either or both values depend on other information about the port, network, segment, or agent that might vary, then the driver must pass None for both values to __init__(), and the driver itself is responsible for calling PortContext.set_binding() itself before returning True. This is explained in lines 36-40 above.\n\nI considered instead defining an abstract function that would be called on the derived class by the base class to get the vif_type and vif_details. But this function might then have to repeat much of the logic that was already performed in check_segment_for_agent(). Therefore, it seems simpler and more efficient for check_segment_for_agent() to just call PortContext.set_binding() itself when the vif_type and/or vif_details can vary.","commit_id":"4012c1e10a2f1c7fc2eacd958a21c9c0d148b7bc"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f37a3120a2ba589fe8e395e85cb18995322b57eb","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        :param agent_type: Constant identifying agent type in agents_db"},{"line_number":53,"context_line":"        :param vif_type: Value for binding:vif_type when bound"},{"line_number":54,"context_line":"        :param vif_details: Dictionary with details for VIF driver when bound."},{"line_number":55,"context_line":"        \"\"\""},{"line_number":56,"context_line":"        self.agent_type \u003d agent_type"},{"line_number":57,"context_line":"        self.vif_type \u003d vif_type"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F8fM%3D","line":54,"updated":"2014-02-23 20:04:14.000000000","message":"Do we need to consider a case where vif_type is specified but vif_details is not passed? I am not sure there is such a case. Looking at L.73, it seems that vif_details must be specified if vif_type is passed. It is worth documented in the docstring above.\n\nIf there is no such case, it is better to check both vif_type and vif_detail are set or neither of them are set.","commit_id":"e28618053b08f95b82fc18210a55a80e6d1ae6ee"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"52f88ba7bb1b87822cba14438101caf2abcf5af8","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        :param agent_type: Constant identifying agent type in agents_db"},{"line_number":53,"context_line":"        :param vif_type: Value for binding:vif_type when bound"},{"line_number":54,"context_line":"        :param vif_details: Dictionary with details for VIF driver when bound."},{"line_number":55,"context_line":"        \"\"\""},{"line_number":56,"context_line":"        self.agent_type \u003d agent_type"},{"line_number":57,"context_line":"        self.vif_type \u003d vif_type"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F63E%3D","line":54,"in_reply_to":"AAAAU3%2F%2F8fM%3D","updated":"2014-02-24 03:53:57.000000000","message":"The intent was that vif_details would be provided any time vif_type was provided, but that only vif_type would control the behaviour.\n\nInstead of making the behaviour conditional on whether either or both of these is set, I\u0027m refactoring the code so that this class never calls set_binding(), and introducing a new derived SimpleAgentMechanismDriverBase class that binds by calling set_binding() with static vif_type and vf_details values. I think this will be a lot less confusing and will completely avoid the issue raised.","commit_id":"e28618053b08f95b82fc18210a55a80e6d1ae6ee"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"f4c0c1ca6b45113a00c3775d71950ee129f379b4","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            LOG.debug(_(\"Checking agent: %s\"), agent)"},{"line_number":70,"context_line":"            if agent[\u0027alive\u0027]:"},{"line_number":71,"context_line":"                for segment in context.network.network_segments:"},{"line_number":72,"context_line":"                    if self.check_segment_for_agent(segment, agent):"},{"line_number":73,"context_line":"                        if self.vif_type:"},{"line_number":74,"context_line":"                            context.set_binding(segment[api.ID],"},{"line_number":75,"context_line":"                                                self.vif_type,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F%2BHE%3D","line":72,"updated":"2014-02-23 08:19:05.000000000","message":"Following the comment in lines 39-46, to support the case where Drivers do not pass vif_type and vif_details, check_segment_for_agent() should call PortContext.set_binding(). \nI am not sure, but seems that context should be passed to the check_segment_for_agent.","commit_id":"e28618053b08f95b82fc18210a55a80e6d1ae6ee"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"52f88ba7bb1b87822cba14438101caf2abcf5af8","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            LOG.debug(_(\"Checking agent: %s\"), agent)"},{"line_number":70,"context_line":"            if agent[\u0027alive\u0027]:"},{"line_number":71,"context_line":"                for segment in context.network.network_segments:"},{"line_number":72,"context_line":"                    if self.check_segment_for_agent(segment, agent):"},{"line_number":73,"context_line":"                        if self.vif_type:"},{"line_number":74,"context_line":"                            context.set_binding(segment[api.ID],"},{"line_number":75,"context_line":"                                                self.vif_type,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F8mw%3D","line":72,"in_reply_to":"AAAAU3%2F%2F%2BHE%3D","updated":"2014-02-24 03:53:57.000000000","message":"Good point! The PortContext will be passed to the try_to_bind_segment_for_agent() method added in the refactoring.","commit_id":"e28618053b08f95b82fc18210a55a80e6d1ae6ee"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f37a3120a2ba589fe8e395e85cb18995322b57eb","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            LOG.debug(_(\"Checking agent: %s\"), agent)"},{"line_number":70,"context_line":"            if agent[\u0027alive\u0027]:"},{"line_number":71,"context_line":"                for segment in context.network.network_segments:"},{"line_number":72,"context_line":"                    if self.check_segment_for_agent(segment, agent):"},{"line_number":73,"context_line":"                        if self.vif_type:"},{"line_number":74,"context_line":"                            context.set_binding(segment[api.ID],"},{"line_number":75,"context_line":"                                                self.vif_type,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F8d8%3D","line":72,"in_reply_to":"AAAAU3%2F%2F%2BHE%3D","updated":"2014-02-23 20:04:14.000000000","message":"I think it does not necessarily mean check_segment_for_agent() needs to call set_binding(). However, it looks good to pass context to check_segment_for_agent.","commit_id":"e28618053b08f95b82fc18210a55a80e6d1ae6ee"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f37a3120a2ba589fe8e395e85cb18995322b57eb","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                                                self.vif_type,"},{"line_number":76,"context_line":"                                                self.vif_details)"},{"line_number":77,"context_line":"                        LOG.debug(_(\"Bound using segment: %s\"), segment)"},{"line_number":78,"context_line":"                        return"},{"line_number":79,"context_line":"            else:"},{"line_number":80,"context_line":"                LOG.warning(_(\"Attempting to bind with dead agent: %s\"),"},{"line_number":81,"context_line":"                            agent)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F8fA%3D","line":78,"updated":"2014-02-23 20:04:14.000000000","message":"(not related) it looks unnecessary.","commit_id":"e28618053b08f95b82fc18210a55a80e6d1ae6ee"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2a0e95c90d1835b87cde1ee2672a720cab34cf1b","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                                                self.vif_type,"},{"line_number":76,"context_line":"                                                self.vif_details)"},{"line_number":77,"context_line":"                        LOG.debug(_(\"Bound using segment: %s\"), segment)"},{"line_number":78,"context_line":"                        return"},{"line_number":79,"context_line":"            else:"},{"line_number":80,"context_line":"                LOG.warning(_(\"Attempting to bind with dead agent: %s\"),"},{"line_number":81,"context_line":"                            agent)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F6fM%3D","line":78,"in_reply_to":"AAAAU3%2F%2F8Lw%3D","updated":"2014-02-24 04:40:38.000000000","message":"Ah, sorry. I missed for-loop.","commit_id":"e28618053b08f95b82fc18210a55a80e6d1ae6ee"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"52f88ba7bb1b87822cba14438101caf2abcf5af8","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                                                self.vif_type,"},{"line_number":76,"context_line":"                                                self.vif_details)"},{"line_number":77,"context_line":"                        LOG.debug(_(\"Bound using segment: %s\"), segment)"},{"line_number":78,"context_line":"                        return"},{"line_number":79,"context_line":"            else:"},{"line_number":80,"context_line":"                LOG.warning(_(\"Attempting to bind with dead agent: %s\"),"},{"line_number":81,"context_line":"                            agent)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F8Lw%3D","line":78,"in_reply_to":"AAAAU3%2F%2F8fA%3D","updated":"2014-02-24 03:53:57.000000000","message":"The return here is needed to break out of the loop over the segments as soon as one segment has been successfully bound.","commit_id":"e28618053b08f95b82fc18210a55a80e6d1ae6ee"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f37a3120a2ba589fe8e395e85cb18995322b57eb","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        If this base class has been initialized with values for"},{"line_number":118,"context_line":"        vif_type and vif_details, those will be used for the"},{"line_number":119,"context_line":"        binding. If not, this function must call context.bind_port()"},{"line_number":120,"context_line":"        itself with appropriate values before returning True."},{"line_number":121,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F8e8%3D","line":119,"updated":"2014-02-23 20:04:14.000000000","message":"context.set_binding()?\n\nIf check_segment_for_agent calls bind_port, the loop happens. bind_port calls check_segment_for_agent.","commit_id":"e28618053b08f95b82fc18210a55a80e6d1ae6ee"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"52f88ba7bb1b87822cba14438101caf2abcf5af8","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        If this base class has been initialized with values for"},{"line_number":118,"context_line":"        vif_type and vif_details, those will be used for the"},{"line_number":119,"context_line":"        binding. If not, this function must call context.bind_port()"},{"line_number":120,"context_line":"        itself with appropriate values before returning True."},{"line_number":121,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F604%3D","line":119,"in_reply_to":"AAAAU3%2F%2F8e8%3D","updated":"2014-02-24 03:53:57.000000000","message":"Yes, I meant context.set_binding(). This is resolved by the refactoring.","commit_id":"e28618053b08f95b82fc18210a55a80e6d1ae6ee"}],"neutron/plugins/ml2/plugin.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3eacf2735f197c4eef37ba111ee68700958ef39f","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        if not binding.vif_details:"},{"line_number":242,"context_line":"            return {}"},{"line_number":243,"context_line":"        try:"},{"line_number":244,"context_line":"            vif_details \u003d jsonutils.loads(binding.vif_details)"},{"line_number":245,"context_line":"        except Exception:"},{"line_number":246,"context_line":"            LOG.warning(_(\"Serialized vif_details DB value \u0027%(value)s\u0027 for \""},{"line_number":247,"context_line":"                          \"port %(port)s is invalid\"),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FYCo%3D","line":244,"updated":"2014-02-13 16:40:26.000000000","message":"We can return the value here.","commit_id":"f6fe67e13ee397ab5efaf8cd22ac8e739bf3ec93"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"ea3cd2e1c10b6cd68fb934d50d2f59199a48ec76","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        if not binding.vif_details:"},{"line_number":242,"context_line":"            return {}"},{"line_number":243,"context_line":"        try:"},{"line_number":244,"context_line":"            vif_details \u003d jsonutils.loads(binding.vif_details)"},{"line_number":245,"context_line":"        except Exception:"},{"line_number":246,"context_line":"            LOG.warning(_(\"Serialized vif_details DB value \u0027%(value)s\u0027 for \""},{"line_number":247,"context_line":"                          \"port %(port)s is invalid\"),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FThk%3D","line":244,"in_reply_to":"AAAAUX%2F%2FYCo%3D","updated":"2014-02-14 04:16:27.000000000","message":"Done","commit_id":"f6fe67e13ee397ab5efaf8cd22ac8e739bf3ec93"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"e918f1ce0869ea848db0dbac6dad0cf220644607","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            try:"},{"line_number":243,"context_line":"                return jsonutils.loads(binding.vif_details)"},{"line_number":244,"context_line":"            except Exception:"},{"line_number":245,"context_line":"                LOG.warning(_(\"Serialized vif_details DB value \u0027%(value)s\u0027 \""},{"line_number":246,"context_line":"                              \"for port %(port)s is invalid\"),"},{"line_number":247,"context_line":"                            {\u0027value\u0027: binding.vif_details,"},{"line_number":248,"context_line":"                             \u0027port\u0027: binding.port_id})"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2BuBA%3D","line":245,"updated":"2014-02-19 15:53:20.000000000","message":"This feels to me like it could be more severe than warning level?","commit_id":"27b85b38b66e546b081651eac6e83b4b4036f5e2"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"dde4a830686f6a0899326dbdd05cb5d0b593756c","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            try:"},{"line_number":243,"context_line":"                return jsonutils.loads(binding.vif_details)"},{"line_number":244,"context_line":"            except Exception:"},{"line_number":245,"context_line":"                LOG.warning(_(\"Serialized vif_details DB value \u0027%(value)s\u0027 \""},{"line_number":246,"context_line":"                              \"for port %(port)s is invalid\"),"},{"line_number":247,"context_line":"                            {\u0027value\u0027: binding.vif_details,"},{"line_number":248,"context_line":"                             \u0027port\u0027: binding.port_id})"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2Bbv4%3D","line":245,"in_reply_to":"AAAAUX%2F%2BuBA%3D","updated":"2014-02-21 06:38:26.000000000","message":"Done","commit_id":"27b85b38b66e546b081651eac6e83b4b4036f5e2"}],"neutron/tests/unit/ml2/_test_mech_agent.py":[{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"703ea987fdd304bdf7ff85e9b17e8bc43281c377","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self._network_context \u003d FakeNetworkContext(segments)"},{"line_number":47,"context_line":"        self._bound_segment_id \u003d None"},{"line_number":48,"context_line":"        self._bound_vif_type \u003d None"},{"line_number":49,"context_line":"        self._bound_vnic_type \u003d portbindings.VNIC_NORMAL"},{"line_number":50,"context_line":"        self._bound_cap_port_filter \u003d None"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2F6o8%3D","side":"PARENT","line":49,"updated":"2014-02-24 04:34:13.000000000","message":"This was not used anywhere.","commit_id":"8dd2070fd0e37cef772e1aeb44cb4ec7ddfb25a0"}]}
