CUBRID Engine  latest
mvcc.h File Reference
#include "log_lsa.hpp"
#include "mvcc_active_tran.hpp"
#include "recovery.h"
#include "storage_common.h"
#include "thread_compat.hpp"
#include <vector>
Include dependency graph for mvcc.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  mvcc_rec_header
 
struct  mvcc_snapshot
 
struct  mvcc_info
 

Macros

#define MVCC_REC_HEADER_INITIALIZER   { 0, 0, NULL_CHN, MVCCID_NULL, MVCCID_NULL, LSA_INITIALIZER }
 
#define MVCC_GET_INSID(header)   ((header)->mvcc_ins_id)
 
#define MVCC_SET_INSID(header, mvcc_id)   ((header)->mvcc_ins_id = (mvcc_id))
 
#define MVCC_GET_DELID(header)   ((header)->mvcc_del_id)
 
#define MVCC_SET_DELID(header, mvcc_id)   ((header)->mvcc_del_id = (mvcc_id))
 
#define MVCC_GET_REPID(header)   ((header)->repid)
 
#define MVCC_SET_REPID(header, rep_id)   ((header)->repid = (rep_id))
 
#define MVCC_GET_CHN(header)   ((header)->chn)
 
#define MVCC_SET_CHN(header, chn_)   ((header)->chn = (chn_))
 
#define MVCC_GET_FLAG(header)   ((header)->mvcc_flag)
 
#define MVCC_SET_FLAG(header, flag)   ((header)->mvcc_flag = (flag))
 
#define MVCC_IS_ANY_FLAG_SET(rec_header_p)   (MVCC_IS_FLAG_SET (rec_header_p, OR_MVCC_FLAG_MASK))
 
#define MVCC_IS_FLAG_SET(rec_header_p, flags)   ((rec_header_p)->mvcc_flag & (flags))
 
#define MVCC_IS_HEADER_DELID_VALID(rec_header_p)
 
#define MVCC_IS_HEADER_INSID_NOT_ALL_VISIBLE(rec_header_p)
 
#define MVCC_SET_FLAG_BITS(rec_header_p, flag)   ((rec_header_p)->mvcc_flag |= (flag))
 
#define MVCC_CLEAR_ALL_FLAG_BITS(rec_header_p)   (MVCC_CLEAR_FLAG_BITS (rec_header_p, OR_MVCC_FLAG_MASK))
 
#define MVCC_CLEAR_FLAG_BITS(rec_header_p, flag)   ((rec_header_p)->mvcc_flag &= ~(flag))
 
#define MVCC_SNAPSHOT_GET_LOWEST_ACTIVE_ID(snapshot)   ((snapshot)->lowest_active_mvccid)
 
#define MVCC_SNAPSHOT_GET_HIGHEST_COMMITTED_ID(snapshot)   ((snapshot)->highest_completed_mvccid)
 
#define MVCC_IS_REC_INSERTED_BY_ME(thread_p, rec_header_p)   (logtb_is_current_mvccid (thread_p, (rec_header_p)->mvcc_ins_id))
 
#define MVCC_IS_REC_DELETED_BY_ME(thread_p, rec_header_p)   (logtb_is_current_mvccid (thread_p, (rec_header_p)->mvcc_del_id))
 
#define MVCC_IS_REC_INSERTED_BY(rec_header_p, mvcc_id)   ((rec_header_p)->mvcc_ins_id == mvcc_id)
 
#define MVCC_IS_REC_DELETED_BY(rec_header_p, mvcc_id)   ((rec_header_p)->delid_chn.mvcc_del_id == mvcc_id)
 
#define MVCC_IS_CHN_UPTODATE(rec_header_p, chn)
 
#define MVCC_ID_PRECEDES(id1, id2)   ((id1) < (id2))
 
#define MVCC_ID_FOLLOW_OR_EQUAL(id1, id2)   ((id1) >= (id2))
 
#define MVCC_IS_HEADER_PREV_VERSION_VALID(rec_header_p)
 
#define MVCC_SET_PREVIOUS_VERSION_LSA(header, new_lsa)
 
