2007-09-06 20:13:56 +00:00
# ifndef _DB_H
# define _DB_H
2013-04-17 00:00:10 -04:00
/* This code generated by make_db_h. Copyright (c) 2007-2011 Tokutek */
# ident "Copyright (c) 2007-2011 Tokutek Inc. All rights reserved."
2007-09-06 20:13:56 +00:00
# include <sys/types.h>
2007-10-15 03:32:32 +00:00
/*stdio is needed for the FILE* in db->verify*/
# include <stdio.h>
2013-04-16 23:58:56 -04:00
# include <stdint.h>
2007-07-13 19:37:47 +00:00
# if defined(__cplusplus)
extern " C " {
# endif
2007-11-28 20:04:35 +00:00
# define TOKUDB 1
2013-04-16 23:58:02 -04:00
# define TOKUDB_NATIVE_H 1
2007-09-19 18:34:17 +00:00
# define DB_VERSION_MAJOR 4
2013-04-16 23:57:39 -04:00
# define DB_VERSION_MINOR 6
2013-04-17 00:00:12 -04:00
/* As of r40364 (post TokuDB 5.2.7), the patch version number is 100+ the BDB header patch version number.*/
# define DB_VERSION_PATCH 119
# define DB_VERSION_STRING "Tokutek: TokuDB 4.6.119"
# define DB_GID_SIZE 128
2013-04-16 23:57:43 -04:00
# ifndef TOKU_OFF_T_DEFINED
# define TOKU_OFF_T_DEFINED
typedef int64_t toku_off_t ;
# endif
2007-09-06 20:13:56 +00:00
typedef struct __toku_db_env DB_ENV ;
typedef struct __toku_db_key_range DB_KEY_RANGE ;
typedef struct __toku_db_lsn DB_LSN ;
typedef struct __toku_db DB ;
typedef struct __toku_db_txn DB_TXN ;
typedef struct __toku_db_txn_active DB_TXN_ACTIVE ;
typedef struct __toku_db_txn_stat DB_TXN_STAT ;
typedef struct __toku_dbc DBC ;
typedef struct __toku_dbt DBT ;
2013-04-17 00:00:10 -04:00
typedef struct __toku_db_preplist { DB_TXN * txn ; uint8_t gid [ DB_GID_SIZE ] ; } DB_PREPLIST ;
2008-01-10 16:29:45 +00:00
typedef u_int32_t db_recno_t ;
2013-04-16 23:57:41 -04:00
typedef int ( * YDB_CALLBACK_FUNCTION ) ( DBT const * , DBT const * , void * ) ;
2013-04-16 23:57:48 -04:00
# include <tdb-internal.h>
2013-04-16 23:57:47 -04:00
typedef struct __toku_db_btree_stat64 {
u_int64_t bt_nkeys ; /* how many unique keys (guaranteed only to be an estimate, even when flattened) */
u_int64_t bt_ndata ; /* how many key-value pairs (an estimate, but exact when flattened) */
u_int64_t bt_dsize ; /* how big are the keys+values (not counting the lengths) (an estimate, unless flattened) */
u_int64_t bt_fsize ; /* how big is the underlying file */
2013-04-16 23:59:51 -04:00
u_int64_t bt_create_time_sec ; /* Creation time, in seconds */
u_int64_t bt_modify_time_sec ; /* Time of last serialization, in seconds */
2013-04-16 23:59:54 -04:00
u_int64_t bt_verify_time_sec ; /* Time of last verification, in seconds */
2013-04-16 23:57:47 -04:00
} DB_BTREE_STAT64 ;
2013-04-17 00:00:14 -04:00
typedef enum toku_compression_method {
TOKU_NO_COMPRESSION = 0 ,
TOKU_ZLIB_METHOD = 8 ,
TOKU_QUICKLZ_METHOD = 9 ,
TOKU_LZMA_METHOD = 10 ,
TOKU_FAST_COMPRESSION_METHOD = 1 ,
TOKU_SMALL_COMPRESSION_METHOD = 2 ,
TOKU_DEFAULT_COMPRESSION_METHOD = TOKU_FAST_COMPRESSION_METHOD ,
} TOKU_COMPRESSION_METHOD ;
2013-04-16 23:58:59 -04:00
typedef struct __toku_loader DB_LOADER ;
struct __toku_loader_internal ;
struct __toku_loader {
struct __toku_loader_internal * i ;
2013-04-16 23:59:03 -04:00
int ( * set_error_callback ) ( DB_LOADER * loader , void ( * error_cb ) ( DB * db , int i , int err , DBT * key , DBT * val , void * error_extra ) , void * error_extra ) ; /* set the error callback */
2013-04-16 23:59:03 -04:00
int ( * set_poll_function ) ( DB_LOADER * loader , int ( * poll_func ) ( void * extra , float progress ) , void * poll_extra ) ; /* set the polling function */
2013-04-16 23:59:01 -04:00
int ( * put ) ( DB_LOADER * loader , DBT * key , DBT * val ) ; /* give a row to the loader */
int ( * close ) ( DB_LOADER * loader ) ; /* finish loading, free memory */
int ( * abort ) ( DB_LOADER * loader ) ; /* abort loading, free memory */
2013-04-16 23:58:59 -04:00
} ;
2013-04-16 23:59:29 -04:00
typedef struct __toku_indexer DB_INDEXER ;
struct __toku_indexer_internal ;
struct __toku_indexer {
struct __toku_indexer_internal * i ;
int ( * set_error_callback ) ( DB_INDEXER * indexer , void ( * error_cb ) ( DB * db , int i , int err , DBT * key , DBT * val , void * error_extra ) , void * error_extra ) ; /* set the error callback */
int ( * set_poll_function ) ( DB_INDEXER * indexer , int ( * poll_func ) ( void * extra , float progress ) , void * poll_extra ) ; /* set the polling function */
int ( * build ) ( DB_INDEXER * indexer ) ; /* build the indexes */
int ( * close ) ( DB_INDEXER * indexer ) ; /* finish indexing, free memory */
int ( * abort ) ( DB_INDEXER * indexer ) ; /* abort indexing, free memory */
} ;
2013-04-17 00:00:08 -04:00
typedef enum {
FS_GREEN = 0 , // green zone (we have lots of space)
FS_YELLOW = 1 , // yellow zone (issue warning but allow operations)
FS_RED = 2 , // red zone (prevent insert operations)
FS_BLOCKED = 3 // For reporting engine status, completely blocked
} fs_redzone_state ;
2013-04-17 00:00:12 -04:00
// engine status info
// engine status is passed to handlerton as an array of TOKU_ENGINE_STATUS_ROW_S[]
2013-04-17 00:00:08 -04:00
typedef enum {
FS_STATE = 0 , // interpret as file system state (redzone) enum
UINT64 , // interpret as uint64_t
CHARSTR , // interpret as char *
UNIXTIME , // interpret as time_t
TOKUTIME // interpret as tokutime_t
} toku_engine_status_display_type ;
typedef struct __toku_engine_status_row {
char * keyname ; // info schema key, should not change across revisions without good reason
char * legend ; // the text that will appear at user interface
toku_engine_status_display_type type ; // how to interpret the value
union {
uint64_t num ;
char * str ;
} value ;
} * TOKU_ENGINE_STATUS_ROW , TOKU_ENGINE_STATUS_ROW_S ;
2007-07-13 19:37:47 +00:00
typedef enum {
2007-12-11 19:34:21 +00:00
DB_BTREE = 1 ,
DB_UNKNOWN = 5
2007-07-13 19:37:47 +00:00
} DBTYPE ;
2007-11-29 21:06:11 +00:00
# define DB_VERB_DEADLOCK 1
2013-04-16 23:57:39 -04:00
# define DB_VERB_RECOVERY 8
# define DB_VERB_REPLICATION 32
# define DB_VERB_WAITSFOR 64
2007-09-06 20:13:56 +00:00
# define DB_ARCH_ABS 1
# define DB_ARCH_LOG 4
# define DB_CREATE 1
2007-12-18 16:22:21 +00:00
# define DB_CXX_NO_EXCEPTIONS 1
2013-04-16 23:57:39 -04:00
# define DB_EXCL 16384
# define DB_PRIVATE 8388608
# define DB_RDONLY 32
# define DB_RECOVER 64
2013-04-16 23:57:59 -04:00
# define DB_RUNRECOVERY -30975
2013-04-16 23:57:39 -04:00
# define DB_THREAD 128
# define DB_TXN_NOSYNC 512
2007-09-06 20:13:56 +00:00
# define DB_LOCK_DEFAULT 1
2007-11-29 21:06:11 +00:00
# define DB_LOCK_OLDEST 7
# define DB_LOCK_RANDOM 8
2013-04-16 23:57:39 -04:00
# define DB_KEYFIRST 13
# define DB_KEYLAST 14
# define DB_NOOVERWRITE 20
2013-04-16 23:59:00 -04:00
# define DB_NODUPDATA 19
2013-04-16 23:59:40 -04:00
# define DB_NOOVERWRITE_NO_ERROR 1
2007-12-14 14:26:22 +00:00
# define DB_OPFLAGS_MASK 255
2013-04-16 23:57:39 -04:00
# define DB_AUTO_COMMIT 33554432
# define DB_INIT_LOCK 131072
# define DB_INIT_LOG 262144
# define DB_INIT_MPOOL 524288
# define DB_INIT_TXN 2097152
2007-11-29 21:06:11 +00:00
# define DB_KEYEXIST -30996
# define DB_LOCK_DEADLOCK -30995
2008-01-22 00:01:01 +00:00
# define DB_LOCK_NOTGRANTED -30994
2007-11-29 21:06:11 +00:00
# define DB_NOTFOUND -30989
2013-04-16 23:57:39 -04:00
# define DB_SECONDARY_BAD -30974
2007-11-30 05:04:06 +00:00
# define DB_DONOTINDEX -30998
2007-12-10 17:04:02 +00:00
# define DB_BUFFER_SMALL -30999
2007-09-06 20:13:56 +00:00
# define DB_BADFORMAT -30500
2007-11-28 20:04:35 +00:00
# define DB_DELETE_ANY 65536
2013-04-16 23:57:55 -04:00
# define DB_TRUNCATE_WITHCURSORS 131072
2013-04-16 23:57:39 -04:00
# define DB_FIRST 7
# define DB_LAST 15
# define DB_CURRENT 6
# define DB_NEXT 16
# define DB_NEXT_NODUP 18
# define DB_PREV 23
# define DB_PREV_NODUP 25
# define DB_SET 26
# define DB_SET_RANGE 27
2008-02-03 18:26:01 +00:00
# define DB_CURRENT_BINDING 253
2013-04-16 23:57:59 -04:00
# define DB_SET_RANGE_REVERSE 252
2013-04-16 23:57:39 -04:00
# define DB_RMW 1073741824
2013-04-16 23:59:37 -04:00
# define DB_IS_RESETTING_OP 0x01000000
2008-06-10 15:39:31 +00:00
# define DB_PRELOCKED 0x00800000
2008-06-10 19:46:00 +00:00
# define DB_PRELOCKED_WRITE 0x00400000
2013-04-16 23:59:34 -04:00
# define DB_IS_HOT_INDEX 0x00100000
2013-04-16 23:59:59 -04:00
# define DBC_DISABLE_PREFETCHING 0x20000000
2007-11-30 05:04:06 +00:00
# define DB_DBT_APPMALLOC 1
2013-04-16 23:58:59 -04:00
# define DB_DBT_DUPOK 2
# define DB_DBT_MALLOC 8
2013-04-16 23:57:39 -04:00
# define DB_DBT_MULTIPLE 16
2013-04-16 23:58:59 -04:00
# define DB_DBT_REALLOC 64
# define DB_DBT_USERMEM 256
2013-04-16 23:57:39 -04:00
# define DB_LOG_AUTOREMOVE 524288
# define DB_TXN_WRITE_NOSYNC 4096
# define DB_TXN_NOWAIT 1024
2008-02-08 19:11:33 +00:00
# define DB_TXN_SYNC 16384
2013-04-16 23:59:22 -04:00
# define DB_TXN_SNAPSHOT 268435456
2013-04-16 23:58:56 -04:00
# define DB_READ_UNCOMMITTED 134217728
2013-04-16 23:59:05 -04:00
# define DB_READ_COMMITTED 67108864
2013-04-16 23:58:56 -04:00
# define DB_INHERIT_ISOLATION 1
2013-04-16 23:59:22 -04:00
# define DB_SERIALIZABLE 2
2008-03-19 14:39:27 +00:00
/* TOKUDB specific error codes */
# define TOKUDB_OUT_OF_LOCKS -100000
2008-05-16 20:09:13 +00:00
# define TOKUDB_SUCCEEDED_EARLY -100001
2013-04-16 23:59:10 -04:00
# define TOKUDB_FOUND_BUT_REJECTED -100002
# define TOKUDB_USER_CALLBACK_ERROR -100003
2013-04-16 23:57:47 -04:00
# define TOKUDB_DICTIONARY_TOO_OLD -100004
2013-04-16 23:57:49 -04:00
# define TOKUDB_DICTIONARY_TOO_NEW -100005
# define TOKUDB_DICTIONARY_NO_HEADER -100006
2013-04-16 23:59:10 -04:00
# define TOKUDB_CANCELED -100007
2013-04-16 23:59:13 -04:00
# define TOKUDB_NO_DATA -100008
2013-04-16 23:59:22 -04:00
# define TOKUDB_ACCEPT -100009
# define TOKUDB_MVCC_DICTIONARY_TOO_NEW -100010
2013-04-16 23:59:25 -04:00
# define TOKUDB_UPGRADE_FAILURE -100011
2013-04-16 23:59:34 -04:00
# define TOKUDB_TRY_AGAIN -100012
2013-04-16 23:59:35 -04:00
# define TOKUDB_NEEDS_REPAIR -100013
2013-04-16 23:59:46 -04:00
# define TOKUDB_CURSOR_CONTINUE -100014
2013-04-16 23:59:01 -04:00
/* LOADER flags */
# define LOADER_USE_PUTS 1
2013-04-16 23:59:30 -04:00
typedef int ( * generate_row_for_put_func ) ( DB * dest_db , DB * src_db , DBT * dest_key , DBT * dest_val , const DBT * src_key , const DBT * src_val ) ;
2013-04-16 23:59:30 -04:00
typedef int ( * generate_row_for_del_func ) ( DB * dest_db , DB * src_db , DBT * dest_key , const DBT * src_key , const DBT * src_val ) ;
2007-09-06 20:13:56 +00:00
struct __toku_db_env {
struct __toku_db_env_internal * i ;
2013-04-16 23:57:48 -04:00
# define db_env_struct_i(x) ((x)->i)
2013-04-16 23:57:49 -04:00
int ( * checkpointing_set_period ) ( DB_ENV * , u_int32_t ) /* Change the delay between automatic checkpoints. 0 means disabled. */ ;
int ( * checkpointing_get_period ) ( DB_ENV * , u_int32_t * ) /* Retrieve the delay between automatic checkpoints. 0 means disabled. */ ;
2013-04-16 23:59:54 -04:00
int ( * cleaner_set_period ) ( DB_ENV * , u_int32_t ) /* Change the delay between automatic cleaner attempts. 0 means disabled. */ ;
int ( * cleaner_get_period ) ( DB_ENV * , u_int32_t * ) /* Retrieve the delay between automatic cleaner attempts. 0 means disabled. */ ;
int ( * cleaner_set_iterations ) ( DB_ENV * , u_int32_t ) /* Change the number of attempts on each cleaner invokation. 0 means disabled. */ ;
int ( * cleaner_get_iterations ) ( DB_ENV * , u_int32_t * ) /* Retrieve the number of attempts on each cleaner invokation. 0 means disabled. */ ;
2013-04-16 23:57:47 -04:00
int ( * checkpointing_postpone ) ( DB_ENV * ) /* Use for 'rename table' or any other operation that must be disjoint from a checkpoint */ ;
int ( * checkpointing_resume ) ( DB_ENV * ) /* Alert tokudb 'postpone' is no longer necessary */ ;
int ( * checkpointing_begin_atomic_operation ) ( DB_ENV * ) /* Begin a set of operations (that must be atomic as far as checkpoints are concerned). i.e. inserting into every index in one table */ ;
int ( * checkpointing_end_atomic_operation ) ( DB_ENV * ) /* End a set of operations (that must be atomic as far as checkpoints are concerned). */ ;
2013-04-17 00:00:08 -04:00
int ( * set_default_bt_compare ) ( DB_ENV * , int ( * bt_compare ) ( DB * , const DBT * , const DBT * ) ) /* Set default (key) comparison function for all DBs in this environment. Required for RECOVERY since you cannot open the DBs manually. */ ;
int ( * get_engine_status_num_rows ) ( DB_ENV * , uint64_t * ) /* return number of rows in engine status */ ;
int ( * get_engine_status ) ( DB_ENV * , TOKU_ENGINE_STATUS_ROW , uint64_t , fs_redzone_state * , uint64_t * , char * , int ) /* Fill in status struct and redzone state, possibly env panic string */ ;
2013-04-16 23:58:06 -04:00
int ( * get_engine_status_text ) ( DB_ENV * , char * , int ) /* Fill in status text */ ;
2013-04-17 00:00:12 -04:00
int ( * crash ) ( DB_ENV * , const char */ * expr_as_string */ , const char */ * fun */ , const char */ * file */ , int /*line*/ , int /*errno*/ ) ;
2013-04-16 23:59:58 -04:00
int ( * get_iname ) ( DB_ENV * env , DBT * dname_dbt , DBT * iname_dbt ) /* FOR TEST ONLY: lookup existing iname */ ;
2013-04-16 23:59:29 -04:00
int ( * create_loader ) ( DB_ENV * env , DB_TXN * txn , DB_LOADER * * blp , DB * src_db , int N , DB * dbs [ /*N*/ ] , uint32_t db_flags [ /*N*/ ] , uint32_t dbt_flags [ /*N*/ ] , uint32_t loader_flags ) ;
int ( * create_indexer ) ( DB_ENV * env , DB_TXN * txn , DB_INDEXER * * idxrp , DB * src_db , int N , DB * dbs [ /*N*/ ] , uint32_t db_flags [ /*N*/ ] , uint32_t indexer_flags ) ;
2013-04-16 23:58:59 -04:00
int ( * put_multiple ) ( DB_ENV * env , DB * src_db , DB_TXN * txn ,
2013-04-17 00:00:10 -04:00
const DBT * src_key , const DBT * src_val ,
uint32_t num_dbs , DB * * db_array , DBT * keys , DBT * vals , uint32_t * flags_array ) /* insert into multiple DBs */ ;
2013-04-16 23:59:30 -04:00
int ( * set_generate_row_callback_for_put ) ( DB_ENV * env , generate_row_for_put_func generate_row_for_put ) ;
2013-04-16 23:58:59 -04:00
int ( * del_multiple ) ( DB_ENV * env , DB * src_db , DB_TXN * txn ,
2013-04-17 00:00:10 -04:00
const DBT * src_key , const DBT * src_val ,
uint32_t num_dbs , DB * * db_array , DBT * keys , uint32_t * flags_array ) /* delete from multiple DBs */ ;
2013-04-16 23:59:30 -04:00
int ( * set_generate_row_callback_for_del ) ( DB_ENV * env , generate_row_for_del_func generate_row_for_del ) ;
2013-04-16 23:59:24 -04:00
int ( * update_multiple ) ( DB_ENV * env , DB * src_db , DB_TXN * txn ,
2013-04-17 00:00:10 -04:00
DBT * old_src_key , DBT * old_src_data ,
DBT * new_src_key , DBT * new_src_data ,
uint32_t num_dbs , DB * * db_array , uint32_t * flags_array ,
uint32_t num_keys , DBT * keys ,
uint32_t num_vals , DBT * vals ) /* update multiple DBs */ ;
2013-04-16 23:59:04 -04:00
int ( * get_redzone ) ( DB_ENV * env , int * redzone ) /* get the redzone limit */ ;
int ( * set_redzone ) ( DB_ENV * env , int redzone ) /* set the redzone limit in percent of total space */ ;
2013-04-16 23:59:22 -04:00
int ( * set_lk_max_memory ) ( DB_ENV * env , uint64_t max ) ;
int ( * get_lk_max_memory ) ( DB_ENV * env , uint64_t * max ) ;
2013-04-16 23:59:37 -04:00
void ( * set_update ) ( DB_ENV * env , int ( * update_function ) ( DB * , const DBT * key , const DBT * old_val , const DBT * extra , void ( * set_val ) ( const DBT * new_val , void * set_extra ) , void * set_extra ) ) ;
2013-04-16 23:59:51 -04:00
int ( * set_lock_timeout ) ( DB_ENV * env , uint64_t lock_wait_time_msec ) ;
int ( * get_lock_timeout ) ( DB_ENV * env , uint64_t * lock_wait_time_msec ) ;
2013-04-17 00:00:12 -04:00
void * app_private ;
2013-04-16 23:58:02 -04:00
void * api1_internal ;
int ( * close ) ( DB_ENV * , u_int32_t ) ;
2013-04-16 23:58:04 -04:00
int ( * dbremove ) ( DB_ENV * , DB_TXN * , const char * , const char * , u_int32_t ) ;
int ( * dbrename ) ( DB_ENV * , DB_TXN * , const char * , const char * , const char * , u_int32_t ) ;
2013-04-16 23:58:02 -04:00
void ( * err ) ( const DB_ENV * , int , const char * , . . . ) ;
2013-04-17 00:00:10 -04:00
int ( * get_cachesize ) ( DB_ENV * , u_int32_t * , u_int32_t * , int * ) ;
int ( * get_flags ) ( DB_ENV * , u_int32_t * ) ;
2013-04-16 23:58:02 -04:00
int ( * get_lg_max ) ( DB_ENV * , u_int32_t * ) ;
int ( * get_lk_max_locks ) ( DB_ENV * , u_int32_t * ) ;
int ( * log_archive ) ( DB_ENV * , char * * [ ] , u_int32_t ) ;
int ( * log_flush ) ( DB_ENV * , const DB_LSN * ) ;
int ( * open ) ( DB_ENV * , const char * , u_int32_t , int ) ;
int ( * set_cachesize ) ( DB_ENV * , u_int32_t , u_int32_t , int ) ;
int ( * set_data_dir ) ( DB_ENV * , const char * ) ;
void ( * set_errcall ) ( DB_ENV * , void ( * ) ( const DB_ENV * , const char * , const char * ) ) ;
void ( * set_errfile ) ( DB_ENV * , FILE * ) ;
void ( * set_errpfx ) ( DB_ENV * , const char * ) ;
int ( * set_flags ) ( DB_ENV * , u_int32_t , int ) ;
int ( * set_lg_bsize ) ( DB_ENV * , u_int32_t ) ;
int ( * set_lg_dir ) ( DB_ENV * , const char * ) ;
int ( * set_lg_max ) ( DB_ENV * , u_int32_t ) ;
int ( * set_lk_detect ) ( DB_ENV * , u_int32_t ) ;
int ( * set_lk_max_locks ) ( DB_ENV * , u_int32_t ) ;
int ( * set_tmp_dir ) ( DB_ENV * , const char * ) ;
int ( * set_verbose ) ( DB_ENV * , u_int32_t , int ) ;
int ( * txn_begin ) ( DB_ENV * , DB_TXN * , DB_TXN * * , u_int32_t ) ;
int ( * txn_checkpoint ) ( DB_ENV * , u_int32_t , u_int32_t , u_int32_t ) ;
2013-04-17 00:00:10 -04:00
int ( * txn_recover ) ( DB_ENV * , DB_PREPLIST preplist [ /*count*/ ] , long count , /*out*/ long * retp , u_int32_t flags ) ;
2013-04-16 23:58:02 -04:00
int ( * txn_stat ) ( DB_ENV * , DB_TXN_STAT * * , u_int32_t ) ;
2007-09-06 20:13:56 +00:00
} ;
struct __toku_db_key_range {
2013-04-16 23:58:02 -04:00
double less ;
double equal ;
double greater ;
2007-09-06 20:13:56 +00:00
} ;
struct __toku_db_lsn {
} ;
2013-04-16 23:57:47 -04:00
struct __toku_dbt {
2013-04-16 23:58:02 -04:00
void * data ;
u_int32_t size ;
u_int32_t ulen ;
u_int32_t flags ;
2013-04-16 23:57:47 -04:00
} ;
2013-04-16 23:59:17 -04:00
typedef struct __toku_descriptor {
DBT dbt ;
} * DESCRIPTOR , DESCRIPTOR_S ;
2013-04-16 23:59:01 -04:00
//One header is included in 'data'
//One header is included in 'additional for checkpoint'
typedef struct __toku_db_fragmentation {
uint64_t file_size_bytes ; //Total file size in bytes
uint64_t data_bytes ; //Compressed User Data in bytes
uint64_t data_blocks ; //Number of blocks of compressed User Data
uint64_t checkpoint_bytes_additional ; //Additional bytes used for checkpoint system
uint64_t checkpoint_blocks_additional ; //Additional blocks used for checkpoint system
uint64_t unused_bytes ; //Unused space in file
uint64_t unused_blocks ; //Number of contiguous regions of unused space
uint64_t largest_unused_block ; //Size of largest contiguous unused space
} * TOKU_DB_FRAGMENTATION , TOKU_DB_FRAGMENTATION_S ;
2007-09-06 20:13:56 +00:00
struct __toku_db {
struct __toku_db_internal * i ;
2013-04-16 23:57:48 -04:00
# define db_struct_i(x) ((x)->i)
2008-05-13 13:09:22 +00:00
int ( * key_range64 ) ( DB * , DB_TXN * , DBT * , u_int64_t * less , u_int64_t * equal , u_int64_t * greater , int * is_exact ) ;
2013-04-16 23:57:47 -04:00
int ( * stat64 ) ( DB * , DB_TXN * , DB_BTREE_STAT64 * ) ;
2008-07-09 16:55:59 +00:00
int ( * pre_acquire_table_lock ) ( DB * , DB_TXN * ) ;
2013-04-16 23:59:24 -04:00
int ( * pre_acquire_fileops_lock ) ( DB * , DB_TXN * ) ;
2008-07-09 16:55:59 +00:00
const DBT * ( * dbt_pos_infty ) ( void ) /* Return the special DBT that refers to positive infinity in the lock table.*/ ;
const DBT * ( * dbt_neg_infty ) ( void ) /* Return the special DBT that refers to negative infinity in the lock table.*/ ;
2013-04-17 00:00:07 -04:00
void ( * get_max_row_size ) ( DB * , u_int32_t * max_key_size , u_int32_t * max_row_size ) ;
2013-04-16 23:59:17 -04:00
DESCRIPTOR descriptor /* saved row/dictionary descriptor for aiding in comparisons */ ;
2013-04-16 23:59:37 -04:00
int ( * change_descriptor ) ( DB * , DB_TXN * , const DBT * descriptor , u_int32_t ) /* change row/dictionary descriptor for a db. Available only while db is open */ ;
2013-04-16 23:57:58 -04:00
int ( * getf_set ) ( DB * , DB_TXN * , u_int32_t , DBT * , YDB_CALLBACK_FUNCTION , void * ) /* same as DBC->c_getf_set without a persistent cursor) */ ;
2013-04-16 23:59:22 -04:00
int ( * optimize ) ( DB * ) /* Run garbage collecion and promote all transactions older than oldest. Amortized (happens during flattening) */ ;
2013-04-17 00:00:03 -04:00
int ( * hot_optimize ) ( DB * , int ( * progress_callback ) ( void * progress_extra , float progress ) , void * progress_extra ) ;
2013-04-16 23:59:01 -04:00
int ( * get_fragmentation ) ( DB * , TOKU_DB_FRAGMENTATION ) ;
2013-04-16 23:59:44 -04:00
int ( * get_readpagesize ) ( DB * , u_int32_t * ) ;
int ( * set_readpagesize ) ( DB * , u_int32_t ) ;
2013-04-17 00:00:14 -04:00
int ( * get_compression_method ) ( DB * , TOKU_COMPRESSION_METHOD * ) ;
int ( * set_compression_method ) ( DB * , TOKU_COMPRESSION_METHOD ) ;
2013-04-16 23:59:29 -04:00
int ( * set_indexer ) ( DB * , DB_INDEXER * ) ;
void ( * get_indexer ) ( DB * , DB_INDEXER * * ) ;
2013-04-16 23:59:35 -04:00
int ( * verify_with_progress ) ( DB * , int ( * progress_callback ) ( void * progress_extra , float progress ) , void * progress_extra , int verbose , int keep_going ) ;
2013-04-16 23:59:37 -04:00
int ( * update ) ( DB * , DB_TXN * , const DBT * key , const DBT * extra , u_int32_t flags ) ;
int ( * update_broadcast ) ( DB * , DB_TXN * , const DBT * extra , u_int32_t flags ) ;
2013-04-17 00:00:12 -04:00
void * app_private ;
DB_ENV * dbenv ;
2013-04-16 23:58:02 -04:00
void * api_internal ;
int ( * close ) ( DB * , u_int32_t ) ;
int ( * cursor ) ( DB * , DB_TXN * , DBC * * , u_int32_t ) ;
int ( * del ) ( DB * , DB_TXN * , DBT * , u_int32_t ) ;
int ( * fd ) ( DB * , int * ) ;
int ( * get ) ( DB * , DB_TXN * , DBT * , DBT * , u_int32_t ) ;
int ( * get_flags ) ( DB * , u_int32_t * ) ;
int ( * get_pagesize ) ( DB * , u_int32_t * ) ;
int ( * key_range ) ( DB * , DB_TXN * , DBT * , DB_KEY_RANGE * , u_int32_t ) ;
int ( * open ) ( DB * , DB_TXN * , const char * , const char * , DBTYPE , u_int32_t , int ) ;
int ( * put ) ( DB * , DB_TXN * , DBT * , DBT * , u_int32_t ) ;
int ( * remove ) ( DB * , const char * , const char * , u_int32_t ) ;
int ( * rename ) ( DB * , const char * , const char * , const char * , u_int32_t ) ;
void ( * set_errfile ) ( DB * , FILE * ) ;
int ( * set_flags ) ( DB * , u_int32_t ) ;
int ( * set_pagesize ) ( DB * , u_int32_t ) ;
int ( * stat ) ( DB * , void * , u_int32_t ) ;
int ( * truncate ) ( DB * , DB_TXN * , u_int32_t * , u_int32_t ) ;
int ( * verify ) ( DB * , const char * , const char * , FILE * , u_int32_t ) ;
2007-09-06 20:13:56 +00:00
} ;
struct __toku_db_txn_active {
2013-04-16 23:58:02 -04:00
u_int32_t txnid ;
DB_LSN lsn ;
2007-09-06 20:13:56 +00:00
} ;
2013-04-16 23:59:01 -04:00
typedef struct __toku_txn_progress {
uint64_t entries_total ;
uint64_t entries_processed ;
uint8_t is_commit ;
uint8_t stalled_on_checkpoint ;
} * TOKU_TXN_PROGRESS , TOKU_TXN_PROGRESS_S ;
typedef void ( * TXN_PROGRESS_POLL_FUNCTION ) ( TOKU_TXN_PROGRESS , void * ) ;
2013-04-16 23:57:38 -04:00
struct txn_stat {
2013-04-16 23:59:05 -04:00
u_int64_t rollback_raw_count ;
2013-04-16 23:57:38 -04:00
} ;
2007-09-06 20:13:56 +00:00
struct __toku_db_txn {
2013-04-16 23:57:38 -04:00
int ( * txn_stat ) ( DB_TXN * , struct txn_stat * * ) ;
2013-04-17 00:00:10 -04:00
struct toku_list open_txns ;
2013-04-16 23:59:01 -04:00
int ( * commit_with_progress ) ( DB_TXN * , uint32_t , TXN_PROGRESS_POLL_FUNCTION , void * ) ;
int ( * abort_with_progress ) ( DB_TXN * , TXN_PROGRESS_POLL_FUNCTION , void * ) ;
2013-04-17 00:00:12 -04:00
DB_ENV * mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/ ;
DB_TXN * parent ;
2013-04-16 23:58:02 -04:00
void * api_internal ;
int ( * abort ) ( DB_TXN * ) ;
int ( * commit ) ( DB_TXN * , u_int32_t ) ;
u_int32_t ( * id ) ( DB_TXN * ) ;
2013-04-17 00:00:10 -04:00
int ( * prepare ) ( DB_TXN * , u_int8_t gid [ DB_GID_SIZE ] ) ;
2007-09-06 20:13:56 +00:00
} ;
struct __toku_db_txn_stat {
2013-04-16 23:58:02 -04:00
u_int32_t st_nactive ;
DB_TXN_ACTIVE * st_txnarray ;
2007-09-06 20:13:56 +00:00
} ;
struct __toku_dbc {
2013-04-16 23:57:41 -04:00
int ( * c_getf_first ) ( DBC * , u_int32_t , YDB_CALLBACK_FUNCTION , void * ) ;
int ( * c_getf_last ) ( DBC * , u_int32_t , YDB_CALLBACK_FUNCTION , void * ) ;
int ( * c_getf_next ) ( DBC * , u_int32_t , YDB_CALLBACK_FUNCTION , void * ) ;
int ( * c_getf_prev ) ( DBC * , u_int32_t , YDB_CALLBACK_FUNCTION , void * ) ;
int ( * c_getf_current ) ( DBC * , u_int32_t , YDB_CALLBACK_FUNCTION , void * ) ;
int ( * c_getf_current_binding ) ( DBC * , u_int32_t , YDB_CALLBACK_FUNCTION , void * ) ;
int ( * c_getf_set ) ( DBC * , u_int32_t , DBT * , YDB_CALLBACK_FUNCTION , void * ) ;
int ( * c_getf_set_range ) ( DBC * , u_int32_t , DBT * , YDB_CALLBACK_FUNCTION , void * ) ;
2013-04-16 23:57:59 -04:00
int ( * c_getf_set_range_reverse ) ( DBC * , u_int32_t , DBT * , YDB_CALLBACK_FUNCTION , void * ) ;
2013-04-16 23:59:40 -04:00
int ( * c_pre_acquire_range_lock ) ( DBC * , const DBT * , const DBT * ) ;
2013-04-17 00:00:12 -04:00
DB * dbp ;
2013-04-16 23:58:02 -04:00
int ( * c_close ) ( DBC * ) ;
int ( * c_count ) ( DBC * , db_recno_t * , u_int32_t ) ;
int ( * c_get ) ( DBC * , DBT * , DBT * , u_int32_t ) ;
2007-09-06 20:13:56 +00:00
} ;
2008-03-05 11:54:58 +00:00
int db_env_create ( DB_ENV * * , u_int32_t ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
int db_create ( DB * * , DB_ENV * , u_int32_t ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
char * db_strerror ( int ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
const char * db_version ( int * , int * , int * ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
int log_compare ( const DB_LSN * , const DB_LSN * ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2008-03-09 02:39:37 +00:00
int db_env_set_func_fsync ( int ( * ) ( int ) ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2008-04-12 09:12:22 +00:00
int toku_set_trace_file ( char * fname ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
int toku_close_trace_file ( void ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:57:38 -04:00
int db_env_set_func_free ( void ( * ) ( void * ) ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:57:34 -04:00
int db_env_set_func_malloc ( void * ( * ) ( size_t ) ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:59:13 -04:00
int db_env_set_func_realloc ( void * ( * ) ( void * , size_t ) ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:57:42 -04:00
int db_env_set_func_pwrite ( ssize_t ( * ) ( int , const void * , size_t , toku_off_t ) ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:59:11 -04:00
int db_env_set_func_full_pwrite ( ssize_t ( * ) ( int , const void * , size_t , toku_off_t ) ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:57:38 -04:00
int db_env_set_func_write ( ssize_t ( * ) ( int , const void * , size_t ) ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:59:11 -04:00
int db_env_set_func_full_write ( ssize_t ( * ) ( int , const void * , size_t ) ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:59:13 -04:00
int db_env_set_func_fdopen ( FILE * ( * ) ( int , const char * ) ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
int db_env_set_func_fopen ( FILE * ( * ) ( const char * , const char * ) ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
int db_env_set_func_open ( int ( * ) ( const char * , int , int ) ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
int db_env_set_func_fclose ( int ( * ) ( FILE * ) ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:59:34 -04:00
int db_env_set_func_pread ( ssize_t ( * ) ( int , void * , size_t , off_t ) ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:59:08 -04:00
void db_env_set_func_loader_fwrite ( size_t ( * fwrite_fun ) ( const void * , size_t , size_t , FILE * ) ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:57:49 -04:00
void db_env_set_checkpoint_callback ( void ( * ) ( void * ) , void * ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:58:00 -04:00
void db_env_set_checkpoint_callback2 ( void ( * ) ( void * ) , void * ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:58:56 -04:00
void db_env_set_recover_callback ( void ( * ) ( void * ) , void * ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
void db_env_set_recover_callback2 ( void ( * ) ( void * ) , void * ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:59:11 -04:00
void db_env_set_loader_size_factor ( uint32_t ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:59:23 -04:00
void db_env_set_mvcc_garbage_collection_verification ( u_int32_t ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:59:31 -04:00
void db_env_enable_engine_status ( u_int32_t ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:59:50 -04:00
void db_env_set_flusher_thread_callback ( void ( * ) ( int , void * ) , void * ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2007-07-13 19:37:47 +00:00
# if defined(__cplusplus)
}
# endif
# endif