)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"28cd0be05b3391125cdb74737985a74dc35b5542","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"DocImpact"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Partial-Bug: #1715078"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Change-Id: I2142b1c0a0cc2c4f85794416e702a326d3406b9d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3fa0c359_a03e3db5","line":29,"updated":"2018-02-13 09:10:34.000000000","message":"According to the release notes, it\u0027s a feature. Why do we have a bug here instead of a blueprint?","commit_id":"7b7de8cf264fd5d2d6c83884a74be8abb3850309"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"e532ab5e9c863fc6bf4a425cdf7e71a414b327b0","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"DocImpact"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Partial-Bug: #1715078"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Change-Id: I2142b1c0a0cc2c4f85794416e702a326d3406b9d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3fa0c359_1f694a8a","line":29,"in_reply_to":"3fa0c359_a03e3db5","updated":"2018-02-15 14:51:05.000000000","message":"This started out as a bugfix for performance issues and grew so far it borders to feature addition. I\u0027ll unify this to bugfixing.","commit_id":"7b7de8cf264fd5d2d6c83884a74be8abb3850309"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6b16290c6ea51e5c779e31fdcbaa8212fec21d9f","unresolved":false,"context_lines":[{"line_number":24,"context_line":"backing chain merge."},{"line_number":25,"context_line":"Adding a DocImpact flag for the new config option added in here."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"DocImpact"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Partial-Bug: #1715078"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"3fa0c359_924e6f94","line":27,"updated":"2018-02-19 13:28:23.000000000","message":"The documentation changes should just be included with this patch unless you want a bug created for you to track that as follow up work.","commit_id":"92815e6b1df020a066e8a5a60ef2fa7a9fe771a3"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"b7430b78e94b1e8fa9138bf95f4191426379e088","unresolved":false,"context_lines":[{"line_number":24,"context_line":"backing chain merge."},{"line_number":25,"context_line":"Adding a DocImpact flag for the new config option added in here."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"DocImpact"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Partial-Bug: #1715078"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"3fa0c359_9bc0cb2c","line":27,"in_reply_to":"3fa0c359_924e6f94","updated":"2024-05-31 09:44:41.000000000","message":"Done","commit_id":"92815e6b1df020a066e8a5a60ef2fa7a9fe771a3"}],"cinder/tests/unit/volume/drivers/test_quobyte.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"28cd0be05b3391125cdb74737985a74dc35b5542","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                run_as_root\u003dself._driver._execute_as_root)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def test__ensure_volume_cache_ok(self):"},{"line_number":137,"context_line":"        tmp_path \u003d tempfile.mkdtemp()"},{"line_number":138,"context_line":"        try:"},{"line_number":139,"context_line":"            os.makedirs(os.path.join("},{"line_number":140,"context_line":"                tmp_path, self._driver.QUOBYTE_VOLUME_SNAP_CACHE_DIR_NAME))"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa0c359_20054d11","line":137,"updated":"2018-02-13 09:10:34.000000000","message":"Please, don\u0027t create temporary files or directories in unit tests. All I/O should be mocked","commit_id":"7b7de8cf264fd5d2d6c83884a74be8abb3850309"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"e532ab5e9c863fc6bf4a425cdf7e71a414b327b0","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                run_as_root\u003dself._driver._execute_as_root)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def test__ensure_volume_cache_ok(self):"},{"line_number":137,"context_line":"        tmp_path \u003d tempfile.mkdtemp()"},{"line_number":138,"context_line":"        try:"},{"line_number":139,"context_line":"            os.makedirs(os.path.join("},{"line_number":140,"context_line":"                tmp_path, self._driver.QUOBYTE_VOLUME_SNAP_CACHE_DIR_NAME))"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa0c359_402db2a6","line":137,"in_reply_to":"3fa0c359_20054d11","updated":"2018-02-15 14:51:05.000000000","message":"Done","commit_id":"7b7de8cf264fd5d2d6c83884a74be8abb3850309"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"94c59d3fb57c0b298f11a256e43e642dc2001e5d","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                    self._driver._ensure_volume_from_snap_cache(tmp_path)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"                    assert qb_log_mock.debug.called, ("},{"line_number":148,"context_line":"                        \"LOG.debug was not called but should have been\")"},{"line_number":149,"context_line":"                    assert not qb_log_mock.info.called, ("},{"line_number":150,"context_line":"                        \"LOG.info was called but should not have been\")"},{"line_number":151,"context_line":"            finally:"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa0c359_9c66da29","line":148,"updated":"2018-02-14 21:29:41.000000000","message":"Do not assert on log message text. Fine if you feel it\u0027s a functionally important thing to verify the logger was called, but we should never assert on the text.","commit_id":"7b7de8cf264fd5d2d6c83884a74be8abb3850309"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"e532ab5e9c863fc6bf4a425cdf7e71a414b327b0","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                    self._driver._ensure_volume_from_snap_cache(tmp_path)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"                    assert qb_log_mock.debug.called, ("},{"line_number":148,"context_line":"                        \"LOG.debug was not called but should have been\")"},{"line_number":149,"context_line":"                    assert not qb_log_mock.info.called, ("},{"line_number":150,"context_line":"                        \"LOG.info was called but should not have been\")"},{"line_number":151,"context_line":"            finally:"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa0c359_e0f63efa","line":148,"in_reply_to":"3fa0c359_9c66da29","updated":"2018-02-15 14:51:05.000000000","message":"I thought this is what this is doing? Asserting that the logging mock was called (no param matching) and log an error message if it wasn\u0027t.","commit_id":"7b7de8cf264fd5d2d6c83884a74be8abb3850309"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"bd9db7382f8d4be82827b1f697b187f8cfab6723","unresolved":false,"context_lines":[{"line_number":149,"context_line":"            os_access_mock.assert_has_calls(calls)"},{"line_number":150,"context_line":"            os_join_mock.assert_called_once_with("},{"line_number":151,"context_line":"                tmp_path, self._driver.QUOBYTE_VOLUME_SNAP_CACHE_DIR_NAME)"},{"line_number":152,"context_line":"            assert qb_log_mock.debug.called, ("},{"line_number":153,"context_line":"                \"LOG.debug was not called but should have been\")"},{"line_number":154,"context_line":"            assert not qb_log_mock.info.called, ("},{"line_number":155,"context_line":"                \"LOG.info was called but should not have been\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa0c359_f1e347a3","line":152,"updated":"2018-02-17 10:08:10.000000000","message":"IMO, we shouldn\u0027t care about logging calls in unit tests","commit_id":"a3f305b0240f751ba7db5aa812c5ecc6c83e5456"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"ddfc9d9415f82f5acefc41b4811abd89c9c954ab","unresolved":false,"context_lines":[{"line_number":149,"context_line":"            os_access_mock.assert_has_calls(calls)"},{"line_number":150,"context_line":"            os_join_mock.assert_called_once_with("},{"line_number":151,"context_line":"                tmp_path, self._driver.QUOBYTE_VOLUME_SNAP_CACHE_DIR_NAME)"},{"line_number":152,"context_line":"            assert qb_log_mock.debug.called, ("},{"line_number":153,"context_line":"                \"LOG.debug was not called but should have been\")"},{"line_number":154,"context_line":"            assert not qb_log_mock.info.called, ("},{"line_number":155,"context_line":"                \"LOG.info was called but should not have been\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa0c359_e3984f76","line":152,"in_reply_to":"3fa0c359_f1e347a3","updated":"2018-02-19 09:38:38.000000000","message":"Removed them completely, ok.","commit_id":"a3f305b0240f751ba7db5aa812c5ecc6c83e5456"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"bd9db7382f8d4be82827b1f697b187f8cfab6723","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                \"LOG.info was called but should not have been\")"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def test__ensure_volume_cache_create(self):"},{"line_number":158,"context_line":"        tmp_path \u003d tempfile.mkdtemp()"},{"line_number":159,"context_line":"        try:"},{"line_number":160,"context_line":"            try:"},{"line_number":161,"context_line":"                with mock.patch("}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa0c359_d1c96b25","line":158,"updated":"2018-02-17 10:08:10.000000000","message":"Please, don\u0027t create temporary files in unit tests. I/O operations should be mocked","commit_id":"a3f305b0240f751ba7db5aa812c5ecc6c83e5456"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"bd9db7382f8d4be82827b1f697b187f8cfab6723","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                \"LOG.info was called but should not have been\")"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def test__ensure_volume_cache_create(self):"},{"line_number":158,"context_line":"        tmp_path \u003d tempfile.mkdtemp()"},{"line_number":159,"context_line":"        try:"},{"line_number":160,"context_line":"            try:"},{"line_number":161,"context_line":"                with mock.patch("}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa0c359_114a73ab","line":158,"range":{"start_line":158,"start_character":19,"end_line":158,"end_character":20},"updated":"2018-02-17 10:08:10.000000000","message":"Please, dont","commit_id":"a3f305b0240f751ba7db5aa812c5ecc6c83e5456"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"ddfc9d9415f82f5acefc41b4811abd89c9c954ab","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                \"LOG.info was called but should not have been\")"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def test__ensure_volume_cache_create(self):"},{"line_number":158,"context_line":"        tmp_path \u003d tempfile.mkdtemp()"},{"line_number":159,"context_line":"        try:"},{"line_number":160,"context_line":"            try:"},{"line_number":161,"context_line":"                with mock.patch("}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa0c359_838e2b25","line":158,"in_reply_to":"3fa0c359_d1c96b25","updated":"2018-02-19 09:38:38.000000000","message":"Done.\nSry for not checking the whole class during the last update, tmp files are no eradicated inhere.","commit_id":"a3f305b0240f751ba7db5aa812c5ecc6c83e5456"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"bd9db7382f8d4be82827b1f697b187f8cfab6723","unresolved":false,"context_lines":[{"line_number":868,"context_line":"        image_utils.qemu_img_info.assert_called_once_with(snap_path,"},{"line_number":869,"context_line":"                                                          force_share\u003dFalse,"},{"line_number":870,"context_line":"                                                          run_as_root\u003dFalse)"},{"line_number":871,"context_line":"        assert not image_utils.convert_image.called, (\"_convert_image was \""},{"line_number":872,"context_line":"                                                      \"called but should not \""},{"line_number":873,"context_line":"                                                      \"have been\")"},{"line_number":874,"context_line":"        os_ac_mock.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa0c359_71e9777e","line":871,"updated":"2018-02-17 10:08:10.000000000","message":"Please, use self.assertFalse instead of \u0027assert not\u0027 statement","commit_id":"a3f305b0240f751ba7db5aa812c5ecc6c83e5456"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"ddfc9d9415f82f5acefc41b4811abd89c9c954ab","unresolved":false,"context_lines":[{"line_number":868,"context_line":"        image_utils.qemu_img_info.assert_called_once_with(snap_path,"},{"line_number":869,"context_line":"                                                          force_share\u003dFalse,"},{"line_number":870,"context_line":"                                                          run_as_root\u003dFalse)"},{"line_number":871,"context_line":"        assert not image_utils.convert_image.called, (\"_convert_image was \""},{"line_number":872,"context_line":"                                                      \"called but should not \""},{"line_number":873,"context_line":"                                                      \"have been\")"},{"line_number":874,"context_line":"        os_ac_mock.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa0c359_63b43fd2","line":871,"in_reply_to":"3fa0c359_71e9777e","updated":"2018-02-19 09:38:38.000000000","message":"Done","commit_id":"a3f305b0240f751ba7db5aa812c5ecc6c83e5456"}],"cinder/volume/drivers/quobyte.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e2ed57b08147ab9b416916ceb505f6ebbd07b1bf","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        cache_path \u003d os.path.join(mount_path,"},{"line_number":125,"context_line":"                                  self.QUOBYTE_VOLUME_SNAP_CACHE_DIR_NAME)"},{"line_number":126,"context_line":"        if not os.access(cache_path, os.F_OK):"},{"line_number":127,"context_line":"            LOG.info(\"Volume from snapshot cache directory does not exist,\""},{"line_number":128,"context_line":"                     \"creating the directory %(volcache)\","},{"line_number":129,"context_line":"                     {\u0027volcache\u0027: cache_path})"},{"line_number":130,"context_line":"            os.makedirs(cache_path)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_3d3ebcc0","line":127,"range":{"start_line":127,"start_character":74,"end_line":127,"end_character":75},"updated":"2017-10-26 21:07:31.000000000","message":"Need trailing space here.","commit_id":"53abfdfa653634179d4af0e2ad8a88a134fbd368"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"d5319dde80d946261739d2e03864cf6e2e086e71","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        cache_path \u003d os.path.join(mount_path,"},{"line_number":125,"context_line":"                                  self.QUOBYTE_VOLUME_SNAP_CACHE_DIR_NAME)"},{"line_number":126,"context_line":"        if not os.access(cache_path, os.F_OK):"},{"line_number":127,"context_line":"            LOG.info(\"Volume from snapshot cache directory does not exist,\""},{"line_number":128,"context_line":"                     \"creating the directory %(volcache)\","},{"line_number":129,"context_line":"                     {\u0027volcache\u0027: cache_path})"},{"line_number":130,"context_line":"            os.makedirs(cache_path)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_2bbb96c4","line":127,"range":{"start_line":127,"start_character":74,"end_line":127,"end_character":75},"in_reply_to":"3f4b6375_3d3ebcc0","updated":"2017-11-01 13:31:38.000000000","message":"Done","commit_id":"53abfdfa653634179d4af0e2ad8a88a134fbd368"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e2ed57b08147ab9b416916ceb505f6ebbd07b1bf","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                and os.access(cache_path, os.W_OK)"},{"line_number":133,"context_line":"                and os.access(cache_path, os.X_OK)):"},{"line_number":134,"context_line":"            msg \u003d (\"Insufficient permissions for Quobyte volume from snapshot\""},{"line_number":135,"context_line":"                   \"cache directory at %(cpath) . Please update permissions.\","},{"line_number":136,"context_line":"                   {\u0027cpath\u0027: cache_path})"},{"line_number":137,"context_line":"            raise exception.VolumeDriverException(msg)"},{"line_number":138,"context_line":"        LOG.debug(\"Quobyte volume from snapshot cache directory validated ok\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_fd3384f4","line":135,"range":{"start_line":135,"start_character":47,"end_line":135,"end_character":48},"updated":"2017-10-26 21:07:31.000000000","message":"Extra space here.","commit_id":"53abfdfa653634179d4af0e2ad8a88a134fbd368"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"d5319dde80d946261739d2e03864cf6e2e086e71","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                and os.access(cache_path, os.W_OK)"},{"line_number":133,"context_line":"                and os.access(cache_path, os.X_OK)):"},{"line_number":134,"context_line":"            msg \u003d (\"Insufficient permissions for Quobyte volume from snapshot\""},{"line_number":135,"context_line":"                   \"cache directory at %(cpath) . Please update permissions.\","},{"line_number":136,"context_line":"                   {\u0027cpath\u0027: cache_path})"},{"line_number":137,"context_line":"            raise exception.VolumeDriverException(msg)"},{"line_number":138,"context_line":"        LOG.debug(\"Quobyte volume from snapshot cache directory validated ok\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_0bb21ae7","line":135,"range":{"start_line":135,"start_character":47,"end_line":135,"end_character":48},"in_reply_to":"3f4b6375_fd3384f4","updated":"2017-11-01 13:31:38.000000000","message":"Done","commit_id":"53abfdfa653634179d4af0e2ad8a88a134fbd368"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e2ed57b08147ab9b416916ceb505f6ebbd07b1bf","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        data \u003d image_utils.qemu_img_info(self.local_path(volume),"},{"line_number":186,"context_line":"                                         run_as_root\u003dself._execute_as_root)"},{"line_number":187,"context_line":"        if data.disk_size \u003e\u003d (volume_size * units.Gi):"},{"line_number":188,"context_line":"            LOG.debug(\"Optimization of volume %(volpath)s is not required,\""},{"line_number":189,"context_line":"                      \"skipping this step.\", {\u0027volpath\u0027: volume_path})"},{"line_number":190,"context_line":"            return"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_dd2e888a","line":188,"range":{"start_line":188,"start_character":74,"end_line":188,"end_character":75},"updated":"2017-10-26 21:07:31.000000000","message":"Need trailing space.","commit_id":"53abfdfa653634179d4af0e2ad8a88a134fbd368"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"d5319dde80d946261739d2e03864cf6e2e086e71","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        data \u003d image_utils.qemu_img_info(self.local_path(volume),"},{"line_number":186,"context_line":"                                         run_as_root\u003dself._execute_as_root)"},{"line_number":187,"context_line":"        if data.disk_size \u003e\u003d (volume_size * units.Gi):"},{"line_number":188,"context_line":"            LOG.debug(\"Optimization of volume %(volpath)s is not required,\""},{"line_number":189,"context_line":"                      \"skipping this step.\", {\u0027volpath\u0027: volume_path})"},{"line_number":190,"context_line":"            return"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_cbcbe250","line":188,"range":{"start_line":188,"start_character":74,"end_line":188,"end_character":75},"in_reply_to":"3f4b6375_dd2e888a","updated":"2017-11-01 13:31:38.000000000","message":"Done","commit_id":"53abfdfa653634179d4af0e2ad8a88a134fbd368"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6d9a328fe408df6224fdb19a284935b3389dfbe0","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        if not (os.access(cache_path, os.R_OK)"},{"line_number":134,"context_line":"                and os.access(cache_path, os.W_OK)"},{"line_number":135,"context_line":"                and os.access(cache_path, os.X_OK)):"},{"line_number":136,"context_line":"            msg \u003d (\"Insufficient permissions for Quobyte volume from snapshot\""},{"line_number":137,"context_line":"                   \"cache directory at %(cpath). Please update permissions.\","},{"line_number":138,"context_line":"                   {\u0027cpath\u0027: cache_path})"},{"line_number":139,"context_line":"            raise exception.VolumeDriverException(msg)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f93b717_fde2a39f","line":136,"range":{"start_line":136,"start_character":77,"end_line":136,"end_character":78},"updated":"2018-02-02 03:32:01.000000000","message":"Needs a space at the end so the two words don\u0027t run together.\n\nAnd needs _() for translation since it\u0027s being used in the exception.","commit_id":"b67329398ba2ca86ec77a4ef7f8fa7eea8fe6505"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"28c075079c1c997ef547742115f14e8617032676","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        if not (os.access(cache_path, os.R_OK)"},{"line_number":134,"context_line":"                and os.access(cache_path, os.W_OK)"},{"line_number":135,"context_line":"                and os.access(cache_path, os.X_OK)):"},{"line_number":136,"context_line":"            msg \u003d (\"Insufficient permissions for Quobyte volume from snapshot\""},{"line_number":137,"context_line":"                   \"cache directory at %(cpath). Please update permissions.\","},{"line_number":138,"context_line":"                   {\u0027cpath\u0027: cache_path})"},{"line_number":139,"context_line":"            raise exception.VolumeDriverException(msg)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f93b717_81cd31b8","line":136,"range":{"start_line":136,"start_character":77,"end_line":136,"end_character":78},"in_reply_to":"5f93b717_fde2a39f","updated":"2018-02-02 11:55:58.000000000","message":"Done","commit_id":"b67329398ba2ca86ec77a4ef7f8fa7eea8fe6505"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5153ae4945bb4b79331fc4021c97d6d846e01fb7","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                and os.access(cache_path, os.X_OK)):"},{"line_number":137,"context_line":"            msg \u003d (_(\"Insufficient permissions for Quobyte volume from \""},{"line_number":138,"context_line":"                   \"snapshot cache directory at %(cpath). Please update \""},{"line_number":139,"context_line":"                   \"permissions.\"), {\u0027cpath\u0027: cache_path})"},{"line_number":140,"context_line":"            raise exception.VolumeDriverException(msg)"},{"line_number":141,"context_line":"        LOG.debug(\"Quobyte volume from snapshot cache directory validated ok\")"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"5f93b717_37201e9b","line":139,"range":{"start_line":139,"start_character":34,"end_line":139,"end_character":35},"updated":"2018-02-02 14:15:07.000000000","message":"Didn\u0027t notice this before. You need to format the string, otherwise you are passing a tuple to the exception init.","commit_id":"ffd2541255b1131f9fc743ba3f9b9056ba5802b5"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"3bf60759d27a24886cc771fd981a70c83bdecc9d","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                and os.access(cache_path, os.X_OK)):"},{"line_number":137,"context_line":"            msg \u003d (_(\"Insufficient permissions for Quobyte volume from \""},{"line_number":138,"context_line":"                   \"snapshot cache directory at %(cpath). Please update \""},{"line_number":139,"context_line":"                   \"permissions.\"), {\u0027cpath\u0027: cache_path})"},{"line_number":140,"context_line":"            raise exception.VolumeDriverException(msg)"},{"line_number":141,"context_line":"        LOG.debug(\"Quobyte volume from snapshot cache directory validated ok\")"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"5f93b717_406b9eef","line":139,"range":{"start_line":139,"start_character":34,"end_line":139,"end_character":35},"in_reply_to":"5f93b717_37201e9b","updated":"2018-02-02 16:32:47.000000000","message":"yikes, thnx!","commit_id":"ffd2541255b1131f9fc743ba3f9b9056ba5802b5"}],"releasenotes/notes/quobyte_vol-snap-cache-baf607f14d916ec7.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e2ed57b08147ab9b416916ceb505f6ebbd07b1bf","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"features:"},{"line_number":4,"context_line":"  - |"},{"line_number":5,"context_line":"    Adds a new optional cache of volumes generated from snapshots for the"},{"line_number":6,"context_line":"    Quobyte backend. Enabling this cache speeds up creation of multiple"},{"line_number":7,"context_line":"    volumes from a single snapshot at the cost of a slight increase in"},{"line_number":8,"context_line":"    creation time for the first volume generated for this given snapshot."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3f4b6375_5d58582f","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":8},"updated":"2017-10-26 21:07:31.000000000","message":"Added","commit_id":"53abfdfa653634179d4af0e2ad8a88a134fbd368"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"d5319dde80d946261739d2e03864cf6e2e086e71","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"features:"},{"line_number":4,"context_line":"  - |"},{"line_number":5,"context_line":"    Adds a new optional cache of volumes generated from snapshots for the"},{"line_number":6,"context_line":"    Quobyte backend. Enabling this cache speeds up creation of multiple"},{"line_number":7,"context_line":"    volumes from a single snapshot at the cost of a slight increase in"},{"line_number":8,"context_line":"    creation time for the first volume generated for this given snapshot."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3f4b6375_ab9d4658","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":8},"in_reply_to":"3f4b6375_5d58582f","updated":"2017-11-01 13:31:38.000000000","message":"Done","commit_id":"53abfdfa653634179d4af0e2ad8a88a134fbd368"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e2ed57b08147ab9b416916ceb505f6ebbd07b1bf","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    Quobyte backend. Enabling this cache speeds up creation of multiple"},{"line_number":7,"context_line":"    volumes from a single snapshot at the cost of a slight increase in"},{"line_number":8,"context_line":"    creation time for the first volume generated for this given snapshot."},{"line_number":9,"context_line":"    The quobyte_volume_from_snapshot_cache option is off by default."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3f4b6375_9d7b708a","line":9,"range":{"start_line":9,"start_character":8,"end_line":9,"end_character":42},"updated":"2017-10-26 21:07:31.000000000","message":"Might be good to surround this with `` so it gets formatted and is obvious it\u0027s a config option.","commit_id":"53abfdfa653634179d4af0e2ad8a88a134fbd368"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"d5319dde80d946261739d2e03864cf6e2e086e71","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    Quobyte backend. Enabling this cache speeds up creation of multiple"},{"line_number":7,"context_line":"    volumes from a single snapshot at the cost of a slight increase in"},{"line_number":8,"context_line":"    creation time for the first volume generated for this given snapshot."},{"line_number":9,"context_line":"    The quobyte_volume_from_snapshot_cache option is off by default."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3f4b6375_cba2c29a","line":9,"range":{"start_line":9,"start_character":8,"end_line":9,"end_character":42},"in_reply_to":"3f4b6375_9d7b708a","updated":"2017-11-01 13:31:38.000000000","message":"Done","commit_id":"53abfdfa653634179d4af0e2ad8a88a134fbd368"}]}
