All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: QEMU Developers <qemu-devel@nongnu.org>,
	Qemu-block <qemu-block@nongnu.org>,
	mreitz@redhat.com
Subject: Re: [PULL 00/64] Block layer patches
Date: Tue, 8 Sep 2020 09:01:26 +0200	[thread overview]
Message-ID: <20200908070126.GA8175@linux.fritz.box> (raw)
In-Reply-To: <CAFEAcA_woBi7gMG9vK7heTwc-uCee8q3O44Mq3icHvCk2bYNNg@mail.gmail.com>

Am 07.09.2020 um 22:22 hat Peter Maydell geschrieben:
> On Mon, 7 Sep 2020 at 12:09, Kevin Wolf <kwolf@redhat.com> wrote:
> >
> > The following changes since commit 7c37270b3fbe3d034ba80e488761461676e21eb4:
> >
> >   Merge remote-tracking branch 'remotes/kraxel/tags/ui-20200904-pull-request' into staging (2020-09-06 16:23:55 +0100)
> >
> > are available in the Git repository at:
> >
> >   git://repo.or.cz/qemu/kevin.git tags/for-upstream
> >
> > for you to fetch changes up to 4cc0ec9b1b8830f7d1fcf5dfded19ef070f98eaa:
> >
> >   block/nvme: Pair doorbell registers (2020-09-07 12:47:57 +0200)
> >
> > ----------------------------------------------------------------
> > Block layer patches:
> >
> > - qemu-img create: Fail gracefully when backing file is an empty string
> > - Fixes related to filter block nodes ("Deal with filters" series)
> > - block/nvme: Various cleanups required to use multiple queues
> > - block/nvme: Use NvmeBar structure from "block/nvme.h"
> > - file-win32: Fix "locking" option
> > - iotests: Allow running from different directory
> 
> Fails in make check on iotests 040 and/or 041, various hosts:
> 
> s390x linux:
> 
>   TEST    iotest-qcow2: 041 [fail]
> QEMU          --
> "/home/ubuntu/qemu/build/all/tests/qemu-iotests/../../qemu-system-s390x"
> -nodefaults -display none -accel qtest
> QEMU_IMG      -- "/home/ubuntu/qemu/build/all/tests/qemu-iotests/../../qemu-img"
> QEMU_IO       --
> "/home/ubuntu/qemu/build/all/tests/qemu-iotests/../../qemu-io"
> --cache writeback --aio threads -f qcow2
> QEMU_NBD      -- "/home/ubuntu/qemu/build/all/tests/qemu-iotests/../../qemu-nbd"
> IMGFMT        -- qcow2 (compat=1.1)
> IMGPROTO      -- file
> PLATFORM      -- Linux/s390x qemu01 4.15.0-72-generic
> TEST_DIR      -- /home/ubuntu/qemu/build/all/tests/qemu-iotests/scratch
> SOCK_DIR      -- /tmp/tmp.5Tpl6u2SCo
> SOCKET_SCM_HELPER --
> /home/ubuntu/qemu/build/all/tests/qemu-iotests/socket_scm_helper
> 
> --- /home/ubuntu/qemu/tests/qemu-iotests/041.out        2020-09-07
> 14:29:45.468466636 -0400
> +++ /home/ubuntu/qemu/build/all/tests/qemu-iotests/041.out.bad
> 2020-09-07 14:43:41.494989911 -0400
> @@ -1,5 +1,29 @@
> -...........................................................................................................
> +.FF........................................................................................................
> +======================================================================
> +FAIL: test_explicit_mirror_filter (__main__.TestFilters)
> +----------------------------------------------------------------------
> +Traceback (most recent call last):
> +  File "041", line 1415, in test_explicit_mirror_filter
> +    self.assert_qmp(result, 'return', {})
> +  File "/home/ubuntu/qemu/tests/qemu-iotests/iotests.py", line 888,
> in assert_qmp
> +    result = self.dictpath(d, path)
> +  File "/home/ubuntu/qemu/tests/qemu-iotests/iotests.py", line 862, in dictpath
> +    self.fail(f'failed path traversal for "{path}" in "{d}"')
> +AssertionError: failed path traversal for "return" in "{'error':
> {'class': 'GenericError', 'desc': "Device 'virtio-blk-ccw' can't go on
> PCI bus"}}"

Max, any specific reason you specified the bus in device_add?

This seems to fix it for me. Do you agree with the change?

diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041
index cdbef3ba20..203ed58868 100755
--- a/tests/qemu-iotests/041
+++ b/tests/qemu-iotests/041
@@ -1376,7 +1376,6 @@ class TestFilters(iotests.QMPTestCase):
         result = self.vm.qmp('device_add',
                              driver='virtio-blk',
                              id='virtio',
-                             bus='pci.0',
                              drive='source')
         self.assert_qmp(result, 'return', {})

@@ -1410,7 +1409,6 @@ class TestFilters(iotests.QMPTestCase):
         result = self.vm.qmp('device_add',
                              driver='virtio-blk',
                              id='virtio',
-                             bus='pci.0',
                              drive='source')
         self.assert_qmp(result, 'return', {})


> +======================================================================
> +FAIL: test_implicit_mirror_filter (__main__.TestFilters)
> +----------------------------------------------------------------------
> +Traceback (most recent call last):
> +  File "041", line 1381, in test_implicit_mirror_filter
> +    self.assert_qmp(result, 'return', {})
> +  File "/home/ubuntu/qemu/tests/qemu-iotests/iotests.py", line 888,
> in assert_qmp
> +    result = self.dictpath(d, path)
> +  File "/home/ubuntu/qemu/tests/qemu-iotests/iotests.py", line 862, in dictpath
> +    self.fail(f'failed path traversal for "{path}" in "{d}"')
> +AssertionError: failed path traversal for "return" in "{'error':
> {'class': 'GenericError', 'desc': "Device 'virtio-blk-ccw' can't go on
> PCI bus"}}"
> +
>  ----------------------------------------------------------------------
>  Ran 107 tests
> 
> -OK
> +FAILED (failures=2)
> 
> 
> freebsd:
> 
>   TEST    iotest-qcow2: 040 [fail]
> QEMU          --
> "/usr/home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/../../qemu-system-aarch64"
> -nodefaults -display none -accel qtest -machine virt
> QEMU_IMG      --
> "/usr/home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/../../qemu-img"
> QEMU_IO       --
> "/usr/home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/../../qemu-io"
>  --cache writeback --aio threads -f qcow2
> QEMU_NBD      --
> "/usr/home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/../../qemu-nbd"
> IMGFMT        -- qcow2 (compat=1.1)
> IMGPROTO      -- file
> PLATFORM      -- FreeBSD/amd64 freebsd 12.1-RELEASE
> TEST_DIR      -- /home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/scratch
> SOCK_DIR      -- /tmp/tmp.gaJ11NA1
> SOCKET_SCM_HELPER --
> 
> --- /home/qemu/qemu-test.6pxNB5/src/tests/qemu-iotests/040.out
> 2020-09-07 18:29:28.000000000 +0000
> +++ /home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/040.out.bad
>  2020-09-07 18:37:26.783967000 +0000
> @@ -1,5 +1,17 @@
> -.................................................................
> +....................F............................................
> +======================================================================
> +FAIL: test_filtered_active_commit_with_filter (__main__.TestCommitWithFilters)
>  ----------------------------------------------------------------------
> +Traceback (most recent call last):
> +  File "040", line 867, in test_filtered_active_commit_with_filter
> +    self.assert_qmp(result, 'return', {})
> +  File "/usr/home/qemu/qemu-test.6pxNB5/src/tests/qemu-iotests/iotests.py",
> line 888, in assert_qmp
> +    result = self.dictpath(d, path)
> +  File "/usr/home/qemu/qemu-test.6pxNB5/src/tests/qemu-iotests/iotests.py",
> line 862, in dictpath
> +    self.fail(f'failed path traversal for "{path}" in "{d}"')
> +AssertionError: failed path traversal for "return" in "{'error':
> {'class': 'GenericError', 'desc': "Bus 'pcie.0' does not support
> hotplugging"}}"

This one I don't really understand. Why "pcie.0"? Do FreeBSD hosts
default to a different machine type? The default should be the "pc"
machine type, which has pci, not pcie.

> +----------------------------------------------------------------------
>  Ran 65 tests
> 
> -OK
> +FAILED (failures=1)
>   TEST    iotest-qcow2: 041 [fail]
> QEMU          --
> "/usr/home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/../../qemu-system-aarch64"
> -nodefaults -display none -accel qtest -machine virt
> QEMU_IMG      --
> "/usr/home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/../../qemu-img"
> QEMU_IO       --
> "/usr/home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/../../qemu-io"
>  --cache writeback --aio threads -f qcow2
> QEMU_NBD      --
> "/usr/home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/../../qemu-nbd"
> IMGFMT        -- qcow2 (compat=1.1)
> IMGPROTO      -- file
> PLATFORM      -- FreeBSD/amd64 freebsd 12.1-RELEASE
> TEST_DIR      -- /home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/scratch
> SOCK_DIR      -- /tmp/tmp.gaJ11NA1
> SOCKET_SCM_HELPER --
> 
> --- /home/qemu/qemu-test.6pxNB5/src/tests/qemu-iotests/041.out
> 2020-09-07 18:29:28.000000000 +0000
> +++ /home/qemu/qemu-test.6pxNB5/build/tests/qemu-iotests/041.out.bad
>  2020-09-07 18:38:32.186227000 +0000
> @@ -1,5 +1,29 @@
> -...........................................................................................................
> +.FF........................................................................................................
> +======================================================================
> +FAIL: test_explicit_mirror_filter (__main__.TestFilters)
>  ----------------------------------------------------------------------
> +Traceback (most recent call last):
> +  File "041", line 1415, in test_explicit_mirror_filter
> +    self.assert_qmp(result, 'return', {})
> +  File "/usr/home/qemu/qemu-test.6pxNB5/src/tests/qemu-iotests/iotests.py",
> line 888, in assert_qmp
> +    result = self.dictpath(d, path)
> +  File "/usr/home/qemu/qemu-test.6pxNB5/src/tests/qemu-iotests/iotests.py",
> line 862, in dictpath
> +    self.fail(f'failed path traversal for "{path}" in "{d}"')
> +AssertionError: failed path traversal for "return" in "{'error':
> {'class': 'GenericError', 'desc': "Bus 'pci.0' not found"}}"
> +
> +======================================================================
> +FAIL: test_implicit_mirror_filter (__main__.TestFilters)
> +----------------------------------------------------------------------
> +Traceback (most recent call last):
> +  File "041", line 1381, in test_implicit_mirror_filter
> +    self.assert_qmp(result, 'return', {})
> +  File "/usr/home/qemu/qemu-test.6pxNB5/src/tests/qemu-iotests/iotests.py",
> line 888, in assert_qmp
> +    result = self.dictpath(d, path)
> +  File "/usr/home/qemu/qemu-test.6pxNB5/src/tests/qemu-iotests/iotests.py",
> line 862, in dictpath
> +    self.fail(f'failed path traversal for "{path}" in "{d}"')
> +AssertionError: failed path traversal for "return" in "{'error':
> {'class': 'GenericError', 'desc': "Bus 'pci.0' not found"}}"
> +
> +----------------------------------------------------------------------
>  Ran 107 tests

I guess this is the same problem.

> -OK
> +FAILED (failures=2)
> 
> AArch32 and AArch64 Linux:
> 
>   TEST    iotest-qcow2: 041 [fail]
> QEMU          --
> "/home/peter.maydell/qemu/build/all-a32/tests/qemu-iotests/../../qemu-system-aarch64"
> -nodefaults -disp
> lay none -accel qtest -machine virt
> QEMU_IMG      --
> "/home/peter.maydell/qemu/build/all-a32/tests/qemu-iotests/../../qemu-img"
> QEMU_IO       --
> "/home/peter.maydell/qemu/build/all-a32/tests/qemu-iotests/../../qemu-io"
>  --cache writeback --aio thre
> ads -f qcow2
> QEMU_NBD      --
> "/home/peter.maydell/qemu/build/all-a32/tests/qemu-iotests/../../qemu-nbd"
> IMGFMT        -- qcow2 (compat=1.1)
> IMGPROTO      -- file
> PLATFORM      -- Linux/aarch64 mustang-maydell 4.15.0-101-generic
> TEST_DIR      --
> /home/peter.maydell/qemu/build/all-a32/tests/qemu-iotests/scratch
> SOCK_DIR      -- /tmp/tmp.L8FBRpgYvF
> SOCKET_SCM_HELPER --
> /home/peter.maydell/qemu/build/all-a32/tests/qemu-iotests/socket_scm_helper
> 
> --- /home/peter.maydell/qemu/tests/qemu-iotests/041.out 2020-09-07
> 18:29:45.583104907 +0000
> +++ /home/peter.maydell/qemu/build/all-a32/tests/qemu-iotests/041.out.bad
>       2020-09-07 18:45:19.385149062 +0000
> @@ -1,5 +1,29 @@
> -...........................................................................................................
> +.FF........................................................................................................
> +======================================================================
> +FAIL: test_explicit_mirror_filter (__main__.TestFilters)
> +----------------------------------------------------------------------
> +Traceback (most recent call last):
> +  File "041", line 1415, in test_explicit_mirror_filter
> +    self.assert_qmp(result, 'return', {})
> +  File "/home/peter.maydell/qemu/tests/qemu-iotests/iotests.py", line
> 888, in assert_qmp
> +    result = self.dictpath(d, path)
> +  File "/home/peter.maydell/qemu/tests/qemu-iotests/iotests.py", line
> 862, in dictpath
> +    self.fail(f'failed path traversal for "{path}" in "{d}"')
> +AssertionError: failed path traversal for "return" in "{'error':
> {'class': 'GenericError', 'desc': "Bus 'pci.0' not fou
> nd"}}"
> +
> +======================================================================
> +FAIL: test_implicit_mirror_filter (__main__.TestFilters)
> +----------------------------------------------------------------------
> +Traceback (most recent call last):
> +  File "041", line 1381, in test_implicit_mirror_filter
> +    self.assert_qmp(result, 'return', {})
> +  File "/home/peter.maydell/qemu/tests/qemu-iotests/iotests.py", line
> 888, in assert_qmp
> +    result = self.dictpath(d, path)
> +  File "/home/peter.maydell/qemu/tests/qemu-iotests/iotests.py", line
> 862, in dictpath
> +    self.fail(f'failed path traversal for "{path}" in "{d}"')
> +AssertionError: failed path traversal for "return" in "{'error':
> {'class': 'GenericError', 'desc': "Bus 'pci.0' not found"}}"
> +
>  ----------------------------------------------------------------------
>  Ran 107 tests

Probably solved by removing the bus like suggested for s390x above.

Kevin



  reply	other threads:[~2020-09-08  7:02 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-07 11:08 [PULL 00/64] Block layer patches Kevin Wolf
2020-09-07 11:08 ` [PULL 01/64] block: Raise an error when backing file parameter is an empty string Kevin Wolf
2020-09-07 11:08 ` [PULL 02/64] block/nvme: Replace magic value by SCALE_MS definition Kevin Wolf
2020-09-07 11:08 ` [PULL 03/64] block/nvme: Avoid further processing if trace event not enabled Kevin Wolf
2020-09-07 11:08 ` [PULL 04/64] block/nvme: Let nvme_create_queue_pair() fail gracefully Kevin Wolf
2020-09-07 11:08 ` [PULL 05/64] block/nvme: Define INDEX macros to ease code review Kevin Wolf
2020-09-07 11:08 ` [PULL 06/64] block/nvme: Improve error message when IO queue creation failed Kevin Wolf
2020-09-07 11:08 ` [PULL 07/64] block/nvme: Use common error path in nvme_add_io_queue() Kevin Wolf
2020-09-07 11:08 ` [PULL 08/64] block/nvme: Rename local variable Kevin Wolf
2020-09-07 11:08 ` [PULL 09/64] block/nvme: Use union of NvmeIdCtrl / NvmeIdNs structures Kevin Wolf
2020-09-07 11:08 ` [PULL 10/64] block/nvme: Replace qemu_try_blockalign0 by qemu_try_blockalign/memset Kevin Wolf
2020-09-07 11:08 ` [PULL 11/64] block/nvme: Replace qemu_try_blockalign(bs) by qemu_try_memalign(pg_sz) Kevin Wolf
2020-09-07 11:08 ` [PULL 12/64] block/nvme: Simplify nvme_init_queue() arguments Kevin Wolf
2020-09-07 11:08 ` [PULL 13/64] block/nvme: Replace BDRV_POLL_WHILE by AIO_WAIT_WHILE Kevin Wolf
2020-09-07 11:08 ` [PULL 14/64] block/nvme: Simplify nvme_create_queue_pair() arguments Kevin Wolf
2020-09-07 11:08 ` [PULL 15/64] block/nvme: Extract nvme_poll_queue() Kevin Wolf
2020-09-07 11:08 ` [PULL 16/64] block/nvme: Use an array of EventNotifier Kevin Wolf
2020-09-07 11:08 ` [PULL 17/64] block: Add child access functions Kevin Wolf
2020-09-07 11:08 ` [PULL 18/64] block: Add chain helper functions Kevin Wolf
2020-09-07 11:08 ` [PULL 19/64] block: bdrv_cow_child() for bdrv_has_zero_init() Kevin Wolf
2020-09-07 11:08 ` [PULL 20/64] block: bdrv_set_backing_hd() is about bs->backing Kevin Wolf
2020-09-07 11:08 ` [PULL 21/64] block: Include filters when freezing backing chain Kevin Wolf
2020-09-07 11:08 ` [PULL 22/64] block: Drop bdrv_is_encrypted() Kevin Wolf
2020-09-07 11:08 ` [PULL 23/64] block: Add bdrv_supports_compressed_writes() Kevin Wolf
2020-09-07 11:08 ` [PULL 24/64] throttle: Support compressed writes Kevin Wolf
2020-09-07 11:08 ` [PULL 25/64] copy-on-read: " Kevin Wolf
2020-09-07 11:08 ` [PULL 26/64] block: Use bdrv_filter_(bs|child) where obvious Kevin Wolf
2020-09-07 11:08 ` [PULL 27/64] block: Use CAFs in block status functions Kevin Wolf
2020-09-07 11:09 ` [PULL 28/64] stream: Deal with filters Kevin Wolf
2020-09-07 11:09 ` [PULL 29/64] block: Use CAFs when working with backing chains Kevin Wolf
2020-09-07 11:09 ` [PULL 30/64] block: Use bdrv_cow_child() in bdrv_co_truncate() Kevin Wolf
2020-09-07 11:09 ` [PULL 31/64] block: Re-evaluate backing file handling in reopen Kevin Wolf
2020-09-07 11:09 ` [PULL 32/64] block: Flush all children in generic code Kevin Wolf
2020-09-07 11:09 ` [PULL 33/64] vmdk: Drop vmdk_co_flush() Kevin Wolf
2020-09-07 11:09 ` [PULL 34/64] block: Iterate over children in refresh_limits Kevin Wolf
2020-09-07 11:09 ` [PULL 35/64] block: Use CAFs in bdrv_refresh_filename() Kevin Wolf
2020-09-07 11:09 ` [PULL 36/64] block: Use CAF in bdrv_co_rw_vmstate() Kevin Wolf
2020-09-07 11:09 ` [PULL 37/64] block/snapshot: Fix fallback Kevin Wolf
2021-04-30 22:30   ` Peter Maydell
2021-05-03  9:40     ` Kevin Wolf
2021-05-03  9:45       ` Max Reitz
2021-05-03 10:17         ` Kevin Wolf
2020-09-07 11:09 ` [PULL 38/64] block: Use CAFs for debug breakpoints Kevin Wolf
2020-09-07 11:09 ` [PULL 39/64] block: Improve get_allocated_file_size's default Kevin Wolf
2020-09-07 11:09 ` [PULL 40/64] block/null: Implement bdrv_get_allocated_file_size Kevin Wolf
2020-09-07 11:09 ` [PULL 41/64] blockdev: Use CAF in external_snapshot_prepare() Kevin Wolf
2020-09-07 11:09 ` [PULL 42/64] block: Report data child for query-blockstats Kevin Wolf
2020-09-07 11:09 ` [PULL 43/64] block: Use child access functions for QAPI queries Kevin Wolf
2020-09-07 11:09 ` [PULL 44/64] block-copy: Use CAF to find sync=top base Kevin Wolf
2020-09-07 11:09 ` [PULL 45/64] mirror: Deal with filters Kevin Wolf
2020-09-07 11:09 ` [PULL 46/64] backup: " Kevin Wolf
2020-09-07 11:09 ` [PULL 47/64] commit: " Kevin Wolf
2020-09-07 11:09 ` [PULL 48/64] nbd: Use CAF when looking for dirty bitmap Kevin Wolf
2020-09-07 11:09 ` [PULL 49/64] qemu-img: Use child access functions Kevin Wolf
2020-09-07 11:09 ` [PULL 50/64] block: Drop backing_bs() Kevin Wolf
2020-09-07 11:09 ` [PULL 51/64] blockdev: Fix active commit choice Kevin Wolf
2020-09-07 11:09 ` [PULL 52/64] block: Inline bdrv_co_block_status_from_*() Kevin Wolf
2020-09-07 11:09 ` [PULL 53/64] block: Leave BDS.backing_{file,format} constant Kevin Wolf
2020-09-07 11:09 ` [PULL 54/64] iotests: Test that qcow2's data-file is flushed Kevin Wolf
2020-09-07 11:09 ` [PULL 55/64] iotests: Let complete_and_wait() work with commit Kevin Wolf
2020-09-07 11:09 ` [PULL 56/64] iotests: Add filter commit test cases Kevin Wolf
2020-09-07 11:09 ` [PULL 57/64] iotests: Add filter mirror " Kevin Wolf
2020-09-07 11:09 ` [PULL 58/64] iotests: Add test for commit in sub directory Kevin Wolf
2020-09-07 11:09 ` [PULL 59/64] iotests: Test committing to overridden backing Kevin Wolf
2020-09-07 11:09 ` [PULL 60/64] iotests: Allow running from different directory Kevin Wolf
2020-09-07 11:09 ` [PULL 61/64] file-win32: Fix "locking" option Kevin Wolf
2020-09-07 11:09 ` [PULL 62/64] block/nvme: Group controller registers in NVMeRegs structure Kevin Wolf
2020-09-07 11:09 ` [PULL 63/64] block/nvme: Use generic NvmeBar structure Kevin Wolf
2020-09-07 11:09 ` [PULL 64/64] block/nvme: Pair doorbell registers Kevin Wolf
2020-09-07 20:22 ` [PULL 00/64] Block layer patches Peter Maydell
2020-09-08  7:01   ` Kevin Wolf [this message]
2020-09-08  9:01     ` Max Reitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200908070126.GA8175@linux.fritz.box \
    --to=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.