)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"91468a5ce885e4ae749ce7c8b6a7623fc0f5d774","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     asmita singh \u003casmita.singh@nttdata.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-04-03 07:23:15 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Lease creation/updation should fail if amount is 0"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Lease is getting created and updated for resource_type"},{"line_number":10,"context_line":"virtual:instance with amount\u003d0."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"bfb3d3c7_c3b6d38a","line":7,"range":{"start_line":7,"start_character":15,"end_line":7,"end_character":23},"updated":"2019-05-30 15:46:01.000000000","message":"update","commit_id":"26e91408f5652a2ef2382809926ad90893c2f38f"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"91468a5ce885e4ae749ce7c8b6a7623fc0f5d774","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Lease is getting created and updated for resource_type"},{"line_number":10,"context_line":"virtual:instance with amount\u003d0."},{"line_number":11,"context_line":"This patch doesn\u0027t allow creation and updation of"},{"line_number":12,"context_line":"lease with amount\u003d0, it will raise 400 BadRequest."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Lease creation for resource_type physical:host with"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"bfb3d3c7_83b45b81","line":11,"range":{"start_line":11,"start_character":38,"end_line":11,"end_character":46},"updated":"2019-05-30 15:46:01.000000000","message":"update","commit_id":"26e91408f5652a2ef2382809926ad90893c2f38f"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"91468a5ce885e4ae749ce7c8b6a7623fc0f5d774","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Lease creation/updation should fail if amount is 0"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Lease is getting created and updated for resource_type"},{"line_number":10,"context_line":"virtual:instance with amount\u003d0."},{"line_number":11,"context_line":"This patch doesn\u0027t allow creation and updation of"},{"line_number":12,"context_line":"lease with amount\u003d0, it will raise 400 BadRequest."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Lease creation for resource_type physical:host with"},{"line_number":15,"context_line":"min\u003d0 or max\u003d0 raises 500 Internal Server Error"},{"line_number":16,"context_line":"and lease is updated for resource_type physical:host"},{"line_number":17,"context_line":"with min\u003d0 or max\u003d0."},{"line_number":18,"context_line":"This patch doesn\u0027t allow creation and updation of"},{"line_number":19,"context_line":"lease with min\u003d0 or max\u003d0, it will raise 400 BadRequest."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"APIImpact:"},{"line_number":22,"context_line":"1)Return 400 instead of 201 when lease is created with"},{"line_number":23,"context_line":"amount\u003d0 for resource_type \u0027virtual:instance\u0027."},{"line_number":24,"context_line":"2)Return 400 instead of 500 when lease is created with"},{"line_number":25,"context_line":"min\u003d0 or max\u003d0 for resource_type \u0027physical:host\u0027."},{"line_number":26,"context_line":"3)Return 400 instead of 200 when lease is updated with"},{"line_number":27,"context_line":"amount\u003d0 for resource_type \u0027virtual:instance\u0027."},{"line_number":28,"context_line":"4)Return 400 instead of 200 when lease is updated with"},{"line_number":29,"context_line":"min\u003d0 or max\u003d0 for resource_type \u0027physical:host\u0027."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Closes-Bug: #1807101"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"bfb3d3c7_2337af01","line":29,"range":{"start_line":9,"start_character":0,"end_line":29,"end_character":49},"updated":"2019-05-30 15:46:01.000000000","message":"Please wrap at 72 characters to make it more readable.","commit_id":"26e91408f5652a2ef2382809926ad90893c2f38f"}],"blazar/plugins/instances/instance_plugin.py":[{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"09e440a55ce1fe2966e5f027a74d23e6173d8fd1","unresolved":false,"context_lines":[{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def _validate_amount_and_affinity_params(self, values):"},{"line_number":314,"context_line":"        if \u0027amount\u0027 in values:"},{"line_number":315,"context_line":"            if not (isinstance(values[\u0027amount\u0027],"},{"line_number":316,"context_line":"                               int)) or values[\u0027amount\u0027] \u003c\u003d 0:"},{"line_number":317,"context_line":"                raise mgr_exceptions.MalformedParameter("},{"line_number":318,"context_line":"                    param\u003d\u0027amount (must be greater than 0)\u0027)"},{"line_number":319,"context_line":"        # TODO(masahito) the instance reservation plugin only supports"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_06843ad2","line":316,"range":{"start_line":315,"start_character":0,"end_line":316,"end_character":62},"updated":"2019-02-26 05:18:43.000000000","message":"The if-statement can be one line, can\u0027t it?\n\n  if not isinstance(values[\u0027amount\u0027], int) or values[\u0027amount\u0027] \u003c\u003d 0:","commit_id":"f2afbfae5d59e8552b8e8d8807a0fa45aa004ad9"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"329160e60acb69c02875ae831080be2c43592d17","unresolved":false,"context_lines":[{"line_number":394,"context_line":"            if not isinstance(values[\u0027amount\u0027], int) or values[\u0027amount\u0027] \u003c\u003d 0:"},{"line_number":395,"context_line":"                raise mgr_exceptions.MalformedParameter("},{"line_number":396,"context_line":"                    param\u003d\u0027amount (must be greater than 0)\u0027)"},{"line_number":397,"context_line":"        # TODO(masahito) the instance reservation plugin only supports"},{"line_number":398,"context_line":"        # anti-affinity rule in short-term goal."},{"line_number":399,"context_line":"        if \u0027affinity\u0027 in values:"},{"line_number":400,"context_line":"            try:"},{"line_number":401,"context_line":"                if bool_from_string(values[\u0027affinity\u0027], strict\u003dTrue):"},{"line_number":402,"context_line":"                    raise mgr_exceptions.MalformedParameter("},{"line_number":403,"context_line":"                        param\u003d\u0027affinity (only affinity \u003d False is supported)\u0027)"},{"line_number":404,"context_line":"            except ValueError:"},{"line_number":405,"context_line":"                raise mgr_exceptions.MalformedParameter("},{"line_number":406,"context_line":"                    param\u003d\u0027affinity (only affinity \u003d False is supported)\u0027)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def reserve_resource(self, reservation_id, values):"},{"line_number":409,"context_line":"        self._check_missing_reservation_params(values)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_3436a4b6","line":406,"range":{"start_line":397,"start_character":0,"end_line":406,"end_character":74},"updated":"2019-03-20 23:05:05.000000000","message":"Please update this: affinity now supports values (True, False, None).","commit_id":"42a6cd27e986abc56cbaea81fd8ab5a81456c8a3"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"9a45d5b7d6509adf20da847c7096f86f9a9f17a4","unresolved":false,"context_lines":[{"line_number":394,"context_line":"            if not isinstance(values[\u0027amount\u0027], int) or values[\u0027amount\u0027] \u003c\u003d 0:"},{"line_number":395,"context_line":"                raise mgr_exceptions.MalformedParameter("},{"line_number":396,"context_line":"                    param\u003d\u0027amount (must be greater than 0)\u0027)"},{"line_number":397,"context_line":"        # TODO(masahito) the instance reservation plugin only supports"},{"line_number":398,"context_line":"        # anti-affinity rule in short-term goal."},{"line_number":399,"context_line":"        if \u0027affinity\u0027 in values:"},{"line_number":400,"context_line":"            try:"},{"line_number":401,"context_line":"                if bool_from_string(values[\u0027affinity\u0027], strict\u003dTrue):"},{"line_number":402,"context_line":"                    raise mgr_exceptions.MalformedParameter("},{"line_number":403,"context_line":"                        param\u003d\u0027affinity (only affinity \u003d False is supported)\u0027)"},{"line_number":404,"context_line":"            except ValueError:"},{"line_number":405,"context_line":"                raise mgr_exceptions.MalformedParameter("},{"line_number":406,"context_line":"                    param\u003d\u0027affinity (only affinity \u003d False is supported)\u0027)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def reserve_resource(self, reservation_id, values):"},{"line_number":409,"context_line":"        self._check_missing_reservation_params(values)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_3c3d81c3","line":406,"range":{"start_line":397,"start_character":0,"end_line":406,"end_character":74},"in_reply_to":"5fc1f717_3436a4b6","updated":"2019-03-28 04:22:51.000000000","message":"Yes, and I\u0027d like to see the affinity fix in a separate patch from fix about amount.","commit_id":"42a6cd27e986abc56cbaea81fd8ab5a81456c8a3"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"b95d07c5ce3e2444d061990f7ae914ad0a20d08f","unresolved":false,"context_lines":[{"line_number":390,"context_line":"            raise mgr_exceptions.MissingParameter(param\u003d\u0027,\u0027.join(missing_attr))"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    def _validate_reservation_params(self, values):"},{"line_number":393,"context_line":"        if \u0027amount\u0027 in values:"},{"line_number":394,"context_line":"            if not isinstance(values[\u0027amount\u0027], int) or values[\u0027amount\u0027] \u003c\u003d 0:"},{"line_number":395,"context_line":"                raise mgr_exceptions.MalformedParameter("},{"line_number":396,"context_line":"                    param\u003d\u0027amount must be an integer \u0027"},{"line_number":397,"context_line":"                          \u0027and it should be greater than 0)\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_6625c6c1","line":394,"range":{"start_line":393,"start_character":0,"end_line":394,"end_character":78},"updated":"2019-04-10 06:53:46.000000000","message":"nit: can be squashed (In \"if A and B:\", B is not evaluated if A is False)","commit_id":"26e91408f5652a2ef2382809926ad90893c2f38f"}],"blazar/plugins/oshosts/host_plugin.py":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"91468a5ce885e4ae749ce7c8b6a7623fc0f5d774","unresolved":false,"context_lines":[{"line_number":601,"context_line":"        else:"},{"line_number":602,"context_line":"            return []"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"    def _validate_int_param(self, param, name):"},{"line_number":605,"context_line":"        \"\"\"Check if a param is an integer."},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"           The param should not be None, the type is"},{"line_number":608,"context_line":"           int and it should be greater than 0."},{"line_number":609,"context_line":"        \"\"\""},{"line_number":610,"context_line":"        if param is None:"},{"line_number":611,"context_line":"            raise manager_ex.MissingParameter(param\u003dname)"},{"line_number":612,"context_line":"        if not isinstance(param, int) or int(param) \u003c\u003d 0:"},{"line_number":613,"context_line":"            raise manager_ex.MalformedParameter("},{"line_number":614,"context_line":"                param\u003dname + \u0027 must be an integer and \u0027"},{"line_number":615,"context_line":"                             \u0027it should be greater than 0\u0027)"},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"    def _check_params(self, values):"},{"line_number":618,"context_line":"        self._validate_min_max_range(values, values.get(\u0027min\u0027),"},{"line_number":619,"context_line":"                                     values.get(\u0027max\u0027))"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"        if \u0027hypervisor_properties\u0027 not in values:"},{"line_number":622,"context_line":"            raise manager_ex.MissingParameter(param\u003d\u0027hypervisor_properties\u0027)"},{"line_number":623,"context_line":"        if \u0027resource_properties\u0027 not in values:"},{"line_number":624,"context_line":"            raise manager_ex.MissingParameter(param\u003d\u0027resource_properties\u0027)"},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"        if \u0027before_end\u0027 not in values:"},{"line_number":627,"context_line":"            values[\u0027before_end\u0027] \u003d \u0027default\u0027"},{"line_number":628,"context_line":"        if values[\u0027before_end\u0027] not in before_end_options:"},{"line_number":629,"context_line":"            raise manager_ex.MalformedParameter(param\u003d\u0027before_end\u0027)"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"    def _validate_min_max_range(self, values, min_hosts, max_hosts):"},{"line_number":632,"context_line":"        self._validate_int_param(min_hosts, \u0027min\u0027)"},{"line_number":633,"context_line":"        self._validate_int_param(max_hosts, \u0027max\u0027)"},{"line_number":634,"context_line":"        if max_hosts \u003c min_hosts:"},{"line_number":635,"context_line":"            raise manager_ex.InvalidRange()"},{"line_number":636,"context_line":"        values[\u0027count_range\u0027] \u003d str(min_hosts) + \u0027-\u0027 + str(max_hosts)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bfb3d3c7_fe860c66","line":633,"range":{"start_line":604,"start_character":0,"end_line":633,"end_character":50},"updated":"2019-05-30 15:46:01.000000000","message":"Forgive me if I am wrong, but this change looks like it will start rejecting min/max encoded as JSON strings (\"1\" instead of 1). The API reference says they should be integers but there could be badly written clients out there.\n\nCould we keep the compatibility for this API version?","commit_id":"26e91408f5652a2ef2382809926ad90893c2f38f"},{"author":{"_account_id":29278,"name":"Asmita Singh","email":"Asmita.Singh@nttdata.com","username":"asmita.singh"},"change_message_id":"56e91567f6fb53f8aceb73e0d4f027727b81ddb3","unresolved":false,"context_lines":[{"line_number":601,"context_line":"        else:"},{"line_number":602,"context_line":"            return []"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"    def _validate_int_param(self, param, name):"},{"line_number":605,"context_line":"        \"\"\"Check if a param is an integer."},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"           The param should not be None, the type is"},{"line_number":608,"context_line":"           int and it should be greater than 0."},{"line_number":609,"context_line":"        \"\"\""},{"line_number":610,"context_line":"        if param is None:"},{"line_number":611,"context_line":"            raise manager_ex.MissingParameter(param\u003dname)"},{"line_number":612,"context_line":"        if not isinstance(param, int) or int(param) \u003c\u003d 0:"},{"line_number":613,"context_line":"            raise manager_ex.MalformedParameter("},{"line_number":614,"context_line":"                param\u003dname + \u0027 must be an integer and \u0027"},{"line_number":615,"context_line":"                             \u0027it should be greater than 0\u0027)"},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"    def _check_params(self, values):"},{"line_number":618,"context_line":"        self._validate_min_max_range(values, values.get(\u0027min\u0027),"},{"line_number":619,"context_line":"                                     values.get(\u0027max\u0027))"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"        if \u0027hypervisor_properties\u0027 not in values:"},{"line_number":622,"context_line":"            raise manager_ex.MissingParameter(param\u003d\u0027hypervisor_properties\u0027)"},{"line_number":623,"context_line":"        if \u0027resource_properties\u0027 not in values:"},{"line_number":624,"context_line":"            raise manager_ex.MissingParameter(param\u003d\u0027resource_properties\u0027)"},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"        if \u0027before_end\u0027 not in values:"},{"line_number":627,"context_line":"            values[\u0027before_end\u0027] \u003d \u0027default\u0027"},{"line_number":628,"context_line":"        if values[\u0027before_end\u0027] not in before_end_options:"},{"line_number":629,"context_line":"            raise manager_ex.MalformedParameter(param\u003d\u0027before_end\u0027)"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"    def _validate_min_max_range(self, values, min_hosts, max_hosts):"},{"line_number":632,"context_line":"        self._validate_int_param(min_hosts, \u0027min\u0027)"},{"line_number":633,"context_line":"        self._validate_int_param(max_hosts, \u0027max\u0027)"},{"line_number":634,"context_line":"        if max_hosts \u003c min_hosts:"},{"line_number":635,"context_line":"            raise manager_ex.InvalidRange()"},{"line_number":636,"context_line":"        values[\u0027count_range\u0027] \u003d str(min_hosts) + \u0027-\u0027 + str(max_hosts)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fb8cfa7_95f45f5d","line":633,"range":{"start_line":604,"start_character":0,"end_line":633,"end_character":50},"in_reply_to":"bfb3d3c7_fe860c66","updated":"2019-06-03 06:48:25.000000000","message":"Thank you so much for the review. Agreed. Client supports JSON strings. So I will upload a new PS to allow \"min\" to be passed as string in blazar-api.","commit_id":"26e91408f5652a2ef2382809926ad90893c2f38f"}]}
