summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/asyncStore/jrnl2/DataToken.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/asyncStore/jrnl2/DataToken.h')
-rw-r--r--cpp/src/qpid/asyncStore/jrnl2/DataToken.h176
1 files changed, 176 insertions, 0 deletions
diff --git a/cpp/src/qpid/asyncStore/jrnl2/DataToken.h b/cpp/src/qpid/asyncStore/jrnl2/DataToken.h
new file mode 100644
index 0000000000..2058cc75ad
--- /dev/null
+++ b/cpp/src/qpid/asyncStore/jrnl2/DataToken.h
@@ -0,0 +1,176 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * \file DataToken.h
+ */
+
+#ifndef qpid_jrnl2_asyncStore_DataToken_h_
+#define qpid_jrnl2_asyncStore_DataToken_h_
+
+#include "DataOpState.h"
+#include "DataWrComplState.h"
+#include "RecordIdCounter.h"
+
+#include <string>
+#include <stdint.h> // uint64_t
+
+namespace qpid {
+namespace asyncStore {
+namespace jrnl2 {
+
+/**
+ * \brief Contains the state and metadata for each record handled by the async store.
+ *
+ * The DataToken keeps the state of the data record through the AIO write and recovery process. It may also
+ * be used to set certain properties of the data record.
+ */
+class DataToken : public Streamable
+{
+public:
+ /**
+ * \brief Default constructor, which internally assigns a unique record Id (RID).
+ */
+ DataToken();
+
+ /**
+ * \brief Constructor which accepts an external record id (RID). No check is made of the uniqueness of this RID.
+ *
+ * \param rid The externally assigned record Id, which must be unique across this journal instance within the
+ * window presented by the journal files.
+ */
+ DataToken(const recordId_t rid);
+
+ /**
+ * \brief Virtual destructor
+ */
+ virtual ~DataToken();
+
+ // Get functions
+
+ /**
+ * \brief Get the const DataOpState state manager object for this data token.
+ *
+ * \return \c const state of the data record associated with this DataToken instance.
+ */
+ const DataOpState& getDataOpState() const;
+
+ /**
+ * \brief Get the DataOpState state manager object for this data token.
+ *
+ * \return Non -\c const (modifiable) state of the data record associated with this DataToken instance.
+ */
+ DataOpState& getDataOpState();
+
+ /**
+ * \brief Get the const DataWrComplState state manager object for this data token.
+ *
+ * \return \c const state of the data record associated with this DataToken instance.
+ */
+ const DataWrComplState& getDataWrComplState() const;
+
+ /**
+ * \brief Get the DataWrComplState state manager object for this data token.
+ *
+ * \return Non -\c const (modifiable) state of the data record associated with this DataToken instance.
+ */
+ DataWrComplState& getDataWrComplState();
+
+ /**
+ * \brief Check if this data is marked as transient (will not be recovered).
+ *
+ * \return \c true if the data is transient, \c false otherwise.
+ */
+ bool isTransient() const;
+
+ /**
+ * \brief Check if this data is marked as external (i.e. has its content stored outside the store journal).
+ *
+ * \return \c true if the data is external (has its content stored outside the journal), \c false otherwise.
+ */
+ bool isExternal() const;
+
+ /**
+ * \brief Return the external storage location of the data if it is marked as external. This may be a path
+ * or URL.
+ *
+ * \return Location or URI pointing to the location of the storage for this data record if it is marked external.
+ */
+ const std::string& getExternalLocation() const;
+
+ /**
+ * \brief Return the Record Id (RID) for this data record.
+ *
+ * \return Record Id (RID) for this data record.
+ */
+ recordId_t getRecordId() const;
+
+ /**
+ * \brief Checks if the Record Id assigned to this data record was supplied externally.
+ *
+ * \return \c true if the data record had its Record Id (RID) assigned externally from the store, \c false
+ * otherwise.
+ */
+ bool isRecordIdExternal() const;
+
+ /**
+ * \brief Returns the recordId of the dequeuing record (if dequeued)
+ *
+ * \return The Record Id of the dequeue record which dequeues this record, or 0x0 if it has not been dequeued
+ * (or cannot be dequeued).
+ */
+ recordId_t getDequeueRecordId() const;
+
+ // Set functions
+
+ /**
+ * \brief Set the record Id (RID) for this record. No check is made of the uniqueness of this RID.
+ */
+ void setRecordId(const recordId_t rid);
+
+ /**
+ * \brief Set the record Id (RID) of the record which dequeues this record.
+ */
+ void setDequeueRecordId(const recordId_t drid);
+
+ // Debug aid(s)
+
+ /**
+ * \brief Stream a formatted summary of the state of this DataToken object.
+ */
+ virtual void toStream(std::ostream& os) const;
+
+protected:
+ DataOpState m_dataOpState; ///< Data operational state (none, enqueued, dequeued)
+ DataWrComplState m_dataWrComplState; ///< Data write completion state (none, part, complete)
+ bool m_transientFlag; ///< True if the data record is transient (eg for Flow-To-Disk)
+ bool m_externalFlag; ///< True if the data record is stored externally from the store
+ std::string m_externalLocation; ///< Location of data record when stored externally
+ recordId_t m_recordId; ///< Record Id which is unique to this store instance
+ bool m_externalRecordIdFlag; ///< True if the record id was set through this token
+ recordId_t m_dequeueRecordId; ///< Record Id of the dequeue record for this data record
+
+private:
+ static RecordIdCounter_t s_recordIdCounter; ///< Static instance keeps record Ids unique across system
+
+};
+
+}}} // namespace qpid::asyncStore::jrnl2
+
+#endif // qpid_jrnl2_asyncStore_DataToken_h_