qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Cc: eblake@redhat.com, kwolf@redhat.com, mreitz@redhat.com,
	jcody@redhat.com, famz@redhat.com, jsnow@redhat.com,
	pbonzini@redhat.com, marcandre.lureau@redhat.com,
	dgilbert@redhat.com, quintela@redhat.com, berrange@redhat.com,
	qemu-block@nongnu.org
Subject: [Qemu-devel] [RFC PATCH 15/56] migration: Make XBZRLE cache size unsigned in QAPI/QMP
Date: Mon,  7 Aug 2017 16:45:19 +0200	[thread overview]
Message-ID: <1502117160-24655-16-git-send-email-armbru@redhat.com> (raw)
In-Reply-To: <1502117160-24655-1-git-send-email-armbru@redhat.com>

Sizes should use QAPI type 'size' (uint64_t).  migrate-set-cache-size
parameter @value is 'int' (int64_t).  qmp_migrate_set_cache_size()
ensures it fits into size_t.  page_cache.c implicitly converts the
signed size to unsigned types (it can't quite decide whether to use
uint64_t or size_t for cache offsets, but that's not something I can
tackle now).

XBZRLECacheStats member @cache-size and query-migrate-cache-size's
result are also 'int'.

Change the migrate-set-cache-size parameter and the XBZRLECacheStats
members to 'size', fix up hmp_migrate_set_cache_size(), and tweak a
few variable types to reduce implicit conversions.

migrate-set-cache-size now accepts size values between 2^63 and
2^64-1.  It accepts negative values as before, because that's how the
QObject input visitor works for backward compatibility.

So does HMP's migrate_set_cache_size.

query-migrate and query-migrate-cache-size now report cache sizes
above 2^63-1 correctly instead of their (negative) two's complement.

So does HMP's "info migrate_cache_size".  HMP's "info migrate" already
reported the cache size correctly, because it printed the signed
integer with PRIu32.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 hmp.c                  |  4 ++--
 migration/migration.c  | 10 +++++-----
 migration/migration.h  |  4 ++--
 migration/page_cache.c | 20 +++++++++-----------
 migration/page_cache.h |  2 +-
 migration/ram.c        |  5 ++---
 migration/ram.h        |  2 +-
 qapi-schema.json       |  6 +++---
 8 files changed, 25 insertions(+), 28 deletions(-)

