)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"a95a3776a53d4a66db929688f3abca0ca23f05d0","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Cells: Add the main code."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Implements blueprint nova-compute-cells"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"DocImpact"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"AAAAM3%2F%2F0k4%3D","line":9,"updated":"2013-01-03 23:25:19.000000000","message":"It would be nice to flesh out this commit message a bit more with a high level overview of what cells are.","commit_id":"c4e0c78f7921d2ad2b765764108281e6cc75f17d"}],"bin/nova-cells":[{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python"},{"line_number":2,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Copyright (c) 2012 OpenStack LLC."},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAMH%2F%2F%2FHY%3D","line":4,"updated":"2012-11-13 21:11:30.000000000","message":"Are all Rackspace contributions copyright OpenStack LLC?  If so in the past, is that still the case now that the Foundation is up and running?  Should all the files say copyright Rackspace?","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python"},{"line_number":2,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Copyright (c) 2012 OpenStack LLC."},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAMH%2F%2F67A%3D","line":4,"in_reply_to":"AAAAMH%2F%2F%2FHY%3D","updated":"2012-11-15 20:03:17.000000000","message":"Good question.  Leaving them in the next patch set for now until I figure it out.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\"\"\"Starter script for Nova Cells Service.\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import eventlet"},{"line_number":22,"context_line":"eventlet.monkey_patch()"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import gettext"},{"line_number":25,"context_line":"import os"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAMH%2F%2F%2FH8%3D","line":22,"updated":"2012-11-13 21:11:30.000000000","message":"There was a windows fix that went into bins recently ...\n\nif os.name \u003d\u003d \u0027nt\u0027:\n    # eventlet monkey patching causes subprocess.Popen to fail on Windows\n    # when using pipes due to missing non blocking I/O support\n    eventlet.monkey_patch(os\u003dFalse)\nelse:\n    eventlet.monkey_patch()","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\"\"\"Starter script for Nova Cells Service.\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import eventlet"},{"line_number":22,"context_line":"eventlet.monkey_patch()"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import gettext"},{"line_number":25,"context_line":"import os"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAMH%2F%2F668%3D","line":22,"in_reply_to":"AAAAMH%2F%2F%2FH8%3D","updated":"2012-11-15 20:03:17.000000000","message":"found it was compute only","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import eventlet"},{"line_number":22,"context_line":"eventlet.monkey_patch()"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import gettext"},{"line_number":25,"context_line":"import os"},{"line_number":26,"context_line":"import sys"},{"line_number":27,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAMH%2F%2F%2FHw%3D","line":24,"updated":"2012-11-13 21:11:30.000000000","message":"you can remove this","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":33,"context_line":"if os.path.exists(os.path.join(possible_topdir, \u0027nova\u0027, \u0027__init__.py\u0027)):"},{"line_number":34,"context_line":"    sys.path.insert(0, possible_topdir)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"gettext.install(\u0027nova\u0027, unicode\u003d1)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"from nova import flags"},{"line_number":39,"context_line":"from nova.openstack.common import log as logging"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAMH%2F%2F%2FH4%3D","line":36,"updated":"2012-11-13 21:11:30.000000000","message":"This isn\u0027t needed anymore.  It\u0027s done in nova/__init__.py","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    flags.parse_args(sys.argv)"},{"line_number":45,"context_line":"    logging.setup(\u0027nova\u0027)"},{"line_number":46,"context_line":"    utils.monkey_patch()"},{"line_number":47,"context_line":"    server \u003d service.Service.create(binary\u003d\u0027nova-cells\u0027)"},{"line_number":48,"context_line":"    service.serve(server)"},{"line_number":49,"context_line":"    service.wait()"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAMH%2F%2F%2FHg%3D","line":47,"updated":"2012-11-13 21:11:30.000000000","message":"For consistency with other latest service boilerplate code, add topic\u003dCONF.cells_topic","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    flags.parse_args(sys.argv)"},{"line_number":45,"context_line":"    logging.setup(\u0027nova\u0027)"},{"line_number":46,"context_line":"    utils.monkey_patch()"},{"line_number":47,"context_line":"    server \u003d service.Service.create(binary\u003d\u0027nova-cells\u0027)"},{"line_number":48,"context_line":"    service.serve(server)"},{"line_number":49,"context_line":"    service.wait()"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAMH%2F%2F664%3D","line":47,"in_reply_to":"AAAAMH%2F%2F%2FHg%3D","updated":"2012-11-15 20:03:17.000000000","message":"Addressed the other things above.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"}],"nova/cells/driver.py":[{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from nova import flags"},{"line_number":22,"context_line":"from nova.openstack.common import log as logging"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"LOG \u003d logging.getLogger(\u0027nova.cells.driver\u0027)"},{"line_number":25,"context_line":"FLAGS \u003d flags.FLAGS"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F%2FHM%3D","line":24,"updated":"2012-11-13 21:11:30.000000000","message":"s/nova\\.cells\\.driver/__name__/ to be consistent with other files","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from nova.openstack.common import log as logging"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"LOG \u003d logging.getLogger(\u0027nova.cells.driver\u0027)"},{"line_number":25,"context_line":"FLAGS \u003d flags.FLAGS"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class BaseCellsDriver(base.Base):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F%2FHU%3D","line":25,"updated":"2012-11-13 21:11:30.000000000","message":"All of the code recently got updated to kill of the use of \"FLAGS\".  You may need a rebase because of that.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from nova.openstack.common import log as logging"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"LOG \u003d logging.getLogger(\u0027nova.cells.driver\u0027)"},{"line_number":25,"context_line":"FLAGS \u003d flags.FLAGS"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class BaseCellsDriver(base.Base):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F67E%3D","line":25,"in_reply_to":"AAAAMH%2F%2F%2FHU%3D","updated":"2012-11-15 20:03:17.000000000","message":"Nuking both as they\u0027re not used.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"}],"nova/cells/filters/__init__.py":[{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"971daa1c486fd249b5e8e140f46689cae1de040b","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from nova.openstack.common import importutils"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class BaseCellFilter(object):"},{"line_number":28,"context_line":"    \"\"\"Base class for cell filters.\"\"\""},{"line_number":29,"context_line":"    def filter_cells(self, cells, filter_properties):"},{"line_number":30,"context_line":"        raise NotImplemented()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F15A%3D","line":27,"updated":"2012-11-01 22:26:42.000000000","message":"Could factor out common code with nova.scheduler.filters.__init__\n\nI think only the base filter class name changes.","commit_id":"41a0a922a2ae883cf7ff9e99ca8e2d05eeb2f7ed"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"83a42403497cde9e69ed3fa418c951332b2e52c7","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from nova.openstack.common import importutils"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class BaseCellFilter(object):"},{"line_number":28,"context_line":"    \"\"\"Base class for cell filters.\"\"\""},{"line_number":29,"context_line":"    def filter_cells(self, cells, filter_properties):"},{"line_number":30,"context_line":"        raise NotImplemented()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F63w%3D","line":27,"in_reply_to":"AAAALn%2F%2F15A%3D","updated":"2012-11-15 20:05:30.000000000","message":"Done!","commit_id":"41a0a922a2ae883cf7ff9e99ca8e2d05eeb2f7ed"}],"nova/cells/manager.py":[{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"971daa1c486fd249b5e8e140f46689cae1de040b","unresolved":false,"context_lines":[{"line_number":71,"context_line":"]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"LOG \u003d logging.getLogger(\u0027nova.cells.manager\u0027)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"flags.DECLARE(\u0027cells\u0027, \u0027nova.cells.opts\u0027)"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F148%3D","line":74,"updated":"2012-11-01 22:26:42.000000000","message":"Use __name__?","commit_id":"41a0a922a2ae883cf7ff9e99ca8e2d05eeb2f7ed"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"83a42403497cde9e69ed3fa418c951332b2e52c7","unresolved":false,"context_lines":[{"line_number":71,"context_line":"]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"LOG \u003d logging.getLogger(\u0027nova.cells.manager\u0027)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"flags.DECLARE(\u0027cells\u0027, \u0027nova.cells.opts\u0027)"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F63o%3D","line":74,"in_reply_to":"AAAALn%2F%2F148%3D","updated":"2012-11-15 20:05:30.000000000","message":"Done","commit_id":"41a0a922a2ae883cf7ff9e99ca8e2d05eeb2f7ed"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"971daa1c486fd249b5e8e140f46689cae1de040b","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"class CellsBWUpdateManager(manager.Manager):"},{"line_number":125,"context_line":"    \"\"\"Cells RPC consumer manager for BW updates.\"\"\""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    # NOTE(belliott) Should probably get bumped to 2.0 to be consistent"},{"line_number":128,"context_line":"    # with other nova services.  Leaving at 1.0 for the moment to avoid"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F13g%3D","line":125,"updated":"2012-11-01 22:26:42.000000000","message":"So this is just here as a way to get cells manager to listen to an additional topic?\n\nFeels sort of awkward.  What about tweaking the base nova/service stuff to allow for starting consumers on multiple topics?  (Then CellsManager should be able to handle all the topics)","commit_id":"41a0a922a2ae883cf7ff9e99ca8e2d05eeb2f7ed"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"83a42403497cde9e69ed3fa418c951332b2e52c7","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"class CellsBWUpdateManager(manager.Manager):"},{"line_number":125,"context_line":"    \"\"\"Cells RPC consumer manager for BW updates.\"\"\""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    # NOTE(belliott) Should probably get bumped to 2.0 to be consistent"},{"line_number":128,"context_line":"    # with other nova services.  Leaving at 1.0 for the moment to avoid"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F63I%3D","line":125,"in_reply_to":"AAAALn%2F%2F13g%3D","updated":"2012-11-15 20:05:30.000000000","message":"I would love to fix the service stuff to do this... but it\u0027ll probably have to wait as keeping these patches up with trunk is already a huge pain :)","commit_id":"41a0a922a2ae883cf7ff9e99ca8e2d05eeb2f7ed"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"971daa1c486fd249b5e8e140f46689cae1de040b","unresolved":false,"context_lines":[{"line_number":124,"context_line":"class CellsBWUpdateManager(manager.Manager):"},{"line_number":125,"context_line":"    \"\"\"Cells RPC consumer manager for BW updates.\"\"\""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    # NOTE(belliott) Should probably get bumped to 2.0 to be consistent"},{"line_number":128,"context_line":"    # with other nova services.  Leaving at 1.0 for the moment to avoid"},{"line_number":129,"context_line":"    # version mismatch errors due to nova-api potentially getting"},{"line_number":130,"context_line":"    # updated before nova-cells.  After the versioned RPC API gets some"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F140%3D","line":127,"updated":"2012-11-01 22:26:42.000000000","message":"Lol. I guess theses messages can be removed if we want cells to start at major 1.0 in grizzly.  The only technical reason to start at 2.0 would be to expose possible bugs from missing versions in messages.","commit_id":"41a0a922a2ae883cf7ff9e99ca8e2d05eeb2f7ed"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"83a42403497cde9e69ed3fa418c951332b2e52c7","unresolved":false,"context_lines":[{"line_number":124,"context_line":"class CellsBWUpdateManager(manager.Manager):"},{"line_number":125,"context_line":"    \"\"\"Cells RPC consumer manager for BW updates.\"\"\""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    # NOTE(belliott) Should probably get bumped to 2.0 to be consistent"},{"line_number":128,"context_line":"    # with other nova services.  Leaving at 1.0 for the moment to avoid"},{"line_number":129,"context_line":"    # version mismatch errors due to nova-api potentially getting"},{"line_number":130,"context_line":"    # updated before nova-cells.  After the versioned RPC API gets some"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F63A%3D","line":127,"in_reply_to":"AAAALn%2F%2F140%3D","updated":"2012-11-15 20:05:30.000000000","message":"Ya, this is gone now.","commit_id":"41a0a922a2ae883cf7ff9e99ca8e2d05eeb2f7ed"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"971daa1c486fd249b5e8e140f46689cae1de040b","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        return getattr(self.cells_manager, key)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"class CellsReplyManager(manager.Manager):"},{"line_number":142,"context_line":"    \"\"\"Cells RPC consumer manager for replies.\"\"\""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    # NOTE(belliott) Should probably get bumped to 2.0 to be consistent"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F13s%3D","line":141,"updated":"2012-11-01 22:26:42.000000000","message":"Same comment as above manager","commit_id":"41a0a922a2ae883cf7ff9e99ca8e2d05eeb2f7ed"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"971daa1c486fd249b5e8e140f46689cae1de040b","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            self._tell_parents_our_capabilities(ctxt)"},{"line_number":224,"context_line":"            self._tell_parents_our_capacities(ctxt)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def _start_separate_consumer(self, manager_cls, topic, fanout\u003dFalse,"},{"line_number":227,"context_line":"            host_too\u003dFalse):"},{"line_number":228,"context_line":"        manager \u003d manager_cls(self)"},{"line_number":229,"context_line":"        rpc_dispatcher \u003d manager.create_rpc_dispatcher()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F13c%3D","line":226,"updated":"2012-11-01 22:26:42.000000000","message":"Might not need, see above comment?","commit_id":"41a0a922a2ae883cf7ff9e99ca8e2d05eeb2f7ed"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    # with other nova services.  Leaving at 1.0 for the moment to avoid"},{"line_number":146,"context_line":"    # version mismatch errors due to nova-api potentially getting"},{"line_number":147,"context_line":"    # updated before nova-cells.  After the versioned RPC API gets some"},{"line_number":148,"context_line":"    # testing, this should be addressed"},{"line_number":149,"context_line":"    RPC_API_VERSION \u003d \u00271.0\u0027"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def __init__(self, cells_manager):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F%2FGQ%3D","line":148,"updated":"2012-11-13 21:11:30.000000000","message":"I think this comment can be removed (and the other places it exists in this file).  There\u0027s no problem with using 1.0 here.  The version is API specific, so there\u0027s no need to keep them in sync across services.  Only some of them are at 2.0.  Some are still at 1.0 as well.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    # with other nova services.  Leaving at 1.0 for the moment to avoid"},{"line_number":146,"context_line":"    # version mismatch errors due to nova-api potentially getting"},{"line_number":147,"context_line":"    # updated before nova-cells.  After the versioned RPC API gets some"},{"line_number":148,"context_line":"    # testing, this should be addressed"},{"line_number":149,"context_line":"    RPC_API_VERSION \u003d \u00271.0\u0027"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def __init__(self, cells_manager):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F68o%3D","line":148,"in_reply_to":"AAAAMH%2F%2F%2FGQ%3D","updated":"2012-11-15 20:03:17.000000000","message":"Done!","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        self.cells_manager \u003d cells_manager"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def __getattr__(self, key):"},{"line_number":155,"context_line":"        return getattr(self.cells_manager, key)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"class CellsManager(manager.Manager):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F%2FGU%3D","line":155,"updated":"2012-11-13 21:11:30.000000000","message":"I find this a bit confusing.  In particular, it looks like changing part of this API will be confusing (changing versioned rpc APIs is confusing enough ...).  Can the methods for this API just live in this class?","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        self.cells_manager \u003d cells_manager"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def __getattr__(self, key):"},{"line_number":155,"context_line":"        return getattr(self.cells_manager, key)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"class CellsManager(manager.Manager):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F68s%3D","line":155,"in_reply_to":"AAAAMH%2F%2F%2FGU%3D","updated":"2012-11-15 20:03:17.000000000","message":"Yeah, they should.  Right now replies are all a \u0027route_message\u0027 method call... and that method has a lot of logic in it that shouldn\u0027t be duplicated here.  The next patch set will at least explicitly put the method here instead of doing the getattr magic... until I can spend more time on fixing replies to have their own rpcapi and method here.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ddc630b4fab8acfbd8d525db8e96b69eaf9911f9","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def __getattr__(self, key):"},{"line_number":239,"context_line":"        \"\"\"Makes all scheduler_ methods pass through to scheduler\"\"\""},{"line_number":240,"context_line":"        if key.startswith(\"schedule_\"):"},{"line_number":241,"context_line":"            try:"},{"line_number":242,"context_line":"                return getattr(self.scheduler, key)"},{"line_number":243,"context_line":"            except AttributeError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALn%2F%2F0mM%3D","line":240,"updated":"2012-11-03 06:40:56.000000000","message":"Eck, why? Smells like bad OOP if this is needed no?","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def __getattr__(self, key):"},{"line_number":239,"context_line":"        \"\"\"Makes all scheduler_ methods pass through to scheduler\"\"\""},{"line_number":240,"context_line":"        if key.startswith(\"schedule_\"):"},{"line_number":241,"context_line":"            try:"},{"line_number":242,"context_line":"                return getattr(self.scheduler, key)"},{"line_number":243,"context_line":"            except AttributeError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F%2FF0%3D","line":240,"in_reply_to":"AAAALn%2F%2F0mM%3D","updated":"2012-11-13 21:11:30.000000000","message":"I imagine this is because this is how the scheduler manager code used to look, so this was just being consistent.  The scheduler manager has since been cleaned up and no longer does this magic.  It would be nice if this was updated accordingly to list the exact methods the scheduler manager has.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def __getattr__(self, key):"},{"line_number":239,"context_line":"        \"\"\"Makes all scheduler_ methods pass through to scheduler\"\"\""},{"line_number":240,"context_line":"        if key.startswith(\"schedule_\"):"},{"line_number":241,"context_line":"            try:"},{"line_number":242,"context_line":"                return getattr(self.scheduler, key)"},{"line_number":243,"context_line":"            except AttributeError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F68c%3D","line":240,"in_reply_to":"AAAAMH%2F%2F%2FF0%3D","updated":"2012-11-15 20:03:17.000000000","message":"Yeah, essentially.  The new patch set will define \u0027schedule_run_instance\u0027 here which is the only scheduling activity that happens via cells.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a5def49ebb3a2e9c4f6374b1e644caef75c97fa7","unresolved":false,"context_lines":[{"line_number":568,"context_line":"                    message[\u0027args\u0027], next_hop, hop_host, topic)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"    @cells_utils.update_routing_path"},{"line_number":571,"context_line":"    def route_message(self, context, dest_cell_name, routing_path,"},{"line_number":572,"context_line":"            direction, message, response_uuid\u003dNone, need_response\u003dNone,"},{"line_number":573,"context_line":"            **kwargs):"},{"line_number":574,"context_line":"        \"\"\"Route a message to the destination cell.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALn%2F%2Fy7M%3D","line":571,"updated":"2012-11-06 02:58:40.000000000","message":"It would seem this could benefit from a doc that explains the cases this is doing, how it handles failures, what happens in different failure modes. This seems to be the \u0027core\u0027 routing so it would seem pretty useful to have that.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":568,"context_line":"                    message[\u0027args\u0027], next_hop, hop_host, topic)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"    @cells_utils.update_routing_path"},{"line_number":571,"context_line":"    def route_message(self, context, dest_cell_name, routing_path,"},{"line_number":572,"context_line":"            direction, message, response_uuid\u003dNone, need_response\u003dNone,"},{"line_number":573,"context_line":"            **kwargs):"},{"line_number":574,"context_line":"        \"\"\"Route a message to the destination cell.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F68U%3D","line":571,"in_reply_to":"AAAALn%2F%2Fy7M%3D","updated":"2012-11-15 20:03:17.000000000","message":"Agree.  Will address this in a future patch set.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ddc630b4fab8acfbd8d525db8e96b69eaf9911f9","unresolved":false,"context_lines":[{"line_number":614,"context_line":"        if resp_queue:"},{"line_number":615,"context_line":"            wait_time \u003d FLAGS.cells.call_timeout"},{"line_number":616,"context_line":"            try:"},{"line_number":617,"context_line":"                result \u003d resp_queue.get(timeout\u003dwait_time)"},{"line_number":618,"context_line":"            except queue.Empty:"},{"line_number":619,"context_line":"                del self.response_queues[response_uuid]"},{"line_number":620,"context_line":"                raise exception.CellTimeout()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALn%2F%2F0mQ%3D","line":617,"updated":"2012-11-03 06:40:56.000000000","message":"So all cells down to the target will be waiting on a queue between them and there child? What happens if one of those in the \u0027middle\u0027 crashes?","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":614,"context_line":"        if resp_queue:"},{"line_number":615,"context_line":"            wait_time \u003d FLAGS.cells.call_timeout"},{"line_number":616,"context_line":"            try:"},{"line_number":617,"context_line":"                result \u003d resp_queue.get(timeout\u003dwait_time)"},{"line_number":618,"context_line":"            except queue.Empty:"},{"line_number":619,"context_line":"                del self.response_queues[response_uuid]"},{"line_number":620,"context_line":"                raise exception.CellTimeout()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F68E%3D","line":617,"in_reply_to":"AAAALn%2F%2F0mQ%3D","updated":"2012-11-15 20:03:17.000000000","message":"I\u0027ll address this in a better doc string above.  And really, this code needs to be cleaned up to be made more clear. :)  But no, the queue is actually only at the level that initiated the call.  Intermediate levels just route the message down to the target cell.  When the target cell replies, it sends a request routed directly back to the source that is waiting on the queue.  The intermediate cells just look and say \"is this message for me?  Nope, OK, I\u0027ll route it to the destination (the source of the call)\".","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ddc630b4fab8acfbd8d525db8e96b69eaf9911f9","unresolved":false,"context_lines":[{"line_number":625,"context_line":"            return result"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"    @cells_utils.update_routing_path"},{"line_number":628,"context_line":"    def broadcast_call(self, context, routing_path, direction, message,"},{"line_number":629,"context_line":"                       response_uuid\u003dNone, **kwargs):"},{"line_number":630,"context_line":"        \"\"\"Route messages to the destination cells.\"\"\""},{"line_number":631,"context_line":"        if not response_uuid:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALn%2F%2F0mI%3D","line":628,"updated":"2012-11-03 06:40:56.000000000","message":"Does anything in cells prevent messages from just bouncing back and forth (ie a loop, besides the max hop count?)","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":625,"context_line":"            return result"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"    @cells_utils.update_routing_path"},{"line_number":628,"context_line":"    def broadcast_call(self, context, routing_path, direction, message,"},{"line_number":629,"context_line":"                       response_uuid\u003dNone, **kwargs):"},{"line_number":630,"context_line":"        \"\"\"Route messages to the destination cells.\"\"\""},{"line_number":631,"context_line":"        if not response_uuid:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F674%3D","line":628,"in_reply_to":"AAAALn%2F%2F0mI%3D","updated":"2012-11-15 20:03:17.000000000","message":"There is consistency checking on the \u0027routing_path\u0027 vs the cells that each level knows about and that covers most of the cases.  Otherwise, the \u0027max hop count\u0027 is to cover the exact scenario you talk about... which really should only happen because of a broken config...  where you\u0027ve configured a child of a cell to be its parent or grandparent, etc.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ddc630b4fab8acfbd8d525db8e96b69eaf9911f9","unresolved":false,"context_lines":[{"line_number":710,"context_line":"        :param routing_path: the path to the cell that sent this message, or"},{"line_number":711,"context_line":"                             None if it came straight from OSAPI service"},{"line_number":712,"context_line":"        \"\"\""},{"line_number":713,"context_line":"        api \u003d self.api_map.get(service_name)"},{"line_number":714,"context_line":"        if not api:"},{"line_number":715,"context_line":"            detail \u003d _(\"Unknown service API: %s\") % service_name"},{"line_number":716,"context_line":"            raise exception.CellServiceAPIMethodNotFound(detail\u003ddetail)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALn%2F%2F0mE%3D","line":713,"updated":"2012-11-03 06:40:56.000000000","message":"If new api\u0027s are ever added, they would have to make sure they get added here right. Thats sorta a bummer. It\u0027d be nice to have the cell just ask a registry where the service is and just proxy to it instead.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":710,"context_line":"        :param routing_path: the path to the cell that sent this message, or"},{"line_number":711,"context_line":"                             None if it came straight from OSAPI service"},{"line_number":712,"context_line":"        \"\"\""},{"line_number":713,"context_line":"        api \u003d self.api_map.get(service_name)"},{"line_number":714,"context_line":"        if not api:"},{"line_number":715,"context_line":"            detail \u003d _(\"Unknown service API: %s\") % service_name"},{"line_number":716,"context_line":"            raise exception.CellServiceAPIMethodNotFound(detail\u003ddetail)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F670%3D","line":713,"in_reply_to":"AAAALn%2F%2F0mE%3D","updated":"2012-11-15 20:03:17.000000000","message":"I think that this mapping can go away as we\u0027ll only be calling compute api methods.  Initially I wasn\u0027t sure if network or volume apis would need to be proxied down.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ddc630b4fab8acfbd8d525db8e96b69eaf9911f9","unresolved":false,"context_lines":[{"line_number":735,"context_line":"            instance_uuid \u003d args[0]"},{"line_number":736,"context_line":"            try:"},{"line_number":737,"context_line":"                instance \u003d db.instance_get_by_uuid(context, instance_uuid)"},{"line_number":738,"context_line":"            except exception.InstanceNotFound:"},{"line_number":739,"context_line":"                # Kick an instance_destroy update to the top if it\u0027s not"},{"line_number":740,"context_line":"                # a broadcast message, since we must have gotten out of"},{"line_number":741,"context_line":"                # sync.."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALn%2F%2F0mA%3D","line":738,"updated":"2012-11-03 06:40:56.000000000","message":"Does this really kick it to the top, if a node in the current path up the tree dies, this message will just end up going no-where right?","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":735,"context_line":"            instance_uuid \u003d args[0]"},{"line_number":736,"context_line":"            try:"},{"line_number":737,"context_line":"                instance \u003d db.instance_get_by_uuid(context, instance_uuid)"},{"line_number":738,"context_line":"            except exception.InstanceNotFound:"},{"line_number":739,"context_line":"                # Kick an instance_destroy update to the top if it\u0027s not"},{"line_number":740,"context_line":"                # a broadcast message, since we must have gotten out of"},{"line_number":741,"context_line":"                # sync.."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F67w%3D","line":738,"in_reply_to":"AAAALn%2F%2F0mA%3D","updated":"2012-11-15 20:03:17.000000000","message":"It gets sent to all parents... and each level above will send it to its parents.  If there\u0027s a break in the chain, the message will sit in a queue until the chain is fixed.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ddc630b4fab8acfbd8d525db8e96b69eaf9911f9","unresolved":false,"context_lines":[{"line_number":779,"context_line":"    def _heal_instances(self, context):"},{"line_number":780,"context_line":"        \"\"\"Periodic task to send updates for a number of instances to"},{"line_number":781,"context_line":"        parent cells."},{"line_number":782,"context_line":"        \"\"\""},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"        interval \u003d FLAGS.cells.instance_update_interval"},{"line_number":785,"context_line":"        if not interval:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALn%2F%2F0l8%3D","line":782,"updated":"2012-11-03 06:40:56.000000000","message":"Does this mean the top level cell eventually knows about all instances?","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":779,"context_line":"    def _heal_instances(self, context):"},{"line_number":780,"context_line":"        \"\"\"Periodic task to send updates for a number of instances to"},{"line_number":781,"context_line":"        parent cells."},{"line_number":782,"context_line":"        \"\"\""},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"        interval \u003d FLAGS.cells.instance_update_interval"},{"line_number":785,"context_line":"        if not interval:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F67Y%3D","line":782,"in_reply_to":"AAAALn%2F%2F0l8%3D","updated":"2012-11-15 20:03:17.000000000","message":"Yes... and usually it does immediately.  The top level creates the instance in the DB before passing down to child cells.  This is just to cover cases where messages were lost or the API cell gets out of sync for some unknown reason.  I may change this approach, but it\u0027s a nice-to-have cover-our-butts type of thing for now.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ddc630b4fab8acfbd8d525db8e96b69eaf9911f9","unresolved":false,"context_lines":[{"line_number":822,"context_line":"                if not instance_uuid:"},{"line_number":823,"context_line":"                    return"},{"line_number":824,"context_line":"                try:"},{"line_number":825,"context_line":"                    instance \u003d self.db.instance_get_by_uuid(rd_context,"},{"line_number":826,"context_line":"                            instance_uuid)"},{"line_number":827,"context_line":"                except exception.InstanceNotFound:"},{"line_number":828,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALn%2F%2F0l4%3D","line":825,"updated":"2012-11-03 06:40:56.000000000","message":"If each cell has a db, what is stopping instance uuids from conflicting, along with other db information that could conflict? Is this the case? Seems like if each cell has its own DB then there is a chance for conflicts to happen (as already exist when there is just 1 db due to lack of constraints).","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":822,"context_line":"                if not instance_uuid:"},{"line_number":823,"context_line":"                    return"},{"line_number":824,"context_line":"                try:"},{"line_number":825,"context_line":"                    instance \u003d self.db.instance_get_by_uuid(rd_context,"},{"line_number":826,"context_line":"                            instance_uuid)"},{"line_number":827,"context_line":"                except exception.InstanceNotFound:"},{"line_number":828,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F%2FEQ%3D","line":825,"in_reply_to":"AAAALn%2F%2F0l4%3D","updated":"2012-11-13 21:11:30.000000000","message":"It\u0027s a UUID (Universally Unique ID) :-)\n\nhttp://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":822,"context_line":"                if not instance_uuid:"},{"line_number":823,"context_line":"                    return"},{"line_number":824,"context_line":"                try:"},{"line_number":825,"context_line":"                    instance \u003d self.db.instance_get_by_uuid(rd_context,"},{"line_number":826,"context_line":"                            instance_uuid)"},{"line_number":827,"context_line":"                except exception.InstanceNotFound:"},{"line_number":828,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F67U%3D","line":825,"in_reply_to":"AAAAMH%2F%2F%2FEQ%3D","updated":"2012-11-15 20:03:17.000000000","message":"Yeah.  And also:  The API cell is where the uuid is generated for instances.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ddc630b4fab8acfbd8d525db8e96b69eaf9911f9","unresolved":false,"context_lines":[{"line_number":919,"context_line":"        LOG.debug(_(\"Got message to call DB API method %(method)s \""},{"line_number":920,"context_line":"                \"with args %(args)s and kwargs %(kwargs)s\"),"},{"line_number":921,"context_line":"                locals())"},{"line_number":922,"context_line":"        db_method \u003d getattr(self.db, method)"},{"line_number":923,"context_line":"        try:"},{"line_number":924,"context_line":"            db_method(context, *args, update_cells\u003dFalse, **kwargs)"},{"line_number":925,"context_line":"        except exception.NotFound:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALn%2F%2F0l0%3D","line":922,"updated":"2012-11-03 06:40:56.000000000","message":"Durn, more magic method calling. Seems like all of these magic attr magic just masks a real API that should just be defined instead of being hidden.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":919,"context_line":"        LOG.debug(_(\"Got message to call DB API method %(method)s \""},{"line_number":920,"context_line":"                \"with args %(args)s and kwargs %(kwargs)s\"),"},{"line_number":921,"context_line":"                locals())"},{"line_number":922,"context_line":"        db_method \u003d getattr(self.db, method)"},{"line_number":923,"context_line":"        try:"},{"line_number":924,"context_line":"            db_method(context, *args, update_cells\u003dFalse, **kwargs)"},{"line_number":925,"context_line":"        except exception.NotFound:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F67Q%3D","line":922,"in_reply_to":"AAAALn%2F%2F0l0%3D","updated":"2012-11-15 20:03:17.000000000","message":"Ya.  So initially I had the individual calls here for each DB call that I needed to happen at the API level (to update state on things)... but then I found I was duplicating code every single time I found something new to send up..","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ddc630b4fab8acfbd8d525db8e96b69eaf9911f9","unresolved":false,"context_lines":[{"line_number":950,"context_line":"        else:"},{"line_number":951,"context_line":"            return db.service_get_all(context, disabled\u003dFalse)"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"    def task_logs(self, context, routing_path, **kwargs):"},{"line_number":954,"context_line":"        task_name \u003d kwargs.get(\u0027task_name\u0027)"},{"line_number":955,"context_line":"        begin \u003d kwargs.get(\u0027begin\u0027)"},{"line_number":956,"context_line":"        end \u003d kwargs.get(\u0027end\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALn%2F%2F0lw%3D","line":953,"updated":"2012-11-03 06:40:56.000000000","message":"Whats this?","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":950,"context_line":"        else:"},{"line_number":951,"context_line":"            return db.service_get_all(context, disabled\u003dFalse)"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"    def task_logs(self, context, routing_path, **kwargs):"},{"line_number":954,"context_line":"        task_name \u003d kwargs.get(\u0027task_name\u0027)"},{"line_number":955,"context_line":"        begin \u003d kwargs.get(\u0027begin\u0027)"},{"line_number":956,"context_line":"        end \u003d kwargs.get(\u0027end\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F67I%3D","line":953,"in_reply_to":"AAAALn%2F%2F0lw%3D","updated":"2012-11-15 20:03:17.000000000","message":"This belongs with one of the other patch sets, I guess (the instance_usage_audit_log API extension update for cells).","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"289dc0e52dfc6075419d6eb3cd11914b4158f6c2","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class CellInfo(object):"},{"line_number":73,"context_line":"    \"\"\"Holds information ior a particular cell.\"\"\""},{"line_number":74,"context_line":"    def __init__(self, cell_name, is_me\u003dFalse):"},{"line_number":75,"context_line":"        self.name \u003d cell_name"},{"line_number":76,"context_line":"        self.is_me \u003d is_me"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2Fz5s%3D","line":73,"updated":"2012-11-21 20:23:32.000000000","message":"strange I\u0027d never seen this typo until now.  will be fixed in next patch set.","commit_id":"31441fcec21deddcd042ff8203ae68a41901b441"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b887e6ff862c6e1457cccdf1e0f2fab71057babe","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class CellInfo(object):"},{"line_number":73,"context_line":"    \"\"\"Holds information ior a particular cell.\"\"\""},{"line_number":74,"context_line":"    def __init__(self, cell_name, is_me\u003dFalse):"},{"line_number":75,"context_line":"        self.name \u003d cell_name"},{"line_number":76,"context_line":"        self.is_me \u003d is_me"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2Fwy0%3D","line":73,"in_reply_to":"AAAAMH%2F%2Fz5s%3D","updated":"2012-11-26 21:39:44.000000000","message":"Isn\u0027t that always the way?  :)","commit_id":"31441fcec21deddcd042ff8203ae68a41901b441"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"a95a3776a53d4a66db929688f3abca0ca23f05d0","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"cell_manager_opts \u003d ["},{"line_number":29,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"},{"line_number":30,"context_line":"                default\u003d\u0027nova.cells.rpc_driver.CellsRPCDriver\u0027,"},{"line_number":31,"context_line":"                help\u003d\u0027Cells communication driver to use\u0027),"},{"line_number":32,"context_line":"]"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2F0kU%3D","line":30,"updated":"2013-01-03 23:25:19.000000000","message":"I\u0027m generally not a fan of options like this with class paths as the value.  I\u0027d rather it just be something like \n\n    [cells]\n    driver\u003drpc_driver\n\nand in the code map that to the right class.\n\nThere are a number of patches in the works to convert all options like this over to entry points, though, so it may not be worth messing with until it gets converted to entry points.","commit_id":"c4e0c78f7921d2ad2b765764108281e6cc75f17d"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"86a9cf91dcf25f9c32058b341e9d32ec483c3578","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"cell_manager_opts \u003d ["},{"line_number":29,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"},{"line_number":30,"context_line":"                default\u003d\u0027nova.cells.rpc_driver.CellsRPCDriver\u0027,"},{"line_number":31,"context_line":"                help\u003d\u0027Cells communication driver to use\u0027),"},{"line_number":32,"context_line":"]"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2F0QU%3D","line":30,"in_reply_to":"AAAAM3%2F%2F0kU%3D","updated":"2013-01-03 23:59:01.000000000","message":"Ok.","commit_id":"c4e0c78f7921d2ad2b765764108281e6cc75f17d"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"a95a3776a53d4a66db929688f3abca0ca23f05d0","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    Communication to other cells happens via the messaging module.  The"},{"line_number":48,"context_line":"    MessageRunner from that module will handle routing the message to"},{"line_number":49,"context_line":"    the correct cell via the communications driver.  Most methods below"},{"line_number":50,"context_line":"    create \u0027targetted\u0027 (where we want to route a message to a specific cell)"},{"line_number":51,"context_line":"    or \u0027broadcast\u0027 (where we want a message to go to multiple cells)"},{"line_number":52,"context_line":"    messages."},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2F0kk%3D","line":50,"updated":"2013-01-03 23:25:19.000000000","message":"s/targetted/targeted/\n\n... turns out this wasn\u0027t just a typo here, it\u0027s spelled this way everywhere in the code.  I think it should be changed, though.  :-)","commit_id":"c4e0c78f7921d2ad2b765764108281e6cc75f17d"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"86a9cf91dcf25f9c32058b341e9d32ec483c3578","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    Communication to other cells happens via the messaging module.  The"},{"line_number":48,"context_line":"    MessageRunner from that module will handle routing the message to"},{"line_number":49,"context_line":"    the correct cell via the communications driver.  Most methods below"},{"line_number":50,"context_line":"    create \u0027targetted\u0027 (where we want to route a message to a specific cell)"},{"line_number":51,"context_line":"    or \u0027broadcast\u0027 (where we want a message to go to multiple cells)"},{"line_number":52,"context_line":"    messages."},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2F0Qo%3D","line":50,"in_reply_to":"AAAAM3%2F%2F0kk%3D","updated":"2013-01-03 23:59:01.000000000","message":"Ah yeah. :)  meant to look that one up.  got it wrong!  Done.","commit_id":"c4e0c78f7921d2ad2b765764108281e6cc75f17d"}],"nova/cells/messaging.py":[{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"88092ae28a12177ce22189021f7a7a5f31bb9011","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    routing_path is updated on every hop through a cell.  The current"},{"line_number":94,"context_line":"    cell name is appended to it (cells are separated by \u0027!\u0027).  This"},{"line_number":95,"context_line":"    is used to tell if we\u0027re reached the target cell and also to"},{"line_number":96,"context_line":"    determine the source of a message for responses by reversing it."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    hop_count is incremented and compared against max_hop_count.  The"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2F6VM%3D","line":95,"updated":"2012-12-21 10:02:38.000000000","message":"\"we\u0027re\" typo.","commit_id":"920dada6f22a01fd7e4e2d870cb7be2a36348568"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"abbfe9e6e91aff1f0c0076ad6793e082731b8b6c","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            direction, target_cell, **kwargs):"},{"line_number":222,"context_line":"        super(_TargettedMessage, self).__init__(message_handler, ctxt,"},{"line_number":223,"context_line":"                method_name, method_kwargs, direction, **kwargs)"},{"line_number":224,"context_line":"        if isinstance(target_cell, cells_state.CellState):"},{"line_number":225,"context_line":"            target_cell \u003d \u0027%s.%s\u0027 % (self.our_path_part, target_cell.name)"},{"line_number":226,"context_line":"        self.target_cell \u003d target_cell"},{"line_number":227,"context_line":"        self.base_attrs_to_json.append(\u0027target_cell\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2F6U8%3D","line":224,"updated":"2012-12-21 10:14:12.000000000","message":"Need a comment for this.  Essentially you can pass in a full cell name as \u0027target_cell\u0027 OR you can pass in a CellState instance.","commit_id":"920dada6f22a01fd7e4e2d870cb7be2a36348568"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"abbfe9e6e91aff1f0c0076ad6793e082731b8b6c","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            resp \u003d Response.from_json(json_response)"},{"line_number":281,"context_line":"            if resp.failure:"},{"line_number":282,"context_line":"                (exc_name, _exc_type, _tb) \u003d resp.response"},{"line_number":283,"context_line":"                raise exception.CellError(exc_name\u003dexc_name)"},{"line_number":284,"context_line":"            return resp.response"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2F6U4%3D","line":283,"updated":"2012-12-21 10:14:12.000000000","message":"The RPC code in openstack-common has a way to raise the remote exception correctly here locally.  Unfortunately it\u0027s not abstracted in a way that can be used outside of RPC.  It would be nice to make it a bit more generalized so I could use it here.","commit_id":"920dada6f22a01fd7e4e2d870cb7be2a36348568"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"abbfe9e6e91aff1f0c0076ad6793e082731b8b6c","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        if self.run_locally:"},{"line_number":314,"context_line":"            target_cells.append(self.state_manager.my_cell_state)"},{"line_number":315,"context_line":"        self.next_hops \u003d target_cells"},{"line_number":316,"context_line":"        return len(target_cells)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def process(self):"},{"line_number":319,"context_line":"        num_targets \u003d len(self.next_hops)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2F6U0%3D","line":316,"updated":"2012-12-21 10:14:12.000000000","message":"Nix this line.  Not used.","commit_id":"920dada6f22a01fd7e4e2d870cb7be2a36348568"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"abbfe9e6e91aff1f0c0076ad6793e082731b8b6c","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        response.process()"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"    def _put_response(self, response_uuid, response):"},{"line_number":628,"context_line":"        \"\"\"Put a response into a response queue.  This is called by the"},{"line_number":629,"context_line":"        InterCellRPCDispatcher when it receives a response from another"},{"line_number":630,"context_line":"        cell."},{"line_number":631,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2F6Uw%3D","line":628,"updated":"2012-12-21 10:14:12.000000000","message":"This doc string is wrong.  Leftover from before I moved some code.","commit_id":"920dada6f22a01fd7e4e2d870cb7be2a36348568"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"abbfe9e6e91aff1f0c0076ad6793e082731b8b6c","unresolved":false,"context_lines":[{"line_number":637,"context_line":"        resp_queue.put(response)"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"    def _setup_response_queue(self, message):"},{"line_number":640,"context_line":"        \"\"\"Set up an eventlet queue to use to wait for replies."},{"line_number":641,"context_line":""},{"line_number":642,"context_line":"        Replies come back from the target cell via a \u0027route_response\u0027"},{"line_number":643,"context_line":"        method call in the InterCellRPCDispatcher.  When received,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2F6Us%3D","line":640,"updated":"2012-12-21 10:14:12.000000000","message":"Ditto.","commit_id":"920dada6f22a01fd7e4e2d870cb7be2a36348568"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"a95a3776a53d4a66db929688f3abca0ca23f05d0","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            help\u003d\u0027Maximum number of hops for cells routing.\u0027),"},{"line_number":48,"context_line":"    cfg.StrOpt(\u0027scheduler\u0027,"},{"line_number":49,"context_line":"            default\u003d\u0027nova.cells.scheduler.CellsScheduler\u0027,"},{"line_number":50,"context_line":"            help\u003d\u0027Cells scheduler to use\u0027)]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"CONF \u003d cfg.CONF"},{"line_number":53,"context_line":"CONF.import_opt(\u0027name\u0027, \u0027nova.cells.opts\u0027, group\u003d\u0027cells\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2F0fA%3D","line":50,"updated":"2013-01-03 23:25:19.000000000","message":"same comment that I made about the driver option ...","commit_id":"c4e0c78f7921d2ad2b765764108281e6cc75f17d"}],"nova/cells/rpcapi.py":[{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    # with other nova services.  Leaving at 1.0 for the moment to avoid"},{"line_number":49,"context_line":"    # version mismatch errors due to nova-api potentially getting"},{"line_number":50,"context_line":"    # updated before nova-cells.  After the versioned RPC API gets some"},{"line_number":51,"context_line":"    # testing, this should be addressed."},{"line_number":52,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def __init__(self, cells_driver_cls\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F%2FD8%3D","line":51,"updated":"2012-11-13 21:11:30.000000000","message":"can remove this comment, i think 1.0 is fine.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    # with other nova services.  Leaving at 1.0 for the moment to avoid"},{"line_number":49,"context_line":"    # version mismatch errors due to nova-api potentially getting"},{"line_number":50,"context_line":"    # updated before nova-cells.  After the versioned RPC API gets some"},{"line_number":51,"context_line":"    # testing, this should be addressed."},{"line_number":52,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def __init__(self, cells_driver_cls\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F660%3D","line":51,"in_reply_to":"AAAAMH%2F%2F%2FD8%3D","updated":"2012-11-15 20:03:17.000000000","message":"Done","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def call_dbapi_method(self, context, method, args, kwargs\u003dNone,"},{"line_number":125,"context_line":"            sub_topic\u003dNone):"},{"line_number":126,"context_line":"        \"\"\"Broadcast message up, saying to call a DB API method.\"\"\""},{"line_number":127,"context_line":"        if kwargs is None:"},{"line_number":128,"context_line":"            kwargs \u003d {}"},{"line_number":129,"context_line":"        db_method_info \u003d {\u0027method\u0027: method,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F%2FDc%3D","line":126,"updated":"2012-11-13 21:11:30.000000000","message":"This is a bit scary.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def call_dbapi_method(self, context, method, args, kwargs\u003dNone,"},{"line_number":125,"context_line":"            sub_topic\u003dNone):"},{"line_number":126,"context_line":"        \"\"\"Broadcast message up, saying to call a DB API method.\"\"\""},{"line_number":127,"context_line":"        if kwargs is None:"},{"line_number":128,"context_line":"            kwargs \u003d {}"},{"line_number":129,"context_line":"        db_method_info \u003d {\u0027method\u0027: method,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F66g%3D","line":126,"in_reply_to":"AAAAMH%2F%2F%2FDc%3D","updated":"2012-11-15 20:03:17.000000000","message":"Ya, similar response to jharlow in cells/manager.py.  I initially had them all broken out... but found a lot of code duplication.  And I kept finding things I needed to sync up... so I made this generic.  If there\u0027s strong opinions on it, I can change this.  The current methods that are called are essentially the same ones I modified in nova/db/api.py","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"}],"nova/cells/scheduler.py":[{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":202,"context_line":"    def _cast_to_scheduler(self, context, fwd_msg):"},{"line_number":203,"context_line":"        # NOTE(belliott) Kinda hackish, but this runs the"},{"line_number":204,"context_line":"        # message through the scheduler rpcapi and tags it"},{"line_number":205,"context_line":"        # with a proper version:"},{"line_number":206,"context_line":"        self.scheduler_rpcapi.run_instance(context,"},{"line_number":207,"context_line":"                fwd_msg[\u0027args\u0027][\u0027request_spec\u0027],"},{"line_number":208,"context_line":"                fwd_msg[\u0027args\u0027][\u0027admin_password\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F%2FDM%3D","line":205,"updated":"2012-11-13 21:11:30.000000000","message":"I guess this comment is no longer relevant?","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        # NOTE(belliott) Kinda hackish, but this runs the"},{"line_number":204,"context_line":"        # message through the scheduler rpcapi and tags it"},{"line_number":205,"context_line":"        # with a proper version:"},{"line_number":206,"context_line":"        self.scheduler_rpcapi.run_instance(context,"},{"line_number":207,"context_line":"                fwd_msg[\u0027args\u0027][\u0027request_spec\u0027],"},{"line_number":208,"context_line":"                fwd_msg[\u0027args\u0027][\u0027admin_password\u0027],"},{"line_number":209,"context_line":"                fwd_msg[\u0027args\u0027][\u0027injected_files\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F%2FDE%3D","line":206,"updated":"2012-11-13 21:11:30.000000000","message":"If this is the only method being called, how about remove this _cast_to_schedulre() wrapper?","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                fwd_msg[\u0027args\u0027][\u0027requested_networks\u0027],"},{"line_number":211,"context_line":"                fwd_msg[\u0027args\u0027][\u0027is_first_time\u0027],"},{"line_number":212,"context_line":"                fwd_msg[\u0027args\u0027][\u0027filter_properties\u0027])"},{"line_number":213,"context_line":"        #rpc.cast(context, FLAGS.scheduler_topic, fwd_msg)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def schedule_run_instance_direct(self, context, routing_path, **kwargs):"},{"line_number":216,"context_line":"        \"\"\"Pick a cell where we should create a new instance."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F%2FDI%3D","line":213,"updated":"2012-11-13 21:11:30.000000000","message":"remove this?","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                fwd_msg[\u0027args\u0027][\u0027requested_networks\u0027],"},{"line_number":211,"context_line":"                fwd_msg[\u0027args\u0027][\u0027is_first_time\u0027],"},{"line_number":212,"context_line":"                fwd_msg[\u0027args\u0027][\u0027filter_properties\u0027])"},{"line_number":213,"context_line":"        #rpc.cast(context, FLAGS.scheduler_topic, fwd_msg)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def schedule_run_instance_direct(self, context, routing_path, **kwargs):"},{"line_number":216,"context_line":"        \"\"\"Pick a cell where we should create a new instance."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F66Y%3D","line":213,"in_reply_to":"AAAAMH%2F%2F%2FDI%3D","updated":"2012-11-15 20:03:17.000000000","message":"I\u0027ve changed the scheduler stuff quite a bit.  The next patchs will have the scheduling filters and weights as a separate patch set... leaving this main \u0027add the main cells\u0027 code review a little smaller here.  Your cleanups here should be addressed.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"}],"nova/cells/utils.py":[{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from nova.openstack.common import log as logging"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"FLAGS \u003d flags.FLAGS"},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(\u0027nova.cells.common\u0027)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"PATH_CELL_SEP \u003d \u0027!\u0027"},{"line_number":28,"context_line":"PATH_CELL_HOST_SEP \u003d \u0027@\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F9%2BI%3D","line":25,"updated":"2012-11-13 21:11:30.000000000","message":"use __name__ here","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from nova.openstack.common import log as logging"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"FLAGS \u003d flags.FLAGS"},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(\u0027nova.cells.common\u0027)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"PATH_CELL_SEP \u003d \u0027!\u0027"},{"line_number":28,"context_line":"PATH_CELL_HOST_SEP \u003d \u0027@\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F66M%3D","line":25,"in_reply_to":"AAAAMH%2F%2F9%2BI%3D","updated":"2012-11-15 20:03:17.000000000","message":"Disappeared as its not used.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"}],"nova/compute/cells_api.py":[{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"4aa1680cf44c7b49c128d8333944bba7375ec61c","unresolved":false,"context_lines":[{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def set_host_enabled(self, context, host, enabled):"},{"line_number":302,"context_line":"        \"\"\"Sets the specified host\u0027s ability to accept new instances.\"\"\""},{"line_number":303,"context_line":"        # FIXME(comstud): Need to know cell from host!"},{"line_number":304,"context_line":"        pass"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    def host_power_action(self, context, host, action):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALn%2F%2F18E%3D","line":303,"updated":"2012-11-01 21:17:16.000000000","message":"Can this be fixed before merging into trunk?\n\nThe FIXME comment isn\u0027t super-clear (to me, at least). Would it be possible to add a little bit more detail?","commit_id":"97a7be749c2dd70a09efbd526344be4d5c865ffb"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"051917d7c92131ff1924b8c3cdba379d25eea805","unresolved":false,"context_lines":[{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def set_host_enabled(self, context, host, enabled):"},{"line_number":302,"context_line":"        \"\"\"Sets the specified host\u0027s ability to accept new instances.\"\"\""},{"line_number":303,"context_line":"        # FIXME(comstud): Need to know cell from host!"},{"line_number":304,"context_line":"        pass"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    def host_power_action(self, context, host, action):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2F620%3D","line":303,"in_reply_to":"AAAALn%2F%2F18E%3D","updated":"2012-11-15 20:06:12.000000000","message":"Updated these comments to be more clear.","commit_id":"97a7be749c2dd70a09efbd526344be4d5c865ffb"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.cells_rpcapi \u003d cells_rpcapi_obj"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def __getattr__(self, key):"},{"line_number":56,"context_line":"        def _noop_rpc_wrapper(*args, **kwargs):"},{"line_number":57,"context_line":"            return None"},{"line_number":58,"context_line":"        return _noop_rpc_wrapper"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F96Y%3D","line":56,"updated":"2012-11-13 21:11:30.000000000","message":"I think this __getattr__ stuff should be able to be removed.  The scheduler rpc API isn\u0027t do this magic anymore.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.cells_rpcapi \u003d cells_rpcapi_obj"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def __getattr__(self, key):"},{"line_number":56,"context_line":"        def _noop_rpc_wrapper(*args, **kwargs):"},{"line_number":57,"context_line":"            return None"},{"line_number":58,"context_line":"        return _noop_rpc_wrapper"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F644%3D","line":56,"in_reply_to":"AAAAMH%2F%2F96Y%3D","updated":"2012-11-15 20:03:17.000000000","message":"This is actually there to catch the other scheduler rpcapi calls that are being made that would normally happen in the API cell, but need to happen in a child cell.  One such example is prep_resize.  We super() to the ComputeAPI.resize() call which makes a scheduler_rpcapi call that needs to be a no-op.\n\nThis is the load of stuff that I hate.  ComputeAPI needs some changes to make this stuff more clean.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"}],"nova/exception.py":[{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"a95a3776a53d4a66db929688f3abca0ca23f05d0","unresolved":false,"context_lines":[{"line_number":794,"context_line":""},{"line_number":795,"context_line":""},{"line_number":796,"context_line":"class InstanceUnknownCell(NotFound):"},{"line_number":797,"context_line":"    message \u003d _(\"Cell is not known for instance %(instance_id)s\")"},{"line_number":798,"context_line":""},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"class SchedulerHostFilterNotFound(NotFound):"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2F0Rc%3D","line":797,"updated":"2013-01-03 23:25:19.000000000","message":"should probably change this to instance_uuid","commit_id":"c4e0c78f7921d2ad2b765764108281e6cc75f17d"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"86a9cf91dcf25f9c32058b341e9d32ec483c3578","unresolved":false,"context_lines":[{"line_number":794,"context_line":""},{"line_number":795,"context_line":""},{"line_number":796,"context_line":"class InstanceUnknownCell(NotFound):"},{"line_number":797,"context_line":"    message \u003d _(\"Cell is not known for instance %(instance_id)s\")"},{"line_number":798,"context_line":""},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"class SchedulerHostFilterNotFound(NotFound):"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2F0QI%3D","line":797,"in_reply_to":"AAAAM3%2F%2F0Rc%3D","updated":"2013-01-03 23:59:01.000000000","message":"Done","commit_id":"c4e0c78f7921d2ad2b765764108281e6cc75f17d"}],"nova/test.py":[{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"1a2d8b9cf87ddb268dd1a5d9f3371443cbc858d3","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        \"\"\"Override flag variables for a test.\"\"\""},{"line_number":134,"context_line":"        group \u003d kw.pop(\u0027group\u0027, None)"},{"line_number":135,"context_line":"        for k, v in kw.iteritems():"},{"line_number":136,"context_line":"            FLAGS.set_override(k, v, group)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def start_service(self, name, host\u003dNone, **kwargs):"},{"line_number":139,"context_line":"        host \u003d host and host or uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F958%3D","line":136,"updated":"2012-11-13 21:11:30.000000000","message":"Looks like a simple little fix that could be split out of this patch.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"9782dc40c8607e7bb05d12e78ba12586582f2165","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        \"\"\"Override flag variables for a test.\"\"\""},{"line_number":134,"context_line":"        group \u003d kw.pop(\u0027group\u0027, None)"},{"line_number":135,"context_line":"        for k, v in kw.iteritems():"},{"line_number":136,"context_line":"            FLAGS.set_override(k, v, group)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def start_service(self, name, host\u003dNone, **kwargs):"},{"line_number":139,"context_line":"        host \u003d host and host or uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F64U%3D","line":136,"in_reply_to":"AAAAMH%2F%2F958%3D","updated":"2012-11-15 20:03:17.000000000","message":"Will do.","commit_id":"42b5681f5f86637661eec89cdaf1ee752454b2a3"}],"nova/tests/cells/fakes.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b887e6ff862c6e1457cccdf1e0f2fab71057babe","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def _cell_get_all(self, context):"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"below and in nova.cells.manager to see how it\u0027s used in the tests."},{"line_number":53,"context_line":"\"\"\""},{"line_number":54,"context_line":"FAKE_CELLS \u003d {}"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"FAKE_CELLS_REFRESH \u003d [dict(id\u003d5, name\u003d\u0027cell1\u0027, is_parent\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2Fwxs%3D","line":53,"updated":"2012-11-26 21:39:44.000000000","message":"Is it meaningful to have a string like this before a variable assignment?  I\u0027d rather see this as a comment than a bare string.","commit_id":"31441fcec21deddcd042ff8203ae68a41901b441"}],"nova/tests/cells/test_cells_manager.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b887e6ff862c6e1457cccdf1e0f2fab71057babe","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        self.assertEqual(cell_info.name, parent_cell[\u0027name\u0027])"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_route_message_to_self_happy_day(self):"},{"line_number":174,"context_line":"        \"\"\"Test happy day call to my cell returning a response.\"\"\""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        fake_context \u003d \u0027fake_context\u0027"},{"line_number":177,"context_line":"        message \u003d {\u0027method\u0027: \u0027test_method\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2Fwxc%3D","line":174,"updated":"2012-11-26 21:39:44.000000000","message":"Can we avoid docstrings on tests?  Nose reports the test as the contents of the docstring, if one is set, and I find that makes it difficult to connect a test failure with the test itself.","commit_id":"31441fcec21deddcd042ff8203ae68a41901b441"}]}
