)]}'
{"nova/api/openstack/v2/contrib/zones.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"7fbc027892912c817e525fc24519b2e28f42316a","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    def info(self, req):"},{"line_number":85,"context_line":"        \"\"\"Return name and capabilities for this zone.\"\"\""},{"line_number":86,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":87,"context_line":"        items \u003d nova.scheduler.api.get_service_capabilities(context)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        zone \u003d dict(name\u003dFLAGS.zone_name)"},{"line_number":90,"context_line":"        caps \u003d FLAGS.zone_capabilities"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAADH%2F%2F%2BJY%3D","line":87,"updated":"2012-01-05 14:47:05.000000000","message":"(again, this doesn\u0027t really flow for me)","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"6526743d6a375cba99bbca1431266685e264bc50","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    def info(self, req):"},{"line_number":85,"context_line":"        \"\"\"Return name and capabilities for this zone.\"\"\""},{"line_number":86,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":87,"context_line":"        items \u003d nova.scheduler.api.get_service_capabilities(context)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        zone \u003d dict(name\u003dFLAGS.zone_name)"},{"line_number":90,"context_line":"        caps \u003d FLAGS.zone_capabilities"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAD3%2F%2F%2Bl0%3D","line":87,"in_reply_to":"AAAADH%2F%2F%2BJY%3D","updated":"2012-01-12 20:59:10.000000000","message":"My problem with calling it \u0027get_zone_capabilities()\u0027 is...that call does not really return zone capabilities.  It\u0027s returning the capabilities for the services.  zone capabilities are a combination of what is defined in FLAGS as well as the capabilities of the services.  That\u0027s what \u0027info\u0027 returns here.  Perhaps \u0027get_capabilities_for_services\u0027 is a better name.","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"}],"nova/scheduler/api.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"7fbc027892912c817e525fc24519b2e28f42316a","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    return db.zone_update(context, zone_id, data)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def get_service_capabilities(context):"},{"line_number":89,"context_line":"    \"\"\"Returns a dict of key, value capabilities for this zone.\"\"\""},{"line_number":90,"context_line":"    return _call_scheduler(\u0027get_service_capabilities\u0027, context\u003dcontext)"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAADH%2F%2F%2BJk%3D","line":88,"updated":"2012-01-05 14:47:05.000000000","message":"Don\u0027t really like this renaming. The purpose is to return the capabilities of this zone. This sounds like the capabilities for a particular service. We should think this one over a little more perhaps?","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"6526743d6a375cba99bbca1431266685e264bc50","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    return db.zone_update(context, zone_id, data)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def get_service_capabilities(context):"},{"line_number":89,"context_line":"    \"\"\"Returns a dict of key, value capabilities for this zone.\"\"\""},{"line_number":90,"context_line":"    return _call_scheduler(\u0027get_service_capabilities\u0027, context\u003dcontext)"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAD3%2F%2F%2Blw%3D","line":88,"in_reply_to":"AAAADH%2F%2F%2BJk%3D","updated":"2012-01-12 20:59:10.000000000","message":"See comment in zones.py.  If the true purpose is to return the capabilities of the zone, then we should combine the capabilities of the services with the capabilities for the zone here, which would make the original method name appropriate.  I\u0027ll resolve this one way or another in the next patch.","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"}],"nova/scheduler/distributed_scheduler.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"3d63243581c962cd3d9ddc7e50a78f81a5ef8d7a","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        # selections can adjust accordingly."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # unfiltered_hosts_dict is {host : ZoneManager.HostInfo()}"},{"line_number":318,"context_line":"        unfilt_hosts_dict \u003d self.host_manager.get_all_host_states(elevated,"},{"line_number":319,"context_line":"                topic)"},{"line_number":320,"context_line":"        hosts \u003d unfilt_hosts_dict.itervalues()"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F60A%3D","line":318,"updated":"2011-12-23 17:10:46.000000000","message":"the \u0027ered\u0027 was too much?","commit_id":"80f3a68a5ba65e4bb725e6d30c7ef756e0a0f75a"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"19cc6e23d55402ab3c0ecfad4f614525ccf6b40f","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        # selections can adjust accordingly."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # unfiltered_hosts_dict is {host : ZoneManager.HostInfo()}"},{"line_number":318,"context_line":"        unfilt_hosts_dict \u003d self.host_manager.get_all_host_states(elevated,"},{"line_number":319,"context_line":"                topic)"},{"line_number":320,"context_line":"        hosts \u003d unfilt_hosts_dict.itervalues()"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6tw%3D","line":318,"in_reply_to":"AAAAC3%2F%2F60A%3D","updated":"2011-12-23 19:53:45.000000000","message":"lol.. can\u0027t remember.  I think I was trying to avoid some unnecessary line wrap below... and then things changed further after that.","commit_id":"80f3a68a5ba65e4bb725e6d30c7ef756e0a0f75a"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"7fbc027892912c817e525fc24519b2e28f42316a","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            weighted_host \u003d weighted_hosts.pop(0)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"            instance \u003d None"},{"line_number":108,"context_line":"            if weighted_host.zone:"},{"line_number":109,"context_line":"                instance \u003d self._ask_child_zone_to_create_instance(elevated,"},{"line_number":110,"context_line":"                                        weighted_host, request_spec, kwargs)"},{"line_number":111,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAADH%2F%2F%2BJg%3D","line":108,"updated":"2012-01-05 14:47:05.000000000","message":"I don\u0027t have any issue with this change, just wondering what the motivation was? Particularly since we use .host elsewhere in the code as the determining factor.","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"7fbc027892912c817e525fc24519b2e28f42316a","unresolved":false,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        config_options \u003d self._get_configuration_options()"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        filter_properties \u003d {\u0027config_options\u0027: config_options,"},{"line_number":311,"context_line":"                             \u0027instance_type\u0027: instance_type,"},{"line_number":312,"context_line":"                             \u0027ignore_hosts\u0027: []}"},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAADH%2F%2F%2BJQ%3D","line":310,"updated":"2012-01-05 14:47:05.000000000","message":"Not sure if this should be a proper class or not ... with an internal dict for the extensible portions. Have all the \"set in stone\" stuff as proper attributes?","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"6526743d6a375cba99bbca1431266685e264bc50","unresolved":false,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        config_options \u003d self._get_configuration_options()"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        filter_properties \u003d {\u0027config_options\u0027: config_options,"},{"line_number":311,"context_line":"                             \u0027instance_type\u0027: instance_type,"},{"line_number":312,"context_line":"                             \u0027ignore_hosts\u0027: []}"},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAD3%2F%2F%2Blo%3D","line":310,"in_reply_to":"AAAADH%2F%2F%2BJQ%3D","updated":"2012-01-12 20:59:10.000000000","message":"Right.  Would prefer to leave this for now.  I don\u0027t like making unnecessary classes.  Not sure what it buys us?","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"7fbc027892912c817e525fc24519b2e28f42316a","unresolved":false,"context_lines":[{"line_number":350,"context_line":"            # will change for the next instance."},{"line_number":351,"context_line":"            instance \u003d dict(memory_mb\u003dram_requirement_mb,"},{"line_number":352,"context_line":"                    local_gb\u003ddisk_requirement_gb)"},{"line_number":353,"context_line":"            weighted_host.host_state.update_from_instance(instance)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        # Next, tack on the host weights from the child zones"},{"line_number":356,"context_line":"        if not request_spec.get(\u0027local_zone\u0027, False):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAADH%2F%2F%2BJM%3D","line":353,"updated":"2012-01-05 14:47:05.000000000","message":"very generic naming ... can\u0027t it be more explicit?","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"6526743d6a375cba99bbca1431266685e264bc50","unresolved":false,"context_lines":[{"line_number":350,"context_line":"            # will change for the next instance."},{"line_number":351,"context_line":"            instance \u003d dict(memory_mb\u003dram_requirement_mb,"},{"line_number":352,"context_line":"                    local_gb\u003ddisk_requirement_gb)"},{"line_number":353,"context_line":"            weighted_host.host_state.update_from_instance(instance)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        # Next, tack on the host weights from the child zones"},{"line_number":356,"context_line":"        if not request_spec.get(\u0027local_zone\u0027, False):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAD3%2F%2F%2Blc%3D","line":353,"in_reply_to":"AAAADH%2F%2F%2BJM%3D","updated":"2012-01-12 20:59:10.000000000","message":"Yeah, I\u0027ll come up with something.  I didn\u0027t like \u0027consume\u0027 either, but maybe it actually makes more sense!","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"}],"nova/scheduler/driver.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"7fbc027892912c817e525fc24519b2e28f42316a","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    \"\"\"The base class that all Scheduler classes should inherit from.\"\"\""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def __init__(self):"},{"line_number":152,"context_line":"        self.zone_manager \u003d utils.import_object("},{"line_number":153,"context_line":"                FLAGS.scheduler_zone_manager)"},{"line_number":154,"context_line":"        self.host_manager \u003d utils.import_object("},{"line_number":155,"context_line":"                FLAGS.scheduler_host_manager)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAADH%2F%2F%2BJI%3D","line":152,"updated":"2012-01-05 14:47:05.000000000","message":"good refactoring.","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"7fbc027892912c817e525fc24519b2e28f42316a","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                     {\"method\": \u0027compare_cpu\u0027,"},{"line_number":385,"context_line":"                      \"args\": {\u0027cpu_info\u0027: oservice_ref[\u0027cpu_info\u0027]}})"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        except rpc.RemoteError, err:"},{"line_number":388,"context_line":"            # FIXME(comstud): Should check \u0027err.exc_type\u0027 for specific"},{"line_number":389,"context_line":"            # exception class name"},{"line_number":390,"context_line":"            src \u003d instance_ref[\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAADH%2F%2F%2BJE%3D","line":387,"updated":"2012-01-05 14:47:05.000000000","message":"Is this from another branch? Doesn\u0027t seem applicable to this branch.","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"6526743d6a375cba99bbca1431266685e264bc50","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                     {\"method\": \u0027compare_cpu\u0027,"},{"line_number":385,"context_line":"                      \"args\": {\u0027cpu_info\u0027: oservice_ref[\u0027cpu_info\u0027]}})"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        except rpc.RemoteError, err:"},{"line_number":388,"context_line":"            # FIXME(comstud): Should check \u0027err.exc_type\u0027 for specific"},{"line_number":389,"context_line":"            # exception class name"},{"line_number":390,"context_line":"            src \u003d instance_ref[\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAD3%2F%2F%2BlY%3D","line":387,"in_reply_to":"AAAADH%2F%2F%2BJE%3D","updated":"2012-01-12 20:59:10.000000000","message":"I\u0027ll rip this out and make it separate.","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"ec706efc28e1a06afabd648ef74042779d9d94a4","unresolved":false,"context_lines":[{"line_number":21,"context_line":"Scheduler base class that all Schedulers should inherit from"},{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import contextlib"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from nova.api.ec2 import ec2utils"},{"line_number":27,"context_line":"from nova.compute import api as compute_api"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAD3%2F%2F9p0%3D","line":24,"updated":"2012-01-16 22:29:18.000000000","message":"Are you actually using this import anywhere?","commit_id":"5986349c858c28f149c7950ce3d130d9165d7096"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"b212ed2af2467f26263288c99d4840b741639357","unresolved":false,"context_lines":[{"line_number":21,"context_line":"Scheduler base class that all Schedulers should inherit from"},{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import contextlib"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from nova.api.ec2 import ec2utils"},{"line_number":27,"context_line":"from nova.compute import api as compute_api"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAD3%2F%2F9EE%3D","line":24,"in_reply_to":"AAAAD3%2F%2F9p0%3D","updated":"2012-01-18 05:44:11.000000000","message":"Oops, not anymore.","commit_id":"5986349c858c28f149c7950ce3d130d9165d7096"}],"nova/scheduler/filters/abstract_filter.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"3d63243581c962cd3d9ddc7e50a78f81a5ef8d7a","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class AbstractHostFilter(object):"},{"line_number":21,"context_line":"    \"\"\"Base class for host filters.\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def _full_name(self):"},{"line_number":24,"context_line":"        \"\"\"module.classname of the filter.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6z4%3D","line":21,"updated":"2011-12-23 17:10:46.000000000","message":"Shouldn\u0027t this have filter_\u003cwhatever\u003e: return True (or whatever the default should be)?","commit_id":"80f3a68a5ba65e4bb725e6d30c7ef756e0a0f75a"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"19cc6e23d55402ab3c0ecfad4f614525ccf6b40f","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class AbstractHostFilter(object):"},{"line_number":21,"context_line":"    \"\"\"Base class for host filters.\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def _full_name(self):"},{"line_number":24,"context_line":"        \"\"\"module.classname of the filter.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6ts%3D","line":21,"in_reply_to":"AAAAC3%2F%2F6z4%3D","updated":"2011-12-23 19:53:45.000000000","message":"Yeah, this class is kind of weird now.  Its only real purpose now is to identify which classes are host filter classes. \n\nThe reason why there are no methods is because I wanted to make the filters be able to support more than \u0027compute\u0027.  And I wanted the filter class to be skipped it if didn\u0027t have a method for a specific topic.  I think maybe returning True (in my latest patchset which means to include the host) gives us the same thing, so I think I can add the defaults back.  I\u0027ll check it out.","commit_id":"80f3a68a5ba65e4bb725e6d30c7ef756e0a0f75a"}],"nova/scheduler/filters/all_hosts_filter.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"3d63243581c962cd3d9ddc7e50a78f81a5ef8d7a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    \"\"\"NOP host filter. Returns all hosts.\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def filter_compute(self, host, filter_properties):"},{"line_number":25,"context_line":"        return False"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def filter_volume(self, host, filter_properties):"},{"line_number":28,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6z0%3D","line":25,"updated":"2011-12-23 17:10:46.000000000","message":"naming of these functions should make it more clear what True means and what False means. True \u003d keep host? or does True \u003d remove host?","commit_id":"80f3a68a5ba65e4bb725e6d30c7ef756e0a0f75a"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"19cc6e23d55402ab3c0ecfad4f614525ccf6b40f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    \"\"\"NOP host filter. Returns all hosts.\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def filter_compute(self, host, filter_properties):"},{"line_number":25,"context_line":"        return False"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def filter_volume(self, host, filter_properties):"},{"line_number":28,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6to%3D","line":25,"in_reply_to":"AAAAC3%2F%2F6z0%3D","updated":"2011-12-23 19:53:45.000000000","message":"Yeah... realized that was a problem.  I think this is clearer in my next patch set.","commit_id":"80f3a68a5ba65e4bb725e6d30c7ef756e0a0f75a"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"7fbc027892912c817e525fc24519b2e28f42316a","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class AllHostsFilter(abstract_filter.AbstractHostFilter):"},{"line_number":22,"context_line":"    \"\"\"NOP host filter. Returns all hosts.\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def compute_host_passes(self, host_state, filter_properties):"},{"line_number":25,"context_line":"        return True"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def volume_host_passes(self, host_state, filter_properties):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAADH%2F%2F%2BJA%3D","line":24,"updated":"2012-01-05 14:47:05.000000000","message":"the _passes() works much better. It\u0027s clear now what a True return type means.","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"}],"nova/scheduler/filters/instance_type_filter.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"7fbc027892912c817e525fc24519b2e28f42316a","unresolved":false,"context_lines":[{"line_number":20,"context_line":"LOG \u003d logging.getLogger(\u0027nova.scheduler.filter.instance_type_filter\u0027)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class InstanceTypeFilter(abstract_filter.AbstractHostFilter):"},{"line_number":24,"context_line":"    \"\"\"HostFilter hard-coded to work with InstanceType records.\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def _satisfies_extra_specs(self, capabilities, instance_type):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAADH%2F%2F%2BI8%3D","line":23,"updated":"2012-01-05 14:47:05.000000000","message":"Since we\u0027re no longer supporting filtering on anything other than InstanceTypes, perhaps this class should be renamed or rolled into something lower?","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"6526743d6a375cba99bbca1431266685e264bc50","unresolved":false,"context_lines":[{"line_number":20,"context_line":"LOG \u003d logging.getLogger(\u0027nova.scheduler.filter.instance_type_filter\u0027)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class InstanceTypeFilter(abstract_filter.AbstractHostFilter):"},{"line_number":24,"context_line":"    \"\"\"HostFilter hard-coded to work with InstanceType records.\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def _satisfies_extra_specs(self, capabilities, instance_type):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAD3%2F%2F%2BlQ%3D","line":23,"in_reply_to":"AAAADH%2F%2F%2BI8%3D","updated":"2012-01-12 20:59:10.000000000","message":"Yeah, thought about the naming here as well.","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f98e2d53cb79fac0f213eadbac5e19623a0c1a48","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            for key, value in instance_type[\u0027extra_specs\u0027].iteritems():"},{"line_number":37,"context_line":"                if capabilities.get(key, None) !\u003d value:"},{"line_number":38,"context_line":"                    return False"},{"line_number":39,"context_line":"        except KeyError, e:"},{"line_number":40,"context_line":"            return False"},{"line_number":41,"context_line":"        return True"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAD3%2F%2F9%2BE%3D","line":39,"updated":"2012-01-16 15:13:43.000000000","message":"You can remove this except block since you are using get() now...","commit_id":"5986349c858c28f149c7950ce3d130d9165d7096"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"b212ed2af2467f26263288c99d4840b741639357","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            for key, value in instance_type[\u0027extra_specs\u0027].iteritems():"},{"line_number":37,"context_line":"                if capabilities.get(key, None) !\u003d value:"},{"line_number":38,"context_line":"                    return False"},{"line_number":39,"context_line":"        except KeyError, e:"},{"line_number":40,"context_line":"            return False"},{"line_number":41,"context_line":"        return True"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAD3%2F%2F9EA%3D","line":39,"in_reply_to":"AAAAD3%2F%2F9%2BE%3D","updated":"2012-01-18 05:44:11.000000000","message":"Thanks.  Somehow I overlooked the try/except. :)","commit_id":"5986349c858c28f149c7950ce3d130d9165d7096"}],"nova/scheduler/filters/json_filter.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"3d63243581c962cd3d9ddc7e50a78f81a5ef8d7a","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        # Custom query?"},{"line_number":134,"context_line":"        query \u003d filter_properties.get(\u0027query\u0027, None)"},{"line_number":135,"context_line":"        if query:"},{"line_number":136,"context_line":"            query \u003d json.loads(query)"},{"line_number":137,"context_line":"        else:"},{"line_number":138,"context_line":"            instance_type \u003d filter_properties[\u0027instance_type\u0027]"},{"line_number":139,"context_line":"            required_ram \u003d instance_type[\u0027memory_mb\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6zw%3D","line":136,"updated":"2011-12-23 17:10:46.000000000","message":"hmm ... icky.","commit_id":"80f3a68a5ba65e4bb725e6d30c7ef756e0a0f75a"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"19cc6e23d55402ab3c0ecfad4f614525ccf6b40f","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        # Custom query?"},{"line_number":134,"context_line":"        query \u003d filter_properties.get(\u0027query\u0027, None)"},{"line_number":135,"context_line":"        if query:"},{"line_number":136,"context_line":"            query \u003d json.loads(query)"},{"line_number":137,"context_line":"        else:"},{"line_number":138,"context_line":"            instance_type \u003d filter_properties[\u0027instance_type\u0027]"},{"line_number":139,"context_line":"            required_ram \u003d instance_type[\u0027memory_mb\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6tg%3D","line":136,"in_reply_to":"AAAAC3%2F%2F6zw%3D","updated":"2011-12-23 19:53:45.000000000","message":"Open to suggestions.  I wanted there to be a clear separation between filtering for compute, volume, etc, hence now having separate methods (filter_\u003ctopic\u003e).  That made the \u0027instance_type_to_filter\u0027 call unnecessary in a way.  But... for json, we still needed a way to pass in a custom filter.  Assuming someone can pass in a custom filter at some point. ;)  I\u0027m not sure there\u0027s value in that functionality anymore... although it might tie in well with the \u0027options\u0027 stuff you added.   Being able to specify a json filter in the options config file would be cool, since you could adjust it on the fly!","commit_id":"80f3a68a5ba65e4bb725e6d30c7ef756e0a0f75a"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"7fbc027892912c817e525fc24519b2e28f42316a","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        # scheduler."},{"line_number":139,"context_line":"        query \u003d filter_properties.get(\u0027query\u0027, None)"},{"line_number":140,"context_line":"        if query:"},{"line_number":141,"context_line":"            query \u003d json.loads(query)"},{"line_number":142,"context_line":"        else:"},{"line_number":143,"context_line":"            instance_type \u003d filter_properties[\u0027instance_type\u0027]"},{"line_number":144,"context_line":"            required_ram \u003d instance_type[\u0027memory_mb\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAADH%2F%2F%2BI0%3D","line":141,"updated":"2012-01-05 14:47:05.000000000","message":"If \u0027query\u0027 doesn\u0027t exist, this filter doesn\u0027t really apply. We should just return True and not try to make it into a pseudo-InstanceType filter.","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"6526743d6a375cba99bbca1431266685e264bc50","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        # scheduler."},{"line_number":139,"context_line":"        query \u003d filter_properties.get(\u0027query\u0027, None)"},{"line_number":140,"context_line":"        if query:"},{"line_number":141,"context_line":"            query \u003d json.loads(query)"},{"line_number":142,"context_line":"        else:"},{"line_number":143,"context_line":"            instance_type \u003d filter_properties[\u0027instance_type\u0027]"},{"line_number":144,"context_line":"            required_ram \u003d instance_type[\u0027memory_mb\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAD3%2F%2F%2BlA%3D","line":141,"in_reply_to":"AAAADH%2F%2F%2BI0%3D","updated":"2012-01-12 20:59:10.000000000","message":"I\u0027m fine with that.","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"}],"nova/scheduler/host_manager.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"3d63243581c962cd3d9ddc7e50a78f81a5ef8d7a","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                    # Service is disabled; do no include it"},{"line_number":217,"context_line":"                    continue"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"                #Check if the service capabilities became stale"},{"line_number":220,"context_line":"                if self.host_service_caps_stale(host, service_name):"},{"line_number":221,"context_line":"                    if host not in stale_host_services:"},{"line_number":222,"context_line":"                        stale_host_services[host] \u003d []  # Adding host key once"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6zg%3D","line":219,"updated":"2011-12-23 17:10:46.000000000","message":"space after #","commit_id":"80f3a68a5ba65e4bb725e6d30c7ef756e0a0f75a"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"19cc6e23d55402ab3c0ecfad4f614525ccf6b40f","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                    # Service is disabled; do no include it"},{"line_number":217,"context_line":"                    continue"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"                #Check if the service capabilities became stale"},{"line_number":220,"context_line":"                if self.host_service_caps_stale(host, service_name):"},{"line_number":221,"context_line":"                    if host not in stale_host_services:"},{"line_number":222,"context_line":"                        stale_host_services[host] \u003d []  # Adding host key once"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6tc%3D","line":219,"in_reply_to":"AAAAC3%2F%2F6zg%3D","updated":"2011-12-23 19:53:45.000000000","message":"Will fix.","commit_id":"80f3a68a5ba65e4bb725e6d30c7ef756e0a0f75a"}],"nova/scheduler/least_cost.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"7fbc027892912c817e525fc24519b2e28f42316a","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self.zone \u003d zone"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Local members. These are not returned outside of the Zone."},{"line_number":57,"context_line":"        self.host_state \u003d host_state"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def to_dict(self):"},{"line_number":60,"context_line":"        x \u003d dict(weight\u003dself.weight)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAADH%2F%2F%2BJU%3D","line":57,"updated":"2012-01-05 14:47:05.000000000","message":"ok, ignore the other comment about .host vs. .zone I see what you\u0027ve done here. I think it\u0027s just the switch from HostInfo to HostState that\u0027s giving me grief. Need to let it sink in a little first.","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"6526743d6a375cba99bbca1431266685e264bc50","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self.zone \u003d zone"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Local members. These are not returned outside of the Zone."},{"line_number":57,"context_line":"        self.host_state \u003d host_state"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def to_dict(self):"},{"line_number":60,"context_line":"        x \u003d dict(weight\u003dself.weight)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAD3%2F%2F%2Bk8%3D","line":57,"in_reply_to":"AAAADH%2F%2F%2BJU%3D","updated":"2012-01-12 20:59:10.000000000","message":"Yeah, removing some extra stuff that\u0027s already stored.","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"}],"nova/scheduler/zone_manager.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"3d63243581c962cd3d9ddc7e50a78f81a5ef8d7a","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def get_zone_info(self):"},{"line_number":65,"context_line":"        zone_info \u003d dict(is_active\u003dself.is_active,"},{"line_number":66,"context_line":"                capabilities\u003dself.capabilities)"},{"line_number":67,"context_line":"        zone_info.update(self.zone_info)"},{"line_number":68,"context_line":"        return zone_info"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def log_error(self, exception):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F68E%3D","line":67,"updated":"2011-12-23 17:10:46.000000000","message":"This would return the password to the caller. Is this desired?","commit_id":"80f3a68a5ba65e4bb725e6d30c7ef756e0a0f75a"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"19cc6e23d55402ab3c0ecfad4f614525ccf6b40f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def get_zone_info(self):"},{"line_number":65,"context_line":"        zone_info \u003d dict(is_active\u003dself.is_active,"},{"line_number":66,"context_line":"                capabilities\u003dself.capabilities)"},{"line_number":67,"context_line":"        zone_info.update(self.zone_info)"},{"line_number":68,"context_line":"        return zone_info"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def log_error(self, exception):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6tY%3D","line":67,"in_reply_to":"AAAAC3%2F%2F68E%3D","updated":"2011-12-23 19:53:45.000000000","message":"Ah, no, probably not.  Good catch.","commit_id":"80f3a68a5ba65e4bb725e6d30c7ef756e0a0f75a"}],"nova/tests/scheduler/test_distributed_scheduler.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"7fbc027892912c817e525fc24519b2e28f42316a","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    \"\"\"Test case for Distributed Scheduler.\"\"\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def setUp(self):"},{"line_number":78,"context_line":"        super(DistributedSchedulerTestCase, self).setUp()"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_adjust_child_weights(self):"},{"line_number":81,"context_line":"        \"\"\"Make sure the weights returned by child zones are"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAADH%2F%2F%2BIw%3D","line":78,"updated":"2012-01-05 14:47:05.000000000","message":"not needed.","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"6526743d6a375cba99bbca1431266685e264bc50","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    \"\"\"Test case for Distributed Scheduler.\"\"\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def setUp(self):"},{"line_number":78,"context_line":"        super(DistributedSchedulerTestCase, self).setUp()"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_adjust_child_weights(self):"},{"line_number":81,"context_line":"        \"\"\"Make sure the weights returned by child zones are"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAD3%2F%2F%2Bk4%3D","line":78,"in_reply_to":"AAAADH%2F%2F%2BIw%3D","updated":"2012-01-12 20:59:10.000000000","message":"Yeah, I must have had something here I removed.  Will ditch it.","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"}],"nova/tests/scheduler/test_host_filters.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"3d63243581c962cd3d9ddc7e50a78f81a5ef8d7a","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                 \u0027capabilities\u0027: capabilities})"},{"line_number":195,"context_line":"        self.assertTrue(filt_cls.filter_compute(host, filter_properties))"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        # Basic operations (operator, arguments, expected_result)"},{"line_number":198,"context_line":"        ops_to_test \u003d ["},{"line_number":199,"context_line":"                    [\u0027\u003d\u0027, [1, 1], False],"},{"line_number":200,"context_line":"                    [\u0027\u003d\u0027, [1, 2], True],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F68A%3D","line":197,"updated":"2011-12-23 17:10:46.000000000","message":"Seems like there are a lot of tests missing from the old json tests.","commit_id":"80f3a68a5ba65e4bb725e6d30c7ef756e0a0f75a"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"19cc6e23d55402ab3c0ecfad4f614525ccf6b40f","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                 \u0027capabilities\u0027: capabilities})"},{"line_number":195,"context_line":"        self.assertTrue(filt_cls.filter_compute(host, filter_properties))"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        # Basic operations (operator, arguments, expected_result)"},{"line_number":198,"context_line":"        ops_to_test \u003d ["},{"line_number":199,"context_line":"                    [\u0027\u003d\u0027, [1, 1], False],"},{"line_number":200,"context_line":"                    [\u0027\u003d\u0027, [1, 2], True],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAC3%2F%2F6tU%3D","line":197,"in_reply_to":"AAAAC3%2F%2F68A%3D","updated":"2011-12-23 19:53:45.000000000","message":"Ok.  I think I got the rest covered in the latest patchset.  There were more here than in the old tests... but I missed carrying over some others.","commit_id":"80f3a68a5ba65e4bb725e6d30c7ef756e0a0f75a"}],"nova/tests/scheduler/test_scheduler.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"7fbc027892912c817e525fc24519b2e28f42316a","unresolved":false,"context_lines":[{"line_number":1154,"context_line":"                \u0027memory_mb\u0027: 1024,"},{"line_number":1155,"context_line":"                \u0027local_gb\u0027: 1024}"},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"    def test_live_migration_dest_host_incompatabile_cpu_raises(self):"},{"line_number":1158,"context_line":"        driver \u003d self.scheduler.driver"},{"line_number":1159,"context_line":"        self.mox.StubOutWithMock(db, \u0027instance_get\u0027)"},{"line_number":1160,"context_line":"        self.mox.StubOutWithMock(driver, \u0027_live_migration_src_check\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAADH%2F%2F%2BJ4%3D","line":1157,"updated":"2012-01-05 14:47:05.000000000","message":"Just a observation, but I find the .AndReturn()/replay() mechanism really hard to follow. I much prefer the stubout with explicit methods.","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"6526743d6a375cba99bbca1431266685e264bc50","unresolved":false,"context_lines":[{"line_number":1154,"context_line":"                \u0027memory_mb\u0027: 1024,"},{"line_number":1155,"context_line":"                \u0027local_gb\u0027: 1024}"},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"    def test_live_migration_dest_host_incompatabile_cpu_raises(self):"},{"line_number":1158,"context_line":"        driver \u003d self.scheduler.driver"},{"line_number":1159,"context_line":"        self.mox.StubOutWithMock(db, \u0027instance_get\u0027)"},{"line_number":1160,"context_line":"        self.mox.StubOutWithMock(driver, \u0027_live_migration_src_check\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAD3%2F%2F%2Bko%3D","line":1157,"in_reply_to":"AAAADH%2F%2F%2BJ4%3D","updated":"2012-01-12 20:59:10.000000000","message":"What I like about mox is that it guarantees an order of operations and it also verifies that arguments are exactly what they should be.  In a lot of cases when we stubout with explicit methods, we ignore the arguments and that\u0027s somewhat bit us before.  Perhaps that\u0027s just a problem with being lazy with the stubs. :)\n\nThis test will be going away due to this change not belonging in this branch... though it\u0027ll be coming back when I prop my scheduler unit tests fixes.  Sounds like you\u0027re going to not like them because they all use mox. ;)","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"}],"nova/tests/scheduler/test_zone_manager.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"7fbc027892912c817e525fc24519b2e28f42316a","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"def _create_zone(zone_id\u003d1, name\u003dNone, api_url\u003dNone, username\u003dNone):"},{"line_number":35,"context_line":"    if api_url is None:"},{"line_number":36,"context_line":"        api_url \u003d \"http://foo.com\""},{"line_number":37,"context_line":"    if username is None:"},{"line_number":38,"context_line":"        username \u003d \"user1\""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAADH%2F%2F%2BKE%3D","line":35,"updated":"2012-01-05 14:47:05.000000000","message":"if not api_url","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"7fbc027892912c817e525fc24519b2e28f42316a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"def _create_zone(zone_id\u003d1, name\u003dNone, api_url\u003dNone, username\u003dNone):"},{"line_number":35,"context_line":"    if api_url is None:"},{"line_number":36,"context_line":"        api_url \u003d \"http://foo.com\""},{"line_number":37,"context_line":"    if username is None:"},{"line_number":38,"context_line":"        username \u003d \"user1\""},{"line_number":39,"context_line":"    if name is None:"},{"line_number":40,"context_line":"        name \u003d \"child1\""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAADH%2F%2F%2BKA%3D","line":37,"updated":"2012-01-05 14:47:05.000000000","message":"if not ...","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"7fbc027892912c817e525fc24519b2e28f42316a","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        api_url \u003d \"http://foo.com\""},{"line_number":37,"context_line":"    if username is None:"},{"line_number":38,"context_line":"        username \u003d \"user1\""},{"line_number":39,"context_line":"    if name is None:"},{"line_number":40,"context_line":"        name \u003d \"child1\""},{"line_number":41,"context_line":"    return dict(id\u003dzone_id, name\u003dname, api_url\u003dapi_url,"},{"line_number":42,"context_line":"            username\u003dusername, password\u003d\"pass1\", weight_offset\u003d0.0,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAADH%2F%2F%2BJ8%3D","line":39,"updated":"2012-01-05 14:47:05.000000000","message":"if not ...","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"6526743d6a375cba99bbca1431266685e264bc50","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        api_url \u003d \"http://foo.com\""},{"line_number":37,"context_line":"    if username is None:"},{"line_number":38,"context_line":"        username \u003d \"user1\""},{"line_number":39,"context_line":"    if name is None:"},{"line_number":40,"context_line":"        name \u003d \"child1\""},{"line_number":41,"context_line":"    return dict(id\u003dzone_id, name\u003dname, api_url\u003dapi_url,"},{"line_number":42,"context_line":"            username\u003dusername, password\u003d\"pass1\", weight_offset\u003d0.0,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAD3%2F%2F%2Bkg%3D","line":39,"in_reply_to":"AAAADH%2F%2F%2BJ8%3D","updated":"2012-01-12 20:59:10.000000000","message":"Depends on if empty string is valid or not.  If empty string is passed into here, it means someone was explicit about wanting empty string for an argument.  I tend to think \u0027is None\u0027 is the correct choice here, even though it doesn\u0027t so much matter for these tests.","commit_id":"9f7a01b97c72a663557702f438683ca1b4622cc3"}]}