diff --git a/hmp.c b/hmp.c
index 1932a11..184fb8b 100644
--- a/hmp.c
+++ b/hmp.c
@@ -344,7 +344,7 @@ void hmp_info_migrate_parameters(Monitor *mon, const QDict *qdict)
 
 void hmp_info_migrate_cache_size(Monitor *mon, const QDict *qdict)
 {
-    monitor_printf(mon, "xbzrel cache size: %" PRId64 " kbytes\n",
+    monitor_printf(mon, "xbzrel cache size: %" PRIu64 " kbytes\n",
                    qmp_query_migrate_cache_size(NULL) >> 10);
 }
 
@@ -1504,7 +1504,7 @@ void hmp_migrate_set_downtime(Monitor *mon, const QDict *qdict)
 
 void hmp_migrate_set_cache_size(Monitor *mon, const QDict *qdict)
 {
-    int64_t value = qdict_get_int(qdict, "value");
+    uint64_t value = qdict_get_uint(qdict, "value");
     Error *err = NULL;
 
     qmp_migrate_set_cache_size(value, &err);
diff --git a/migration/migration.c b/migration/migration.c
index 3ce68f3..2d7f3a2 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1279,13 +1279,13 @@ void qmp_migrate_cancel(Error **errp)
     migrate_fd_cancel(migrate_get_current());
 }
 
-void qmp_migrate_set_cache_size(int64_t value, Error **errp)
+void qmp_migrate_set_cache_size(uint64_t value, Error **errp)
 {
     MigrationState *s = migrate_get_current();
-    int64_t new_size;
+    ssize_t new_size;
 
     /* Check for truncation */
-    if (value != (size_t)value) {
+    if (value != (ssize_t)value) {
         error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size",
                    "exceeding address space");
         return;
@@ -1306,7 +1306,7 @@ void qmp_migrate_set_cache_size(int64_t value, Error **errp)
     s->xbzrle_cache_size = new_size;
 }
 
-int64_t qmp_query_migrate_cache_size(Error **errp)
+uint64_t qmp_query_migrate_cache_size(Error **errp)
 {
     return migrate_xbzrle_cache_size();
 }
@@ -1431,7 +1431,7 @@ int migrate_use_xbzrle(void)
     return s->enabled_capabilities[MIGRATION_CAPABILITY_XBZRLE];
 }
 
-int64_t migrate_xbzrle_cache_size(void)
+size_t migrate_xbzrle_cache_size(void)
 {
     MigrationState *s;
 
diff --git a/migration/migration.h b/migration/migration.h
index 148c9fa..e4708e1 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -106,7 +106,7 @@ struct MigrationState
     int64_t downtime;
     int64_t expected_downtime;
     bool enabled_capabilities[MIGRATION_CAPABILITY__MAX];
-    int64_t xbzrle_cache_size;
+    size_t xbzrle_cache_size;
     int64_t setup_time;
 
     /* Flag set once the migration has been asked to enter postcopy */
@@ -172,7 +172,7 @@ bool migrate_zero_blocks(void);
 bool migrate_auto_converge(void);
 
 int migrate_use_xbzrle(void);
-int64_t migrate_xbzrle_cache_size(void);
+size_t migrate_xbzrle_cache_size(void);
 bool migrate_colo_enabled(void);
 
 bool migrate_use_block(void);
diff --git a/migration/page_cache.c b/migration/page_cache.c
index ba984c4..226ea72 100644
--- a/migration/page_cache.c
+++ b/migration/page_cache.c
@@ -40,18 +40,17 @@ struct CacheItem {
 struct PageCache {
     CacheItem *page_cache;
     unsigned int page_size;
-    int64_t max_num_items;
+    uint64_t max_num_items;
     uint64_t max_item_age;
-    int64_t num_items;
+    uint64_t num_items;
 };
 
-PageCache *cache_init(int64_t num_pages, unsigned int page_size)
+PageCache *cache_init(uint64_t num_pages, unsigned page_size)
 {
-    int64_t i;
-
+    uint64_t i;
     PageCache *cache;
 
-    if (num_pages <= 0) {
+    if (!num_pages) {
         DPRINTF("invalid number of pages\n");
         return NULL;
     }
@@ -65,18 +64,17 @@ PageCache *cache_init(int64_t num_pages, unsigned int page_size)
     /* round down to the nearest power of 2 */
     if (!is_power_of_2(num_pages)) {
         num_pages = pow2floor(num_pages);
-        DPRINTF("rounding down to %" PRId64 "\n", num_pages);
+        DPRINTF("rounding down to %zd\n", num_pages);
     }
     cache->page_size = page_size;
     cache->num_items = 0;
     cache->max_item_age = 0;
     cache->max_num_items = num_pages;
 
-    DPRINTF("Setting cache buckets to %" PRId64 "\n", cache->max_num_items);
+    DPRINTF("Setting cache buckets to %zd\n", cache->max_num_items);
 
     /* We prefer not to abort if there is no memory */
-    cache->page_cache = g_try_malloc((cache->max_num_items) *
-                                     sizeof(*cache->page_cache));
+    cache->page_cache = g_try_new(CacheItem, cache->max_num_items);
     if (!cache->page_cache) {
         DPRINTF("Failed to allocate cache->page_cache\n");
         g_free(cache);
@@ -94,7 +92,7 @@ PageCache *cache_init(int64_t num_pages, unsigned int page_size)
 
 void cache_fini(PageCache *cache)
 {
-    int64_t i;
+    uint64_t i;
 
     g_assert(cache);
     g_assert(cache->page_cache);
diff --git a/migration/page_cache.h b/migration/page_cache.h
index 4fadd0c..b9afce3 100644
--- a/migration/page_cache.h
+++ b/migration/page_cache.h
@@ -28,7 +28,7 @@ typedef struct PageCache PageCache;
  * @num_pages: cache maximal number of cached pages
  * @page_size: cache page size
  */
-PageCache *cache_init(int64_t num_pages, unsigned int page_size);
+PageCache *cache_init(uint64_t num_pages, unsigned page_size);
 
 /**
  * cache_fini: free all cache resources
diff --git a/migration/ram.c b/migration/ram.c
index e9ab858..ce38be4 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -110,16 +110,15 @@ static void XBZRLE_cache_unlock(void)
  * migration may be using the cache and might finish during this call,
  * hence changes to the cache are protected by XBZRLE.lock().
  *
- * Returns the new_size or negative in case of error.
  * Returns the the new cache size on success, -1 on error.
  *
  * @new_size: new cache size
  * @errp: return location for an Error
  */
-int64_t xbzrle_cache_resize(int64_t new_size, Error **errp)
+ssize_t xbzrle_cache_resize(size_t new_size, Error **errp)
 {
     PageCache *new_cache;
-    int64_t ret;
+    ssize_t ret;
 
     if (new_size < TARGET_PAGE_SIZE) {
         error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size",
diff --git a/migration/ram.h b/migration/ram.h
index 97842bf..7c4187d 100644
--- a/migration/ram.h
+++ b/migration/ram.h
@@ -35,7 +35,7 @@
 extern MigrationStats ram_counters;
 extern XBZRLECacheStats xbzrle_counters;
 
-int64_t xbzrle_cache_resize(int64_t new_size, Error **errp);
+ssize_t xbzrle_cache_resize(size_t new_size, Error **errp);
 uint64_t ram_bytes_remaining(void);
 uint64_t ram_bytes_total(void);
 
diff --git a/qapi-schema.json b/qapi-schema.json
index c8cceb9..ecabff6 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -646,7 +646,7 @@
 # Since: 1.2
 ##
 { 'struct': 'XBZRLECacheStats',
-  'data': {'cache-size': 'int', 'bytes': 'int', 'pages': 'int',
+  'data': {'cache-size': 'size', 'bytes': 'int', 'pages': 'int',
            'cache-miss': 'int', 'cache-miss-rate': 'number',
            'overflow': 'int' } }
 
@@ -2875,7 +2875,7 @@
 # <- { "return": {} }
 #
 ##
-{ 'command': 'migrate-set-cache-size', 'data': {'value': 'int'} }
+{ 'command': 'migrate-set-cache-size', 'data': {'value': 'size'} }
 
 ##
 # @query-migrate-cache-size:
@@ -2892,7 +2892,7 @@
 # <- { "return": 67108864 }
 #
 ##
-{ 'command': 'query-migrate-cache-size', 'returns': 'int' }
+{ 'command': 'query-migrate-cache-size', 'returns': 'size' }
 
 ##
 # @ObjectPropertyInfo:
-- 
2.7.5

  parent reply	other threads:[~2017-08-07 14:47 UTC|newest]

Thread overview: 105+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-07 14:45 [Qemu-devel] [RFC PATCH 00/56] qapi: Use 'size' for byte counts & offsets Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 01/56] qobject: Touch up comments to say @param instead of 'param' Markus Armbruster
2017-08-09 14:39   ` Eric Blake
2017-08-10  8:20     ` Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 02/56] qdict: New helpers to put and get unsigned integers Markus Armbruster
2017-08-22 11:27   ` Marc-André Lureau
2017-08-22 12:49     ` Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 03/56] monitor: Rewrite comment describing HMP .args_type Markus Armbruster
2017-08-08 11:20   ` Dr. David Alan Gilbert
2017-08-08 14:22     ` Paolo Bonzini
2017-08-08 14:46       ` Dr. David Alan Gilbert
2017-08-08 15:36     ` Markus Armbruster
2017-08-08 16:10       ` Dr. David Alan Gilbert
2017-08-09  6:00         ` Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 04/56] char: Make ringbuf-read size unsigned in QAPI/QMP Markus Armbruster
2017-08-22 11:32   ` Marc-André Lureau
2017-08-22 13:00     ` Markus Armbruster
2017-08-22 15:54       ` Marc-André Lureau
2017-08-22 16:22         ` Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 05/56] char: Make ringbuf size unsigned in QAPI Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 06/56] char: Don't truncate -chardev and HMP chardev-add ringbuf size Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 07/56] cpus: Make memsave, pmemsave sizes, addresses unsigned in QAPI/QMP Markus Armbruster
2017-08-08 14:31   ` Dr. David Alan Gilbert
2017-08-08 15:37     ` Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 08/56] dump: Make sizes and " Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 09/56] balloon: Make balloon size " Markus Armbruster
2017-08-08 14:58   ` Dr. David Alan Gilbert
2017-08-09  6:04     ` Markus Armbruster
2017-08-09 10:47       ` Dr. David Alan Gilbert
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 10/56] hmp: Make balloon's argument unsigned Markus Armbruster
2017-08-08 15:10   ` Dr. David Alan Gilbert
2017-08-09  6:05     ` Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 11/56] monitor: Drop unused HMP .args_type 'M' Markus Armbruster
2017-08-08 15:23   ` Dr. David Alan Gilbert
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 12/56] pc-dimm: Make size and address unsigned in QAPI/QMP Markus Armbruster
2017-08-22 12:55   ` Igor Mammedov
2017-08-22 13:50     ` Markus Armbruster
2017-08-22 15:45       ` Igor Mammedov
2017-08-22 16:38         ` Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 13/56] pci: Make PCI addresses and sizes " Markus Armbruster
2017-08-22 14:03   ` Marcel Apfelbaum
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 14/56] migration: Fix migrate-set-cache-size error reporting Markus Armbruster
2017-08-07 16:07   ` Juan Quintela
2017-08-07 14:45 ` Markus Armbruster [this message]
2017-08-07 16:10   ` [Qemu-devel] [RFC PATCH 15/56] migration: Make XBZRLE cache size unsigned in QAPI/QMP Juan Quintela
2017-08-08 15:57     ` Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 16/56] migration: Make XBZRLE transferred " Markus Armbruster
2017-08-07 16:47   ` Juan Quintela
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 17/56] migration: Make MigrationStats sizes " Markus Armbruster
2017-08-07 16:48   ` Juan Quintela
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 18/56] migration: Make parameter max-bandwidth " Markus Armbruster
2017-08-07 16:50   ` Juan Quintela
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 19/56] block: Make snapshot VM state size " Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 20/56] block: Make ImageInfo sizes " Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 21/56] block: Clean up get_human_readable_size() Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 22/56] block: Mix up signed and unsigned less in bdrv_img_create() Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 23/56] option: Fix type of qemu_opt_set_number() parameter @val Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 24/56] block/qcow2: Change align_offset() to operate on uint64_t Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 25/56] block/qcow2: Change qcow2_calc_prealloc_size() to uint64_t Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 26/56] block: Make BlockMeasureInfo sizes unsigned in QAPI Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 27/56] block/dirty-bitmap: Clean up signed vs. unsigned dirty counts Markus Armbruster
2017-08-08  1:50   ` John Snow
2017-08-08 14:53   ` Eric Blake
2017-08-09  6:06     ` Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 28/56] block: Widen dirty bitmap granularity to uint64_t for safety Markus Armbruster
2017-08-08  1:55   ` John Snow
2017-08-08 14:55     ` Eric Blake
2017-08-08 15:58     ` Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 29/56] block: Make BlockDirtyInfo byte count unsigned in QAPI/QMP Markus Armbruster
2017-08-08  1:56   ` John Snow
2017-08-08 15:58     ` Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 30/56] block: Make write thresholds " Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 31/56] block: Make throttle byte rates and sizes " Markus Armbruster
2017-08-23 13:42   ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2017-08-24  7:24     ` Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 32/56] hmp: Make block_set_io_throttle's arguments unsigned Markus Armbruster
2017-08-08 15:34   ` Dr. David Alan Gilbert
2017-08-09  6:10     ` Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 33/56] block: Make block_resize size unsigned in QAPI/QMP Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 34/56] block: Make BlockDeviceStats sizes, offsets " Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 35/56] blockjob: Lift speed sign conversion into block_job_set_speed() Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 36/56] blockjob: Drop unused parameter @errp of method set_speed() Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 37/56] blockjob: Make BlockJobInfo and event speed unsigned in QAPI/QMP Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 38/56] blockjob: Lift speed sign conversion out of block_job_set_speed() Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 39/56] blockjob: Lift speed sign conversion out of block_job_create() Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 40/56] blockjob: Lift speed sign conversion out of backup_job_create() Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 41/56] blockjob: Lift speed sign conversion out of mirror_start_job() Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 42/56] blockjob: Lift speed sign conversion out of stream_start() Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 43/56] blockjob: Lift speed sign conversion out of mirror_start() Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 44/56] blockjob: Lift speed sign conversion out of blockdev_mirror_common() Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 45/56] blockjob: Lift speed sign conversion out of commit_start() etc Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 46/56] blockjob: Make job commands' speed parameter unsigned in QAPI/QMP Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 47/56] blockjob: Make BlockJobInfo and event offsets " Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 48/56] block: Make mirror buffer size " Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 49/56] block: Make ImageCheck file offset unsigned in QAPI Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 50/56] block: Make BLOCK_IMAGE_CORRUPTED offset, size unsigned in QAPI/QMP Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 51/56] block/nfs: Fix for readahead-size, page-cache-size > INT64_MAX Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 52/56] block/nfs: Reject negative readahead-size, page-cache-size Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 53/56] block: Make blockdev-add byte counts unsigned in QAPI/QMP Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 54/56] qemu-img: blk_getlength() can fail, fix img_map() to check Markus Armbruster
2017-08-07 14:45 ` [Qemu-devel] [RFC PATCH 55/56] block: Make MapEntry offsets and size unsigned in QAPI Markus Armbruster
2017-08-07 14:46 ` [Qemu-devel] [RFC PATCH 56/56] crypto: Make QCryptoBlockInfoLUKS offsets unsigned in QAPI/QMP Markus Armbruster
2017-08-07 15:10   ` Daniel P. Berrange
2017-09-06 15:32 ` [Qemu-devel] [RFC PATCH 00/56] qapi: Use 'size' for byte counts & offsets Kevin Wolf
2017-09-06 17:58   ` Markus Armbruster

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=1502117160-24655-16-git-send-email-armbru@redhat.com \
    --to=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=eblake@redhat.com \
    --cc=famz@redhat.com \
    --cc=jcody@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).