)]}'
{"blazar/manager/exceptions.py":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"ddbe0b97b70db17515605a6812563347fa19b563","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"class CantUpdateParameter(exceptions.BlazarException):"},{"line_number":171,"context_line":"    code \u003d 409"},{"line_number":172,"context_line":"    msg_fmt \u003d _(\"%(param)s cannot be updated.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_e5494b60","line":172,"range":{"start_line":172,"start_character":44,"end_line":172,"end_character":45},"updated":"2017-08-21 22:03:48.000000000","message":"Remove dot to match other exception messages","commit_id":"c4f60e18c07b05f039a1dcdadbd5f22394b88599"},{"author":{"_account_id":23840,"name":"Hiroaki Kobayashi","email":"kobayashi.hiroaki@lab.ntt.co.jp","username":"hiro-kobayashi"},"change_message_id":"c358df4342216cd44a97d05557486e95813a5a13","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"class CantUpdateParameter(exceptions.BlazarException):"},{"line_number":171,"context_line":"    code \u003d 409"},{"line_number":172,"context_line":"    msg_fmt \u003d _(\"%(param)s cannot be updated.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_c67d281d","line":172,"range":{"start_line":172,"start_character":44,"end_line":172,"end_character":45},"in_reply_to":"9f436f4f_e5494b60","updated":"2017-08-22 01:25:32.000000000","message":"Done","commit_id":"c4f60e18c07b05f039a1dcdadbd5f22394b88599"}],"blazar/manager/service.py":[{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@g.softbank.co.jp","username":"masa"},"change_message_id":"bdd1d4063a64db32824703ea3a24e763428722a7","unresolved":false,"context_lines":[{"line_number":343,"context_line":""},{"line_number":344,"context_line":"            # TODO(frossigneux) rollback if an exception is raised"},{"line_number":345,"context_line":"            reservations \u003d values.get(\u0027reservations\u0027, [])"},{"line_number":346,"context_line":"            for reservation_record in ("},{"line_number":347,"context_line":"                    db_api.reservation_get_all_by_lease_id(lease_id)):"},{"line_number":348,"context_line":"                v \u003d {}"},{"line_number":349,"context_line":"                v[\u0027start_date\u0027] \u003d values[\u0027start_date\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_ae44251c","line":346,"updated":"2017-07-26 10:08:04.000000000","message":"Use db_api.reservation_get only to pick up a reservation record from db with reservation_id, then check and update the reservation. It looks more straight-forward.\n\n  for res in reservaitons:\n      r \u003d db_api.reservation_get(res[\u0027id\u0027])","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":23840,"name":"Hiroaki Kobayashi","email":"kobayashi.hiroaki@lab.ntt.co.jp","username":"hiro-kobayashi"},"change_message_id":"7b5382fa762dc5f24e7c04ca2d99a0c85a2f274d","unresolved":false,"context_lines":[{"line_number":343,"context_line":""},{"line_number":344,"context_line":"            # TODO(frossigneux) rollback if an exception is raised"},{"line_number":345,"context_line":"            reservations \u003d values.get(\u0027reservations\u0027, [])"},{"line_number":346,"context_line":"            for reservation_record in ("},{"line_number":347,"context_line":"                    db_api.reservation_get_all_by_lease_id(lease_id)):"},{"line_number":348,"context_line":"                v \u003d {}"},{"line_number":349,"context_line":"                v[\u0027start_date\u0027] \u003d values[\u0027start_date\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"df3967d1_0d84ad5d","line":346,"in_reply_to":"ff346bd7_ae44251c","updated":"2017-08-01 06:52:04.000000000","message":"db_api.reservation_get_all_by_lease_id() should be used because the update_reservation() method must be called for all of reservations related to the lease (L362) . The reservations parameter of lease update request has only parameters to change. That\u0027s why using db_api.reservation_get(res[\u0027id]) is insufficient.\n\nI\u0027ve updated this part to improve readability.","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"a0282031faec9d0a70550ab12d556cb794e1704e","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                v \u003d {}"},{"line_number":358,"context_line":"                v[\u0027start_date\u0027] \u003d values[\u0027start_date\u0027]"},{"line_number":359,"context_line":"                v[\u0027end_date\u0027] \u003d values[\u0027end_date\u0027]"},{"line_number":360,"context_line":"                try:"},{"line_number":361,"context_line":"                    v.update(filter(lambda x: x[\u0027id\u0027] \u003d\u003d reservation[\u0027id\u0027],"},{"line_number":362,"context_line":"                                    reservations).pop())"},{"line_number":363,"context_line":"                except IndexError:"},{"line_number":364,"context_line":"                    pass"},{"line_number":365,"context_line":"                resource_type \u003d v.get(\u0027resource_type\u0027,"},{"line_number":366,"context_line":"                                      reservation[\u0027resource_type\u0027])"},{"line_number":367,"context_line":"                if resource_type !\u003d reservation[\u0027resource_type\u0027]:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f436f4f_14a036a5","line":364,"range":{"start_line":360,"start_character":0,"end_line":364,"end_character":24},"updated":"2017-08-18 12:33:06.000000000","message":"Shouldn\u0027t this be except KeyError since you\u0027re working with dicts rather than lists?","commit_id":"eba0a9a94493fa8059c8dcb627545b9611998ae9"},{"author":{"_account_id":23840,"name":"Hiroaki Kobayashi","email":"kobayashi.hiroaki@lab.ntt.co.jp","username":"hiro-kobayashi"},"change_message_id":"10085689bc99cbb715417eef5e01a48e821e37b4","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                v \u003d {}"},{"line_number":358,"context_line":"                v[\u0027start_date\u0027] \u003d values[\u0027start_date\u0027]"},{"line_number":359,"context_line":"                v[\u0027end_date\u0027] \u003d values[\u0027end_date\u0027]"},{"line_number":360,"context_line":"                try:"},{"line_number":361,"context_line":"                    v.update(filter(lambda x: x[\u0027id\u0027] \u003d\u003d reservation[\u0027id\u0027],"},{"line_number":362,"context_line":"                                    reservations).pop())"},{"line_number":363,"context_line":"                except IndexError:"},{"line_number":364,"context_line":"                    pass"},{"line_number":365,"context_line":"                resource_type \u003d v.get(\u0027resource_type\u0027,"},{"line_number":366,"context_line":"                                      reservation[\u0027resource_type\u0027])"},{"line_number":367,"context_line":"                if resource_type !\u003d reservation[\u0027resource_type\u0027]:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f436f4f_7b274f66","line":364,"range":{"start_line":360,"start_character":0,"end_line":364,"end_character":24},"in_reply_to":"9f436f4f_14a036a5","updated":"2017-08-21 02:25:32.000000000","message":"IndexError can be raised at L362. KeyError can be also raised at L361, so I\u0027ve added KeyError handling. Thanks!","commit_id":"eba0a9a94493fa8059c8dcb627545b9611998ae9"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"a0282031faec9d0a70550ab12d556cb794e1704e","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        self._update_before_end_event(lease, values, notifications,"},{"line_number":401,"context_line":"                                      before_end_date)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        try:"},{"line_number":404,"context_line":"            values.pop(\u0027reservations\u0027)"},{"line_number":405,"context_line":"        except KeyError:"},{"line_number":406,"context_line":"            pass"},{"line_number":407,"context_line":"        db_api.lease_update(lease_id, values)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        lease \u003d db_api.lease_get(lease_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f436f4f_94ce6681","line":406,"range":{"start_line":403,"start_character":0,"end_line":406,"end_character":16},"updated":"2017-08-18 12:33:06.000000000","message":"Since you\u0027re not using the return value of dict.pop(), it would be better to use:\n\n    del values[\u0027reservations\u0027]","commit_id":"eba0a9a94493fa8059c8dcb627545b9611998ae9"},{"author":{"_account_id":23840,"name":"Hiroaki Kobayashi","email":"kobayashi.hiroaki@lab.ntt.co.jp","username":"hiro-kobayashi"},"change_message_id":"10085689bc99cbb715417eef5e01a48e821e37b4","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        self._update_before_end_event(lease, values, notifications,"},{"line_number":401,"context_line":"                                      before_end_date)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        try:"},{"line_number":404,"context_line":"            values.pop(\u0027reservations\u0027)"},{"line_number":405,"context_line":"        except KeyError:"},{"line_number":406,"context_line":"            pass"},{"line_number":407,"context_line":"        db_api.lease_update(lease_id, values)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        lease \u003d db_api.lease_get(lease_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f436f4f_7bb50fee","line":406,"range":{"start_line":403,"start_character":0,"end_line":406,"end_character":16},"in_reply_to":"9f436f4f_94ce6681","updated":"2017-08-21 02:25:32.000000000","message":"Done","commit_id":"eba0a9a94493fa8059c8dcb627545b9611998ae9"}],"blazar/plugins/oshosts/host_plugin.py":[{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@g.softbank.co.jp","username":"masa"},"change_message_id":"bdd1d4063a64db32824703ea3a24e763428722a7","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                                          \u0027reservation_id\u0027: reservation_id})"},{"line_number":104,"context_line":"        return host_reservation[\u0027id\u0027]"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def update_reservation(self, reservation_id, values):"},{"line_number":107,"context_line":"        \"\"\"Update reservation.\"\"\""},{"line_number":108,"context_line":"        reservation \u003d db_api.reservation_get(reservation_id)"},{"line_number":109,"context_line":"        lease \u003d db_api.lease_get(reservation[\u0027lease_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_fe62dc3d","line":106,"updated":"2017-07-26 10:08:04.000000000","message":"Please separate the method by meaningful block.  It\u0027s too long for a method to be more than 80 lines.  IMO, update_reservation method should only have code for logic of \u0027update\u0027 itself and sub_methods should have code for data that constructs information.","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":23840,"name":"Hiroaki Kobayashi","email":"kobayashi.hiroaki@lab.ntt.co.jp","username":"hiro-kobayashi"},"change_message_id":"7b5382fa762dc5f24e7c04ca2d99a0c85a2f274d","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                                          \u0027reservation_id\u0027: reservation_id})"},{"line_number":104,"context_line":"        return host_reservation[\u0027id\u0027]"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def update_reservation(self, reservation_id, values):"},{"line_number":107,"context_line":"        \"\"\"Update reservation.\"\"\""},{"line_number":108,"context_line":"        reservation \u003d db_api.reservation_get(reservation_id)"},{"line_number":109,"context_line":"        lease \u003d db_api.lease_get(reservation[\u0027lease_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"df3967d1_50548eca","line":106,"in_reply_to":"ff346bd7_fe62dc3d","updated":"2017-08-01 06:52:04.000000000","message":"I\u0027ve separated some part as another methods.","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@g.softbank.co.jp","username":"masa"},"change_message_id":"bdd1d4063a64db32824703ea3a24e763428722a7","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        reservation \u003d db_api.reservation_get(reservation_id)"},{"line_number":109,"context_line":"        lease \u003d db_api.lease_get(reservation[\u0027lease_id\u0027])"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        if (len(values) \u003d\u003d 2 and"},{"line_number":112,"context_line":"                values[\u0027start_date\u0027] \u003e\u003d lease[\u0027start_date\u0027] and"},{"line_number":113,"context_line":"                values[\u0027end_date\u0027] \u003c\u003d lease[\u0027end_date\u0027]):"},{"line_number":114,"context_line":"            # Nothing to update"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_29e02f96","line":111,"range":{"start_line":111,"start_character":12,"end_line":111,"end_character":28},"updated":"2017-07-26 10:08:04.000000000","message":"The condition really becomes True at specific case?  \u0027values\u0027 has a copy of requested parameters and at least the request needs to have id parameters. It means \u0027values\u0027 has 3 keys, id, start_date and end_data.","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":23840,"name":"Hiroaki Kobayashi","email":"kobayashi.hiroaki@lab.ntt.co.jp","username":"hiro-kobayashi"},"change_message_id":"7b5382fa762dc5f24e7c04ca2d99a0c85a2f274d","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        reservation \u003d db_api.reservation_get(reservation_id)"},{"line_number":109,"context_line":"        lease \u003d db_api.lease_get(reservation[\u0027lease_id\u0027])"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        if (len(values) \u003d\u003d 2 and"},{"line_number":112,"context_line":"                values[\u0027start_date\u0027] \u003e\u003d lease[\u0027start_date\u0027] and"},{"line_number":113,"context_line":"                values[\u0027end_date\u0027] \u003c\u003d lease[\u0027end_date\u0027]):"},{"line_number":114,"context_line":"            # Nothing to update"}],"source_content_type":"text/x-python","patch_set":5,"id":"df3967d1_b32624b7","line":111,"range":{"start_line":111,"start_character":12,"end_line":111,"end_character":28},"in_reply_to":"ff346bd7_29e02f96","updated":"2017-08-01 06:52:04.000000000","message":"I\u0027ve changed conditions. thanks!","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@g.softbank.co.jp","username":"masa"},"change_message_id":"bdd1d4063a64db32824703ea3a24e763428722a7","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        filter_array \u003d []"},{"line_number":118,"context_line":"        requested_hosts \u003d []"},{"line_number":119,"context_line":"        if values.get(\u0027hypervisor_properties\u0027):"},{"line_number":120,"context_line":"            filter_array \u003d plugins_utils.convert_requirements("},{"line_number":121,"context_line":"                values.get(\u0027hypervisor_properties\u0027))"},{"line_number":122,"context_line":"        if values.get(\u0027resource_properties\u0027):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_3bb9962d","line":119,"range":{"start_line":119,"start_character":11,"end_line":119,"end_character":47},"updated":"2017-07-26 10:08:04.000000000","message":"Is the filter_array constructed correctly if original_request has hypervisor_properties but the update request doesn\u0027t have the properties?  According to the specs, clients sends update API body with only parameters they want to update.","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":23840,"name":"Hiroaki Kobayashi","email":"kobayashi.hiroaki@lab.ntt.co.jp","username":"hiro-kobayashi"},"change_message_id":"7b5382fa762dc5f24e7c04ca2d99a0c85a2f274d","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        filter_array \u003d []"},{"line_number":118,"context_line":"        requested_hosts \u003d []"},{"line_number":119,"context_line":"        if values.get(\u0027hypervisor_properties\u0027):"},{"line_number":120,"context_line":"            filter_array \u003d plugins_utils.convert_requirements("},{"line_number":121,"context_line":"                values.get(\u0027hypervisor_properties\u0027))"},{"line_number":122,"context_line":"        if values.get(\u0027resource_properties\u0027):"}],"source_content_type":"text/x-python","patch_set":5,"id":"df3967d1_566366dd","line":119,"range":{"start_line":119,"start_character":11,"end_line":119,"end_character":47},"in_reply_to":"ff346bd7_3bb9962d","updated":"2017-08-01 06:52:04.000000000","message":"I\u0027ve changed it to care original properties. thanks!","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@g.softbank.co.jp","username":"masa"},"change_message_id":"bdd1d4063a64db32824703ea3a24e763428722a7","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        if values.get(\u0027hypervisor_properties\u0027):"},{"line_number":120,"context_line":"            filter_array \u003d plugins_utils.convert_requirements("},{"line_number":121,"context_line":"                values.get(\u0027hypervisor_properties\u0027))"},{"line_number":122,"context_line":"        if values.get(\u0027resource_properties\u0027):"},{"line_number":123,"context_line":"            filter_array +\u003d plugins_utils.convert_requirements("},{"line_number":124,"context_line":"                values.get(\u0027resource_properties\u0027))"},{"line_number":125,"context_line":"        if filter_array:"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_db872a61","line":122,"range":{"start_line":122,"start_character":0,"end_line":122,"end_character":45},"updated":"2017-07-26 10:08:04.000000000","message":"same as above","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":23840,"name":"Hiroaki Kobayashi","email":"kobayashi.hiroaki@lab.ntt.co.jp","username":"hiro-kobayashi"},"change_message_id":"7b5382fa762dc5f24e7c04ca2d99a0c85a2f274d","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        if values.get(\u0027hypervisor_properties\u0027):"},{"line_number":120,"context_line":"            filter_array \u003d plugins_utils.convert_requirements("},{"line_number":121,"context_line":"                values.get(\u0027hypervisor_properties\u0027))"},{"line_number":122,"context_line":"        if values.get(\u0027resource_properties\u0027):"},{"line_number":123,"context_line":"            filter_array +\u003d plugins_utils.convert_requirements("},{"line_number":124,"context_line":"                values.get(\u0027resource_properties\u0027))"},{"line_number":125,"context_line":"        if filter_array:"}],"source_content_type":"text/x-python","patch_set":5,"id":"df3967d1_56b80629","line":122,"range":{"start_line":122,"start_character":0,"end_line":122,"end_character":45},"in_reply_to":"ff346bd7_db872a61","updated":"2017-08-01 06:52:04.000000000","message":"Done","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@g.softbank.co.jp","username":"masa"},"change_message_id":"bdd1d4063a64db32824703ea3a24e763428722a7","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            if not requested_hosts:"},{"line_number":130,"context_line":"                raise manager_ex.NotEnoughHostsAvailable()"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        allocations \u003d []"},{"line_number":133,"context_line":"        keep \u003d 0"},{"line_number":134,"context_line":"        for allocation in db_api.host_allocation_get_all_by_values("},{"line_number":135,"context_line":"                reservation_id\u003dreservation_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_be3b34e9","line":132,"range":{"start_line":132,"start_character":0,"end_line":132,"end_character":24},"updated":"2017-07-26 10:08:04.000000000","message":"it\u0027s good to rename the name of \u0027allocation\u0027. removed_allocation or something?","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":23840,"name":"Hiroaki Kobayashi","email":"kobayashi.hiroaki@lab.ntt.co.jp","username":"hiro-kobayashi"},"change_message_id":"7b5382fa762dc5f24e7c04ca2d99a0c85a2f274d","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            if not requested_hosts:"},{"line_number":130,"context_line":"                raise manager_ex.NotEnoughHostsAvailable()"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        allocations \u003d []"},{"line_number":133,"context_line":"        keep \u003d 0"},{"line_number":134,"context_line":"        for allocation in db_api.host_allocation_get_all_by_values("},{"line_number":135,"context_line":"                reservation_id\u003dreservation_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"df3967d1_2f2505c3","line":132,"range":{"start_line":132,"start_character":0,"end_line":132,"end_character":24},"in_reply_to":"ff346bd7_be3b34e9","updated":"2017-08-01 06:52:04.000000000","message":"I\u0027ve renamed it \u0027allocs_to_remove\u0027.","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@g.softbank.co.jp","username":"masa"},"change_message_id":"bdd1d4063a64db32824703ea3a24e763428722a7","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        if (allocations or values.get(\u0027min\u0027) is not None or"},{"line_number":170,"context_line":"                values.get(\u0027max\u0027) is not None):"},{"line_number":171,"context_line":"            if reservation[\u0027status\u0027] \u003d\u003d \u0027active\u0027:"},{"line_number":172,"context_line":"                raise manager_ex.NotEnoughHostsAvailable()"},{"line_number":173,"context_line":"            host_reservation \u003d db_api.host_reservation_get("},{"line_number":174,"context_line":"                reservation[\u0027resource_id\u0027])"},{"line_number":175,"context_line":"            min \u003d values.get("}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_7e3f0c25","line":172,"range":{"start_line":171,"start_character":0,"end_line":172,"end_character":58},"updated":"2017-07-26 10:08:04.000000000","message":"Move the validation to beginning of the update_reservation method. maybe before L110? update lease API doesn\u0027t accept an update request in active status anyway.","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":23840,"name":"Hiroaki Kobayashi","email":"kobayashi.hiroaki@lab.ntt.co.jp","username":"hiro-kobayashi"},"change_message_id":"7b5382fa762dc5f24e7c04ca2d99a0c85a2f274d","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        if (allocations or values.get(\u0027min\u0027) is not None or"},{"line_number":170,"context_line":"                values.get(\u0027max\u0027) is not None):"},{"line_number":171,"context_line":"            if reservation[\u0027status\u0027] \u003d\u003d \u0027active\u0027:"},{"line_number":172,"context_line":"                raise manager_ex.NotEnoughHostsAvailable()"},{"line_number":173,"context_line":"            host_reservation \u003d db_api.host_reservation_get("},{"line_number":174,"context_line":"                reservation[\u0027resource_id\u0027])"},{"line_number":175,"context_line":"            min \u003d values.get("}],"source_content_type":"text/x-python","patch_set":5,"id":"df3967d1_525a322a","line":172,"range":{"start_line":171,"start_character":0,"end_line":172,"end_character":58},"in_reply_to":"ff346bd7_7e3f0c25","updated":"2017-08-01 06:52:04.000000000","message":"I think update lease should be allowed if it does not remove existing allocations, even if the reservation\u0027s status is active. So this status check should be done only if any allocation is needed to be removed.","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@g.softbank.co.jp","username":"masa"},"change_message_id":"bdd1d4063a64db32824703ea3a24e763428722a7","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                raise manager_ex.NotEnoughHostsAvailable()"},{"line_number":173,"context_line":"            host_reservation \u003d db_api.host_reservation_get("},{"line_number":174,"context_line":"                reservation[\u0027resource_id\u0027])"},{"line_number":175,"context_line":"            min \u003d values.get("},{"line_number":176,"context_line":"                \u0027min\u0027,"},{"line_number":177,"context_line":"                int(host_reservation[\u0027count_range\u0027].split(\u0027-\u0027)[0]))"},{"line_number":178,"context_line":"            max \u003d values.get("}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_be14544f","line":175,"range":{"start_line":175,"start_character":12,"end_line":175,"end_character":15},"updated":"2017-07-26 10:08:04.000000000","message":"\u0027min\u0027 is a reserved variable for min method in python. min_host or something is better.","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":23840,"name":"Hiroaki Kobayashi","email":"kobayashi.hiroaki@lab.ntt.co.jp","username":"hiro-kobayashi"},"change_message_id":"7b5382fa762dc5f24e7c04ca2d99a0c85a2f274d","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                raise manager_ex.NotEnoughHostsAvailable()"},{"line_number":173,"context_line":"            host_reservation \u003d db_api.host_reservation_get("},{"line_number":174,"context_line":"                reservation[\u0027resource_id\u0027])"},{"line_number":175,"context_line":"            min \u003d values.get("},{"line_number":176,"context_line":"                \u0027min\u0027,"},{"line_number":177,"context_line":"                int(host_reservation[\u0027count_range\u0027].split(\u0027-\u0027)[0]))"},{"line_number":178,"context_line":"            max \u003d values.get("}],"source_content_type":"text/x-python","patch_set":5,"id":"df3967d1_21a1baaa","line":175,"range":{"start_line":175,"start_character":12,"end_line":175,"end_character":15},"in_reply_to":"ff346bd7_be14544f","updated":"2017-08-01 06:52:04.000000000","message":"I\u0027ve renamed it \u0027min_hosts\u0027.","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@g.softbank.co.jp","username":"masa"},"change_message_id":"bdd1d4063a64db32824703ea3a24e763428722a7","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            min \u003d values.get("},{"line_number":176,"context_line":"                \u0027min\u0027,"},{"line_number":177,"context_line":"                int(host_reservation[\u0027count_range\u0027].split(\u0027-\u0027)[0]))"},{"line_number":178,"context_line":"            max \u003d values.get("},{"line_number":179,"context_line":"                \u0027max\u0027,"},{"line_number":180,"context_line":"                int(host_reservation[\u0027count_range\u0027].split(\u0027-\u0027)[1]))"},{"line_number":181,"context_line":"            host_ids \u003d []"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_7e0eec3b","line":178,"range":{"start_line":178,"start_character":12,"end_line":178,"end_character":15},"updated":"2017-07-26 10:08:04.000000000","message":"same as above.","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":23840,"name":"Hiroaki Kobayashi","email":"kobayashi.hiroaki@lab.ntt.co.jp","username":"hiro-kobayashi"},"change_message_id":"7b5382fa762dc5f24e7c04ca2d99a0c85a2f274d","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            min \u003d values.get("},{"line_number":176,"context_line":"                \u0027min\u0027,"},{"line_number":177,"context_line":"                int(host_reservation[\u0027count_range\u0027].split(\u0027-\u0027)[0]))"},{"line_number":178,"context_line":"            max \u003d values.get("},{"line_number":179,"context_line":"                \u0027max\u0027,"},{"line_number":180,"context_line":"                int(host_reservation[\u0027count_range\u0027].split(\u0027-\u0027)[1]))"},{"line_number":181,"context_line":"            host_ids \u003d []"}],"source_content_type":"text/x-python","patch_set":5,"id":"df3967d1_01a6b6c2","line":178,"range":{"start_line":178,"start_character":12,"end_line":178,"end_character":15},"in_reply_to":"ff346bd7_7e0eec3b","updated":"2017-08-01 06:52:04.000000000","message":"I\u0027ve renamed it \u0027max_hosts\u0027.","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@g.softbank.co.jp","username":"masa"},"change_message_id":"bdd1d4063a64db32824703ea3a24e763428722a7","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            host_ids \u003d []"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"            if keep \u003c max:"},{"line_number":184,"context_line":"                min \u003d min - keep if (min - keep) \u003e 0 else 0"},{"line_number":185,"context_line":"                max \u003d max - keep"},{"line_number":186,"context_line":"                host_ids \u003d self._matching_hosts("},{"line_number":187,"context_line":"                    values.get(\u0027hypervisor_properties\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_3be516a9","line":184,"range":{"start_line":184,"start_character":16,"end_line":184,"end_character":19},"updated":"2017-07-26 10:08:04.000000000","message":"The name of \u0027min\u0027 doesn\u0027t have a good readability. short_hosts or something is better.","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":23840,"name":"Hiroaki Kobayashi","email":"kobayashi.hiroaki@lab.ntt.co.jp","username":"hiro-kobayashi"},"change_message_id":"7b5382fa762dc5f24e7c04ca2d99a0c85a2f274d","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            host_ids \u003d []"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"            if keep \u003c max:"},{"line_number":184,"context_line":"                min \u003d min - keep if (min - keep) \u003e 0 else 0"},{"line_number":185,"context_line":"                max \u003d max - keep"},{"line_number":186,"context_line":"                host_ids \u003d self._matching_hosts("},{"line_number":187,"context_line":"                    values.get(\u0027hypervisor_properties\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"df3967d1_f26366db","line":184,"range":{"start_line":184,"start_character":16,"end_line":184,"end_character":19},"in_reply_to":"ff346bd7_3be516a9","updated":"2017-08-01 06:52:04.000000000","message":"Done","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@g.softbank.co.jp","username":"masa"},"change_message_id":"bdd1d4063a64db32824703ea3a24e763428722a7","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":"            if keep \u003c max:"},{"line_number":184,"context_line":"                min \u003d min - keep if (min - keep) \u003e 0 else 0"},{"line_number":185,"context_line":"                max \u003d max - keep"},{"line_number":186,"context_line":"                host_ids \u003d self._matching_hosts("},{"line_number":187,"context_line":"                    values.get(\u0027hypervisor_properties\u0027,"},{"line_number":188,"context_line":"                               host_reservation[\u0027hypervisor_properties\u0027]),"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_bbea2672","line":185,"range":{"start_line":185,"start_character":16,"end_line":185,"end_character":19},"updated":"2017-07-26 10:08:04.000000000","message":"same as above","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":23840,"name":"Hiroaki Kobayashi","email":"kobayashi.hiroaki@lab.ntt.co.jp","username":"hiro-kobayashi"},"change_message_id":"7b5382fa762dc5f24e7c04ca2d99a0c85a2f274d","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":"            if keep \u003c max:"},{"line_number":184,"context_line":"                min \u003d min - keep if (min - keep) \u003e 0 else 0"},{"line_number":185,"context_line":"                max \u003d max - keep"},{"line_number":186,"context_line":"                host_ids \u003d self._matching_hosts("},{"line_number":187,"context_line":"                    values.get(\u0027hypervisor_properties\u0027,"},{"line_number":188,"context_line":"                               host_reservation[\u0027hypervisor_properties\u0027]),"}],"source_content_type":"text/x-python","patch_set":5,"id":"df3967d1_d25e2211","line":185,"range":{"start_line":185,"start_character":16,"end_line":185,"end_character":19},"in_reply_to":"ff346bd7_bbea2672","updated":"2017-08-01 06:52:04.000000000","message":"Done","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@g.softbank.co.jp","username":"masa"},"change_message_id":"bdd1d4063a64db32824703ea3a24e763428722a7","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                values.get(\u0027hypervisor_properties\u0027)"},{"line_number":224,"context_line":"            updates[\u0027resource_properties\u0027] \u003d \\"},{"line_number":225,"context_line":"                values.get(\u0027resource_properties\u0027)"},{"line_number":226,"context_line":"            updates \u003d dict(((k, updates[k]) for k in"},{"line_number":227,"context_line":"                            filter(lambda k: updates[k], updates)))"},{"line_number":228,"context_line":"            if updates:"},{"line_number":229,"context_line":"                db_api.host_reservation_update(host_reservation[\u0027id\u0027],"},{"line_number":230,"context_line":"                                               updates)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_be0fb4df","line":227,"range":{"start_line":226,"start_character":0,"end_line":227,"end_character":67},"updated":"2017-07-26 10:08:04.000000000","message":"What is the purpose of the code?  This only create same dict object with previous \u0027updates\u0027 dictionary.","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":23840,"name":"Hiroaki Kobayashi","email":"kobayashi.hiroaki@lab.ntt.co.jp","username":"hiro-kobayashi"},"change_message_id":"7b5382fa762dc5f24e7c04ca2d99a0c85a2f274d","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                values.get(\u0027hypervisor_properties\u0027)"},{"line_number":224,"context_line":"            updates[\u0027resource_properties\u0027] \u003d \\"},{"line_number":225,"context_line":"                values.get(\u0027resource_properties\u0027)"},{"line_number":226,"context_line":"            updates \u003d dict(((k, updates[k]) for k in"},{"line_number":227,"context_line":"                            filter(lambda k: updates[k], updates)))"},{"line_number":228,"context_line":"            if updates:"},{"line_number":229,"context_line":"                db_api.host_reservation_update(host_reservation[\u0027id\u0027],"},{"line_number":230,"context_line":"                                               updates)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df3967d1_92d65a27","line":227,"range":{"start_line":226,"start_character":0,"end_line":227,"end_character":67},"in_reply_to":"ff346bd7_be0fb4df","updated":"2017-08-01 06:52:04.000000000","message":"This is to remove entries of which value is None. I\u0027ve changed this part to improve readability.","commit_id":"d8c38f3e78ec5c545e0c6322e5e51c02dcb5ac48"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"ddbe0b97b70db17515605a6812563347fa19b563","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                    dates_after[\u0027end_date\u0027],"},{"line_number":464,"context_line":"                    datetime.timedelta(seconds\u003d1))"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"                max_start \u003d dates_after[\u0027start_date\u0027] if ("},{"line_number":467,"context_line":"                    dates_before[\u0027start_date\u0027] \u003c dates_after[\u0027start_date\u0027]"},{"line_number":468,"context_line":"                ) else dates_before[\u0027start_date\u0027]"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"                min_end \u003d dates_after[\u0027end_date\u0027] if ("},{"line_number":471,"context_line":"                    dates_before[\u0027end_date\u0027] \u003e dates_after[\u0027end_date\u0027]"},{"line_number":472,"context_line":"                ) else dates_before[\u0027end_date\u0027]"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"                if not (len(full_periods) \u003d\u003d 0 or"},{"line_number":475,"context_line":"                        (len(full_periods) \u003d\u003d 1 and"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_ec1ed072","line":472,"range":{"start_line":466,"start_character":0,"end_line":472,"end_character":47},"updated":"2017-08-21 22:03:48.000000000","message":"This can be simplified as:\n\nmax_start \u003d max(dates_before[\u0027start_date\u0027], dates_after[\u0027start_date\u0027])\nmin_end \u003d min(dates_before[\u0027end_date\u0027], dates_after[\u0027end_date\u0027])","commit_id":"c4f60e18c07b05f039a1dcdadbd5f22394b88599"},{"author":{"_account_id":23840,"name":"Hiroaki Kobayashi","email":"kobayashi.hiroaki@lab.ntt.co.jp","username":"hiro-kobayashi"},"change_message_id":"c358df4342216cd44a97d05557486e95813a5a13","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                    dates_after[\u0027end_date\u0027],"},{"line_number":464,"context_line":"                    datetime.timedelta(seconds\u003d1))"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"                max_start \u003d dates_after[\u0027start_date\u0027] if ("},{"line_number":467,"context_line":"                    dates_before[\u0027start_date\u0027] \u003c dates_after[\u0027start_date\u0027]"},{"line_number":468,"context_line":"                ) else dates_before[\u0027start_date\u0027]"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"                min_end \u003d dates_after[\u0027end_date\u0027] if ("},{"line_number":471,"context_line":"                    dates_before[\u0027end_date\u0027] \u003e dates_after[\u0027end_date\u0027]"},{"line_number":472,"context_line":"                ) else dates_before[\u0027end_date\u0027]"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"                if not (len(full_periods) \u003d\u003d 0 or"},{"line_number":475,"context_line":"                        (len(full_periods) \u003d\u003d 1 and"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_c6a2c89a","line":472,"range":{"start_line":466,"start_character":0,"end_line":472,"end_character":47},"in_reply_to":"9f436f4f_ec1ed072","updated":"2017-08-22 01:25:32.000000000","message":"Cool! thanks :-)","commit_id":"c4f60e18c07b05f039a1dcdadbd5f22394b88599"}]}
