summaryrefslogtreecommitdiffstats
path: root/storage/innobase/include/buf0dblwr.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-07-01 18:15:00 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-07-01 18:15:00 +0000
commita2a2e32c02643a0cec111511220227703fda1cd5 (patch)
tree69cc2b631234c2a8e026b9cd4d72676c61c594df /storage/innobase/include/buf0dblwr.h
parentReleasing progress-linux version 1:10.11.8-1~progress7.99u1. (diff)
downloadmariadb-a2a2e32c02643a0cec111511220227703fda1cd5.tar.xz
mariadb-a2a2e32c02643a0cec111511220227703fda1cd5.zip
Merging upstream version 1:11.4.2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'storage/innobase/include/buf0dblwr.h')
-rw-r--r--storage/innobase/include/buf0dblwr.h40
1 files changed, 33 insertions, 7 deletions
diff --git a/storage/innobase/include/buf0dblwr.h b/storage/innobase/include/buf0dblwr.h
index 6e7662d9..f912775d 100644
--- a/storage/innobase/include/buf0dblwr.h
+++ b/storage/innobase/include/buf0dblwr.h
@@ -53,9 +53,9 @@ class buf_dblwr_t
element* buf_block_arr;
};
- /** the page number of the first doublewrite block (block_size() pages) */
+ /** the page number of the first doublewrite block (block_size pages) */
page_id_t block1{0, 0};
- /** the page number of the second doublewrite block (block_size() pages) */
+ /** the page number of the second doublewrite block (block_size pages) */
page_id_t block2{0, 0};
/** mutex protecting the data members below */
@@ -74,6 +74,22 @@ class buf_dblwr_t
slot slots[2];
slot *active_slot;
+ /** Size of the doublewrite block in pages */
+ uint32_t block_size;
+
+public:
+ /** Values of use */
+ enum usage {
+ /** Assume that writes are atomic */
+ USE_NO= 0,
+ /** Use the doublewrite buffer with full durability */
+ USE_YES,
+ /** Durable writes to the doublewrite buffer, not to data files */
+ USE_FAST
+ };
+ /** The value of innodb_doublewrite */
+ ulong use;
+private:
/** Initialise the persistent storage of the doublewrite buffer.
@param header doublewrite page header in the TRX_SYS page */
inline void init(const byte *header);
@@ -126,9 +142,6 @@ public:
@param request the completed batch write request */
void flush_buffered_writes_completed(const IORequest &request);
- /** Size of the doublewrite block in pages */
- uint32_t block_size() const { return FSP_EXTENT_SIZE; }
-
/** Schedule a page write. If the doublewrite memory buffer is full,
flush_buffered_writes() will be invoked to make space.
@param request asynchronous write request
@@ -139,6 +152,19 @@ public:
bool is_created() const
{ return UNIV_LIKELY(block1 != page_id_t(0, 0)); }
+ /** @return whether the doublewrite buffer is in use */
+ bool in_use() const { return is_created() && use; }
+ /** @return whether fsync() is needed on non-doublewrite pages */
+ bool need_fsync() const { return use < USE_FAST; }
+
+ void set_use(ulong use)
+ {
+ ut_ad(use <= USE_FAST);
+ mysql_mutex_lock(&mutex);
+ this->use= use;
+ mysql_mutex_unlock(&mutex);
+ }
+
/** @return whether a page identifier is part of the doublewrite buffer */
bool is_inside(const page_id_t id) const
{
@@ -147,8 +173,8 @@ public:
ut_ad(block1 < block2);
if (id < block1)
return false;
- const uint32_t size= block_size();
- return id < block1 + size || (id >= block2 && id < block2 + size);
+ return id < block1 + block_size ||
+ (id >= block2 && id < block2 + block_size);
}
/** Wait for flush_buffered_writes() to be fully completed */