)]}'
{"nova/objects/instance_group.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0b6200a9be7d19adc81124ac3ed6714d6a3462e6","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    # Version 1.7: Deprecate metadetails"},{"line_number":36,"context_line":"    # Version 1.8: Add count_members_by_user()"},{"line_number":37,"context_line":"    # Version 1.9: Add get_by_instance_uuid()"},{"line_number":38,"context_line":"    # Version 1.10: Add count_members_by_hosts()"},{"line_number":39,"context_line":"    VERSION \u003d \u00271.10\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_292593c1","line":38,"updated":"2015-01-16 10:29:03.000000000","message":"IMHO you should split this change into 2 : \n\n - amend the object\n - refactor filt_props","commit_id":"24bcbd7108d1c53493d360b98ee64cb8c9332295"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"530d3e832fe77052a1e0eecd63c22b468d096374","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    # Version 1.7: Deprecate metadetails"},{"line_number":36,"context_line":"    # Version 1.8: Add count_members_by_user()"},{"line_number":37,"context_line":"    # Version 1.9: Add get_by_instance_uuid()"},{"line_number":38,"context_line":"    # Version 1.10: Add count_members_by_hosts()"},{"line_number":39,"context_line":"    VERSION \u003d \u00271.10\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_2609352b","line":38,"in_reply_to":"3a961159_292593c1","updated":"2015-01-19 14:49:36.000000000","message":"Done","commit_id":"24bcbd7108d1c53493d360b98ee64cb8c9332295"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"fb4ed4ca3cc1b373dcdced5b8d2ebd264619644b","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    def count_members_by_hosts(self, context):"},{"line_number":201,"context_line":"        \"\"\"Get the number of non deleted instances per hosts in the group.\"\"\""},{"line_number":202,"context_line":"        filter_uuids \u003d self.members"},{"line_number":203,"context_line":"        filters \u003d {\u0027uuid\u0027: filter_uuids, \u0027deleted\u0027: False}"},{"line_number":204,"context_line":"        instances \u003d objects.InstanceList.get_by_filters(context,"},{"line_number":205,"context_line":"                                                        filters\u003dfilters)"},{"line_number":206,"context_line":"        hosts \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_cff78159","line":203,"updated":"2015-01-19 10:35:35.000000000","message":"i think that you should also consider adding in the \u0027user_id\u0027: user_id, if possible","commit_id":"24bcbd7108d1c53493d360b98ee64cb8c9332295"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"530d3e832fe77052a1e0eecd63c22b468d096374","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    def count_members_by_hosts(self, context):"},{"line_number":201,"context_line":"        \"\"\"Get the number of non deleted instances per hosts in the group.\"\"\""},{"line_number":202,"context_line":"        filter_uuids \u003d self.members"},{"line_number":203,"context_line":"        filters \u003d {\u0027uuid\u0027: filter_uuids, \u0027deleted\u0027: False}"},{"line_number":204,"context_line":"        instances \u003d objects.InstanceList.get_by_filters(context,"},{"line_number":205,"context_line":"                                                        filters\u003dfilters)"},{"line_number":206,"context_line":"        hosts \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_b2d378d2","line":203,"in_reply_to":"3a961159_cff78159","updated":"2015-01-19 14:49:36.000000000","message":"Could you provide me a reason or use case why we need to filter for user_id here as well?","commit_id":"24bcbd7108d1c53493d360b98ee64cb8c9332295"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"fb4ed4ca3cc1b373dcdced5b8d2ebd264619644b","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            num \u003d hosts.get(instance.host, 0)"},{"line_number":209,"context_line":"            num +\u003d 1"},{"line_number":210,"context_line":"            hosts[instance.host] \u003d num"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        return hosts"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_efa27d3e","line":211,"updated":"2015-01-19 10:35:35.000000000","message":"for debugging it may be interesting to validate that for anti-affinity we only have one per host and for affinity we have only one host","commit_id":"24bcbd7108d1c53493d360b98ee64cb8c9332295"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"530d3e832fe77052a1e0eecd63c22b468d096374","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            num \u003d hosts.get(instance.host, 0)"},{"line_number":209,"context_line":"            num +\u003d 1"},{"line_number":210,"context_line":"            hosts[instance.host] \u003d num"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        return hosts"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_f24180a7","line":211,"in_reply_to":"3a961159_efa27d3e","updated":"2015-01-19 14:49:36.000000000","message":"I think that kind of validation should be outside of this method (but can use this method). I also think that the validation of affinity and anti-affinity should be a separate bug or bp form the current soft- policies related work.","commit_id":"24bcbd7108d1c53493d360b98ee64cb8c9332295"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"b1c4a6e02570645496372f2b05993eb7ea8a6ade","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        for instance in instances:"},{"line_number":208,"context_line":"            num \u003d hosts.get(instance.host, 0)"},{"line_number":209,"context_line":"            num +\u003d 1"},{"line_number":210,"context_line":"            hosts[instance.host] \u003d num"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        return hosts"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_89a00e44","line":210,"updated":"2015-01-19 15:12:32.000000000","message":"The DB can return this information directly (with group_by and count). Doing this would be more efficient, using less memory both in the DB and in Python, and transferring less data across the network. However, it would also be a bit more work.\n\nIf we expect to call this on large instance lists, we should absolutely do this. How big are instance lists in the wild?\n\nWe should also do this if it\u0027s called very frequently. How often will it be called?\n\nIf neither of the above are true, it\u0027s probably not worth the additional complexity.","commit_id":"5d7bbbbb2e97072b4d3859bbc06c2887b88b699f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cb03e7604d238fb622171bda236ea6cba04ef956","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        for instance in instances:"},{"line_number":208,"context_line":"            num \u003d hosts.get(instance.host, 0)"},{"line_number":209,"context_line":"            num +\u003d 1"},{"line_number":210,"context_line":"            hosts[instance.host] \u003d num"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        return hosts"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_45e422e0","line":210,"in_reply_to":"3a961159_89a00e44","updated":"2015-01-20 14:59:34.000000000","message":"Honestly I don\u0027t know the size of the member list in the wild but theoretically the size can be as big as the total number of hosts in the system in case of anti-affinity or the number of the instances fit in a single host in case of affinity policy.\nThis function is called once per scheduling request if the request contains a group hint. Does it qualify as too frequent?","commit_id":"5d7bbbbb2e97072b4d3859bbc06c2887b88b699f"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d15bfa8fbe7a7d84cce0cfaa4dba48b3942cf3c3","unresolved":false,"context_lines":[{"line_number":210,"context_line":"            hosts[instance.host] \u003d num"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        return hosts"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"class InstanceGroupList(base.ObjectListBase, base.NovaObject):"},{"line_number":216,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_9fe68315","line":213,"updated":"2015-01-20 21:56:43.000000000","message":"I don\u0027t get the need of adding such method while we can directly get the number of instances when needed","commit_id":"01731258dfd05d365d46fc8bce248205e5347c0a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cc9af5e6c713d973caee3a6e7c77c401e98c7379","unresolved":false,"context_lines":[{"line_number":210,"context_line":"            hosts[instance.host] \u003d num"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        return hosts"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"class InstanceGroupList(base.ObjectListBase, base.NovaObject):"},{"line_number":216,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_dcb562ce","line":213,"in_reply_to":"1a930d6b_9fe68315","updated":"2015-01-21 13:48:51.000000000","message":"I don\u0027t know what do you mean by \"directly\". We need the number of instances per host in a given instance group. As the instance group membership is only known by the InstanceGroup object (and the table behind it) we have to use the InstanceGroup object to calculate this information.","commit_id":"01731258dfd05d365d46fc8bce248205e5347c0a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"15da2003caa5584f5e331f1db4e60baaf6e4c10f","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        return len(instances)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    @base.remotable"},{"line_number":201,"context_line":"    def count_members_by_hosts(self):"},{"line_number":202,"context_line":"        \"\"\"Get the number of non deleted instances per hosts in the group.\"\"\""},{"line_number":203,"context_line":"        filter_uuids \u003d self.members"},{"line_number":204,"context_line":"        filters \u003d {\u0027uuid\u0027: filter_uuids, \u0027deleted\u0027: False}"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a0c5dc1_695dd3e8","line":201,"updated":"2015-05-13 00:04:04.000000000","message":"This doesn\u0027t return a count, so it\u0027s not well-named.","commit_id":"e7d6e4adb9458cdb0e4e6dbcefc21c7121a4e12a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a9de4d581537d563a53192ec4f8354ae2ca57276","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        return len(instances)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    @base.remotable"},{"line_number":201,"context_line":"    def count_members_by_hosts(self):"},{"line_number":202,"context_line":"        \"\"\"Get the number of non deleted instances per hosts in the group.\"\"\""},{"line_number":203,"context_line":"        filter_uuids \u003d self.members"},{"line_number":204,"context_line":"        filters \u003d {\u0027uuid\u0027: filter_uuids, \u0027deleted\u0027: False}"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a0c5dc1_adff4e00","line":201,"in_reply_to":"9a0c5dc1_695dd3e8","updated":"2015-05-13 09:08:57.000000000","message":"Done","commit_id":"e7d6e4adb9458cdb0e4e6dbcefc21c7121a4e12a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"15da2003caa5584f5e331f1db4e60baaf6e4c10f","unresolved":false,"context_lines":[{"line_number":210,"context_line":"            num +\u003d 1"},{"line_number":211,"context_line":"            hosts[instance.host] \u003d num"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        return hosts"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"class InstanceGroupList(base.ObjectListBase, base.NovaObject):"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a0c5dc1_a90aabd0","line":213,"updated":"2015-05-13 00:04:04.000000000","message":"Why is this method remotable? Being remotable means it runs on the conductor side instead of from wherever it\u0027s called. But, it doesn\u0027t do anything directly on the database, nor anything needing atomicity. This would behave exactly the same if you remove the remotable decorator with the following benefits:\n\n 1. You won\u0027t have to bump the version\n 2. I won\u0027t complain about you returning an unversioned complex data structure\n\nSeems like we should drop it, eh? :)","commit_id":"e7d6e4adb9458cdb0e4e6dbcefc21c7121a4e12a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a9de4d581537d563a53192ec4f8354ae2ca57276","unresolved":false,"context_lines":[{"line_number":210,"context_line":"            num +\u003d 1"},{"line_number":211,"context_line":"            hosts[instance.host] \u003d num"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        return hosts"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"class InstanceGroupList(base.ObjectListBase, base.NovaObject):"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a0c5dc1_2d147e42","line":213,"in_reply_to":"9a0c5dc1_a90aabd0","updated":"2015-05-13 09:08:57.000000000","message":"Good point and excellent reasoning. ;)\nDone.","commit_id":"e7d6e4adb9458cdb0e4e6dbcefc21c7121a4e12a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"96ec0e8852826c33001ac0cbce0c61f11e434e51","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        return len(instances)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def get_number_of_members_per_hosts(self):"},{"line_number":201,"context_line":"        \"\"\"Get the number of non deleted instances per hosts in the group.\"\"\""},{"line_number":202,"context_line":"        filter_uuids \u003d self.members"},{"line_number":203,"context_line":"        filters \u003d {\u0027uuid\u0027: filter_uuids, \u0027deleted\u0027: False}"},{"line_number":204,"context_line":"        instances \u003d objects.InstanceList.get_by_filters(self._context,"}],"source_content_type":"text/x-python","patch_set":43,"id":"3a50d1a3_75b586cb","line":201,"updated":"2015-07-20 14:03:08.000000000","message":"per hosts \u003d\u003e per host\n\nplease add that the type returned is a dictionary\n\nmy guess is that this will be used by the scheduler. so not sure why we are not getting this from the resource tracker.","commit_id":"8bd2dd8c5564169ea8dbf3ac059fa6cce72b1166"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"4f101fed18d7db2d59c29100ea467feb3b104bd8","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        return len(instances)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def get_number_of_members_per_hosts(self):"},{"line_number":201,"context_line":"        \"\"\"Get the number of non deleted instances per hosts in the group.\"\"\""},{"line_number":202,"context_line":"        filter_uuids \u003d self.members"},{"line_number":203,"context_line":"        filters \u003d {\u0027uuid\u0027: filter_uuids, \u0027deleted\u0027: False}"},{"line_number":204,"context_line":"        instances \u003d objects.InstanceList.get_by_filters(self._context,"}],"source_content_type":"text/x-python","patch_set":43,"id":"3a50d1a3_e6300459","line":201,"in_reply_to":"3a50d1a3_75b586cb","updated":"2015-07-20 17:43:22.000000000","message":"Conceptually this does not belong to the resource tracker.","commit_id":"8bd2dd8c5564169ea8dbf3ac059fa6cce72b1166"}],"nova/scheduler/utils.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"fb4ed4ca3cc1b373dcdced5b8d2ebd264619644b","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    :returns: None or namedtuple GroupDetails"},{"line_number":275,"context_line":"    \"\"\""},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    global _SUPPORTS_AFFINITY"},{"line_number":278,"context_line":"    if _SUPPORTS_AFFINITY is None:"},{"line_number":279,"context_line":"        _SUPPORTS_AFFINITY \u003d validate_filter("}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_4f69d1f7","line":276,"updated":"2015-01-19 10:35:35.000000000","message":"no need for thi new line","commit_id":"24bcbd7108d1c53493d360b98ee64cb8c9332295"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"530d3e832fe77052a1e0eecd63c22b468d096374","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    :returns: None or namedtuple GroupDetails"},{"line_number":275,"context_line":"    \"\"\""},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    global _SUPPORTS_AFFINITY"},{"line_number":278,"context_line":"    if _SUPPORTS_AFFINITY is None:"},{"line_number":279,"context_line":"        _SUPPORTS_AFFINITY \u003d validate_filter("}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_3346a77f","line":276,"in_reply_to":"3a961159_4f69d1f7","updated":"2015-01-19 14:49:36.000000000","message":"Done","commit_id":"24bcbd7108d1c53493d360b98ee64cb8c9332295"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"fb4ed4ca3cc1b373dcdced5b8d2ebd264619644b","unresolved":false,"context_lines":[{"line_number":285,"context_line":"    global _SUPPORTS_SOFT_AFFINITY"},{"line_number":286,"context_line":"    if _SUPPORTS_SOFT_AFFINITY is None:"},{"line_number":287,"context_line":"        _SUPPORTS_SOFT_AFFINITY \u003d validate_weigher("},{"line_number":288,"context_line":"            \u0027nova.scheduler.weights.affinity.ServerGroupSoftAffinityWeigher\u0027)"},{"line_number":289,"context_line":"    global _SUPPORTS_SOFT_ANTI_AFFINITY"},{"line_number":290,"context_line":"    if _SUPPORTS_SOFT_ANTI_AFFINITY is None:"},{"line_number":291,"context_line":"        _SUPPORTS_SOFT_ANTI_AFFINITY \u003d validate_weigher("}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_0f46e97e","line":288,"range":{"start_line":288,"start_character":45,"end_line":288,"end_character":75},"updated":"2015-01-19 10:35:35.000000000","message":"why not just ServerGroupSoftAffinityWeigher?","commit_id":"24bcbd7108d1c53493d360b98ee64cb8c9332295"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"530d3e832fe77052a1e0eecd63c22b468d096374","unresolved":false,"context_lines":[{"line_number":285,"context_line":"    global _SUPPORTS_SOFT_AFFINITY"},{"line_number":286,"context_line":"    if _SUPPORTS_SOFT_AFFINITY is None:"},{"line_number":287,"context_line":"        _SUPPORTS_SOFT_AFFINITY \u003d validate_weigher("},{"line_number":288,"context_line":"            \u0027nova.scheduler.weights.affinity.ServerGroupSoftAffinityWeigher\u0027)"},{"line_number":289,"context_line":"    global _SUPPORTS_SOFT_ANTI_AFFINITY"},{"line_number":290,"context_line":"    if _SUPPORTS_SOFT_ANTI_AFFINITY is None:"},{"line_number":291,"context_line":"        _SUPPORTS_SOFT_ANTI_AFFINITY \u003d validate_weigher("}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_46eff686","line":288,"in_reply_to":"3a961159_0f46e97e","updated":"2015-01-19 14:49:36.000000000","message":"CONF.scheduler_weight_classes  parameter expects a list of fully qualified class names. I haven\u0027t dig into the code to see why there is a difference between CONF.scheduler_default_filters and CONF.scheduler_weight_classes but based on my test they behave differently","commit_id":"24bcbd7108d1c53493d360b98ee64cb8c9332295"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"fb4ed4ca3cc1b373dcdced5b8d2ebd264619644b","unresolved":false,"context_lines":[{"line_number":301,"context_line":"    except exception.InstanceGroupNotFound:"},{"line_number":302,"context_line":"        return"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    policies \u003d set((\u0027anti-affinity\u0027, \u0027affinity\u0027, \u0027soft-affinity\u0027,"},{"line_number":305,"context_line":"                    \u0027soft-anti-affinity\u0027))"},{"line_number":306,"context_line":"    if any((policy in policies) for policy in group.policies):"},{"line_number":307,"context_line":"        if not _SUPPORTS_AFFINITY and \u0027affinity\u0027 in group.policies:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_0f14294f","line":304,"updated":"2015-01-19 10:35:35.000000000","message":"this means that instead of looping over things twice we are now doing it 4 times.\n\nwe should try and optimize this","commit_id":"24bcbd7108d1c53493d360b98ee64cb8c9332295"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"530d3e832fe77052a1e0eecd63c22b468d096374","unresolved":false,"context_lines":[{"line_number":301,"context_line":"    except exception.InstanceGroupNotFound:"},{"line_number":302,"context_line":"        return"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    policies \u003d set((\u0027anti-affinity\u0027, \u0027affinity\u0027, \u0027soft-affinity\u0027,"},{"line_number":305,"context_line":"                    \u0027soft-anti-affinity\u0027))"},{"line_number":306,"context_line":"    if any((policy in policies) for policy in group.policies):"},{"line_number":307,"context_line":"        if not _SUPPORTS_AFFINITY and \u0027affinity\u0027 in group.policies:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_b6f445d1","line":304,"in_reply_to":"3a961159_0f14294f","updated":"2015-01-19 14:49:36.000000000","message":"Actually no, we are not looping 4 times. We are looping as many times as may policies the group has. With this patch we are not increasing the possible number of policies of the group as the new soft policies are mutually exclusive.","commit_id":"24bcbd7108d1c53493d360b98ee64cb8c9332295"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0b6200a9be7d19adc81124ac3ed6714d6a3462e6","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        filter_properties[\u0027group_hosts\u0027] \u003d group_info.hosts"},{"line_number":350,"context_line":"        filter_properties[\u0027group_policies\u0027] \u003d group_info.policies"},{"line_number":351,"context_line":"        num \u003d group_info.num_instances_per_host"},{"line_number":352,"context_line":"        filter_properties[\u0027group_num_instances_per_host\u0027] \u003d num"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_a94a6380","line":352,"updated":"2015-01-16 10:29:03.000000000","message":"speaking about filt_props and how it\u0027s going bigger, I think we should factor all those instancegroup fields into a big dictionary that we can easierly consume.\n\nJust to be clear too, I\u0027m currently working on objectifying RequestSpec so that it will include filt_props fields, see http://specs.openstack.org/openstack/nova-specs/specs/kilo/approved/sched-select-destinations-use-request-spec-object.html for info","commit_id":"24bcbd7108d1c53493d360b98ee64cb8c9332295"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"530d3e832fe77052a1e0eecd63c22b468d096374","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        filter_properties[\u0027group_hosts\u0027] \u003d group_info.hosts"},{"line_number":350,"context_line":"        filter_properties[\u0027group_policies\u0027] \u003d group_info.policies"},{"line_number":351,"context_line":"        num \u003d group_info.num_instances_per_host"},{"line_number":352,"context_line":"        filter_properties[\u0027group_num_instances_per_host\u0027] \u003d num"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_8647494b","line":352,"in_reply_to":"3a961159_a94a6380","updated":"2015-01-19 14:49:36.000000000","message":"Fair point. I\u0027ve done the refactoring in the subsequent change. I hope I did it in a way that will make your life easier.","commit_id":"24bcbd7108d1c53493d360b98ee64cb8c9332295"}],"nova/tests/unit/objects/test_instance_group.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"15da2003caa5584f5e331f1db4e60baaf6e4c10f","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                flavor\u003dflavors.get_default_flavor(), obj\u003dTrue)"},{"line_number":358,"context_line":"        instance4.host \u003d \u0027host2\u0027"},{"line_number":359,"context_line":"        instance4.deleted \u003d True"},{"line_number":360,"context_line":"        instance4.save()"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        instance_ids \u003d [instance1.uuid, instance2.uuid, instance3.uuid,"},{"line_number":363,"context_line":"                        instance4.uuid]"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a0c5dc1_291ebb0c","line":360,"updated":"2015-05-13 00:04:04.000000000","message":"You don\u0027t need to save these if you mock out the InstanceList call you\u0027re making. That will make it easier for some unlucky person to come behind you and make this class a NoDbTestCase.","commit_id":"e7d6e4adb9458cdb0e4e6dbcefc21c7121a4e12a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a9de4d581537d563a53192ec4f8354ae2ca57276","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                flavor\u003dflavors.get_default_flavor(), obj\u003dTrue)"},{"line_number":358,"context_line":"        instance4.host \u003d \u0027host2\u0027"},{"line_number":359,"context_line":"        instance4.deleted \u003d True"},{"line_number":360,"context_line":"        instance4.save()"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        instance_ids \u003d [instance1.uuid, instance2.uuid, instance3.uuid,"},{"line_number":363,"context_line":"                        instance4.uuid]"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a0c5dc1_52174f51","line":360,"in_reply_to":"9a0c5dc1_291ebb0c","updated":"2015-05-13 09:08:57.000000000","message":"Done","commit_id":"e7d6e4adb9458cdb0e4e6dbcefc21c7121a4e12a"}]}
