)]}'
{"bin/cinder-volume":[{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"6ceb066002d4142f58c3ef488fee913266e704d4","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    # right after service starts."},{"line_number":50,"context_line":"    # TODO(zhiteng) This can be avoid if scheduler relies on db query"},{"line_number":51,"context_line":"    # instead of RPC message to get volume services\u0027 capabilities"},{"line_number":52,"context_line":"    server.periodic_tasks()"},{"line_number":53,"context_line":"    service.wait()"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAMH%2F%2F0W4%3D","line":52,"updated":"2012-11-21 15:48:48.000000000","message":"See this commit from nova.  I think it would be better to do it this way.  It just calls publish_service_capabilities() from init_host() in compute/manager.py.  I think this should just do the same in volume/manager.py.  The patch also has the scheduler request that all nodes report their capabilities when a new scheduler starts.\n\ncommit 9ac10f55e4b40ac496c20f56501e5aeffa196692\nAuthor: Arata Notsu \u003cnotsu@virtualtech.jp\u003e\nDate:   Thu Oct 25 20:24:23 2012 +0900\n\n    Let scheduler know services\u0027 capabilities at startup\n    \n    Fixes bug 1071254.\n    \n    Changes:\n    * Add new rpc-api(fanout) of compute \"publish_service_capabilities\"\n        This rpc-api urges services to send its capabilites to the scheduler.\n    * Scheduler calls publish_service_capabilities right after the start\n    \n    By them, the scheduler get to know the capabilities earlier.\n    \n    Now we can expect that the scheduler always holds the capabilities. So it\n    is reasonable to change HostManager to ignore hosts whose capabilities are\n    \"None\" since it becomes a rare case; this will make scheduling more\n    reliable. This will achieved by Another patch.\n    \n    Change-Id: If6582765011fd5e1b794bfdc068e17630ba381cb","commit_id":"d5b728161acb025bd7c53a87df723b72ab5deb4c"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"17de30b40e3b7962d34cf487716c8b0ad130f999","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    # right after service starts."},{"line_number":50,"context_line":"    # TODO(zhiteng) This can be avoid if scheduler relies on db query"},{"line_number":51,"context_line":"    # instead of RPC message to get volume services\u0027 capabilities"},{"line_number":52,"context_line":"    server.periodic_tasks()"},{"line_number":53,"context_line":"    service.wait()"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAMH%2F%2F0Tk%3D","line":52,"in_reply_to":"AAAAMH%2F%2F0W4%3D","updated":"2012-11-21 16:10:44.000000000","message":"Ah, good to know, thx! Will do it in similar way.","commit_id":"d5b728161acb025bd7c53a87df723b72ab5deb4c"}],"cinder/scheduler/filter_scheduler.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0d28693f9ffbaf5c31d9472d36f3877cb19ec575","unresolved":false,"context_lines":[{"line_number":19,"context_line":"You can customize this scheduler by specifying your own volume Filters and"},{"line_number":20,"context_line":"Weighing Functions."},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import operator"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder import exception"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAM3%2F%2Fstc%3D","line":22,"updated":"2013-01-09 08:58:34.000000000","message":"operator is not being used.","commit_id":"8dd2140c4c03582965d74232c7b61aef34e43661"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0d28693f9ffbaf5c31d9472d36f3877cb19ec575","unresolved":false,"context_lines":[{"line_number":23,"context_line":"import operator"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder import exception"},{"line_number":26,"context_line":"from cinder import flags"},{"line_number":27,"context_line":"from cinder.openstack.common import importutils"},{"line_number":28,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":29,"context_line":"from cinder.scheduler import driver"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAM3%2F%2FstY%3D","line":26,"updated":"2013-01-09 08:58:34.000000000","message":"importutils is not being used.","commit_id":"8dd2140c4c03582965d74232c7b61aef34e43661"}],"cinder/scheduler/host_manager.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"23c9b8ec8579d82b862dd245e1283c9916334c4d","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        default\u003d[\u0027cinder.scheduler.filters.standard_filters\u0027],"},{"line_number":35,"context_line":"        help\u003d\u0027Filter classes available to the scheduler which may \u0027"},{"line_number":36,"context_line":"             \u0027be specified more than once.  An entry of \u0027"},{"line_number":37,"context_line":"             \u0027\"cinder.scheduler.filters.standard_filters\" \u0027"},{"line_number":38,"context_line":"             \u0027maps to all filters included with nova.\u0027),"},{"line_number":39,"context_line":"    cfg.ListOpt(\u0027scheduler_default_filters\u0027,"},{"line_number":40,"context_line":"        default\u003d["}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F6cw%3D","line":37,"updated":"2012-10-29 04:58:46.000000000","message":"included with cinder, not nova.","commit_id":"49ce702ff7aa0c9e66344f253c44f27246069cea"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"d5e66385e779755f746a2ca7dd78393b0a9d8cc5","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        default\u003d[\u0027cinder.scheduler.filters.standard_filters\u0027],"},{"line_number":35,"context_line":"        help\u003d\u0027Filter classes available to the scheduler which may \u0027"},{"line_number":36,"context_line":"             \u0027be specified more than once.  An entry of \u0027"},{"line_number":37,"context_line":"             \u0027\"cinder.scheduler.filters.standard_filters\" \u0027"},{"line_number":38,"context_line":"             \u0027maps to all filters included with nova.\u0027),"},{"line_number":39,"context_line":"    cfg.ListOpt(\u0027scheduler_default_filters\u0027,"},{"line_number":40,"context_line":"        default\u003d["}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F4%2Fc%3D","line":37,"in_reply_to":"AAAALn%2F%2F6cw%3D","updated":"2012-10-30 16:55:49.000000000","message":"Done","commit_id":"49ce702ff7aa0c9e66344f253c44f27246069cea"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"23c9b8ec8579d82b862dd245e1283c9916334c4d","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        # Read-only capability dicts"},{"line_number":95,"context_line":"        if capabilities is None:"},{"line_number":96,"context_line":"            capabilities \u003d {}"},{"line_number":97,"context_line":"        self.capabilities \u003d ReadOnlyDict(service)"},{"line_number":98,"context_line":"        if service is None:"},{"line_number":99,"context_line":"            service \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F6cs%3D","line":96,"updated":"2012-10-29 04:58:46.000000000","message":"ReadOnlyDict(capabilities), not service?","commit_id":"49ce702ff7aa0c9e66344f253c44f27246069cea"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"d5e66385e779755f746a2ca7dd78393b0a9d8cc5","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        # Read-only capability dicts"},{"line_number":95,"context_line":"        if capabilities is None:"},{"line_number":96,"context_line":"            capabilities \u003d {}"},{"line_number":97,"context_line":"        self.capabilities \u003d ReadOnlyDict(service)"},{"line_number":98,"context_line":"        if service is None:"},{"line_number":99,"context_line":"            service \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F4%2Fg%3D","line":96,"in_reply_to":"AAAALn%2F%2F6cs%3D","updated":"2012-10-30 16:55:49.000000000","message":"oh, nice catch. thx.","commit_id":"49ce702ff7aa0c9e66344f253c44f27246069cea"}],"cinder/scheduler/least_cost.py":[{"author":{"_account_id":6515,"name":"tom phelan","email":"tap@bluedatainc.com","username":"tap-t"},"change_message_id":"68d761e697f34139ee935bfd05f9a4c69a7de32a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                  \u0027cinder.scheduler.least_cost.volume_fill_first_cost_fn\u0027"},{"line_number":36,"context_line":"                  ],"},{"line_number":37,"context_line":"                help\u003d\u0027Which cost functions the LeastCostScheduler should use\u0027),"},{"line_number":38,"context_line":"    cfg.FloatOpt(\u0027noop_cost_fn_weight\u0027,"},{"line_number":39,"context_line":"             default\u003d1.0,"},{"line_number":40,"context_line":"               help\u003d\u0027How much weight to give the noop cost function\u0027),"},{"line_number":41,"context_line":"    cfg.FloatOpt(\u0027volume_fill_first_cost_fn_weight\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMX%2F%2Fzlg%3D","line":38,"updated":"2012-12-14 21:46:35.000000000","message":"will this option be used in a later version of the patch?\r\nit does not seem to be used in this version","commit_id":"f3896b9c9362b35b2403cd4fb31f3927acb9df01"},{"author":{"_account_id":6515,"name":"tom phelan","email":"tap@bluedatainc.com","username":"tap-t"},"change_message_id":"68d761e697f34139ee935bfd05f9a4c69a7de32a","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"def volume_fill_first_cost_fn(host_state, weighing_properties):"},{"line_number":82,"context_line":"    \"\"\"More free ram \u003d higher weight. So servers with less free"},{"line_number":83,"context_line":"    ram will be preferred."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    Note: the weight for this function in default configuration"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMX%2F%2Fzk8%3D","line":82,"updated":"2012-12-14 21:46:35.000000000","message":"comment should be updated to indicate free capacity rather than free ran","commit_id":"f3896b9c9362b35b2403cd4fb31f3927acb9df01"}],"cinder/scheduler/scheduler_options.py":[{"author":{"_account_id":6515,"name":"tom phelan","email":"tap@bluedatainc.com","username":"tap-t"},"change_message_id":"68d761e697f34139ee935bfd05f9a4c69a7de32a","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            now \u003d self._get_time_now()"},{"line_number":94,"context_line":"            if now - self.last_checked \u003c datetime.timedelta(minutes\u003d5):"},{"line_number":95,"context_line":"                return self.data"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        last_modified \u003d self._get_file_timestamp(filename)"},{"line_number":98,"context_line":"        if (not last_modified or not self.last_modified or"},{"line_number":99,"context_line":"            last_modified \u003e self.last_modified):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMX%2F%2Fzl4%3D","line":96,"updated":"2012-12-14 21:46:35.000000000","message":"last_checked should be set to now","commit_id":"f3896b9c9362b35b2403cd4fb31f3927acb9df01"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0d28693f9ffbaf5c31d9472d36f3877cb19ec575","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from cinder.openstack.common import timeutils"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"scheduler_json_config_location_opt \u003d cfg.StrOpt("},{"line_number":36,"context_line":"        \u0027scheduler_json_config_location\u0027,"},{"line_number":37,"context_line":"        default\u003d\u0027\u0027,"},{"line_number":38,"context_line":"        help\u003d\u0027Absolute path to scheduler configuration JSON file.\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAM3%2F%2FstE%3D","line":35,"updated":"2013-01-09 08:58:34.000000000","message":"over-indented","commit_id":"8dd2140c4c03582965d74232c7b61aef34e43661"}],"cinder/tests/scheduler/test_filter_scheduler.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0d28693f9ffbaf5c31d9472d36f3877cb19ec575","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Tests For Filter Scheduler."},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import mox"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import context"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAM3%2F%2Fsws%3D","line":18,"updated":"2013-01-09 08:58:34.000000000","message":"mox is not being used","commit_id":"8dd2140c4c03582965d74232c7b61aef34e43661"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0d28693f9ffbaf5c31d9472d36f3877cb19ec575","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import context"},{"line_number":22,"context_line":"from cinder import exception"},{"line_number":23,"context_line":"from cinder.openstack.common.scheduler import weights"},{"line_number":24,"context_line":"from cinder.scheduler import driver"},{"line_number":25,"context_line":"from cinder.scheduler import filter_scheduler"},{"line_number":26,"context_line":"from cinder.scheduler import host_manager"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAM3%2F%2Fswo%3D","line":23,"updated":"2013-01-09 08:58:34.000000000","message":"driver not be used","commit_id":"8dd2140c4c03582965d74232c7b61aef34e43661"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0d28693f9ffbaf5c31d9472d36f3877cb19ec575","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from cinder import exception"},{"line_number":23,"context_line":"from cinder.openstack.common.scheduler import weights"},{"line_number":24,"context_line":"from cinder.scheduler import driver"},{"line_number":25,"context_line":"from cinder.scheduler import filter_scheduler"},{"line_number":26,"context_line":"from cinder.scheduler import host_manager"},{"line_number":27,"context_line":"from cinder.tests.scheduler import fakes"},{"line_number":28,"context_line":"from cinder.tests.scheduler import test_scheduler"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAM3%2F%2Fswk%3D","line":25,"updated":"2013-01-09 08:58:34.000000000","message":"host_manager not being used","commit_id":"8dd2140c4c03582965d74232c7b61aef34e43661"}],"cinder/tests/scheduler/test_host_filters.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0d28693f9ffbaf5c31d9472d36f3877cb19ec575","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import httplib"},{"line_number":19,"context_line":"import stubout"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import context"},{"line_number":22,"context_line":"from cinder import db"},{"line_number":23,"context_line":"from cinder import exception"},{"line_number":24,"context_line":"from cinder.openstack.common import jsonutils"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAM3%2F%2FswU%3D","line":21,"updated":"2013-01-09 08:58:34.000000000","message":"db not being used","commit_id":"8dd2140c4c03582965d74232c7b61aef34e43661"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0d28693f9ffbaf5c31d9472d36f3877cb19ec575","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import stubout"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import context"},{"line_number":22,"context_line":"from cinder import db"},{"line_number":23,"context_line":"from cinder import exception"},{"line_number":24,"context_line":"from cinder.openstack.common import jsonutils"},{"line_number":25,"context_line":"from cinder.openstack.common.scheduler import filters"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAM3%2F%2FswQ%3D","line":22,"updated":"2013-01-09 08:58:34.000000000","message":"exception not being used","commit_id":"8dd2140c4c03582965d74232c7b61aef34e43661"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0d28693f9ffbaf5c31d9472d36f3877cb19ec575","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.stubs \u003d stubout.StubOutForTesting()"},{"line_number":60,"context_line":"        stub_out_https_backend(self.stubs)"},{"line_number":61,"context_line":"        self.context \u003d context.RequestContext(\u0027fake\u0027, \u0027fake\u0027)"},{"line_number":62,"context_line":"        self.json_query \u003d jsonutils.dumps("},{"line_number":63,"context_line":"                [\u0027and\u0027, [\u0027\u003e\u003d\u0027, \u0027$free_capacity_gb\u0027, 1024],"},{"line_number":64,"context_line":"                 [\u0027\u003e\u003d\u0027, \u0027$total_capacity_gb\u0027, 10 * 1024]])"},{"line_number":65,"context_line":"        # This has a side effect of testing \u0027get_filter_classes\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAM3%2F%2FswI%3D","line":62,"updated":"2013-01-09 08:58:34.000000000","message":"nit: over-indented","commit_id":"8dd2140c4c03582965d74232c7b61aef34e43661"}],"cinder/tests/scheduler/test_host_manager.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0d28693f9ffbaf5c31d9472d36f3877cb19ec575","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            return True"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        self.stubs.Set(FakeFilterClass1, \u0027_filter_one\u0027, fake_filter_one)"},{"line_number":81,"context_line":"        self.host_manager._choose_host_filters(specified_filters).AndReturn("},{"line_number":82,"context_line":"                [FakeFilterClass1])"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _verify_result(self, info, result):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAM3%2F%2Fsv8%3D","line":81,"updated":"2013-01-09 08:58:34.000000000","message":"nit: over-indented","commit_id":"8dd2140c4c03582965d74232c7b61aef34e43661"}],"cinder/tests/scheduler/test_scheduler_options.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0d28693f9ffbaf5c31d9472d36f3877cb19ec575","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        now \u003d datetime.datetime(2012, 1, 1, 1, 1, 1)"},{"line_number":71,"context_line":"        file_old \u003d None"},{"line_number":72,"context_line":"        file_now \u003d datetime.datetime(2012, 1, 1, 1, 1, 1)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        data \u003d dict(a\u003d1, b\u003d2, c\u003d3)"},{"line_number":75,"context_line":"        jdata \u003d \"\""},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAM3%2F%2Fsvw%3D","line":73,"updated":"2013-01-09 08:58:34.000000000","message":"nothing is using data","commit_id":"8dd2140c4c03582965d74232c7b61aef34e43661"}],"cinder/volume/manager.py":[{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"528cc742f27dae19cd36ec4d6110e48fb2f80938","unresolved":false,"context_lines":[{"line_number":469,"context_line":"                # avoid repeating fanouts"},{"line_number":470,"context_line":"                self.update_service_capabilities(None)"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def publish_service_capabilities(self, context):"},{"line_number":473,"context_line":"        \"\"\" Collect driver status and then publish \"\"\""},{"line_number":474,"context_line":"        self._report_driver_status(context)"},{"line_number":475,"context_line":"        self._publish_service_capabilities(context)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2F0Gw%3D","line":472,"updated":"2012-11-21 18:20:51.000000000","message":"In addition to calling this when the scheduler starts, you\u0027ll want to call it when a new cinder-volume starts, as well.  Just call it from init_host().","commit_id":"820ce47e9f935a3cc87932049da31cb3d9cb6676"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"f86899b629791c9d466c47f0cf0dda92e90adf67","unresolved":false,"context_lines":[{"line_number":469,"context_line":"                # avoid repeating fanouts"},{"line_number":470,"context_line":"                self.update_service_capabilities(None)"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def publish_service_capabilities(self, context):"},{"line_number":473,"context_line":"        \"\"\" Collect driver status and then publish \"\"\""},{"line_number":474,"context_line":"        self._report_driver_status(context)"},{"line_number":475,"context_line":"        self._publish_service_capabilities(context)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2F0FE%3D","line":472,"in_reply_to":"AAAAMH%2F%2F0Gw%3D","updated":"2012-11-21 18:42:24.000000000","message":"sure, and I\u0027ll move scheduler\u0027s request_service_capabilities to init_host() as well.","commit_id":"820ce47e9f935a3cc87932049da31cb3d9cb6676"}],"cinder/volume/rpcapi.py":[{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"528cc742f27dae19cd36ec4d6110e48fb2f80938","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                    topic\u003drpc.queue_get_for(ctxt, self.topic, volume[\u0027host\u0027]))"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def publish_service_capabilities(self, ctxt):"},{"line_number":101,"context_line":"        self.fanout_cast(ctxt, self.make_msg(\u0027publish_service_capabilities\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2F0G8%3D","line":101,"updated":"2012-11-21 18:20:51.000000000","message":"need version\u003d\u00271.1\u0027 in here","commit_id":"820ce47e9f935a3cc87932049da31cb3d9cb6676"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"f86899b629791c9d466c47f0cf0dda92e90adf67","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                    topic\u003drpc.queue_get_for(ctxt, self.topic, volume[\u0027host\u0027]))"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def publish_service_capabilities(self, ctxt):"},{"line_number":101,"context_line":"        self.fanout_cast(ctxt, self.make_msg(\u0027publish_service_capabilities\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2F0E8%3D","line":101,"in_reply_to":"AAAAMH%2F%2F0G8%3D","updated":"2012-11-21 18:42:24.000000000","message":"Done","commit_id":"820ce47e9f935a3cc87932049da31cb3d9cb6676"}]}