#define MVCC_GET_PREV_VERSION_LSA(header)   ((header)->prev_version_lsa)
 
#define LOG_IS_MVCC_HEAP_OPERATION(rcvindex)
 
#define LOG_IS_MVCC_BTREE_OPERATION(rcvindex)
 
#define LOG_IS_MVCC_OPERATION(rcvindex)
 

Typedefs

typedef struct mvcc_rec_header MVCC_REC_HEADER
 
typedef enum mvcc_satisfies_snapshot_result MVCC_SATISFIES_SNAPSHOT_RESULT
 
typedef struct mvcc_snapshot MVCC_SNAPSHOT
 
typedef MVCC_SATISFIES_SNAPSHOT_RESULT(* MVCC_SNAPSHOT_FUNC) (THREAD_ENTRY *thread_p, MVCC_REC_HEADER *rec_header, MVCC_SNAPSHOT *snapshot)
 
typedef struct mvcc_info MVCC_INFO
 
typedef enum mvcc_satisfies_delete_result MVCC_SATISFIES_DELETE_RESULT
 
typedef enum mvcc_satisfies_vacuum_result MVCC_SATISFIES_VACUUM_RESULT
 

Enumerations

enum  mvcc_satisfies_snapshot_result { TOO_OLD_FOR_SNAPSHOT, SNAPSHOT_SATISFIED, TOO_NEW_FOR_SNAPSHOT }
 
enum  mvcc_satisfies_delete_result {
  DELETE_RECORD_INSERT_IN_PROGRESS, DELETE_RECORD_CAN_DELETE, DELETE_RECORD_DELETED, DELETE_RECORD_DELETE_IN_PROGRESS,
  DELETE_RECORD_SELF_DELETED
}
 
enum  mvcc_satisfies_vacuum_result { VACUUM_RECORD_REMOVE, VACUUM_RECORD_DELETE_INSID_PREV_VER, VACUUM_RECORD_CANNOT_VACUUM }
 

Functions

MVCC_SATISFIES_SNAPSHOT_RESULT mvcc_satisfies_snapshot (THREAD_ENTRY *thread_p, MVCC_REC_HEADER *rec_header, MVCC_SNAPSHOT *snapshot)
 
MVCC_SATISFIES_SNAPSHOT_RESULT mvcc_is_not_deleted_for_snapshot (THREAD_ENTRY *thread_p, MVCC_REC_HEADER *rec_header, MVCC_SNAPSHOT *snapshot)
 
MVCC_SATISFIES_VACUUM_RESULT mvcc_satisfies_vacuum (THREAD_ENTRY *thread_p, MVCC_REC_HEADER *rec_header, MVCCID oldest_mvccid)
 
MVCC_SATISFIES_DELETE_RESULT mvcc_satisfies_delete (THREAD_ENTRY *thread_p, MVCC_REC_HEADER *rec_header)
 
MVCC_SATISFIES_SNAPSHOT_RESULT mvcc_satisfies_dirty (THREAD_ENTRY *thread_p, MVCC_REC_HEADER *rec_header, MVCC_SNAPSHOT *snapshot)
 
bool mvcc_is_mvcc_disabled_class (const OID *class_oid)
 

Macro Definition Documentation

#define LOG_IS_MVCC_BTREE_OPERATION (   rcvindex)
#define LOG_IS_MVCC_HEAP_OPERATION (   rcvindex)
#define LOG_IS_MVCC_OPERATION (   rcvindex)
Value:
|| ((rcvindex) == RVES_NOTIFY_VACUUM))
#define LOG_IS_MVCC_HEAP_OPERATION(rcvindex)
Definition: mvcc.h:239
#define LOG_IS_MVCC_BTREE_OPERATION(rcvindex)
Definition: mvcc.h:248

Definition at line 255 of file mvcc.h.

Referenced by log_append_redo_crumbs(), log_append_undo_crumbs(), log_append_undoredo_crumbs(), log_rv_undo_record(), log_sysop_end_logical_undo(), and prior_lsa_gen_undoredo_record_from_crumbs().

