summaryrefslogtreecommitdiff
path: root/src/block/block_mgr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/block/block_mgr.c')
-rw-r--r--src/block/block_mgr.c291
1 files changed, 220 insertions, 71 deletions
diff --git a/src/block/block_mgr.c b/src/block/block_mgr.c
index dceaae8bb99..0bb75d129e1 100644
--- a/src/block/block_mgr.c
+++ b/src/block/block_mgr.c
@@ -69,6 +69,21 @@ __bm_checkpoint(WT_BM *bm,
}
/*
+ * __bm_checkpoint_readonly --
+ * Write a buffer into a block, creating a checkpoint; readonly version.
+ */
+static int
+__bm_checkpoint_readonly(WT_BM *bm,
+ WT_SESSION_IMPL *session, WT_ITEM *buf, WT_CKPT *ckptbase, bool data_cksum)
+{
+ WT_UNUSED(buf);
+ WT_UNUSED(ckptbase);
+ WT_UNUSED(data_cksum);
+
+ return (__bm_readonly(bm, session));
+}
+
+/*
* __bm_checkpoint_load --
* Load a checkpoint.
*/
@@ -113,6 +128,16 @@ __bm_checkpoint_resolve(WT_BM *bm, WT_SESSION_IMPL *session)
}
/*
+ * __bm_checkpoint_resolve_readonly --
+ * Resolve the checkpoint; readonly version.
+ */
+static int
+__bm_checkpoint_resolve_readonly(WT_BM *bm, WT_SESSION_IMPL *session)
+{
+ return (__bm_readonly(bm, session));
+}
+
+/*
* __bm_checkpoint_unload --
* Unload a checkpoint point.
*/
@@ -161,6 +186,16 @@ __bm_compact_end(WT_BM *bm, WT_SESSION_IMPL *session)
}
/*
+ * __bm_compact_end_readonly --
+ * End a block manager compaction; readonly version.
+ */
+static int
+__bm_compact_end_readonly(WT_BM *bm, WT_SESSION_IMPL *session)
+{
+ return (__bm_readonly(bm, session));
+}
+
+/*
* __bm_compact_page_skip --
* Return if a page is useful for compaction.
*/
@@ -173,6 +208,21 @@ __bm_compact_page_skip(WT_BM *bm, WT_SESSION_IMPL *session,
}
/*
+ * __bm_compact_page_skip_readonly --
+ * Return if a page is useful for compaction; readonly version.
+ */
+static int
+__bm_compact_page_skip_readonly(WT_BM *bm, WT_SESSION_IMPL *session,
+ const uint8_t *addr, size_t addr_size, bool *skipp)
+{
+ WT_UNUSED(addr);
+ WT_UNUSED(addr_size);
+ WT_UNUSED(skipp);
+
+ return (__bm_readonly(bm, session));
+}
+
+/*
* __bm_compact_skip --
* Return if a file can be compacted.
*/
@@ -183,6 +233,18 @@ __bm_compact_skip(WT_BM *bm, WT_SESSION_IMPL *session, bool *skipp)
}
/*
+ * __bm_compact_skip_readonly --
+ * Return if a file can be compacted; readonly version.
+ */
+static int
+__bm_compact_skip_readonly(WT_BM *bm, WT_SESSION_IMPL *session, bool *skipp)
+{
+ WT_UNUSED(skipp);
+
+ return (__bm_readonly(bm, session));
+}
+
+/*
* __bm_compact_start --
* Start a block manager compaction.
*/
@@ -193,6 +255,16 @@ __bm_compact_start(WT_BM *bm, WT_SESSION_IMPL *session)
}
/*
+ * __bm_compact_start_readonly --
+ * Start a block manager compaction; readonly version.
+ */
+static int
+__bm_compact_start_readonly(WT_BM *bm, WT_SESSION_IMPL *session)
+{
+ return (__bm_readonly(bm, session));
+}
+
+/*
* __bm_free --
* Free a block of space to the underlying file.
*/
@@ -204,6 +276,20 @@ __bm_free(WT_BM *bm,
}
/*
+ * __bm_free_readonly --
+ * Free a block of space to the underlying file; readonly version.
+ */
+static int
+__bm_free_readonly(WT_BM *bm,
+ WT_SESSION_IMPL *session, const uint8_t *addr, size_t addr_size)
+{
+ WT_UNUSED(addr);
+ WT_UNUSED(addr_size);
+
+ return (__bm_readonly(bm, session));
+}
+
+/*
* __bm_is_mapped --
* Return if the file is mapped into memory.
*/
@@ -226,6 +312,31 @@ __bm_salvage_end(WT_BM *bm, WT_SESSION_IMPL *session)
}
/*
+ * __bm_salvage_end_readonly --
+ * End a block manager salvage; readonly version.
+ */
+static int
+__bm_salvage_end_readonly(WT_BM *bm, WT_SESSION_IMPL *session)
+{
+ return (__bm_readonly(bm, session));
+}
+
+/*
+ * __bm_salvage_next_readonly --
+ * Return the next block from the file; readonly version.
+ */
+static int
+__bm_salvage_next_readonly(WT_BM *bm,
+ WT_SESSION_IMPL *session, uint8_t *addr, size_t *addr_sizep, bool *eofp)
+{
+ WT_UNUSED(addr);
+ WT_UNUSED(addr_sizep);
+ WT_UNUSED(eofp);
+
+ return (__bm_readonly(bm, session));
+}
+
+/*
* __bm_salvage_next --
* Return the next block from the file.
*/
@@ -248,6 +359,16 @@ __bm_salvage_start(WT_BM *bm, WT_SESSION_IMPL *session)
}
/*
+ * __bm_salvage_start_readonly --
+ * Start a block manager salvage; readonly version.
+ */
+static int
+__bm_salvage_start_readonly(WT_BM *bm, WT_SESSION_IMPL *session)
+{
+ return (__bm_readonly(bm, session));
+}
+
+/*
* __bm_salvage_valid --
* Inform salvage a block is valid.
*/
@@ -260,6 +381,21 @@ __bm_salvage_valid(WT_BM *bm,
}
/*
+ * __bm_salvage_valid_readonly --
+ * Inform salvage a block is valid; readonly version.
+ */
+static int
+__bm_salvage_valid_readonly(WT_BM *bm,
+ WT_SESSION_IMPL *session, uint8_t *addr, size_t addr_size, bool valid)
+{
+ WT_UNUSED(addr);
+ WT_UNUSED(addr_size);
+ WT_UNUSED(valid);
+
+ return (__bm_readonly(bm, session));
+}
+
+/*
* __bm_stat --
* Block-manager statistics.
*/
@@ -283,6 +419,18 @@ __bm_sync(WT_BM *bm, WT_SESSION_IMPL *session, bool async)
}
/*
+ * __bm_sync_readonly --
+ * Flush a file to disk; readonly version.
+ */
+static int
+__bm_sync_readonly(WT_BM *bm, WT_SESSION_IMPL *session, bool async)
+{
+ WT_UNUSED(async);
+
+ return (__bm_readonly(bm, session));
+}
+
+/*
* __bm_verify_addr --
* Verify an address.
*/
@@ -327,6 +475,23 @@ __bm_write(WT_BM *bm, WT_SESSION_IMPL *session,
}
/*
+ * __bm_write_readonly --
+ * Write a buffer into a block, returning the block's address cookie;
+ * readonly version.
+ */
+static int
+__bm_write_readonly(WT_BM *bm, WT_SESSION_IMPL *session,
+ WT_ITEM *buf, uint8_t *addr, size_t *addr_sizep, bool data_cksum)
+{
+ WT_UNUSED(buf);
+ WT_UNUSED(addr);
+ WT_UNUSED(addr_sizep);
+ WT_UNUSED(data_cksum);
+
+ return (__bm_readonly(bm, session));
+}
+
+/*
* __bm_write_size --
* Return the buffer size required to write a block.
*/
@@ -337,84 +502,68 @@ __bm_write_size(WT_BM *bm, WT_SESSION_IMPL *session, size_t *sizep)
}
/*
+ * __bm_write_size_readonly --
+ * Return the buffer size required to write a block; readonly version.
+ */
+static int
+__bm_write_size_readonly(WT_BM *bm, WT_SESSION_IMPL *session, size_t *sizep)
+{
+ WT_UNUSED(sizep);
+
+ return (__bm_readonly(bm, session));
+}
+
+/*
* __bm_method_set --
* Set up the legal methods.
*/
static void
__bm_method_set(WT_BM *bm, bool readonly)
{
+ bm->addr_invalid = __bm_addr_invalid;
+ bm->addr_string = __bm_addr_string;
+ bm->block_header = __bm_block_header;
+ bm->checkpoint = __bm_checkpoint;
+ bm->checkpoint_load = __bm_checkpoint_load;
+ bm->checkpoint_resolve = __bm_checkpoint_resolve;
+ bm->checkpoint_unload = __bm_checkpoint_unload;
+ bm->close = __bm_close;
+ bm->compact_end = __bm_compact_end;
+ bm->compact_page_skip = __bm_compact_page_skip;
+ bm->compact_skip = __bm_compact_skip;
+ bm->compact_start = __bm_compact_start;
+ bm->free = __bm_free;
+ bm->is_mapped = __bm_is_mapped;
+ bm->preload = __wt_bm_preload;
+ bm->read = __wt_bm_read;
+ bm->salvage_end = __bm_salvage_end;
+ bm->salvage_next = __bm_salvage_next;
+ bm->salvage_start = __bm_salvage_start;
+ bm->salvage_valid = __bm_salvage_valid;
+ bm->size = __wt_block_manager_size;
+ bm->stat = __bm_stat;
+ bm->sync = __bm_sync;
+ bm->verify_addr = __bm_verify_addr;
+ bm->verify_end = __bm_verify_end;
+ bm->verify_start = __bm_verify_start;
+ bm->write = __bm_write;
+ bm->write_size = __bm_write_size;
+
if (readonly) {
- bm->addr_invalid = __bm_addr_invalid;
- bm->addr_string = __bm_addr_string;
- bm->block_header = __bm_block_header;
- bm->checkpoint = (int (*)(WT_BM *, WT_SESSION_IMPL *,
- WT_ITEM *, WT_CKPT *, bool))__bm_readonly;
- bm->checkpoint_load = __bm_checkpoint_load;
- bm->checkpoint_resolve =
- (int (*)(WT_BM *, WT_SESSION_IMPL *))__bm_readonly;
- bm->checkpoint_unload = __bm_checkpoint_unload;
- bm->close = __bm_close;
- bm->compact_end =
- (int (*)(WT_BM *, WT_SESSION_IMPL *))__bm_readonly;
- bm->compact_page_skip = (int (*)(WT_BM *, WT_SESSION_IMPL *,
- const uint8_t *, size_t, bool *))__bm_readonly;
- bm->compact_skip = (int (*)
- (WT_BM *, WT_SESSION_IMPL *, bool *))__bm_readonly;
- bm->compact_start =
- (int (*)(WT_BM *, WT_SESSION_IMPL *))__bm_readonly;
- bm->free = (int (*)(WT_BM *,
- WT_SESSION_IMPL *, const uint8_t *, size_t))__bm_readonly;
- bm->is_mapped = __bm_is_mapped;
- bm->preload = __wt_bm_preload;
- bm->read = __wt_bm_read;
- bm->salvage_end = (int (*)
- (WT_BM *, WT_SESSION_IMPL *))__bm_readonly;
- bm->salvage_next = (int (*)(WT_BM *, WT_SESSION_IMPL *,
- uint8_t *, size_t *, bool *))__bm_readonly;
- bm->salvage_start = (int (*)
- (WT_BM *, WT_SESSION_IMPL *))__bm_readonly;
- bm->salvage_valid = (int (*)(WT_BM *,
- WT_SESSION_IMPL *, uint8_t *, size_t, bool))__bm_readonly;
- bm->size = __wt_block_manager_size;
- bm->stat = __bm_stat;
- bm->sync =
- (int (*)(WT_BM *, WT_SESSION_IMPL *, bool))__bm_readonly;
- bm->verify_addr = __bm_verify_addr;
- bm->verify_end = __bm_verify_end;
- bm->verify_start = __bm_verify_start;
- bm->write = (int (*)(WT_BM *, WT_SESSION_IMPL *,
- WT_ITEM *, uint8_t *, size_t *, bool))__bm_readonly;
- bm->write_size = (int (*)
- (WT_BM *, WT_SESSION_IMPL *, size_t *))__bm_readonly;
- } else {
- bm->addr_invalid = __bm_addr_invalid;
- bm->addr_string = __bm_addr_string;
- bm->block_header = __bm_block_header;
- bm->checkpoint = __bm_checkpoint;
- bm->checkpoint_load = __bm_checkpoint_load;
- bm->checkpoint_resolve = __bm_checkpoint_resolve;
- bm->checkpoint_unload = __bm_checkpoint_unload;
- bm->close = __bm_close;
- bm->compact_end = __bm_compact_end;
- bm->compact_page_skip = __bm_compact_page_skip;
- bm->compact_skip = __bm_compact_skip;
- bm->compact_start = __bm_compact_start;
- bm->free = __bm_free;
- bm->is_mapped = __bm_is_mapped;
- bm->preload = __wt_bm_preload;
- bm->read = __wt_bm_read;
- bm->salvage_end = __bm_salvage_end;
- bm->salvage_next = __bm_salvage_next;
- bm->salvage_start = __bm_salvage_start;
- bm->salvage_valid = __bm_salvage_valid;
- bm->size = __wt_block_manager_size;
- bm->stat = __bm_stat;
- bm->sync = __bm_sync;
- bm->verify_addr = __bm_verify_addr;
- bm->verify_end = __bm_verify_end;
- bm->verify_start = __bm_verify_start;
- bm->write = __bm_write;
- bm->write_size = __bm_write_size;
+ bm->checkpoint = __bm_checkpoint_readonly;
+ bm->checkpoint_resolve = __bm_checkpoint_resolve_readonly;
+ bm->compact_end = __bm_compact_end_readonly;
+ bm->compact_page_skip = __bm_compact_page_skip_readonly;
+ bm->compact_skip = __bm_compact_skip_readonly;
+ bm->compact_start = __bm_compact_start_readonly;
+ bm->free = __bm_free_readonly;
+ bm->salvage_end = __bm_salvage_end_readonly;
+ bm->salvage_next = __bm_salvage_next_readonly;
+ bm->salvage_start = __bm_salvage_start_readonly;
+ bm->salvage_valid = __bm_salvage_valid_readonly;
+ bm->sync = __bm_sync_readonly;
+ bm->write = __bm_write_readonly;
+ bm->write_size = __bm_write_size_readonly;
}
}