)]}'
{"nova/manager.py":[{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"a96f686ea6872f2252fb5b74608b16e6f66df1b1","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        If a manager would like to set an rpc API version, or support more than"},{"line_number":147,"context_line":"        one class as the target of rpc messages, override this method."},{"line_number":148,"context_line":"        \u0027\u0027\u0027"},{"line_number":149,"context_line":"        return rpc_dispatcher.RpcDispatcher([self])"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def periodic_tasks(self, context, raise_on_error\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAHX%2F%2F61k%3D","line":148,"updated":"2012-05-16 21:46:43.000000000","message":"The API version part of this docstring could go, since you override API version via RPC_API_VERSION.  Also nitpicky, but we use triple double quotes vs single quotes for docstrings everywhere else.","commit_id":"90610bc1b0897c57b2d630f396f0fd7cc006581e"}],"nova/rpc/amqp.py":[{"author":{"_account_id":360,"name":"Dan Prince","email":"dprince@redhat.com","username":"dan-prince"},"change_message_id":"b32fbbc5b601e9d19cad62acc2664d60dfd1b998","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from nova.openstack.common import excutils"},{"line_number":40,"context_line":"from nova.openstack.common import local"},{"line_number":41,"context_line":"import nova.rpc.common as rpc_common"},{"line_number":42,"context_line":"from nova.rpc import dispatcher"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAHX%2F%2F8as%3D","line":42,"updated":"2012-05-14 14:12:43.000000000","message":"Is this ever used?","commit_id":"40d34b09914a5411ed1e283814fe227f85e99bfe"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"ddef33ce925d7dca7e1d33b1b2f24498614ceeaa","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from nova.openstack.common import excutils"},{"line_number":40,"context_line":"from nova.openstack.common import local"},{"line_number":41,"context_line":"import nova.rpc.common as rpc_common"},{"line_number":42,"context_line":"from nova.rpc import dispatcher"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAHX%2F%2F8aY%3D","line":42,"in_reply_to":"AAAAHX%2F%2F8as%3D","updated":"2012-05-14 14:17:26.000000000","message":"Nope ... It used to be.  I used to have it doing isinstance() instead of hasattr().  I\u0027ll remove it.","commit_id":"40d34b09914a5411ed1e283814fe227f85e99bfe"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"d605314f36a6b16145b1d774d92f4c20cb8e9dff","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        ctxt \u003d unpack_context(self.conf, message_data)"},{"line_number":244,"context_line":"        method \u003d message_data.get(\u0027method\u0027)"},{"line_number":245,"context_line":"        args \u003d message_data.get(\u0027args\u0027, {})"},{"line_number":246,"context_line":"        version \u003d message_data.get(\u0027version\u0027, None)"},{"line_number":247,"context_line":"        if not method:"},{"line_number":248,"context_line":"            LOG.warn(_(\u0027no method for message: %s\u0027) % message_data)"},{"line_number":249,"context_line":"            ctxt.reply(_(\u0027No method for message: %s\u0027) % message_data,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHX%2F%2F7V8%3D","line":246,"updated":"2012-05-16 06:58:50.000000000","message":"I would prefer to default the version to 1.0 so we don\u0027t run into an issue when we restart a worker with this code and there happens to be old messages in the queue.  From what I can tell, we would get an exception in dispatchers _is_compatible() from trying to do a split() on None.","commit_id":"cd4a4fe27deb48226be5bbb21ad8c6d5234fc403"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"5ebfbe51e9edfb8a4ec4fd7a27e4c23b652de470","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        ctxt \u003d unpack_context(self.conf, message_data)"},{"line_number":244,"context_line":"        method \u003d message_data.get(\u0027method\u0027)"},{"line_number":245,"context_line":"        args \u003d message_data.get(\u0027args\u0027, {})"},{"line_number":246,"context_line":"        version \u003d message_data.get(\u0027version\u0027, None)"},{"line_number":247,"context_line":"        if not method:"},{"line_number":248,"context_line":"            LOG.warn(_(\u0027no method for message: %s\u0027) % message_data)"},{"line_number":249,"context_line":"            ctxt.reply(_(\u0027No method for message: %s\u0027) % message_data,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHX%2F%2F7Qo%3D","line":246,"in_reply_to":"AAAAHX%2F%2F7Q4%3D","updated":"2012-05-16 12:28:26.000000000","message":"There\u0027s also a dispatcher unit test for this case.  :-)","commit_id":"cd4a4fe27deb48226be5bbb21ad8c6d5234fc403"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"09ecb435052617c0ae63d98418169d364e0a5d80","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        ctxt \u003d unpack_context(self.conf, message_data)"},{"line_number":244,"context_line":"        method \u003d message_data.get(\u0027method\u0027)"},{"line_number":245,"context_line":"        args \u003d message_data.get(\u0027args\u0027, {})"},{"line_number":246,"context_line":"        version \u003d message_data.get(\u0027version\u0027, None)"},{"line_number":247,"context_line":"        if not method:"},{"line_number":248,"context_line":"            LOG.warn(_(\u0027no method for message: %s\u0027) % message_data)"},{"line_number":249,"context_line":"            ctxt.reply(_(\u0027No method for message: %s\u0027) % message_data,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHX%2F%2F7Q4%3D","line":246,"in_reply_to":"AAAAHX%2F%2F7V8%3D","updated":"2012-05-16 12:18:18.000000000","message":"The version is set to \u00271.0\u0027 at the beginning of RpcDispatcher.dispatch() if no version is passed in, which comes before the _is_compatible() check.","commit_id":"cd4a4fe27deb48226be5bbb21ad8c6d5234fc403"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"a96f686ea6872f2252fb5b74608b16e6f66df1b1","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        (see rpc.dispatcher.RpcDispatcher), pass it the version,"},{"line_number":258,"context_line":"        method, and args and let it dispatch as appropriate.  If not, use"},{"line_number":259,"context_line":"        the old behavior of magically calling the specified method on the"},{"line_number":260,"context_line":"        proxy we have here."},{"line_number":261,"context_line":"        \"\"\""},{"line_number":262,"context_line":"        ctxt.update_store()"},{"line_number":263,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAHX%2F%2F614%3D","line":260,"updated":"2012-05-16 21:46:43.000000000","message":"Comment needs updated now... but I won\u0027t let it hold this up.  Can always be fixed later in a branch that\u0027s less likely to conflict.","commit_id":"90610bc1b0897c57b2d630f396f0fd7cc006581e"}],"nova/rpc/dispatcher.py":[{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"4a9f0e05907bd65b45839118bc2e8512a86ec691","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                  called."},{"line_number":93,"context_line":"        \"\"\""},{"line_number":94,"context_line":"        if not version:"},{"line_number":95,"context_line":"            version \u003d \u00271.0\u0027"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        for manager in self.managers:"},{"line_number":98,"context_line":"            if self._is_compatible(manager.API_VERSION, version):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAHX%2F%2F7I0%3D","line":95,"updated":"2012-05-16 16:37:31.000000000","message":"ah, I was thinking this was for the manager version, not the message version in my previous comment. :)","commit_id":"66279f9fd079c76241a485e4c777d6324abae087"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"4a9f0e05907bd65b45839118bc2e8512a86ec691","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            version \u003d \u00271.0\u0027"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        for manager in self.managers:"},{"line_number":98,"context_line":"            if self._is_compatible(manager.API_VERSION, version):"},{"line_number":99,"context_line":"                return getattr(manager, method)(ctxt, **kwargs)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        raise rpc_common.UnsupportedRpcVersion(version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAHX%2F%2F7Is%3D","line":98,"updated":"2012-05-16 16:37:31.000000000","message":"I guess we\u0027d better make sure that when we start using this RpcDispatcher mix-in... that we\u0027re sure to set the API_VERSION :)  Almost asked to default it to 1.0, but I\u0027m not sure we need to do that.  I\u0027d prefer the worker to fail fast on startup, but since this is meant to be used as a mix-in to the manager class, I guess it\u0027s not really possible.","commit_id":"66279f9fd079c76241a485e4c777d6324abae087"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"a96f686ea6872f2252fb5b74608b16e6f66df1b1","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            if self._is_compatible(rpc_api_version, version):"},{"line_number":103,"context_line":"                return getattr(proxyobj, method)(ctxt, **kwargs)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        raise rpc_common.UnsupportedRpcVersion(version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAHX%2F%2F61s%3D","line":105,"updated":"2012-05-16 21:46:43.000000000","message":"Maybe we should track if all callbacks don\u0027t have the method... then we raise a different error.  Although I\u0027m not that concerned about it right now.","commit_id":"90610bc1b0897c57b2d630f396f0fd7cc006581e"}],"nova/rpc/proxy.py":[{"author":{"_account_id":360,"name":"Dan Prince","email":"dprince@redhat.com","username":"dan-prince"},"change_message_id":"b32fbbc5b601e9d19cad62acc2664d60dfd1b998","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    def make_msg(method, **kwargs):"},{"line_number":63,"context_line":"        return {\u0027method\u0027: method, \u0027args\u0027: kwargs}"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def call(self, context, msg, topic\u003dNone, timeout\u003dNone, version\u003dNone):"},{"line_number":66,"context_line":"        \"\"\"rpc.call() a remote method."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        :param context: The request context"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAHX%2F%2F8ak%3D","line":65,"updated":"2012-05-14 14:12:43.000000000","message":"I might re-order the arguments to:\n\ncall(context, msg, topic, version, timeout)\n\nThis would make the argument ordering a bit more consistent across all the calls I think.","commit_id":"40d34b09914a5411ed1e283814fe227f85e99bfe"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"ddef33ce925d7dca7e1d33b1b2f24498614ceeaa","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    def make_msg(method, **kwargs):"},{"line_number":63,"context_line":"        return {\u0027method\u0027: method, \u0027args\u0027: kwargs}"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def call(self, context, msg, topic\u003dNone, timeout\u003dNone, version\u003dNone):"},{"line_number":66,"context_line":"        \"\"\"rpc.call() a remote method."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        :param context: The request context"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAHX%2F%2F8aU%3D","line":65,"in_reply_to":"AAAAHX%2F%2F8ak%3D","updated":"2012-05-14 14:17:26.000000000","message":"Good suggestion.","commit_id":"40d34b09914a5411ed1e283814fe227f85e99bfe"},{"author":{"_account_id":360,"name":"Dan Prince","email":"dprince@redhat.com","username":"dan-prince"},"change_message_id":"b32fbbc5b601e9d19cad62acc2664d60dfd1b998","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        self._set_version(msg, version)"},{"line_number":80,"context_line":"        return rpc.call(context, self._get_topic(topic), msg, timeout)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def multicall(self, context, msg, topic\u003dNone, timeout\u003dNone, version\u003dNone):"},{"line_number":83,"context_line":"        \"\"\"rpc.multicall() a remote method."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        :param context: The request context"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAHX%2F%2F8ag%3D","line":82,"updated":"2012-05-14 14:12:43.000000000","message":"Ditto from above. I might swap the ordering on timeout and version args.","commit_id":"40d34b09914a5411ed1e283814fe227f85e99bfe"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"ddef33ce925d7dca7e1d33b1b2f24498614ceeaa","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        self._set_version(msg, version)"},{"line_number":80,"context_line":"        return rpc.call(context, self._get_topic(topic), msg, timeout)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def multicall(self, context, msg, topic\u003dNone, timeout\u003dNone, version\u003dNone):"},{"line_number":83,"context_line":"        \"\"\"rpc.multicall() a remote method."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        :param context: The request context"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAHX%2F%2F8aQ%3D","line":82,"in_reply_to":"AAAAHX%2F%2F8ag%3D","updated":"2012-05-14 14:17:26.000000000","message":"Sounds good, thanks","commit_id":"40d34b09914a5411ed1e283814fe227f85e99bfe"}],"nova/tests/rpc/test_proxy.py":[{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"8b10d0645fb87de1646de1f01e961576edaf70b3","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                self.assertEqual(arg, expected_arg)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        if supports_topic_override:"},{"line_number":93,"context_line":"            # set a timeout"},{"line_number":94,"context_line":"            new_topic \u003d \u0027foo.bar\u0027"},{"line_number":95,"context_line":"            retval \u003d getattr(rpc_proxy, rpc_method)(*args, topic\u003dnew_topic)"},{"line_number":96,"context_line":"            self.assertEqual(retval, expected_retval)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHX%2F%2F7Zk%3D","line":93,"updated":"2012-05-15 23:15:37.000000000","message":"s/timeout/topic","commit_id":"cd4a4fe27deb48226be5bbb21ad8c6d5234fc403"}]}