#define MVCC_CLEAR_ALL_FLAG_BITS (   rec_header_p)    (MVCC_CLEAR_FLAG_BITS (rec_header_p, OR_MVCC_FLAG_MASK))

Definition at line 98 of file mvcc.h.

Referenced by heap_insert_adjust_recdes_header(), and heap_update_adjust_recdes_header().

#define MVCC_CLEAR_FLAG_BITS (   rec_header_p,
  flag 
)    ((rec_header_p)->mvcc_flag &= ~(flag))
#define MVCC_GET_CHN (   header)    ((header)->chn)

Definition at line 69 of file mvcc.h.

Referenced by vacuum_heap_record_insid_and_prev_version().

#define MVCC_GET_FLAG (   header)    ((header)->mvcc_flag)
#define MVCC_GET_PREV_VERSION_LSA (   header)    ((header)->prev_version_lsa)
#define MVCC_GET_REPID (   header)    ((header)->repid)

Definition at line 63 of file mvcc.h.

Referenced by vacuum_heap_record_insid_and_prev_version().

#define MVCC_ID_FOLLOW_OR_EQUAL (   id1,
  id2 
)    ((id1) >= (id2))
#define MVCC_IS_ANY_FLAG_SET (   rec_header_p)    (MVCC_IS_FLAG_SET (rec_header_p, OR_MVCC_FLAG_MASK))

Definition at line 81 of file mvcc.h.

#define MVCC_IS_CHN_UPTODATE (   rec_header_p,
  chn 
)
Value:
(chn != NULL_CHN \
&& (chn == MVCC_GET_CHN (rec_header_p)))
#define MVCC_GET_CHN(header)
Definition: mvcc.h:69

Definition at line 133 of file mvcc.h.

Referenced by heap_get_if_diff_chn(), heap_get_last_version(), heap_get_visible_version_from_log(), and heap_get_visible_version_internal().

#define MVCC_IS_HEADER_INSID_NOT_ALL_VISIBLE (   rec_header_p)
Value:
&& MVCC_GET_INSID (rec_header_p) != MVCCID_ALL_VISIBLE)
#define MVCC_GET_INSID(header)
Definition: mvcc.h:51
#define OR_MVCC_FLAG_VALID_INSID
#define MVCCID_ALL_VISIBLE
#define MVCC_IS_FLAG_SET(rec_header_p, flags)
Definition: mvcc.h:84

Definition at line 91 of file mvcc.h.

Referenced by btree_construct_leafs(), btree_sort_get_next(), mvcc_satisfies_vacuum(), and vacuum_heap_record_insid_and_prev_version().

#define MVCC_IS_HEADER_PREV_VERSION_VALID (   rec_header_p)
Value:
&& !LSA_ISNULL (&MVCC_GET_PREV_VERSION_LSA (rec_header_p)))
#define MVCC_GET_PREV_VERSION_LSA(header)
Definition: mvcc.h:152
#define OR_MVCC_FLAG_VALID_PREV_VERSION
#define MVCC_IS_FLAG_SET(rec_header_p, flags)
Definition: mvcc.h:84
bool LSA_ISNULL(const log_lsa *lsa_ptr)
Definition: log_lsa.hpp:153

Definition at line 140 of file mvcc.h.

#define MVCC_IS_REC_DELETED_BY (   rec_header_p,
  mvcc_id 
)    ((rec_header_p)->delid_chn.mvcc_del_id == mvcc_id)

Definition at line 126 of file mvcc.h.

#define MVCC_IS_REC_DELETED_BY_ME (   thread_p,
  rec_header_p 
)    (logtb_is_current_mvccid (thread_p, (rec_header_p)->mvcc_del_id))
#define MVCC_IS_REC_INSERTED_BY (   rec_header_p,
  mvcc_id 
)    ((rec_header_p)->mvcc_ins_id == mvcc_id)

Definition at line 122 of file mvcc.h.

#define MVCC_IS_REC_INSERTED_BY_ME (   thread_p,
  rec_header_p 
)    (logtb_is_current_mvccid (thread_p, (rec_header_p)->mvcc_ins_id))
#define MVCC_SET_CHN (   header,
  chn_ 
)    ((header)->chn = (chn_))

