)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"3eeb489b8dd1f57653d6c62188c1079cef5f825b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Balazs Gibizer \u003cbalazs.gibizer@ericsson.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-03-25 11:53:24 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add falvor to requested_resources in RequestSpec"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"RequestGroups created from neutron ports are added to the"},{"line_number":10,"context_line":"requested_resources already but Flavor also contains resource request"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5fc1f717_9f95d542","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":10},"updated":"2019-03-25 12:12:25.000000000","message":"nit: flavor\n\nDrive-by comment, just jumped at me when the IRC bot posted the patch link.","commit_id":"75e17c98fa03d28b93bd288f7a4bfe98e5255f1e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fbe48939a60b93f8d8224c295a0800540666e70f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add flavor to requested_resources in RequestSpec"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"RequestGroups created from neutron ports are added to the"},{"line_number":10,"context_line":"requested_resources already but the RequesSpec itself and"},{"line_number":11,"context_line":"the Flavor stored in the Reuqest spec also contains"},{"line_number":12,"context_line":"resource request or required traits both for the unnumbered"},{"line_number":13,"context_line":"and possibily for multiple numbered groups."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5fc1f717_03a8a789","line":10,"range":{"start_line":10,"start_character":36,"end_line":10,"end_character":46},"updated":"2019-03-25 16:14:50.000000000","message":"RequestSpec","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1608690bef9f1f1539dd715d57bac743276b7c3f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add flavor to requested_resources in RequestSpec"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"RequestGroups created from neutron ports are added to the"},{"line_number":10,"context_line":"requested_resources already but the RequesSpec itself and"},{"line_number":11,"context_line":"the Flavor stored in the Reuqest spec also contains"},{"line_number":12,"context_line":"resource request or required traits both for the unnumbered"},{"line_number":13,"context_line":"and possibily for multiple numbered groups."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5fc1f717_04741635","line":10,"range":{"start_line":10,"start_character":36,"end_line":10,"end_character":46},"in_reply_to":"5fc1f717_03a8a789","updated":"2019-03-26 16:27:59.000000000","message":"Done","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fbe48939a60b93f8d8224c295a0800540666e70f","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"RequestGroups created from neutron ports are added to the"},{"line_number":10,"context_line":"requested_resources already but the RequesSpec itself and"},{"line_number":11,"context_line":"the Flavor stored in the Reuqest spec also contains"},{"line_number":12,"context_line":"resource request or required traits both for the unnumbered"},{"line_number":13,"context_line":"and possibily for multiple numbered groups."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5fc1f717_23ada39a","line":11,"range":{"start_line":11,"start_character":25,"end_line":11,"end_character":32},"updated":"2019-03-25 16:14:50.000000000","message":"Request","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1608690bef9f1f1539dd715d57bac743276b7c3f","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"RequestGroups created from neutron ports are added to the"},{"line_number":10,"context_line":"requested_resources already but the RequesSpec itself and"},{"line_number":11,"context_line":"the Flavor stored in the Reuqest spec also contains"},{"line_number":12,"context_line":"resource request or required traits both for the unnumbered"},{"line_number":13,"context_line":"and possibily for multiple numbered groups."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5fc1f717_24711245","line":11,"range":{"start_line":11,"start_character":25,"end_line":11,"end_character":32},"in_reply_to":"5fc1f717_23ada39a","updated":"2019-03-26 16:27:59.000000000","message":"Done","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fbe48939a60b93f8d8224c295a0800540666e70f","unresolved":false,"context_lines":[{"line_number":12,"context_line":"resource request or required traits both for the unnumbered"},{"line_number":13,"context_line":"and possibily for multiple numbered groups."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch moves the translation of these request from the"},{"line_number":16,"context_line":"allocation candidate query generation codepath to the RequestSpec"},{"line_number":17,"context_line":"create and update codepath. This way the RequestGroups are created"},{"line_number":18,"context_line":"earlier so that extra finetuning can be done based on RequestGroup"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5fc1f717_a398b374","line":15,"range":{"start_line":15,"start_character":42,"end_line":15,"end_character":49},"updated":"2019-03-25 16:14:50.000000000","message":"requests","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1608690bef9f1f1539dd715d57bac743276b7c3f","unresolved":false,"context_lines":[{"line_number":12,"context_line":"resource request or required traits both for the unnumbered"},{"line_number":13,"context_line":"and possibily for multiple numbered groups."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch moves the translation of these request from the"},{"line_number":16,"context_line":"allocation candidate query generation codepath to the RequestSpec"},{"line_number":17,"context_line":"create and update codepath. This way the RequestGroups are created"},{"line_number":18,"context_line":"earlier so that extra finetuning can be done based on RequestGroup"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5fc1f717_84956634","line":15,"range":{"start_line":15,"start_character":42,"end_line":15,"end_character":49},"in_reply_to":"5fc1f717_a398b374","updated":"2019-03-26 16:27:59.000000000","message":"Done","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"466cfdbf092682884ac13c3573455fa7feb17c2f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"This patch moves the translation of these requests from the"},{"line_number":16,"context_line":"allocation candidate query generation codepath to the RequestSpec"},{"line_number":17,"context_line":"create and update codepath. This way the RequestGroups are created"},{"line_number":18,"context_line":"earlier so that extra finetuning can be done based on RequestGroup"},{"line_number":19,"context_line":"objects instead of injecting flavor extra_spec keys."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"On the other hand this also means that if some fields of the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5fc1f717_f61b9b7d","line":18,"range":{"start_line":18,"start_character":16,"end_line":18,"end_character":44},"updated":"2019-03-28 00:50:47.000000000","message":"This seems a bit abstract. But the costs seem to be quite tangible: \n\n* As other uses arise for self.requested_resources (e.g. device profiles), they have to be careful not to step on this.\n* As you said, any changes after the request groups are initially generated will need re-generation.\n\nAre the changes worth it?","commit_id":"08da12b5239cb980c0f303255b6594af0892b4fe"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a99d90ab301ee972e4659d15c7af4664c225c81c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"RequestSpec object changes then the request groups needs to be"},{"line_number":23,"context_line":"regenerated. For example the request filters are changing the"},{"line_number":24,"context_line":"RequestSpec before the scheduling. So after those filters run the"},{"line_number":25,"context_line":"RequestGroups needs to be regenerated. This is problematic becase"},{"line_number":26,"context_line":"anyting that is added directly to the RequestGroups generated from"},{"line_number":27,"context_line":"the RequestSpec before the request filters run will be lost as those"},{"line_number":28,"context_line":"groups are re-generated based on the updated content of the RequestSpec."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Note: Detecting the changes of the RequestSpec fields is not easy. The"},{"line_number":31,"context_line":"pythonic way would be to define a @property for each fields with getters"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5fc1f717_bb9520e6","line":28,"range":{"start_line":25,"start_character":39,"end_line":28,"end_character":72},"updated":"2019-03-26 16:29:59.000000000","message":"I think this will prevent us to meaningfully use the unnumbered RequestGroup to let Matt add an extra trait for the scheduling. During such re-generation that extra trait would be lost.","commit_id":"08da12b5239cb980c0f303255b6594af0892b4fe"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"43add0ef40360d6e157a8355fb13a30cee67caf9","unresolved":false,"context_lines":[{"line_number":22,"context_line":"RequestSpec object changes then the request groups needs to be"},{"line_number":23,"context_line":"regenerated. For example the request filters are changing the"},{"line_number":24,"context_line":"RequestSpec before the scheduling. So after those filters run the"},{"line_number":25,"context_line":"RequestGroups needs to be regenerated. This is problematic becase"},{"line_number":26,"context_line":"anyting that is added directly to the RequestGroups generated from"},{"line_number":27,"context_line":"the RequestSpec before the request filters run will be lost as those"},{"line_number":28,"context_line":"groups are re-generated based on the updated content of the RequestSpec."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Note: Detecting the changes of the RequestSpec fields is not easy. The"},{"line_number":31,"context_line":"pythonic way would be to define a @property for each fields with getters"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5fc1f717_741fb9b6","line":28,"range":{"start_line":25,"start_character":39,"end_line":28,"end_character":72},"in_reply_to":"5fc1f717_bb9520e6","updated":"2019-03-27 08:40:15.000000000","message":"After I slept on it I don\u0027t think we can make Matt\u0027s change work with this. \n\nThe unnumbered group is created from multiple inputs, e.g. flavor, image metadata, extra traits for multiattach. If any of these input is changed that unnumbered group is potentially effected. The flavor and image stored in the request spec so based on those values the unnumbered group can be regenerated but the extra traits are not stored in the request spec separately so when a flavor or image change we have no way to include the extra traits to the re-generated unnumbered group. \n\nShall we add an extra field to the RequestSpec to store the extra traits?","commit_id":"08da12b5239cb980c0f303255b6594af0892b4fe"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"2b4d6c4734ed2e0d2273c387b9c5d7952e43e0a3","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Note: This patch in its current form changes how the request groups"},{"line_number":45,"context_line":"are numbered in the allocation candidate query. The numbering in"},{"line_number":46,"context_line":"the placement query will not match with the numbering in the flavor"},{"line_number":47,"context_line":"extra spec. But still each group will have the appropriate content and"},{"line_number":48,"context_line":"has its own unique number."},{"line_number":49,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3fce034c_b33a9a95","line":46,"updated":"2019-04-15 12:58:16.000000000","message":"Sadly,  I think this is likely to be a deal breaker, for the debugging reasons that Eric mentions.\n\nWe seem to be in a state where individual request group numbers are in themselves not meaningful but the things they identify are. That identification now needs to be maintained through several subsystems (flavors, request groups, neutron, nova, placement) in order for us to have much hope of tracing activity.","commit_id":"08da12b5239cb980c0f303255b6594af0892b4fe"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b42d3fae11beb72e3482b41b9c6a7ca60c4c305f","unresolved":false,"context_lines":[{"line_number":45,"context_line":"are numbered in the allocation candidate query. The numbering in"},{"line_number":46,"context_line":"the placement query will not match with the numbering in the flavor"},{"line_number":47,"context_line":"extra spec. But still each group will have the appropriate content and"},{"line_number":48,"context_line":"has its own unique number."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Change-Id: I1e552d6dfef77d98638463ca2c309cc658e02445"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5fc1f717_a2764da3","line":48,"updated":"2019-03-26 19:22:31.000000000","message":"This is going to make things tougher to debug once we have [1]. And if we decide to extend the request group namespace to arbitrary strings, we\u0027re going to have to come up with some other way to do this.\n\n[1] https://review.openstack.org/#/c/597601/","commit_id":"08da12b5239cb980c0f303255b6594af0892b4fe"}],"nova/conductor/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3b8d58745f2d7b4caf0e1db2a20ae6596c293aad","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            # original RequestSpec object for make sure the scheduler verifies"},{"line_number":320,"context_line":"            # the right one and not the original flavor"},{"line_number":321,"context_line":"            request_spec.flavor \u003d flavor"},{"line_number":322,"context_line":"            request_spec.update_or_create_request_groups()"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        task \u003d self._build_cold_migrate_task(context, instance, flavor,"},{"line_number":325,"context_line":"                request_spec, clean_shutdown, host_list)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_9e42aeaa","line":322,"updated":"2019-03-25 16:17:04.000000000","message":"Should probably have a comment with this, but is it really needed? Wouldn\u0027t we run through scheduler utils to process the request spec during scheduling as part of the MigrationTask?","commit_id":"299a72df410b27dbafdf0826c43d3d73ac0c1d98"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1608690bef9f1f1539dd715d57bac743276b7c3f","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            # original RequestSpec object for make sure the scheduler verifies"},{"line_number":320,"context_line":"            # the right one and not the original flavor"},{"line_number":321,"context_line":"            request_spec.flavor \u003d flavor"},{"line_number":322,"context_line":"            request_spec.update_or_create_request_groups()"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        task \u003d self._build_cold_migrate_task(context, instance, flavor,"},{"line_number":325,"context_line":"                request_spec, clean_shutdown, host_list)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_fb8de87b","line":322,"in_reply_to":"5fc1f717_9e42aeaa","updated":"2019-03-26 16:27:59.000000000","message":"You are right the there is a update_or_create_request_groups() call as well at the end of calling the request filters just before the scheduler call. So in this place we don\u0027t need the extra call.","commit_id":"299a72df410b27dbafdf0826c43d3d73ac0c1d98"}],"nova/objects/request_spec.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fbe48939a60b93f8d8224c295a0800540666e70f","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        if not self.requested_resources:"},{"line_number":425,"context_line":"            self.requested_resources \u003d []"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        # remove the groups that could potentially changed due to changing this"},{"line_number":428,"context_line":"        # request spec. There could be request groups due to neutron ports and"},{"line_number":429,"context_line":"        # we want to keep them as is during this update."},{"line_number":430,"context_line":"        self.requested_resources \u003d ["}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_a3f75359","line":427,"range":{"start_line":427,"start_character":51,"end_line":427,"end_character":58},"updated":"2019-03-25 16:14:50.000000000","message":"change","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fbe48939a60b93f8d8224c295a0800540666e70f","unresolved":false,"context_lines":[{"line_number":881,"context_line":"    def get_resource_request(self):"},{"line_number":882,"context_line":"        res_req \u003d utils.ResourceRequest()"},{"line_number":883,"context_line":""},{"line_number":884,"context_line":"        # group policy is not stored directly in the RequesSpec as today it can"},{"line_number":885,"context_line":"        # only come from the flavor extra spec."},{"line_number":886,"context_line":"        if (\"extra_specs\" in self.flavor"},{"line_number":887,"context_line":"                and \"group_policy\" in self.flavor.extra_specs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_03af477d","line":884,"range":{"start_line":884,"start_character":53,"end_line":884,"end_character":63},"updated":"2019-03-25 16:14:50.000000000","message":"RequestSpec","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1608690bef9f1f1539dd715d57bac743276b7c3f","unresolved":false,"context_lines":[{"line_number":881,"context_line":"    def get_resource_request(self):"},{"line_number":882,"context_line":"        res_req \u003d utils.ResourceRequest()"},{"line_number":883,"context_line":""},{"line_number":884,"context_line":"        # group policy is not stored directly in the RequesSpec as today it can"},{"line_number":885,"context_line":"        # only come from the flavor extra spec."},{"line_number":886,"context_line":"        if (\"extra_specs\" in self.flavor"},{"line_number":887,"context_line":"                and \"group_policy\" in self.flavor.extra_specs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_64c95a57","line":884,"range":{"start_line":884,"start_character":53,"end_line":884,"end_character":63},"in_reply_to":"5fc1f717_03af477d","updated":"2019-03-26 16:27:59.000000000","message":"Done","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fbe48939a60b93f8d8224c295a0800540666e70f","unresolved":false,"context_lines":[{"line_number":888,"context_line":""},{"line_number":889,"context_line":"            res_req.add_group_policy(self.flavor.extra_specs[\u0027group_policy\u0027])"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"        if not self.requested_resources:"},{"line_number":892,"context_line":"            raise ValueError(\u0027missing unnumbered request group\u0027)"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"        for group in self.requested_resources:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_3e005a01","line":891,"range":{"start_line":891,"start_character":8,"end_line":891,"end_character":40},"updated":"2019-03-25 16:14:50.000000000","message":"could/should this be done first? I can\u0027t see any side effect where the preceding code could set self.requested_resources.","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1608690bef9f1f1539dd715d57bac743276b7c3f","unresolved":false,"context_lines":[{"line_number":888,"context_line":""},{"line_number":889,"context_line":"            res_req.add_group_policy(self.flavor.extra_specs[\u0027group_policy\u0027])"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"        if not self.requested_resources:"},{"line_number":892,"context_line":"            raise ValueError(\u0027missing unnumbered request group\u0027)"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"        for group in self.requested_resources:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_04c2d634","line":891,"range":{"start_line":891,"start_character":8,"end_line":891,"end_character":40},"in_reply_to":"5fc1f717_3e005a01","updated":"2019-03-26 16:27:59.000000000","message":"I dropped this. It was only here for troubleshooting.","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fbe48939a60b93f8d8224c295a0800540666e70f","unresolved":false,"context_lines":[{"line_number":889,"context_line":"            res_req.add_group_policy(self.flavor.extra_specs[\u0027group_policy\u0027])"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"        if not self.requested_resources:"},{"line_number":892,"context_line":"            raise ValueError(\u0027missing unnumbered request group\u0027)"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"        for group in self.requested_resources:"},{"line_number":895,"context_line":"            if group.use_same_provider:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_e30b1b27","line":892,"range":{"start_line":892,"start_character":12,"end_line":892,"end_character":64},"updated":"2019-03-25 16:14:50.000000000","message":"So we\u0027re making it a hard failure now to have a request spec with no unnumbered group? I\u0027m pretty sure you could do that before by specifying VCPU, MEMORY_MB, and (if not volume/shared) DISK_GB in explicit numbered request groups in your flavor.","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1608690bef9f1f1539dd715d57bac743276b7c3f","unresolved":false,"context_lines":[{"line_number":889,"context_line":"            res_req.add_group_policy(self.flavor.extra_specs[\u0027group_policy\u0027])"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"        if not self.requested_resources:"},{"line_number":892,"context_line":"            raise ValueError(\u0027missing unnumbered request group\u0027)"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"        for group in self.requested_resources:"},{"line_number":895,"context_line":"            if group.use_same_provider:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_24bfd2aa","line":892,"range":{"start_line":892,"start_character":12,"end_line":892,"end_character":64},"in_reply_to":"5fc1f717_e30b1b27","updated":"2019-03-26 16:27:59.000000000","message":"ditto","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fbe48939a60b93f8d8224c295a0800540666e70f","unresolved":false,"context_lines":[{"line_number":894,"context_line":"        for group in self.requested_resources:"},{"line_number":895,"context_line":"            if group.use_same_provider:"},{"line_number":896,"context_line":"                # NOTE(gibi): This call assigns new numbers for the passed in"},{"line_number":897,"context_line":"                # groups so the unnumbered group need to be handled specially"},{"line_number":898,"context_line":"                # below"},{"line_number":899,"context_line":"                res_req.add_request_group(group)"},{"line_number":900,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_83c25733","line":897,"range":{"start_line":897,"start_character":49,"end_line":897,"end_character":53},"updated":"2019-03-25 16:14:50.000000000","message":"needs","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fbe48939a60b93f8d8224c295a0800540666e70f","unresolved":false,"context_lines":[{"line_number":898,"context_line":"                # below"},{"line_number":899,"context_line":"                res_req.add_request_group(group)"},{"line_number":900,"context_line":"            else:"},{"line_number":901,"context_line":"                # NOTE(gibi): make it less hackish"},{"line_number":902,"context_line":"                res_req._rg_by_id[None] \u003d group"},{"line_number":903,"context_line":""},{"line_number":904,"context_line":"        print(\u0027a_c: \u0027, self.requested_resources)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_1ea79e0d","line":901,"range":{"start_line":901,"start_character":16,"end_line":901,"end_character":50},"updated":"2019-03-25 16:14:50.000000000","message":"how about\n\n    def add_request_group(self, request_group, ident\u003dNEW):\n\n...where NEW is a sentinel object indicating that we should use the existing algorithm to generate a unique ident; otherwise we use the value passed in (which may be None, as it would be in this case).","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1608690bef9f1f1539dd715d57bac743276b7c3f","unresolved":false,"context_lines":[{"line_number":898,"context_line":"                # below"},{"line_number":899,"context_line":"                res_req.add_request_group(group)"},{"line_number":900,"context_line":"            else:"},{"line_number":901,"context_line":"                # NOTE(gibi): make it less hackish"},{"line_number":902,"context_line":"                res_req._rg_by_id[None] \u003d group"},{"line_number":903,"context_line":""},{"line_number":904,"context_line":"        print(\u0027a_c: \u0027, self.requested_resources)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_e4e22ad5","line":901,"range":{"start_line":901,"start_character":16,"end_line":901,"end_character":50},"in_reply_to":"5fc1f717_1ea79e0d","updated":"2019-03-26 16:27:59.000000000","message":"Done","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fbe48939a60b93f8d8224c295a0800540666e70f","unresolved":false,"context_lines":[{"line_number":901,"context_line":"                # NOTE(gibi): make it less hackish"},{"line_number":902,"context_line":"                res_req._rg_by_id[None] \u003d group"},{"line_number":903,"context_line":""},{"line_number":904,"context_line":"        print(\u0027a_c: \u0027, self.requested_resources)"},{"line_number":905,"context_line":"        return res_req"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_a3bf53a8","line":904,"range":{"start_line":904,"start_character":8,"end_line":904,"end_character":48},"updated":"2019-03-25 16:14:50.000000000","message":"LOG.debug() or remove?","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1608690bef9f1f1539dd715d57bac743276b7c3f","unresolved":false,"context_lines":[{"line_number":901,"context_line":"                # NOTE(gibi): make it less hackish"},{"line_number":902,"context_line":"                res_req._rg_by_id[None] \u003d group"},{"line_number":903,"context_line":""},{"line_number":904,"context_line":"        print(\u0027a_c: \u0027, self.requested_resources)"},{"line_number":905,"context_line":"        return res_req"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_84e326d8","line":904,"range":{"start_line":904,"start_character":8,"end_line":904,"end_character":48},"in_reply_to":"5fc1f717_a3bf53a8","updated":"2019-03-26 16:27:59.000000000","message":"Done","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3b8d58745f2d7b4caf0e1db2a20ae6596c293aad","unresolved":false,"context_lines":[{"line_number":570,"context_line":"                # NOTE(danms): Instance group may have been deleted"},{"line_number":571,"context_line":"                spec.instance_group \u003d None"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        spec.update_or_create_request_groups()"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"        spec.obj_reset_changes()"},{"line_number":576,"context_line":"        return spec"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_3e2cda00","line":573,"updated":"2019-03-25 16:17:04.000000000","message":"This seems dangerous to do when loading the object out of the DB. Why is this needed? Simply to load the requested_resources based on the persisted flavor? Should at least have a comment.","commit_id":"299a72df410b27dbafdf0826c43d3d73ac0c1d98"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1608690bef9f1f1539dd715d57bac743276b7c3f","unresolved":false,"context_lines":[{"line_number":570,"context_line":"                # NOTE(danms): Instance group may have been deleted"},{"line_number":571,"context_line":"                spec.instance_group \u003d None"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        spec.update_or_create_request_groups()"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"        spec.obj_reset_changes()"},{"line_number":576,"context_line":"        return spec"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_bb0520c4","line":573,"in_reply_to":"5fc1f717_3e2cda00","updated":"2019-03-26 16:27:59.000000000","message":"If we want that the RequestSpec.requested_resources field is consistent the rest of the fields (e.g. flavor, image) of the RequestSpec then we need to calculate value when the RequestSpec is created from the db.","commit_id":"299a72df410b27dbafdf0826c43d3d73ac0c1d98"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"89353c6c2c690609a644e974239a705d40f32bbb","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        if not self.requested_resources:"},{"line_number":427,"context_line":"            self.requested_resources \u003d []"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        # remove the groups that could potentially changed due to changing this"},{"line_number":430,"context_line":"        # request spec. There could be request groups due to neutron ports and"},{"line_number":431,"context_line":"        # we want to keep them as is during this update."},{"line_number":432,"context_line":"        self.requested_resources \u003d ["}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_16e2e7d5","line":429,"range":{"start_line":429,"start_character":38,"end_line":429,"end_character":39},"updated":"2019-03-28 00:37:29.000000000","message":"nit: \"be\"","commit_id":"08da12b5239cb980c0f303255b6594af0892b4fe"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"89353c6c2c690609a644e974239a705d40f32bbb","unresolved":false,"context_lines":[{"line_number":500,"context_line":"        # make sure that the requested_resources field are populated based on"},{"line_number":501,"context_line":"        # the values of the RequestSpec fields (e.g. flavor, image) before we"},{"line_number":502,"context_line":"        # return it from this factory method"},{"line_number":503,"context_line":"        spec_obj.update_or_create_request_groups()"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        if port_resource_requests:"},{"line_number":506,"context_line":"            spec_obj.requested_resources.extend(port_resource_requests)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_968577af","line":503,"updated":"2019-03-28 00:37:29.000000000","message":"FYI: When we merge device profiles, the request groups from device profiles should ideally be added after this step, just as port resource requests are added below. Otherwise, there will be useless work in Lines 432--444 to create a temp list.","commit_id":"08da12b5239cb980c0f303255b6594af0892b4fe"}],"nova/scheduler/request_filter.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fbe48939a60b93f8d8224c295a0800540666e70f","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    for filter in ALL_REQUEST_FILTERS:"},{"line_number":100,"context_line":"        filter(ctxt, request_spec)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    request_spec.update_or_create_request_groups()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_9e8b8e66","line":102,"range":{"start_line":102,"start_character":0,"end_line":102,"end_character":50},"updated":"2019-03-25 16:14:50.000000000","message":"Is there a reason we shouldn\u0027t do this before processing the filters? I\u0027m pretty sure that\u0027s what mriedem\u0027s use case is going to want.","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1608690bef9f1f1539dd715d57bac743276b7c3f","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    for filter in ALL_REQUEST_FILTERS:"},{"line_number":100,"context_line":"        filter(ctxt, request_spec)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    request_spec.update_or_create_request_groups()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_84fc8672","line":102,"range":{"start_line":102,"start_character":0,"end_line":102,"end_character":50},"in_reply_to":"5fc1f717_9e8b8e66","updated":"2019-03-26 16:27:59.000000000","message":"The filters might change the request spec object by setting the requested_destination field. If that field is changed then we need to re-generate the RequestGroups.","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"}],"nova/scheduler/utils.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fbe48939a60b93f8d8224c295a0800540666e70f","unresolved":false,"context_lines":[{"line_number":470,"context_line":"    for rclass, amount in spec_resources.items():"},{"line_number":471,"context_line":"        res_req.get_request_group(None).resources[rclass] \u003d amount"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"    requested_resources \u003d (spec_obj.requested_resources"},{"line_number":474,"context_line":"                           if \u0027requested_resources\u0027 in spec_obj"},{"line_number":475,"context_line":"                              and spec_obj.requested_resources"},{"line_number":476,"context_line":"                           else [])"},{"line_number":477,"context_line":"    for group in requested_resources:"},{"line_number":478,"context_line":"        res_req.add_request_group(group)"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"    if \u0027requested_destination\u0027 in spec_obj:"},{"line_number":481,"context_line":"        destination \u003d spec_obj.requested_destination"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_7effc2aa","side":"PARENT","line":478,"range":{"start_line":473,"start_character":0,"end_line":478,"end_character":40},"updated":"2019-03-25 16:14:50.000000000","message":"[later] Okay, this chunk is removed in the refactor.\n\nDoesn\u0027t that screw up the GET /a_c call at conductor/manager.py:137?","commit_id":"c993d4fe2ffaadea76d5ae76eedfddc3a4c71346"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1608690bef9f1f1539dd715d57bac743276b7c3f","unresolved":false,"context_lines":[{"line_number":470,"context_line":"    for rclass, amount in spec_resources.items():"},{"line_number":471,"context_line":"        res_req.get_request_group(None).resources[rclass] \u003d amount"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"    requested_resources \u003d (spec_obj.requested_resources"},{"line_number":474,"context_line":"                           if \u0027requested_resources\u0027 in spec_obj"},{"line_number":475,"context_line":"                              and spec_obj.requested_resources"},{"line_number":476,"context_line":"                           else [])"},{"line_number":477,"context_line":"    for group in requested_resources:"},{"line_number":478,"context_line":"        res_req.add_request_group(group)"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"    if \u0027requested_destination\u0027 in spec_obj:"},{"line_number":481,"context_line":"        destination \u003d spec_obj.requested_destination"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_3b3cd0c6","side":"PARENT","line":478,"range":{"start_line":473,"start_character":0,"end_line":478,"end_character":40},"in_reply_to":"5fc1f717_7effc2aa","updated":"2019-03-26 16:27:59.000000000","message":"The order of the calls are changed significantly. \n\nIn the past we generated the ResourceRequest from the RequestSpec just before we asked for the a_c query string. \n\nNow we want to generate RequestGroup inside the RequestSpec a lot earlier, so that Matt can add new required traits to the unnumbered request group. But we want to reuse the code from the this function and from the ResourceRequest as that already generates RequestGroup objects anyhow.\n\nThe part that is removed from here is moved to https://review.openstack.org/#/c/647396/3/nova/objects/request_spec.py@899","commit_id":"c993d4fe2ffaadea76d5ae76eedfddc3a4c71346"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fbe48939a60b93f8d8224c295a0800540666e70f","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        return ret"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    @classmethod"},{"line_number":214,"context_line":"    def from_request_spec(cls, spec_obj):"},{"line_number":215,"context_line":"        \"\"\"Given a RequestSpec object, returns a ResourceRequest of the resources,"},{"line_number":216,"context_line":"        traits, and aggregates it represents."},{"line_number":217,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_631acbcc","line":214,"range":{"start_line":214,"start_character":8,"end_line":214,"end_character":25},"updated":"2019-03-25 16:14:50.000000000","message":"Why did you move this into a @classmethod? Is there any functional change or just an unrelated refactor?","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1608690bef9f1f1539dd715d57bac743276b7c3f","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        return ret"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    @classmethod"},{"line_number":214,"context_line":"    def from_request_spec(cls, spec_obj):"},{"line_number":215,"context_line":"        \"\"\"Given a RequestSpec object, returns a ResourceRequest of the resources,"},{"line_number":216,"context_line":"        traits, and aggregates it represents."},{"line_number":217,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_bb7680a3","line":214,"range":{"start_line":214,"start_character":8,"end_line":214,"end_character":25},"in_reply_to":"5fc1f717_631acbcc","updated":"2019-03-26 16:27:59.000000000","message":"See my answer in below in the base side.","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fbe48939a60b93f8d8224c295a0800540666e70f","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        # Process extra_specs"},{"line_number":249,"context_line":"        if \"extra_specs\" in spec_obj.flavor:"},{"line_number":250,"context_line":"            res_req \u003d ResourceRequest.from_extra_specs("},{"line_number":251,"context_line":"                spec_obj.flavor.extra_specs)"},{"line_number":252,"context_line":"            # If any of the three standard resources above was explicitly given"},{"line_number":253,"context_line":"            # in the extra_specs - in any group - we need to replace it, or"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_2337e34f","line":250,"range":{"start_line":250,"start_character":22,"end_line":250,"end_character":54},"updated":"2019-03-25 16:14:50.000000000","message":"This reads weird, though I\u0027m not sure\n\n cls.from_extra_specs(...)\n\nreads any better, if it\u0027s even legal.","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1608690bef9f1f1539dd715d57bac743276b7c3f","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        # Process extra_specs"},{"line_number":249,"context_line":"        if \"extra_specs\" in spec_obj.flavor:"},{"line_number":250,"context_line":"            res_req \u003d ResourceRequest.from_extra_specs("},{"line_number":251,"context_line":"                spec_obj.flavor.extra_specs)"},{"line_number":252,"context_line":"            # If any of the three standard resources above was explicitly given"},{"line_number":253,"context_line":"            # in the extra_specs - in any group - we need to replace it, or"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_7ba1f8f6","line":250,"range":{"start_line":250,"start_character":22,"end_line":250,"end_character":54},"in_reply_to":"5fc1f717_2337e34f","updated":"2019-03-26 16:27:59.000000000","message":"cls.from_extra_specs() would work too","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"fbe48939a60b93f8d8224c295a0800540666e70f","unresolved":false,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        # Process any image properties"},{"line_number":268,"context_line":"        if \u0027image\u0027 in spec_obj and \u0027properties\u0027 in spec_obj.image:"},{"line_number":269,"context_line":"            res_req \u003d ResourceRequest.from_image_props("},{"line_number":270,"context_line":"                spec_obj.image.properties,"},{"line_number":271,"context_line":"                req\u003dres_req)"},{"line_number":272,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_c33fff22","line":269,"range":{"start_line":269,"start_character":22,"end_line":269,"end_character":37},"updated":"2019-03-25 16:14:50.000000000","message":"ditto","commit_id":"fc96e524b477e8fb55dcfde0d0e9b412ca17c9e0"}]}
