)]}'
{"cinder/db/sqlalchemy/api.py":[{"author":{"_account_id":18479,"name":"Slade Baumann","email":"baumann@us.ibm.com","username":"baumann"},"change_message_id":"dc57f8e30eaa6f4a89558777d352a4af1f43da1b","unresolved":false,"context_lines":[{"line_number":3686,"context_line":"def transfer_destroy(context, transfer_id):"},{"line_number":3687,"context_line":"    session \u003d get_session()"},{"line_number":3688,"context_line":"    with session.begin():"},{"line_number":3689,"context_line":"        transfer_ref \u003d _transfer_get(context, transfer_id, session\u003dsession)"},{"line_number":3690,"context_line":"        volume_id \u003d transfer_ref[\u0027volume_id\u0027]"},{"line_number":3691,"context_line":"        # If the volume state is not \u0027awaiting-transfer\u0027 don\u0027t change it, but"},{"line_number":3692,"context_line":"        # we can still mark the transfer record as deleted."}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_b1443d74","line":3689,"range":{"start_line":3689,"start_character":8,"end_line":3689,"end_character":20},"updated":"2015-12-17 20:39:58.000000000","message":"Is transfer_ref being used besides in the next line?\n\nIf not, for readability and consistency, this should probably be put into one function: i.e. volume_id \u003d _transfer_get(context, transfer_id, session\u003dsession)[\u0027volume_id\u0027], as the other functions in this file have this split into two variables.","commit_id":"c2826184e93e4b7eb9bcc6864028e4c8b9842e42"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"4ff87d0fd1d42c07ef352044d0b295c298004407","unresolved":false,"context_lines":[{"line_number":3686,"context_line":"def transfer_destroy(context, transfer_id):"},{"line_number":3687,"context_line":"    session \u003d get_session()"},{"line_number":3688,"context_line":"    with session.begin():"},{"line_number":3689,"context_line":"        transfer_ref \u003d _transfer_get(context, transfer_id, session\u003dsession)"},{"line_number":3690,"context_line":"        volume_id \u003d transfer_ref[\u0027volume_id\u0027]"},{"line_number":3691,"context_line":"        # If the volume state is not \u0027awaiting-transfer\u0027 don\u0027t change it, but"},{"line_number":3692,"context_line":"        # we can still mark the transfer record as deleted."}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_50de1312","line":3689,"range":{"start_line":3689,"start_character":8,"end_line":3689,"end_character":20},"in_reply_to":"3a7e1126_b1443d74","updated":"2015-12-18 11:46:55.000000000","message":"Done","commit_id":"c2826184e93e4b7eb9bcc6864028e4c8b9842e42"},{"author":{"_account_id":18479,"name":"Slade Baumann","email":"baumann@us.ibm.com","username":"baumann"},"change_message_id":"dc57f8e30eaa6f4a89558777d352a4af1f43da1b","unresolved":false,"context_lines":[{"line_number":3711,"context_line":"def transfer_accept(context, transfer_id, user_id, project_id):"},{"line_number":3712,"context_line":"    session \u003d get_session()"},{"line_number":3713,"context_line":"    with session.begin():"},{"line_number":3714,"context_line":"        volume_id \u003d _transfer_get(context, transfer_id, session)[\u0027volume_id\u0027]"},{"line_number":3715,"context_line":"        expected \u003d {\u0027id\u0027: volume_id,"},{"line_number":3716,"context_line":"                    \u0027status\u0027: \u0027awaiting-transfer\u0027}"},{"line_number":3717,"context_line":"        updated \u003d {\u0027status\u0027: \u0027available\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_f163a518","line":3714,"range":{"start_line":3714,"start_character":8,"end_line":3714,"end_character":17},"updated":"2015-12-17 20:39:58.000000000","message":"This is an example of what I\u0027m referring to in the comment on line 3689","commit_id":"c2826184e93e4b7eb9bcc6864028e4c8b9842e42"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"0e62c7c9707bed12a0d7c230632b03aa19c98eec","unresolved":false,"context_lines":[{"line_number":3660,"context_line":""},{"line_number":3661,"context_line":"@require_context"},{"line_number":3662,"context_line":"def transfer_create(context, values):"},{"line_number":3663,"context_line":"    transfer_id \u003d values[\u0027id\u0027] \u003d values.get(\u0027id\u0027, str(uuid.uuid4()))"},{"line_number":3664,"context_line":"    volume_id \u003d values[\u0027volume_id\u0027]"},{"line_number":3665,"context_line":"    session \u003d get_session()"},{"line_number":3666,"context_line":"    with session.begin():"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_4dbdab00","line":3663,"range":{"start_line":3663,"start_character":64,"end_line":3663,"end_character":68},"updated":"2015-12-22 07:53:36.000000000","message":"You should use six.text_type instead of str.","commit_id":"54da855c8d7690a3e93920603fac6518c3704637"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"6dc0456109820569016b83a8825c4a16814b3da2","unresolved":false,"context_lines":[{"line_number":3660,"context_line":""},{"line_number":3661,"context_line":"@require_context"},{"line_number":3662,"context_line":"def transfer_create(context, values):"},{"line_number":3663,"context_line":"    transfer_id \u003d values[\u0027id\u0027] \u003d values.get(\u0027id\u0027, str(uuid.uuid4()))"},{"line_number":3664,"context_line":"    volume_id \u003d values[\u0027volume_id\u0027]"},{"line_number":3665,"context_line":"    session \u003d get_session()"},{"line_number":3666,"context_line":"    with session.begin():"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_433c18c8","line":3663,"range":{"start_line":3663,"start_character":64,"end_line":3663,"end_character":68},"in_reply_to":"3a7e1126_4dbdab00","updated":"2016-01-04 12:31:45.000000000","message":"I\u0027m not comparing string types here, str(uuid.uuid4()) produces same result in both Py2 and Py3","commit_id":"54da855c8d7690a3e93920603fac6518c3704637"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"d17e965c803f50b766080ad97c5399442ed6807b","unresolved":false,"context_lines":[{"line_number":3670,"context_line":"        if not conditional_update(context, models.Volume, updated, expected,"},{"line_number":3671,"context_line":"                                  session\u003dsession):"},{"line_number":3672,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"},{"line_number":3673,"context_line":"                     \u0027available state expected\u0027)"},{"line_number":3674,"context_line":"                   % {\u0027transfer_id\u0027: transfer_id, \u0027volume_id\u0027: volume_id})"},{"line_number":3675,"context_line":"            LOG.error(msg)"},{"line_number":3676,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_cd80bbf9","line":3673,"range":{"start_line":3673,"start_character":46,"end_line":3673,"end_character":48},"updated":"2015-12-22 07:54:50.000000000","message":"Add a stop in the end.","commit_id":"54da855c8d7690a3e93920603fac6518c3704637"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"6dc0456109820569016b83a8825c4a16814b3da2","unresolved":false,"context_lines":[{"line_number":3670,"context_line":"        if not conditional_update(context, models.Volume, updated, expected,"},{"line_number":3671,"context_line":"                                  session\u003dsession):"},{"line_number":3672,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"},{"line_number":3673,"context_line":"                     \u0027available state expected\u0027)"},{"line_number":3674,"context_line":"                   % {\u0027transfer_id\u0027: transfer_id, \u0027volume_id\u0027: volume_id})"},{"line_number":3675,"context_line":"            LOG.error(msg)"},{"line_number":3676,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_2331e4ec","line":3673,"range":{"start_line":3673,"start_character":46,"end_line":3673,"end_character":48},"in_reply_to":"3a7e1126_cd80bbf9","updated":"2016-01-04 12:31:45.000000000","message":"Done","commit_id":"54da855c8d7690a3e93920603fac6518c3704637"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"d17e965c803f50b766080ad97c5399442ed6807b","unresolved":false,"context_lines":[{"line_number":3695,"context_line":"        if not conditional_update(context, models.Volume, updated, expected,"},{"line_number":3696,"context_line":"                                  session\u003dsession):"},{"line_number":3697,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"},{"line_number":3698,"context_line":"                     \u0027awaiting-transfer state expected\u0027)"},{"line_number":3699,"context_line":"                   % {\u0027transfer_id\u0027: transfer_id, \u0027volume_id\u0027: volume_id})"},{"line_number":3700,"context_line":"            LOG.error(msg)"},{"line_number":3701,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_ed833701","line":3698,"range":{"start_line":3698,"start_character":54,"end_line":3698,"end_character":56},"updated":"2015-12-22 07:54:50.000000000","message":"Add a stop in the end.","commit_id":"54da855c8d7690a3e93920603fac6518c3704637"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"6dc0456109820569016b83a8825c4a16814b3da2","unresolved":false,"context_lines":[{"line_number":3695,"context_line":"        if not conditional_update(context, models.Volume, updated, expected,"},{"line_number":3696,"context_line":"                                  session\u003dsession):"},{"line_number":3697,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"},{"line_number":3698,"context_line":"                     \u0027awaiting-transfer state expected\u0027)"},{"line_number":3699,"context_line":"                   % {\u0027transfer_id\u0027: transfer_id, \u0027volume_id\u0027: volume_id})"},{"line_number":3700,"context_line":"            LOG.error(msg)"},{"line_number":3701,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_e39f4cb2","line":3698,"range":{"start_line":3698,"start_character":54,"end_line":3698,"end_character":56},"in_reply_to":"3a7e1126_ed833701","updated":"2016-01-04 12:31:45.000000000","message":"Done","commit_id":"54da855c8d7690a3e93920603fac6518c3704637"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"0e62c7c9707bed12a0d7c230632b03aa19c98eec","unresolved":false,"context_lines":[{"line_number":3697,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"},{"line_number":3698,"context_line":"                     \u0027awaiting-transfer state expected\u0027)"},{"line_number":3699,"context_line":"                   % {\u0027transfer_id\u0027: transfer_id, \u0027volume_id\u0027: volume_id})"},{"line_number":3700,"context_line":"            LOG.error(msg)"},{"line_number":3701,"context_line":""},{"line_number":3702,"context_line":"        (model_query(context, models.Transfer, session\u003dsession)."},{"line_number":3703,"context_line":"         filter_by(id\u003dtransfer_id)."}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_4dc7eb63","line":3700,"range":{"start_line":3700,"start_character":25,"end_line":3700,"end_character":26},"updated":"2015-12-22 07:53:36.000000000","message":"Shall we raise exception.InvalidVolume down here?","commit_id":"54da855c8d7690a3e93920603fac6518c3704637"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"6dc0456109820569016b83a8825c4a16814b3da2","unresolved":false,"context_lines":[{"line_number":3697,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"},{"line_number":3698,"context_line":"                     \u0027awaiting-transfer state expected\u0027)"},{"line_number":3699,"context_line":"                   % {\u0027transfer_id\u0027: transfer_id, \u0027volume_id\u0027: volume_id})"},{"line_number":3700,"context_line":"            LOG.error(msg)"},{"line_number":3701,"context_line":""},{"line_number":3702,"context_line":"        (model_query(context, models.Transfer, session\u003dsession)."},{"line_number":3703,"context_line":"         filter_by(id\u003dtransfer_id)."}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_c84b4786","line":3700,"range":{"start_line":3700,"start_character":25,"end_line":3700,"end_character":26},"in_reply_to":"3a7e1126_4dc7eb63","updated":"2016-01-04 12:31:45.000000000","message":"No. \"If the volume state is not \u0027awaiting-transfer\u0027 don\u0027t change it, but we can still mark the transfer record as deleted.\"","commit_id":"54da855c8d7690a3e93920603fac6518c3704637"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"d17e965c803f50b766080ad97c5399442ed6807b","unresolved":false,"context_lines":[{"line_number":3720,"context_line":"        if not conditional_update(context, models.Volume, updated, expected,"},{"line_number":3721,"context_line":"                                  session\u003dsession):"},{"line_number":3722,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"},{"line_number":3723,"context_line":"                     \u0027awaiting-transfer state expected\u0027)"},{"line_number":3724,"context_line":"                   % {\u0027transfer_id\u0027: transfer_id, \u0027volume_id\u0027: volume_id})"},{"line_number":3725,"context_line":"            LOG.error(msg)"},{"line_number":3726,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_4d75ab2f","line":3723,"range":{"start_line":3723,"start_character":54,"end_line":3723,"end_character":56},"updated":"2015-12-22 07:54:50.000000000","message":"Add a stop in the end.","commit_id":"54da855c8d7690a3e93920603fac6518c3704637"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"6dc0456109820569016b83a8825c4a16814b3da2","unresolved":false,"context_lines":[{"line_number":3720,"context_line":"        if not conditional_update(context, models.Volume, updated, expected,"},{"line_number":3721,"context_line":"                                  session\u003dsession):"},{"line_number":3722,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"},{"line_number":3723,"context_line":"                     \u0027awaiting-transfer state expected\u0027)"},{"line_number":3724,"context_line":"                   % {\u0027transfer_id\u0027: transfer_id, \u0027volume_id\u0027: volume_id})"},{"line_number":3725,"context_line":"            LOG.error(msg)"},{"line_number":3726,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_633efcb9","line":3723,"range":{"start_line":3723,"start_character":54,"end_line":3723,"end_character":56},"in_reply_to":"3a7e1126_4d75ab2f","updated":"2016-01-04 12:31:45.000000000","message":"Done","commit_id":"54da855c8d7690a3e93920603fac6518c3704637"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c98cd28c51264caf70237284565483b5aa2f86c8","unresolved":false,"context_lines":[{"line_number":3683,"context_line":""},{"line_number":3684,"context_line":"def _translate_transfers(transfers):"},{"line_number":3685,"context_line":"    fields \u003d (\u0027id\u0027, \u0027volume_id\u0027, \u0027display_name\u0027, \u0027created_at\u0027, \u0027deleted\u0027)"},{"line_number":3686,"context_line":"    return [{k: transfer[k] for k in fields} for transfer in transfers]"},{"line_number":3687,"context_line":""},{"line_number":3688,"context_line":""},{"line_number":3689,"context_line":"@require_admin_context"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_e5255b5c","line":3686,"updated":"2016-01-12 13:23:42.000000000","message":"Neat!","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c98cd28c51264caf70237284565483b5aa2f86c8","unresolved":false,"context_lines":[{"line_number":3711,"context_line":"    with session.begin():"},{"line_number":3712,"context_line":"        expected \u003d {\u0027id\u0027: volume_id,"},{"line_number":3713,"context_line":"                    \u0027status\u0027: \u0027available\u0027}"},{"line_number":3714,"context_line":"        updated \u003d {\u0027status\u0027: \u0027awaiting-transfer\u0027}"},{"line_number":3715,"context_line":"        if not conditional_update(context, models.Volume, updated, expected,"},{"line_number":3716,"context_line":"                                  session\u003dsession):"},{"line_number":3717,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_e56c7b0a","line":3714,"updated":"2016-01-12 13:23:42.000000000","message":"nit: Shouldn\u0027t this variable be called update instead?","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"4c4dafe15007df8be509da6a26d25b1e7ef2b669","unresolved":false,"context_lines":[{"line_number":3711,"context_line":"    with session.begin():"},{"line_number":3712,"context_line":"        expected \u003d {\u0027id\u0027: volume_id,"},{"line_number":3713,"context_line":"                    \u0027status\u0027: \u0027available\u0027}"},{"line_number":3714,"context_line":"        updated \u003d {\u0027status\u0027: \u0027awaiting-transfer\u0027}"},{"line_number":3715,"context_line":"        if not conditional_update(context, models.Volume, updated, expected,"},{"line_number":3716,"context_line":"                                  session\u003dsession):"},{"line_number":3717,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_1a540e1f","line":3714,"in_reply_to":"da6ed579_e56c7b0a","updated":"2016-10-31 10:28:31.000000000","message":"Done","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c98cd28c51264caf70237284565483b5aa2f86c8","unresolved":false,"context_lines":[{"line_number":3713,"context_line":"                    \u0027status\u0027: \u0027available\u0027}"},{"line_number":3714,"context_line":"        updated \u003d {\u0027status\u0027: \u0027awaiting-transfer\u0027}"},{"line_number":3715,"context_line":"        if not conditional_update(context, models.Volume, updated, expected,"},{"line_number":3716,"context_line":"                                  session\u003dsession):"},{"line_number":3717,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"},{"line_number":3718,"context_line":"                     \u0027available state expected.\u0027)"},{"line_number":3719,"context_line":"                   % {\u0027transfer_id\u0027: transfer_id, \u0027volume_id\u0027: volume_id})"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_4536a704","line":3716,"updated":"2016-01-12 13:23:42.000000000","message":"-1: There is no benefit passing session here, if we remove lines 3710, 3711 and 3716 the code would do exactly the same and it would be cleaner.","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"4c4dafe15007df8be509da6a26d25b1e7ef2b669","unresolved":false,"context_lines":[{"line_number":3713,"context_line":"                    \u0027status\u0027: \u0027available\u0027}"},{"line_number":3714,"context_line":"        updated \u003d {\u0027status\u0027: \u0027awaiting-transfer\u0027}"},{"line_number":3715,"context_line":"        if not conditional_update(context, models.Volume, updated, expected,"},{"line_number":3716,"context_line":"                                  session\u003dsession):"},{"line_number":3717,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"},{"line_number":3718,"context_line":"                     \u0027available state expected.\u0027)"},{"line_number":3719,"context_line":"                   % {\u0027transfer_id\u0027: transfer_id, \u0027volume_id\u0027: volume_id})"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_75243d5f","line":3716,"in_reply_to":"da6ed579_4536a704","updated":"2016-10-31 10:28:31.000000000","message":"Done","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c98cd28c51264caf70237284565483b5aa2f86c8","unresolved":false,"context_lines":[{"line_number":3715,"context_line":"        if not conditional_update(context, models.Volume, updated, expected,"},{"line_number":3716,"context_line":"                                  session\u003dsession):"},{"line_number":3717,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"},{"line_number":3718,"context_line":"                     \u0027available state expected.\u0027)"},{"line_number":3719,"context_line":"                   % {\u0027transfer_id\u0027: transfer_id, \u0027volume_id\u0027: volume_id})"},{"line_number":3720,"context_line":"            LOG.error(msg)"},{"line_number":3721,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_e5af9ae1","line":3718,"updated":"2016-01-12 13:23:42.000000000","message":"nit: Maybe rephrase this to \u0027%(volume_id)s must be available\u0027 or \u0027expected in available state\u0027, because placing the verb at the end of the sentence reads weird.","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"4c4dafe15007df8be509da6a26d25b1e7ef2b669","unresolved":false,"context_lines":[{"line_number":3715,"context_line":"        if not conditional_update(context, models.Volume, updated, expected,"},{"line_number":3716,"context_line":"                                  session\u003dsession):"},{"line_number":3717,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"},{"line_number":3718,"context_line":"                     \u0027available state expected.\u0027)"},{"line_number":3719,"context_line":"                   % {\u0027transfer_id\u0027: transfer_id, \u0027volume_id\u0027: volume_id})"},{"line_number":3720,"context_line":"            LOG.error(msg)"},{"line_number":3721,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_f5182d20","line":3718,"in_reply_to":"da6ed579_e5af9ae1","updated":"2016-10-31 10:28:31.000000000","message":"Done","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c98cd28c51264caf70237284565483b5aa2f86c8","unresolved":false,"context_lines":[{"line_number":3731,"context_line":"def transfer_destroy(context, transfer_id):"},{"line_number":3732,"context_line":"    session \u003d get_session()"},{"line_number":3733,"context_line":"    with session.begin():"},{"line_number":3734,"context_line":"        volume_id \u003d _transfer_get(context, transfer_id, session)[\u0027volume_id\u0027]"},{"line_number":3735,"context_line":"        expected \u003d {\u0027id\u0027: volume_id,"},{"line_number":3736,"context_line":"                    \u0027status\u0027: \u0027awaiting-transfer\u0027}"},{"line_number":3737,"context_line":"        updated \u003d {\u0027status\u0027: \u0027available\u0027}"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_e5955a40","line":3734,"updated":"2016-01-12 13:23:42.000000000","message":"-1: This uses 3 queries to the DB when we should be using only 1 with a Multi Table Update, because I\u0027m not sure we are safe with default isolation level on some DBs (oslo db doesn\u0027t change default isolation level for each DB).","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"4c4dafe15007df8be509da6a26d25b1e7ef2b669","unresolved":false,"context_lines":[{"line_number":3731,"context_line":"def transfer_destroy(context, transfer_id):"},{"line_number":3732,"context_line":"    session \u003d get_session()"},{"line_number":3733,"context_line":"    with session.begin():"},{"line_number":3734,"context_line":"        volume_id \u003d _transfer_get(context, transfer_id, session)[\u0027volume_id\u0027]"},{"line_number":3735,"context_line":"        expected \u003d {\u0027id\u0027: volume_id,"},{"line_number":3736,"context_line":"                    \u0027status\u0027: \u0027awaiting-transfer\u0027}"},{"line_number":3737,"context_line":"        updated \u003d {\u0027status\u0027: \u0027available\u0027}"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_d27091a6","line":3734,"in_reply_to":"da6ed579_91493bd3","updated":"2016-10-31 10:28:31.000000000","message":"Tried multiple approaches and I\u0027m still not able to create query that would update Volume using value from Transfer without adding FROM to SQL query (which breaks sqlite). I may be doing something wrong, but for now I don\u0027t see other options.","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7d946eaa80638ca2fdc2ace2e76f56970cbf4e40","unresolved":false,"context_lines":[{"line_number":3731,"context_line":"def transfer_destroy(context, transfer_id):"},{"line_number":3732,"context_line":"    session \u003d get_session()"},{"line_number":3733,"context_line":"    with session.begin():"},{"line_number":3734,"context_line":"        volume_id \u003d _transfer_get(context, transfer_id, session)[\u0027volume_id\u0027]"},{"line_number":3735,"context_line":"        expected \u003d {\u0027id\u0027: volume_id,"},{"line_number":3736,"context_line":"                    \u0027status\u0027: \u0027awaiting-transfer\u0027}"},{"line_number":3737,"context_line":"        updated \u003d {\u0027status\u0027: \u0027available\u0027}"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_91493bd3","line":3734,"in_reply_to":"da6ed579_e5955a40","updated":"2016-01-12 14:51:54.000000000","message":"Ok, I have just confirmed that Multi Table Update is not possible on PostgreSQL, so the best we can do is to have only 2 queries instead of 3, since we can do an update with multiple tables for the where clause.\n\nSo we would have the conditional update of the volume that gets the id from the transfer table in the same query and then the delete of the transfer on another query as it is now.","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c98cd28c51264caf70237284565483b5aa2f86c8","unresolved":false,"context_lines":[{"line_number":3740,"context_line":"            # If the volume state is not \u0027awaiting-transfer\u0027 don\u0027t change it,"},{"line_number":3741,"context_line":"            # but we can still mark the transfer record as deleted."},{"line_number":3742,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"},{"line_number":3743,"context_line":"                     \u0027awaiting-transfer state expected.\u0027)"},{"line_number":3744,"context_line":"                   % {\u0027transfer_id\u0027: transfer_id, \u0027volume_id\u0027: volume_id})"},{"line_number":3745,"context_line":"            LOG.error(msg)"},{"line_number":3746,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_850a5ed1","line":3743,"updated":"2016-01-12 13:23:42.000000000","message":"nit: Same as with message above, weird verb placing.","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"4c4dafe15007df8be509da6a26d25b1e7ef2b669","unresolved":false,"context_lines":[{"line_number":3740,"context_line":"            # If the volume state is not \u0027awaiting-transfer\u0027 don\u0027t change it,"},{"line_number":3741,"context_line":"            # but we can still mark the transfer record as deleted."},{"line_number":3742,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"},{"line_number":3743,"context_line":"                     \u0027awaiting-transfer state expected.\u0027)"},{"line_number":3744,"context_line":"                   % {\u0027transfer_id\u0027: transfer_id, \u0027volume_id\u0027: volume_id})"},{"line_number":3745,"context_line":"            LOG.error(msg)"},{"line_number":3746,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_926779e8","line":3743,"in_reply_to":"da6ed579_850a5ed1","updated":"2016-10-31 10:28:31.000000000","message":"Done","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c98cd28c51264caf70237284565483b5aa2f86c8","unresolved":false,"context_lines":[{"line_number":3755,"context_line":"def transfer_accept(context, transfer_id, user_id, project_id):"},{"line_number":3756,"context_line":"    session \u003d get_session()"},{"line_number":3757,"context_line":"    with session.begin():"},{"line_number":3758,"context_line":"        volume_id \u003d _transfer_get(context, transfer_id, session)[\u0027volume_id\u0027]"},{"line_number":3759,"context_line":"        expected \u003d {\u0027id\u0027: volume_id,"},{"line_number":3760,"context_line":"                    \u0027status\u0027: \u0027awaiting-transfer\u0027}"},{"line_number":3761,"context_line":"        updated \u003d {\u0027status\u0027: \u0027available\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_cebb930d","line":3758,"updated":"2016-01-12 13:23:42.000000000","message":"-1: Same as above, use Multi Table Update.","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7d946eaa80638ca2fdc2ace2e76f56970cbf4e40","unresolved":false,"context_lines":[{"line_number":3755,"context_line":"def transfer_accept(context, transfer_id, user_id, project_id):"},{"line_number":3756,"context_line":"    session \u003d get_session()"},{"line_number":3757,"context_line":"    with session.begin():"},{"line_number":3758,"context_line":"        volume_id \u003d _transfer_get(context, transfer_id, session)[\u0027volume_id\u0027]"},{"line_number":3759,"context_line":"        expected \u003d {\u0027id\u0027: volume_id,"},{"line_number":3760,"context_line":"                    \u0027status\u0027: \u0027awaiting-transfer\u0027}"},{"line_number":3761,"context_line":"        updated \u003d {\u0027status\u0027: \u0027available\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_51c74312","line":3758,"in_reply_to":"da6ed579_cebb930d","updated":"2016-01-12 14:51:54.000000000","message":"I made the same mistake as above, not Multi Table Update, but an update that uses multiple tables for the where clause.","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c98cd28c51264caf70237284565483b5aa2f86c8","unresolved":false,"context_lines":[{"line_number":3761,"context_line":"        updated \u003d {\u0027status\u0027: \u0027available\u0027,"},{"line_number":3762,"context_line":"                   \u0027user_id\u0027: user_id,"},{"line_number":3763,"context_line":"                   \u0027project_id\u0027: project_id,"},{"line_number":3764,"context_line":"                   \u0027updated_at\u0027: literal_column(\u0027updated_at\u0027)}"},{"line_number":3765,"context_line":"        if not conditional_update(context, models.Volume, updated, expected,"},{"line_number":3766,"context_line":"                                  session\u003dsession):"},{"line_number":3767,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_2ea58f03","line":3764,"updated":"2016-01-12 13:23:42.000000000","message":"nit: `models.Volume.updated_at` instead of `literal_column...`","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"4c4dafe15007df8be509da6a26d25b1e7ef2b669","unresolved":false,"context_lines":[{"line_number":3761,"context_line":"        updated \u003d {\u0027status\u0027: \u0027available\u0027,"},{"line_number":3762,"context_line":"                   \u0027user_id\u0027: user_id,"},{"line_number":3763,"context_line":"                   \u0027project_id\u0027: project_id,"},{"line_number":3764,"context_line":"                   \u0027updated_at\u0027: literal_column(\u0027updated_at\u0027)}"},{"line_number":3765,"context_line":"        if not conditional_update(context, models.Volume, updated, expected,"},{"line_number":3766,"context_line":"                                  session\u003dsession):"},{"line_number":3767,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_72b20596","line":3764,"in_reply_to":"da6ed579_2ea58f03","updated":"2016-10-31 10:28:31.000000000","message":"Done","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c98cd28c51264caf70237284565483b5aa2f86c8","unresolved":false,"context_lines":[{"line_number":3765,"context_line":"        if not conditional_update(context, models.Volume, updated, expected,"},{"line_number":3766,"context_line":"                                  session\u003dsession):"},{"line_number":3767,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"},{"line_number":3768,"context_line":"                     \u0027awaiting-transfer state expected.\u0027)"},{"line_number":3769,"context_line":"                   % {\u0027transfer_id\u0027: transfer_id, \u0027volume_id\u0027: volume_id})"},{"line_number":3770,"context_line":"            LOG.error(msg)"},{"line_number":3771,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_0edbeb7d","line":3768,"updated":"2016-01-12 13:23:42.000000000","message":"nit: Weird verb placement.","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"4c4dafe15007df8be509da6a26d25b1e7ef2b669","unresolved":false,"context_lines":[{"line_number":3765,"context_line":"        if not conditional_update(context, models.Volume, updated, expected,"},{"line_number":3766,"context_line":"                                  session\u003dsession):"},{"line_number":3767,"context_line":"            msg \u003d (_(\u0027Transfer %(transfer_id)s: Volume id %(volume_id)s in \u0027"},{"line_number":3768,"context_line":"                     \u0027awaiting-transfer state expected.\u0027)"},{"line_number":3769,"context_line":"                   % {\u0027transfer_id\u0027: transfer_id, \u0027volume_id\u0027: volume_id})"},{"line_number":3770,"context_line":"            LOG.error(msg)"},{"line_number":3771,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_52a58144","line":3768,"in_reply_to":"da6ed579_0edbeb7d","updated":"2016-10-31 10:28:31.000000000","message":"Done","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c98cd28c51264caf70237284565483b5aa2f86c8","unresolved":false,"context_lines":[{"line_number":4254,"context_line":"@_retry_on_deadlock"},{"line_number":4255,"context_line":"@require_context"},{"line_number":4256,"context_line":"def conditional_update(context, model, values, expected_values, filters\u003d(),"},{"line_number":4257,"context_line":"                       include_deleted\u003d\u0027no\u0027, project_only\u003dFalse, session\u003dNone):"},{"line_number":4258,"context_line":"    \"\"\"Compare-and-swap conditional update SQLAlchemy implementation.\"\"\""},{"line_number":4259,"context_line":"    # Provided filters will become part of the where clause"},{"line_number":4260,"context_line":"    where_conds \u003d list(filters)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_eee77710","line":4257,"updated":"2016-01-12 13:23:42.000000000","message":"-1: I think we should use Multi Table Updates in which case we wouldn\u0027t need to pass the session.  But if we pass the session instead, we should also update `conditional_update` method in cinder.db.api to have this argument and method in cinder.objects.base to pass along the argument that it\u0027s already being received by the method (and currently ignored).","commit_id":"f05c4946bf415e6f3e6812e911e153c295ec7575"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"a08eb489f6670c9905372b2dd2641ed2f23dc67f","unresolved":false,"context_lines":[{"line_number":4873,"context_line":"            LOG.error(msg)"},{"line_number":4874,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":4875,"context_line":""},{"line_number":4876,"context_line":"        (session.query(models.Transfer)."},{"line_number":4877,"context_line":"         filter_by(id\u003dtransfer_id)."},{"line_number":4878,"context_line":"         update({\u0027deleted\u0027: True,"},{"line_number":4879,"context_line":"                 \u0027deleted_at\u0027: timeutils.utcnow(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5da102_fc893327","line":4876,"updated":"2016-11-02 14:46:22.000000000","message":"Please, do not use \u0027.\u0027 to do multiline statement. It could be replaced with:\nsession.query(models.Transfer).filter_by(\n    id\u003dtransfer_id).update(\n        {\u0027deleted\u0027: True,\n         \u0027deleted_at\u0027: timeutils.utcnow(),\n         \u0027updated_at\u0027: literal_column(\u0027updated_at\u0027)})","commit_id":"6c65c7f866a6946c7678f2a5db935a3c76747fdf"}],"cinder/transfer/api.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ad06f99a9dca53f261dd3ea8336bb384a417b02e","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            raise exception.InvalidAuthKey(reason\u003dmsg)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        volume \u003d objects.Volume.get_by_id(context.elevated(),"},{"line_number":173,"context_line":"                                          transfer[\u0027volume_id\u0027])"},{"line_number":174,"context_line":"        volume_utils.notify_about_volume_usage(context, volume,"},{"line_number":175,"context_line":"                                               \"transfer.accept.start\")"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_0c371de4","line":173,"updated":"2015-12-16 13:28:39.000000000","message":"nit: This should be transfer.volume_id since it\u0027s an ORM instance.","commit_id":"e537af6ffabe6eeed7558dd725007936b1511f9e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ad06f99a9dca53f261dd3ea8336bb384a417b02e","unresolved":false,"context_lines":[{"line_number":228,"context_line":"                  \u0027project_id\u0027: context.project_id}"},{"line_number":229,"context_line":"        try:"},{"line_number":230,"context_line":"            result \u003d volume.conditional_update(values, expected,"},{"line_number":231,"context_line":"                                               update_time\u003dFalse)"},{"line_number":232,"context_line":"            if not result:"},{"line_number":233,"context_line":"                msg \u003d (_LE(\u0027Volume %s status must be awaiting-transfer\u0027)"},{"line_number":234,"context_line":"                       % volume.id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_ecde516c","line":231,"updated":"2015-12-16 13:28:39.000000000","message":"-1: Instead of adding a new argument to conditional_update we can set it directly in the values variable:\n\n \u0027updated_at\u0027: volume.model.updated_at,","commit_id":"e537af6ffabe6eeed7558dd725007936b1511f9e"}]}