Definition at line 72 of file mvcc.h.

Referenced by heap_rv_mvcc_redo_insert().

#define MVCC_SET_FLAG (   header,
  flag 
)    ((header)->mvcc_flag = (flag))
#define MVCC_SET_FLAG_BITS (   rec_header_p,
  flag 
)    ((rec_header_p)->mvcc_flag |= (flag))
#define MVCC_SET_PREVIOUS_VERSION_LSA (   header,
  new_lsa 
)
Value:
do \
{ \
(header)->prev_version_lsa.pageid = (new_lsa)->pageid; \
(header)->prev_version_lsa.offset = (new_lsa)->offset; \
} \
while (0)
while(1)
Definition: cnvlex.c:816

Definition at line 144 of file mvcc.h.

Referenced by locator_update_force().

#define MVCC_SET_REPID (   header,
  rep_id 
)    ((header)->repid = (rep_id))

Definition at line 66 of file mvcc.h.

Referenced by heap_rv_mvcc_redo_insert(), and heap_rv_mvcc_redo_redistribute().

#define MVCC_SNAPSHOT_GET_HIGHEST_COMMITTED_ID (   snapshot)    ((snapshot)->highest_completed_mvccid)

Definition at line 108 of file mvcc.h.

#define MVCC_SNAPSHOT_GET_LOWEST_ACTIVE_ID (   snapshot)    ((snapshot)->lowest_active_mvccid)

Definition at line 105 of file mvcc.h.

Typedef Documentation

typedef struct mvcc_info MVCC_INFO

Definition at line 191 of file mvcc.h.

Definition at line 37 of file mvcc.h.

Definition at line 224 of file mvcc.h.

Definition at line 164 of file mvcc.h.

Definition at line 233 of file mvcc.h.

typedef struct mvcc_snapshot MVCC_SNAPSHOT

Definition at line 165 of file mvcc.h.

typedef MVCC_SATISFIES_SNAPSHOT_RESULT(* MVCC_SNAPSHOT_FUNC) (THREAD_ENTRY *thread_p, MVCC_REC_HEADER *rec_header, MVCC_SNAPSHOT *snapshot)

Definition at line 167 of file mvcc.h.

Enumeration Type Documentation

Enumerator
DELETE_RECORD_INSERT_IN_PROGRESS 
DELETE_RECORD_CAN_DELETE 
DELETE_RECORD_DELETED 
DELETE_RECORD_DELETE_IN_PROGRESS 
DELETE_RECORD_SELF_DELETED 

Definition at line 216 of file mvcc.h.

Enumerator
TOO_OLD_FOR_SNAPSHOT 
SNAPSHOT_SATISFIED 
TOO_NEW_FOR_SNAPSHOT 

Definition at line 155 of file mvcc.h.

Enumerator
VACUUM_RECORD_REMOVE 
VACUUM_RECORD_DELETE_INSID_PREV_VER 
VACUUM_RECORD_CANNOT_VACUUM 

Definition at line 226 of file mvcc.h.

Function Documentation

MVCC_SATISFIES_SNAPSHOT_RESULT mvcc_is_not_deleted_for_snapshot ( THREAD_ENTRY thread_p,
MVCC_REC_HEADER rec_header,
MVCC_SNAPSHOT snapshot 
)

Definition at line 268 of file mvcc.c.

References assert, MVCC_IS_HEADER_DELID_VALID, MVCC_IS_REC_DELETED_BY_ME, MVCC_IS_REC_DELETER_IN_SNAPSHOT, NULL, SNAPSHOT_SATISFIED, and TOO_OLD_FOR_SNAPSHOT.

Referenced by heap_is_object_not_null().

Here is the caller graph for this function:

MVCC_SATISFIES_SNAPSHOT_RESULT mvcc_satisfies_dirty ( THREAD_ENTRY thread_p,
MVCC_REC_HEADER rec_header,
MVCC_SNAPSHOT snapshot 
)