)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ec5fb7ed99a9b8643e6727018df9f053eee0344a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"the message bus."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This currently puts the dict result of a plugin \u0027get\u0027 call but it"},{"line_number":14,"context_line":"will be replaced by oslo versioned objects as payloads when they"},{"line_number":15,"context_line":"ready."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I44b690d188f47cc336df3484e65abbfa81fa1eca"},{"line_number":18,"context_line":"Partially-Implements: blueprint push-notifications"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dada55a8_483aa435","line":15,"range":{"start_line":14,"start_character":60,"end_line":15,"end_character":6},"updated":"2016-07-25 14:13:43.000000000","message":"they are ready","commit_id":"d37944eee4256539febe1c8263426aa8321ca2ee"}],"neutron/api/rpc/agentnotifiers/object_dispatch.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"49c9fbcd0b3753049264af59dc762ac5dcaa6700","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _send_object_change(self, context, object_type, object_id, payload):"},{"line_number":49,"context_line":"        \"\"\"Cast out an object\u0027s state. Empty payload indicates a delete.\"\"\""},{"line_number":50,"context_line":"        topic \u003d topics.get_topic_name(RPC_TOPIC, object_type, \u0027change\u0027)"},{"line_number":51,"context_line":"        cctx \u003d self.client.prepare(topic\u003dtopic, fanout\u003dTrue)"},{"line_number":52,"context_line":"        cctx.cast(context, \u0027object_change\u0027, object_type\u003dobject_type,"},{"line_number":53,"context_line":"                  object_id\u003dobject_id, payload\u003dpayload)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_162acfe7","line":50,"updated":"2016-07-22 14:57:19.000000000","message":"hey, \n\nI think you\u0027re replicating this if I didn\u0027t get it wrong:\n\nhttps://github.com/openstack/neutron/blob/master/neutron/api/rpc/handlers/resources_rpc.py#L170\n\nWhich also handles all the possibilities of agents knowing different versions of objects, and object subset calculation.\n\n\nexample:\n\n   https://github.com/openstack/neutron/blob/master/neutron/services/qos/notification_drivers/message_queue.py\n\n(does push, and also registers as a provider, so agents can also do pull on object_type + ID + version)","commit_id":"e847d28bb88399bf525d433dcfebecd860f87ba0"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ec5fb7ed99a9b8643e6727018df9f053eee0344a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":"RPC_NAMESPACE_OBJECTS \u003d \u0027neutron_objects\u0027"},{"line_number":27,"context_line":"RPC_TOPIC \u003d \u0027neutron-change\u0027"},{"line_number":28,"context_line":"DEFAULT_OBJECTS \u003d (resources.NETWORK, resources.SUBNET, resources.PORT,"},{"line_number":29,"context_line":"                   resources.SECURITY_GROUP, resources.SECURITY_GROUP_RULE,"},{"line_number":30,"context_line":"                   resources.FLOATING_IP, resources.ROUTER)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class ObjectChangeNotifier(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_686de831","line":30,"range":{"start_line":28,"start_character":19,"end_line":30,"end_character":58},"updated":"2016-07-25 14:13:43.000000000","message":"Let\u0027s not expose all of those right now, since most of them are not available as objects right now. Let\u0027s target subnet for now that is close to completion.","commit_id":"d37944eee4256539febe1c8263426aa8321ca2ee"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"07f018cd3417e5349e3f1dec236aec9f413b176a","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _send_object_change(self, context, object_type, object_id, payload):"},{"line_number":48,"context_line":"        \"\"\"Cast out an object\u0027s state. Empty payload indicates a delete.\"\"\""},{"line_number":49,"context_line":"        topic \u003d topics.get_topic_name(RPC_TOPIC, object_type, \u0027change\u0027)"},{"line_number":50,"context_line":"        cctx \u003d self.client.prepare(topic\u003dtopic, fanout\u003dTrue)"},{"line_number":51,"context_line":"        cctx.cast(context, \u0027object_change\u0027, object_type\u003dobject_type,"},{"line_number":52,"context_line":"                  object_id\u003dobject_id, payload\u003dpayload)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_f97c4ced","line":49,"updated":"2016-07-22 15:16:25.000000000","message":"hey, \nI think you\u0027re replicating this if I didn\u0027t get it wrong:\nhttps://github.com/openstack/neutron/blob/master/neutron/api/rpc/handlers/resources_rpc.py#L170\nWhich also handles all the possibilities of agents knowing different versions of objects, and object subset calculation.\n\nexample:\n   https://github.com/openstack/neutron/blob/master/neutron/services/qos/notification_drivers/message_queue.py\n(does push, and also registers as a provider, so agents can also do pull on object_type + ID + version)","commit_id":"d37944eee4256539febe1c8263426aa8321ca2ee"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ec5fb7ed99a9b8643e6727018df9f053eee0344a","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _send_object_change(self, context, object_type, object_id, payload):"},{"line_number":48,"context_line":"        \"\"\"Cast out an object\u0027s state. Empty payload indicates a delete.\"\"\""},{"line_number":49,"context_line":"        topic \u003d topics.get_topic_name(RPC_TOPIC, object_type, \u0027change\u0027)"},{"line_number":50,"context_line":"        cctx \u003d self.client.prepare(topic\u003dtopic, fanout\u003dTrue)"},{"line_number":51,"context_line":"        cctx.cast(context, \u0027object_change\u0027, object_type\u003dobject_type,"},{"line_number":52,"context_line":"                  object_id\u003dobject_id, payload\u003dpayload)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_88e01c98","line":49,"in_reply_to":"dada55a8_f97c4ced","updated":"2016-07-25 14:13:43.000000000","message":"+ I think we will just need to hook this notifier that captures events to redirect payloads into rpc callback push().\n\nOtherwise, it\u0027s not clear what rolling upgrade strategy here is, since we send newer objects to older agents that don\u0027t know how to deserialize them.","commit_id":"d37944eee4256539febe1c8263426aa8321ca2ee"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ec5fb7ed99a9b8643e6727018df9f053eee0344a","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        topic \u003d topics.get_topic_name(RPC_TOPIC, object_type, \u0027change\u0027)"},{"line_number":50,"context_line":"        cctx \u003d self.client.prepare(topic\u003dtopic, fanout\u003dTrue)"},{"line_number":51,"context_line":"        cctx.cast(context, \u0027object_change\u0027, object_type\u003dobject_type,"},{"line_number":52,"context_line":"                  object_id\u003dobject_id, payload\u003dpayload)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _handle_change(self, resource, event, trigger, context, **kwargs):"},{"line_number":55,"context_line":"        id_kwarg \u003d \u0027%s_id\u0027 % resource"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_cd097d2e","line":52,"range":{"start_line":52,"start_character":47,"end_line":52,"end_character":54},"updated":"2016-07-25 14:13:43.000000000","message":"with objects in place of payload, will the data contain versioning and typing metadata? Don\u0027t we need something along https://review.openstack.org/#/c/269056/lines?","commit_id":"d37944eee4256539febe1c8263426aa8321ca2ee"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ec5fb7ed99a9b8643e6727018df9f053eee0344a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                  object_id\u003dobject_id, payload\u003dpayload)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _handle_change(self, resource, event, trigger, context, **kwargs):"},{"line_number":55,"context_line":"        id_kwarg \u003d \u0027%s_id\u0027 % resource"},{"line_number":56,"context_line":"        if id_kwarg in kwargs:"},{"line_number":57,"context_line":"            res_id \u003d kwargs[id_kwarg]"},{"line_number":58,"context_line":"        elif resource in kwargs:"},{"line_number":59,"context_line":"            res_id \u003d kwargs[resource][\u0027id\u0027]"},{"line_number":60,"context_line":"        else:"},{"line_number":61,"context_line":"            raise RuntimeError(\"Couldnt find resource ID in callback\")"},{"line_number":62,"context_line":"        try:"},{"line_number":63,"context_line":"            res \u003d self._get_getter(resource)(context, res_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_8d82e550","line":60,"range":{"start_line":55,"start_character":8,"end_line":60,"end_character":13},"updated":"2016-07-25 14:13:43.000000000","message":"I believe that won\u0027t be needed when we hook in objects here, it\u0027s a temporary hack to handle non-object payloads.","commit_id":"d37944eee4256539febe1c8263426aa8321ca2ee"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ec5fb7ed99a9b8643e6727018df9f053eee0344a","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        elif resource in kwargs:"},{"line_number":59,"context_line":"            res_id \u003d kwargs[resource][\u0027id\u0027]"},{"line_number":60,"context_line":"        else:"},{"line_number":61,"context_line":"            raise RuntimeError(\"Couldnt find resource ID in callback\")"},{"line_number":62,"context_line":"        try:"},{"line_number":63,"context_line":"            res \u003d self._get_getter(resource)(context, res_id)"},{"line_number":64,"context_line":"        except exceptions.NotFound:"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_4d4c6d70","line":61,"range":{"start_line":61,"start_character":33,"end_line":61,"end_character":39},"updated":"2016-07-25 14:13:43.000000000","message":"Couldn\u0027t","commit_id":"d37944eee4256539febe1c8263426aa8321ca2ee"}]}
