)]}'
{"cinder/tests/unit/volume/drivers/test_quobyte.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"be7d643de0c606cd9d33ce636c0addd285e8eca4","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    TEST_SIZE_IN_GB \u003d 1"},{"line_number":64,"context_line":"    TEST_MNT_HASH \u003d \"1331538734b757ed52d0e18c0a7210cd\""},{"line_number":65,"context_line":"    TEST_MNT_POINT_BASE \u003d \u0027/mnt\u0027"},{"line_number":66,"context_line":"    TEST_MNT_POINT \u003d os.path.join(TEST_MNT_POINT_BASE, TEST_MNT_HASH)"},{"line_number":67,"context_line":"    TEST_FILE_NAME \u003d \u0027test.txt\u0027"},{"line_number":68,"context_line":"    TEST_SHARES_CONFIG_FILE \u003d \u0027/etc/cinder/test-shares.conf\u0027"},{"line_number":69,"context_line":"    TEST_TMP_FILE \u003d \u0027/tmp/tempfile\u0027"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_4a34a3ac","line":66,"updated":"2018-07-02 18:02:36.000000000","message":"Do these tests create something in \u0027/mnt\u0027? if yes, we should refactor them to avoid it","commit_id":"2dace072fb2b4fe6582dd1d0bed5a5b4afd80c16"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"ea23dd91a687310a2f3a03b9bbaef32db62411e3","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    TEST_SIZE_IN_GB \u003d 1"},{"line_number":64,"context_line":"    TEST_MNT_HASH \u003d \"1331538734b757ed52d0e18c0a7210cd\""},{"line_number":65,"context_line":"    TEST_MNT_POINT_BASE \u003d \u0027/mnt\u0027"},{"line_number":66,"context_line":"    TEST_MNT_POINT \u003d os.path.join(TEST_MNT_POINT_BASE, TEST_MNT_HASH)"},{"line_number":67,"context_line":"    TEST_FILE_NAME \u003d \u0027test.txt\u0027"},{"line_number":68,"context_line":"    TEST_SHARES_CONFIG_FILE \u003d \u0027/etc/cinder/test-shares.conf\u0027"},{"line_number":69,"context_line":"    TEST_TMP_FILE \u003d \u0027/tmp/tempfile\u0027"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_f2d0fcca","line":66,"in_reply_to":"5f7c97a3_4a34a3ac","updated":"2018-07-03 08:50:30.000000000","message":"No, they don\u0027t.\nBut i changed the path to be clear this is only a fake path for anyone reading this.","commit_id":"2dace072fb2b4fe6582dd1d0bed5a5b4afd80c16"}],"cinder/volume/drivers/quobyte.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"5d6c7d6bcfd215d1fee95968d5e2457749418f30","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            volume, path)"},{"line_number":164,"context_line":"        # if the last element resides in the cache snip it off, as the RemoteFS"},{"line_number":165,"context_line":"        # driver cannot handle it."},{"line_number":166,"context_line":"        if raw_chain.__len__() \u003e 0:"},{"line_number":167,"context_line":"            if (self.QUOBYTE_VOLUME_SNAP_CACHE_DIR_NAME in"},{"line_number":168,"context_line":"                    raw_chain[-1][\u0027filename\u0027]):"},{"line_number":169,"context_line":"                del raw_chain[-1]"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f4e5783_0d2019b0","line":166,"updated":"2017-10-11 15:54:34.000000000","message":"What type is raw_chain? Can we use just \u0027len(raw_chain)?","commit_id":"9e6f3d0a18040e2b896cee7e9711cad5e3e1f314"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"0551e173da8273b717f121b2e91dcb9a8f36a9a4","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            volume, path)"},{"line_number":164,"context_line":"        # if the last element resides in the cache snip it off, as the RemoteFS"},{"line_number":165,"context_line":"        # driver cannot handle it."},{"line_number":166,"context_line":"        if raw_chain.__len__() \u003e 0:"},{"line_number":167,"context_line":"            if (self.QUOBYTE_VOLUME_SNAP_CACHE_DIR_NAME in"},{"line_number":168,"context_line":"                    raw_chain[-1][\u0027filename\u0027]):"},{"line_number":169,"context_line":"                del raw_chain[-1]"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f4e5783_24eabeab","line":166,"in_reply_to":"5f4e5783_0d2019b0","updated":"2017-10-12 06:22:33.000000000","message":"raw_chain is the full backing chain, possibly including the cache file for an overlay based volume. Raw as in prior to refinement.\nlen() should work fine, i\u0027ll update that.","commit_id":"9e6f3d0a18040e2b896cee7e9711cad5e3e1f314"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a06b31763b4f2f732875da2ec9f4c93d2895a835","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            else:"},{"line_number":201,"context_line":"                valid_ext \u003d \u0027\u0027"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"            backing_file_template \u003d \\"},{"line_number":204,"context_line":"                \"(%(basedir)s/[0-9a-f]+/)?(%\" \\"},{"line_number":205,"context_line":"                \"(volname)s(.(tmp-snap-)?[0-9a-f-]+)?%(valid_ext)s|\" \\"},{"line_number":206,"context_line":"                \"%(cache)s/(tmp-snap-)?[0-9a-f-]+(.(child-|.parent-)\" \\"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f4b6375_fde4a43d","line":203,"range":{"start_line":203,"start_character":36,"end_line":203,"end_character":37},"updated":"2017-10-26 21:13:29.000000000","message":"We\u0027ve made an effort to avoid using \\ in non-test code for multi-line statements. Please wrap this in () to span multiple lines.","commit_id":"3e780839b706281860550f3592752c72534ca32c"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"f6538ba0e53d78cba51b1f9f7628ad59a96f58e7","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            else:"},{"line_number":201,"context_line":"                valid_ext \u003d \u0027\u0027"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"            backing_file_template \u003d \\"},{"line_number":204,"context_line":"                \"(%(basedir)s/[0-9a-f]+/)?(%\" \\"},{"line_number":205,"context_line":"                \"(volname)s(.(tmp-snap-)?[0-9a-f-]+)?%(valid_ext)s|\" \\"},{"line_number":206,"context_line":"                \"%(cache)s/(tmp-snap-)?[0-9a-f-]+(.(child-|.parent-)\" \\"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f4b6375_26086bd7","line":203,"range":{"start_line":203,"start_character":36,"end_line":203,"end_character":37},"in_reply_to":"3f4b6375_fde4a43d","updated":"2017-11-01 14:02:06.000000000","message":"Yes and in know about that. However this regex block is copied from the remotefs.py class and as it\u0027s 90% the same block with only small extensions i decided to keep the formatting. The idea was to make this recognizable for somebody reading both sources.\n\nI can reformat this if you want it just wanted to bring up my motivation for not doing so in the first place. Pls drop me a further note if you still want it reformatted.","commit_id":"3e780839b706281860550f3592752c72534ca32c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a06b31763b4f2f732875da2ec9f4c93d2895a835","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        cache_file_name \u003d os.path.basename(cache_file_path)"},{"line_number":240,"context_line":"        # delete the reference"},{"line_number":241,"context_line":"        LOG.debug(\"Deleting cache reference %(ref)s\","},{"line_number":242,"context_line":"                  {\"ref\": cache_file_path + ref_suffix})"},{"line_number":243,"context_line":"        fileutils.delete_if_exists(os.path.join(cache_path,"},{"line_number":244,"context_line":"                                                cache_file_name + ref_suffix))"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f4b6375_3d4d9c3d","line":242,"range":{"start_line":242,"start_character":42,"end_line":242,"end_character":43},"updated":"2017-10-26 21:13:29.000000000","message":"Not a fan of doing string concatenation to do string formatting. Why not just use two %s positions in the log string?","commit_id":"3e780839b706281860550f3592752c72534ca32c"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"f6538ba0e53d78cba51b1f9f7628ad59a96f58e7","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        cache_file_name \u003d os.path.basename(cache_file_path)"},{"line_number":240,"context_line":"        # delete the reference"},{"line_number":241,"context_line":"        LOG.debug(\"Deleting cache reference %(ref)s\","},{"line_number":242,"context_line":"                  {\"ref\": cache_file_path + ref_suffix})"},{"line_number":243,"context_line":"        fileutils.delete_if_exists(os.path.join(cache_path,"},{"line_number":244,"context_line":"                                                cache_file_name + ref_suffix))"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f4b6375_c6c51790","line":242,"range":{"start_line":242,"start_character":42,"end_line":242,"end_character":43},"in_reply_to":"3f4b6375_3d4d9c3d","updated":"2017-11-01 14:02:06.000000000","message":"Done","commit_id":"3e780839b706281860550f3592752c72534ca32c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a06b31763b4f2f732875da2ec9f4c93d2895a835","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                self.configuration.quobyte_overlay_volumes \u003d False"},{"line_number":272,"context_line":"                LOG.warning(\"Configuration of quobyte_qcow2_volumes and \""},{"line_number":273,"context_line":"                            \"quobyte_volume_from_snapshot_cache is \""},{"line_number":274,"context_line":"                            \"incompatible with\""},{"line_number":275,"context_line":"                            \"quobyte_overlay_volumes\u003dTrue. \""},{"line_number":276,"context_line":"                            \"quobyte_overlay_volumes\""},{"line_number":277,"context_line":"                            \"setting will be ignored.\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f4b6375_1d48a02a","line":274,"range":{"start_line":274,"start_character":46,"end_line":274,"end_character":47},"updated":"2017-10-26 21:13:29.000000000","message":"Missing trailing space.","commit_id":"3e780839b706281860550f3592752c72534ca32c"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"f6538ba0e53d78cba51b1f9f7628ad59a96f58e7","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                self.configuration.quobyte_overlay_volumes \u003d False"},{"line_number":272,"context_line":"                LOG.warning(\"Configuration of quobyte_qcow2_volumes and \""},{"line_number":273,"context_line":"                            \"quobyte_volume_from_snapshot_cache is \""},{"line_number":274,"context_line":"                            \"incompatible with\""},{"line_number":275,"context_line":"                            \"quobyte_overlay_volumes\u003dTrue. \""},{"line_number":276,"context_line":"                            \"quobyte_overlay_volumes\""},{"line_number":277,"context_line":"                            \"setting will be ignored.\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f4b6375_c6975790","line":274,"range":{"start_line":274,"start_character":46,"end_line":274,"end_character":47},"in_reply_to":"3f4b6375_1d48a02a","updated":"2017-11-01 14:02:06.000000000","message":"Done","commit_id":"3e780839b706281860550f3592752c72534ca32c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a06b31763b4f2f732875da2ec9f4c93d2895a835","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                            \"quobyte_volume_from_snapshot_cache is \""},{"line_number":274,"context_line":"                            \"incompatible with\""},{"line_number":275,"context_line":"                            \"quobyte_overlay_volumes\u003dTrue. \""},{"line_number":276,"context_line":"                            \"quobyte_overlay_volumes\""},{"line_number":277,"context_line":"                            \"setting will be ignored.\")"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def check_for_setup_error(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f4b6375_fd5264dd","line":276,"range":{"start_line":276,"start_character":52,"end_line":276,"end_character":53},"updated":"2017-10-26 21:13:29.000000000","message":"And here.","commit_id":"3e780839b706281860550f3592752c72534ca32c"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"f6538ba0e53d78cba51b1f9f7628ad59a96f58e7","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                            \"quobyte_volume_from_snapshot_cache is \""},{"line_number":274,"context_line":"                            \"incompatible with\""},{"line_number":275,"context_line":"                            \"quobyte_overlay_volumes\u003dTrue. \""},{"line_number":276,"context_line":"                            \"quobyte_overlay_volumes\""},{"line_number":277,"context_line":"                            \"setting will be ignored.\")"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def check_for_setup_error(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f4b6375_067e8f6a","line":276,"range":{"start_line":276,"start_character":52,"end_line":276,"end_character":53},"in_reply_to":"3f4b6375_fd5264dd","updated":"2017-11-01 14:02:06.000000000","message":"Done","commit_id":"3e780839b706281860550f3592752c72534ca32c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"e79bfc74fec3861b10ccda0642af19db63b7923e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from oslo_config import cfg"},{"line_number":25,"context_line":"from oslo_log import log as logging"},{"line_number":26,"context_line":"from oslo_utils import fileutils"},{"line_number":27,"context_line":"from oslo_utils.fnmatch import fnmatch"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from cinder import compute"},{"line_number":30,"context_line":"from cinder import coordination"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_13a32fa0","line":27,"updated":"2017-11-03 10:33:52.000000000","message":"According to the OpenStack hacking rules [1], please import modules, not objects\n\n[1] https://docs.openstack.org/hacking/latest/user/hacking.html#imports","commit_id":"c4a03e456bd2478d26519c16bc4885c37a825e8a"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"84b3d058ebcbbbea86552f48775f03430088a2ae","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from oslo_config import cfg"},{"line_number":25,"context_line":"from oslo_log import log as logging"},{"line_number":26,"context_line":"from oslo_utils import fileutils"},{"line_number":27,"context_line":"from oslo_utils.fnmatch import fnmatch"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from cinder import compute"},{"line_number":30,"context_line":"from cinder import coordination"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_53b40782","line":27,"in_reply_to":"3f4b6375_13a32fa0","updated":"2017-11-03 10:49:01.000000000","message":"Yes, did not adhere to that, sry \u0026 done","commit_id":"c4a03e456bd2478d26519c16bc4885c37a825e8a"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"e79bfc74fec3861b10ccda0642af19db63b7923e","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            volume, path)"},{"line_number":164,"context_line":"        # if the last element resides in the cache snip it off, as the RemoteFS"},{"line_number":165,"context_line":"        # driver cannot handle it."},{"line_number":166,"context_line":"        if len(raw_chain) \u003e 0:"},{"line_number":167,"context_line":"            if (self.QUOBYTE_VOLUME_SNAP_CACHE_DIR_NAME in"},{"line_number":168,"context_line":"                    raw_chain[-1][\u0027filename\u0027]):"},{"line_number":169,"context_line":"                del raw_chain[-1]"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_73bdc3b5","line":166,"updated":"2017-11-03 10:33:52.000000000","message":"It could be simplified to:\nif len(row_chain):","commit_id":"c4a03e456bd2478d26519c16bc4885c37a825e8a"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"84b3d058ebcbbbea86552f48775f03430088a2ae","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            volume, path)"},{"line_number":164,"context_line":"        # if the last element resides in the cache snip it off, as the RemoteFS"},{"line_number":165,"context_line":"        # driver cannot handle it."},{"line_number":166,"context_line":"        if len(raw_chain) \u003e 0:"},{"line_number":167,"context_line":"            if (self.QUOBYTE_VOLUME_SNAP_CACHE_DIR_NAME in"},{"line_number":168,"context_line":"                    raw_chain[-1][\u0027filename\u0027]):"},{"line_number":169,"context_line":"                del raw_chain[-1]"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_b38b3bbe","line":166,"in_reply_to":"3f4b6375_73bdc3b5","updated":"2017-11-03 10:49:01.000000000","message":"Done","commit_id":"c4a03e456bd2478d26519c16bc4885c37a825e8a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0e2e9b2e4ebd6ce9087d9ebe40c4f9c901ba0fef","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            else:"},{"line_number":202,"context_line":"                valid_ext \u003d \u0027\u0027"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"            backing_file_template \u003d \\"},{"line_number":205,"context_line":"                \"(%(basedir)s/[0-9a-f]+/)?(%\" \\"},{"line_number":206,"context_line":"                \"(volname)s(.(tmp-snap-)?[0-9a-f-]+)?%(valid_ext)s|\" \\"},{"line_number":207,"context_line":"                \"%(cache)s/(tmp-snap-)?[0-9a-f-]+(.(child-|.parent-)\" \\"}],"source_content_type":"text/x-python","patch_set":19,"id":"df87a7cf_23f4325b","line":204,"range":{"start_line":204,"start_character":36,"end_line":204,"end_character":37},"updated":"2017-12-13 20:42:42.000000000","message":"We\u0027ve made an effort to enforce not using \\ for spanning multiple lines. Please wrap this in () instead.","commit_id":"0c936c94d1b5adc07eb1f829429197d83cea3487"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"3f01679b9cf0d3d6e701dba874df11fed49a878b","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            else:"},{"line_number":202,"context_line":"                valid_ext \u003d \u0027\u0027"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"            backing_file_template \u003d \\"},{"line_number":205,"context_line":"                \"(%(basedir)s/[0-9a-f]+/)?(%\" \\"},{"line_number":206,"context_line":"                \"(volname)s(.(tmp-snap-)?[0-9a-f-]+)?%(valid_ext)s|\" \\"},{"line_number":207,"context_line":"                \"%(cache)s/(tmp-snap-)?[0-9a-f-]+(.(child-|.parent-)\" \\"}],"source_content_type":"text/x-python","patch_set":19,"id":"df87a7cf_eb7293e3","line":204,"range":{"start_line":204,"start_character":36,"end_line":204,"end_character":37},"in_reply_to":"df87a7cf_23f4325b","updated":"2017-12-14 10:24:37.000000000","message":"Done","commit_id":"0c936c94d1b5adc07eb1f829429197d83cea3487"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"e18d384ffaea91cc0c58b87d88ff5167eec05072","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            volume, path)"},{"line_number":170,"context_line":"        # if the last element resides in the cache snip it off, as the RemoteFS"},{"line_number":171,"context_line":"        # driver cannot handle it."},{"line_number":172,"context_line":"        if len(raw_chain):"},{"line_number":173,"context_line":"            if (self.QUOBYTE_VOLUME_SNAP_CACHE_DIR_NAME in"},{"line_number":174,"context_line":"                    raw_chain[-1][\u0027filename\u0027]):"},{"line_number":175,"context_line":"                del raw_chain[-1]"}],"source_content_type":"text/x-python","patch_set":27,"id":"1f9dbf25_4c2414c7","line":172,"updated":"2018-02-28 15:35:49.000000000","message":"nit: we can leave only one \u0027if\u0027 statement here:\nif len(war_chain) and...","commit_id":"733a9ef36b3f86332baa3c9b1dbe11273ae081dc"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"02961c4976fbdc085fbbd2829f6cb252cb5b1640","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            volume, path)"},{"line_number":170,"context_line":"        # if the last element resides in the cache snip it off, as the RemoteFS"},{"line_number":171,"context_line":"        # driver cannot handle it."},{"line_number":172,"context_line":"        if len(raw_chain):"},{"line_number":173,"context_line":"            if (self.QUOBYTE_VOLUME_SNAP_CACHE_DIR_NAME in"},{"line_number":174,"context_line":"                    raw_chain[-1][\u0027filename\u0027]):"},{"line_number":175,"context_line":"                del raw_chain[-1]"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_3b60dcce","line":172,"in_reply_to":"1f9dbf25_4c2414c7","updated":"2018-03-27 13:47:30.000000000","message":"Done","commit_id":"733a9ef36b3f86332baa3c9b1dbe11273ae081dc"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"4c02d5899948cafeb2e5ad1fca2a149f7f682b27","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        return path_to_disk"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def _qemu_img_info_base(self, path, volume_name, basedir,"},{"line_number":187,"context_line":"                            force_share\u003dFalse,"},{"line_number":188,"context_line":"                            run_as_root\u003dFalse):"},{"line_number":189,"context_line":"        \"\"\"Sanitize image_utils\u0027 qemu_img_info."}],"source_content_type":"text/x-python","patch_set":27,"id":"df7087c5_a06fb7fa","line":186,"updated":"2018-03-20 19:14:34.000000000","message":"I don\u0027t think we should duplicate this code, since this method is a vital security check.\n\nIt would be better to refactor the code from remotefs into image_utils and let it take parameters for backing_file_template.\n\nMaybe create a _qemu_img_info_remotefs() and _qemu_img_info_quobyte() that just both call a _qemu_img_info_base(), passing in the required backing_file_template?","commit_id":"733a9ef36b3f86332baa3c9b1dbe11273ae081dc"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"21f514aba0763f80d367162f18913e595d879b79","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        return path_to_disk"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def _qemu_img_info_base(self, path, volume_name, basedir,"},{"line_number":187,"context_line":"                            force_share\u003dFalse,"},{"line_number":188,"context_line":"                            run_as_root\u003dFalse):"},{"line_number":189,"context_line":"        \"\"\"Sanitize image_utils\u0027 qemu_img_info."}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_74505ad5","line":186,"in_reply_to":"bf659307_f5032841","updated":"2018-03-28 10:25:37.000000000","message":"Updated cl is available.","commit_id":"733a9ef36b3f86332baa3c9b1dbe11273ae081dc"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"02961c4976fbdc085fbbd2829f6cb252cb5b1640","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        return path_to_disk"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def _qemu_img_info_base(self, path, volume_name, basedir,"},{"line_number":187,"context_line":"                            force_share\u003dFalse,"},{"line_number":188,"context_line":"                            run_as_root\u003dFalse):"},{"line_number":189,"context_line":"        \"\"\"Sanitize image_utils\u0027 qemu_img_info."}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_f5032841","line":186,"in_reply_to":"df7087c5_a06fb7fa","updated":"2018-03-27 13:47:30.000000000","message":"I\u0027m adding a string.Template based parameter to this method in remotefs that optionally allows to replace the default backing file regex with a template provided per call.\nafaics this is only used in the remotefs and derived drivers, thus i\u0027d keep this in remotefs.py, or not?","commit_id":"733a9ef36b3f86332baa3c9b1dbe11273ae081dc"}],"cinder/volume/drivers/remotefs.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"be7d643de0c606cd9d33ce636c0addd285e8eca4","unresolved":false,"context_lines":[{"line_number":23,"context_line":"import os"},{"line_number":24,"context_line":"import re"},{"line_number":25,"context_line":"import shutil"},{"line_number":26,"context_line":"from string import Template"},{"line_number":27,"context_line":"import tempfile"},{"line_number":28,"context_line":"import time"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_0a0c6bea","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":27},"updated":"2018-07-02 18:02:36.000000000","message":"According to the Hacking rules [1], please import modules, not objects","commit_id":"2dace072fb2b4fe6582dd1d0bed5a5b4afd80c16"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"ea23dd91a687310a2f3a03b9bbaef32db62411e3","unresolved":false,"context_lines":[{"line_number":23,"context_line":"import os"},{"line_number":24,"context_line":"import re"},{"line_number":25,"context_line":"import shutil"},{"line_number":26,"context_line":"from string import Template"},{"line_number":27,"context_line":"import tempfile"},{"line_number":28,"context_line":"import time"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_b275a435","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":27},"in_reply_to":"5f7c97a3_0a0c6bea","updated":"2018-07-03 08:50:30.000000000","message":"Done","commit_id":"2dace072fb2b4fe6582dd1d0bed5a5b4afd80c16"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1b53da785386fea35716fd59609f31fecb35add8","unresolved":false,"context_lines":[{"line_number":141,"context_line":"class BackingFileTemplate(string.Template):"},{"line_number":142,"context_line":"    \"\"\"Custom Template for substitutions in backing files regex strings"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        Changes the default delimiter from \u0027$\u0027 to \u0027#\u0027 in order to prevent"},{"line_number":145,"context_line":"        clashing with the the regex end of line marker \u0027$\u0027."},{"line_number":146,"context_line":"    \"\"\""},{"line_number":147,"context_line":"    delimiter \u003d \u0027#\u0027"}],"source_content_type":"text/x-python","patch_set":29,"id":"3f79a3b5_f1dc7b47","line":144,"range":{"start_line":144,"start_character":5,"end_line":144,"end_character":8},"updated":"2018-08-21 21:31:44.000000000","message":"Extra leading spaces.","commit_id":"0bf81e69d9c7326bb75522ade7f84ebe5a080c3a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1b53da785386fea35716fd59609f31fecb35add8","unresolved":false,"context_lines":[{"line_number":767,"context_line":"        :param basedir: Path to backing files directory"},{"line_number":768,"context_line":"        :param ext_bf_template: Alt. string.Template for allowed backing files"},{"line_number":769,"context_line":"        :type object: BackingFileTemplate"},{"line_number":770,"context_line":"        :param force_share: Wether to force fetching img info for images in use"},{"line_number":771,"context_line":"        :param run_as_root: Wether to run with privileged permissions or not"},{"line_number":772,"context_line":"        \"\"\""},{"line_number":773,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"3f79a3b5_91ebc7da","line":770,"range":{"start_line":770,"start_character":28,"end_line":770,"end_character":34},"updated":"2018-08-21 21:31:44.000000000","message":"Whether","commit_id":"0bf81e69d9c7326bb75522ade7f84ebe5a080c3a"}],"releasenotes/notes/qb-overlay-from-snap-cache-dc102acb4820e368.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a06b31763b4f2f732875da2ec9f4c93d2895a835","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds the new option quobyte_overlay_volumes that allows to create"},{"line_number":5,"context_line":"    volumes from snapshots as overlay files based on the volume from"},{"line_number":6,"context_line":"    snapshot cache. This significantly speeds up the creation of"},{"line_number":7,"context_line":"    volumes from large snapshots."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3f4b6375_1d71c076","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":8},"updated":"2017-10-26 21:13:29.000000000","message":"Added","commit_id":"3e780839b706281860550f3592752c72534ca32c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a06b31763b4f2f732875da2ec9f4c93d2895a835","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds the new option quobyte_overlay_volumes that allows to create"},{"line_number":5,"context_line":"    volumes from snapshots as overlay files based on the volume from"},{"line_number":6,"context_line":"    snapshot cache. This significantly speeds up the creation of"},{"line_number":7,"context_line":"    volumes from large snapshots."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3f4b6375_fd6b8481","line":4,"range":{"start_line":4,"start_character":24,"end_line":4,"end_character":47},"updated":"2017-10-26 21:13:29.000000000","message":"Format config option with ``","commit_id":"3e780839b706281860550f3592752c72534ca32c"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"f6538ba0e53d78cba51b1f9f7628ad59a96f58e7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds the new option quobyte_overlay_volumes that allows to create"},{"line_number":5,"context_line":"    volumes from snapshots as overlay files based on the volume from"},{"line_number":6,"context_line":"    snapshot cache. This significantly speeds up the creation of"},{"line_number":7,"context_line":"    volumes from large snapshots."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3f4b6375_e6dff337","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":8},"in_reply_to":"3f4b6375_1d71c076","updated":"2017-11-01 14:02:06.000000000","message":"Done","commit_id":"3e780839b706281860550f3592752c72534ca32c"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"f6538ba0e53d78cba51b1f9f7628ad59a96f58e7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds the new option quobyte_overlay_volumes that allows to create"},{"line_number":5,"context_line":"    volumes from snapshots as overlay files based on the volume from"},{"line_number":6,"context_line":"    snapshot cache. This significantly speeds up the creation of"},{"line_number":7,"context_line":"    volumes from large snapshots."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3f4b6375_c6e63717","line":4,"range":{"start_line":4,"start_character":24,"end_line":4,"end_character":47},"in_reply_to":"3f4b6375_fd6b8481","updated":"2017-11-01 14:02:06.000000000","message":"Done","commit_id":"3e780839b706281860550f3592752c72534ca32c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0e2e9b2e4ebd6ce9087d9ebe40c4f9c901ba0fef","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Added the new option ``quobyte_overlay_volumes`` that allows to create"},{"line_number":5,"context_line":"    volumes from snapshots as overlay files based on the volume from"},{"line_number":6,"context_line":"    snapshot cache. This significantly speeds up the creation of"},{"line_number":7,"context_line":"    volumes from large snapshots."}],"source_content_type":"text/x-yaml","patch_set":19,"id":"df87a7cf_c39d460b","line":7,"updated":"2017-12-13 20:42:42.000000000","message":"Even though the config option name makes this somewhat obvious, this should state it is for the Quobyte driver.","commit_id":"0c936c94d1b5adc07eb1f829429197d83cea3487"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"3f01679b9cf0d3d6e701dba874df11fed49a878b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Added the new option ``quobyte_overlay_volumes`` that allows to create"},{"line_number":5,"context_line":"    volumes from snapshots as overlay files based on the volume from"},{"line_number":6,"context_line":"    snapshot cache. This significantly speeds up the creation of"},{"line_number":7,"context_line":"    volumes from large snapshots."}],"source_content_type":"text/x-yaml","patch_set":19,"id":"df87a7cf_4e270db8","line":7,"in_reply_to":"df87a7cf_c39d460b","updated":"2017-12-14 10:24:37.000000000","message":"Done","commit_id":"0c936c94d1b5adc07eb1f829429197d83cea3487"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ae8a923cdc35fc6559b6024e50cf451013c32d3","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added a new option ``quobyte_overlay_volumes`` for the Quobyte"},{"line_number":5,"context_line":"    volume driver. This option activates internal snapshots who allow"},{"line_number":6,"context_line":"    to create volumes from snapshots as overlay files based on the"},{"line_number":7,"context_line":"    volume from snapshot cache. This significantly speeds up the"},{"line_number":8,"context_line":"    creation of volumes from large snapshots."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"df87a7cf_572c7d98","line":5,"range":{"start_line":5,"start_character":60,"end_line":5,"end_character":69},"updated":"2017-12-14 15:38:12.000000000","message":"which allows?","commit_id":"d0fed67f0347ca32871ca04363dc7d3891635c7b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1b53da785386fea35716fd59609f31fecb35add8","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added a new option ``quobyte_overlay_volumes`` for the Quobyte"},{"line_number":5,"context_line":"    volume driver. This option activates internal snapshots who allow"},{"line_number":6,"context_line":"    to create volumes from snapshots as overlay files based on the"},{"line_number":7,"context_line":"    volume from snapshot cache. This significantly speeds up the"},{"line_number":8,"context_line":"    creation of volumes from large snapshots."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"3f79a3b5_31bc33db","line":5,"range":{"start_line":5,"start_character":60,"end_line":5,"end_character":63},"updated":"2018-08-21 21:31:44.000000000","message":"which","commit_id":"0bf81e69d9c7326bb75522ade7f84ebe5a080c3a"}]}
