2007-09-06 20:13:56 +00:00
# ifndef _DB_H
# define _DB_H
2008-01-24 15:10:32 +00:00
/* This code generated by make_db_h. Copyright (c) 2007, 2008 Tokutek */
# ident "Copyright (c) 2007, 2008 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-16 23:58:02 -04:00
# define DB_VERSION_PATCH 19
2007-09-06 20:13:56 +00:00
# ifndef _TOKUDB_WRAP_H
2013-04-16 23:58:02 -04:00
# define DB_VERSION_STRING "Tokutek: TokuDB 4.6.19"
2007-11-14 17:52:59 +00:00
# else
# define DB_VERSION_STRING_ydb "Tokutek: TokuDB (wrapped bdb)"
2007-07-13 19:37:47 +00:00
# endif
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 ;
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 * ) ;
typedef int ( * YDB_HEAVISIDE_CALLBACK_FUNCTION ) ( DBT const * key , DBT const * value , void * extra_f , int r_h ) ;
typedef int ( * YDB_HEAVISIDE_FUNCTION ) ( const DBT * key , const DBT * value , void * extra_h ) ;
2013-04-16 23:57:48 -04:00
# include <tdb-internal.h>
2013-04-16 23:58:57 -04:00
# ifndef __BIGGEST_ALIGNMENT__
# define __BIGGEST_ALIGNMENT__ 16
# endif
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 */
} DB_BTREE_STAT64 ;
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:58:02 -04:00
typedef struct __toku_engine_status {
2013-04-16 23:58:03 -04:00
char now [ 26 ] ; /* time of engine status query (i.e. now) */
2013-04-16 23:58:06 -04:00
u_int64_t ydb_lock_ctr ; /* how many times has ydb lock been taken/released */
u_int64_t max_possible_sleep ; /* max possible sleep time for ydb lock scheduling (constant) */
u_int64_t processor_freq_mhz ; /* clock frequency in MHz */
u_int64_t max_requested_sleep ; /* max sleep time requested, can be larger than max possible */
u_int64_t times_max_sleep_used ; /* number of times the max_possible_sleep was used to sleep */
u_int64_t total_sleepers ; /* total number of times a client slept for ydb lock scheduling */
u_int64_t total_sleep_time ; /* total time spent sleeping for ydb lock scheduling */
u_int64_t max_waiters ; /* max number of simultaneous client threads kept waiting for ydb lock */
u_int64_t total_waiters ; /* total number of times a client thread waited for ydb lock */
u_int64_t total_clients ; /* total number of separate client threads that use ydb lock */
u_int64_t time_ydb_lock_held_unavailable ; /* number of times a thread migrated and theld is unavailable */
u_int64_t max_time_ydb_lock_held ; /* max time a client thread held the ydb lock */
u_int64_t total_time_ydb_lock_held ; /* total time client threads held the ydb lock */
2013-04-16 23:58:02 -04:00
u_int32_t checkpoint_period ; /* delay between automatic checkpoints */
2013-04-16 23:58:03 -04:00
u_int32_t checkpoint_footprint ; /* state of checkpoint procedure */
2013-04-16 23:58:03 -04:00
char checkpoint_time_begin [ 26 ] ; /* time of last checkpoint begin */
char checkpoint_time_begin_complete [ 26 ] ; /* time of last complete checkpoint begin */
char checkpoint_time_end [ 26 ] ; /* time of last checkpoint end */
2013-04-16 23:58:06 -04:00
u_int64_t cachetable_lock_taken ; /* how many times has cachetable lock been taken */
u_int64_t cachetable_lock_released ; /* how many times has cachetable lock been released */
2013-04-16 23:58:03 -04:00
u_int64_t cachetable_hit ; /* how many cache hits */
u_int64_t cachetable_miss ; /* how many cache misses */
2013-04-16 23:58:06 -04:00
u_int64_t cachetable_misstime ; /* how many usec spent waiting for disk read because of cache miss */
u_int64_t cachetable_waittime ; /* how many usec spent waiting for another thread to release cache line */
2013-04-16 23:58:03 -04:00
u_int64_t cachetable_wait_reading ; /* how many times get_and_pin waits for a node to be read */
u_int64_t cachetable_wait_writing ; /* how many times get_and_pin waits for a node to be written */
2013-04-16 23:59:04 -04:00
u_int64_t cachetable_wait_checkpoint ; /* how many times get_and_pin waits for a node to be written for a checkpoint*/
2013-04-16 23:58:03 -04:00
u_int64_t puts ; /* how many times has a newly created node been put into the cachetable */
u_int64_t prefetches ; /* how many times has a block been prefetched into the cachetable */
2013-04-16 23:58:06 -04:00
u_int64_t maybe_get_and_pins ; /* how many times has maybe_get_and_pin(_clean) been called */
u_int64_t maybe_get_and_pin_hits ; /* how many times has get_and_pin(_clean) returned with a node */
2013-04-16 23:58:03 -04:00
int64_t cachetable_size_current ; /* sum of the sizes of the nodes represented in the cachetable */
int64_t cachetable_size_limit ; /* the limit to the sum of the node sizes */
int64_t cachetable_size_writing ; /* the sum of the sizes of the nodes being written */
2013-04-16 23:58:06 -04:00
int64_t get_and_pin_footprint ; /* state of get_and_pin procedure */
2013-04-16 23:58:03 -04:00
u_int32_t range_locks_max ; /* max total number of range locks */
2013-04-16 23:59:04 -04:00
u_int32_t range_locks_max_per_index ; /* max range locks per dictionary */
2013-04-16 23:58:03 -04:00
u_int32_t range_locks_curr ; /* total range locks currently in use */
2013-04-16 23:59:06 -04:00
u_int32_t range_lock_escalation_successes ; /* number of times range locks escalation succeeded */
u_int32_t range_lock_escalation_failures ; /* number of times range locks escalation failed */
2013-04-16 23:58:03 -04:00
u_int64_t inserts ; /* ydb row insert operations */
u_int64_t deletes ; /* ydb row delete operations */
u_int64_t commits ; /* ydb txn commit operations */
u_int64_t aborts ; /* ydb txn abort operations */
u_int64_t point_queries ; /* ydb point queries */
u_int64_t sequential_queries ; /* ydb sequential queries */
2013-04-16 23:58:52 -04:00
u_int64_t fsync_count ; /* number of times fsync performed */
u_int64_t fsync_time ; /* total time required to fsync */
2013-04-16 23:59:03 -04:00
u_int64_t logger_ilock_ctr ; /* how many times has logger input lock been taken or released */
u_int64_t logger_olock_ctr ; /* how many times has logger output condition lock been taken or released */
u_int64_t logger_swap_ctr ; /* how many times have logger buffers been swapped */
2013-04-16 23:59:03 -04:00
char enospc_most_recent [ 26 ] ; /* time of most recent ENOSPC error return from disk write */
u_int64_t enospc_threads_blocked ; /* how many threads are currently blocked by ENOSPC */
u_int64_t enospc_total ; /* how many times has ENOSPC been returned by disk write */
2013-04-16 23:59:04 -04:00
u_int64_t enospc_seal_ctr ; /* how many times has ENOSPC been returned to user (red zone) */
u_int64_t enospc_seal_state ; /* state of ydb-level seal (0 = green, 1 = yellow, 2 = red) */
2013-04-16 23:58:02 -04:00
} ENGINE_STATUS ;
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-14 17:52:59 +00:00
# ifndef _TOKUDB_WRAP_H
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_DUP 32768
# define DB_DUPSORT 65536
# define DB_KEYFIRST 13
# define DB_KEYLAST 14
# define DB_NOOVERWRITE 20
2013-04-16 23:59:00 -04:00
# define DB_NODUPDATA 19
# define DB_YESOVERWRITE 1
# define DB_NOOVERWRITE_NO_ERROR 2
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
2013-04-16 23:58:02 -04:00
# define DB_CLOSE_DONT_TRIM_LOG 1048576
2013-04-16 23:57:39 -04:00
# 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_GET_BOTH 8
# define DB_GET_BOTH_RANGE 10
# define DB_LAST 15
# define DB_CURRENT 6
# define DB_NEXT 16
# define DB_NEXT_DUP 17
# define DB_NEXT_NODUP 18
# define DB_PREV 23
2013-04-16 23:57:41 -04:00
# define DB_PREV_DUP 24
2013-04-16 23:57:39 -04:00
# 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
# define DB_GET_BOTH_RANGE_REVERSE 251
2013-04-16 23:57:39 -04:00
# define DB_RMW 1073741824
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
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: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
2007-10-19 17:05:10 +00:00
# endif
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: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:57:41 -04:00
# define TOKUDB_FOUND_BUT_REJECTED -100002
# define TOKUDB_USER_CALLBACK_ERROR -100003
2013-04-16 23:59:01 -04:00
/* LOADER flags */
# define LOADER_USE_PUTS 1
2007-09-06 20:13:56 +00:00
/* in wrap mode, top-level function txn_begin is renamed, but the field isn't renamed, so we have to hack it here.*/
# ifdef _TOKUDB_WRAP_H
2007-07-17 15:38:36 +00:00
# undef txn_begin
# endif
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: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). */ ;
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 ( * set_default_dup_compare ) ( DB_ENV * , int ( * bt_compare ) ( DB * , const DBT * , const DBT * ) ) /* Set default (val) comparison function for all DBs in this environment. Required for RECOVERY since you cannot open the DBs manually. */ ;
2013-04-16 23:58:02 -04:00
int ( * get_engine_status ) ( DB_ENV * , ENGINE_STATUS * ) /* Fill in status struct */ ;
2013-04-16 23:58:06 -04:00
int ( * get_engine_status_text ) ( DB_ENV * , char * , int ) /* Fill in status text */ ;
2013-04-16 23:59:01 -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:03 -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 ) ;
2013-04-16 23:58:59 -04:00
void * app_private ;
2013-04-16 23:58:59 -04:00
int ( * put_multiple ) ( DB_ENV * env , DB * src_db , DB_TXN * txn ,
const DBT * key , const DBT * val ,
uint32_t num_dbs , DB * * db_array , DBT * keys , DBT * vals , uint32_t * flags_array ,
void * extra ) /* Insert into multiple dbs */ ;
int ( * set_generate_row_callback_for_put ) ( DB_ENV * env ,
int ( * generate_row_for_put ) ( DB * dest_db , DB * src_db ,
DBT * dest_key , DBT * dest_val ,
const DBT * src_key , const DBT * src_val ,
2013-04-16 23:58:59 -04:00
void * extra ) ) ;
2013-04-16 23:58:59 -04:00
int ( * del_multiple ) ( DB_ENV * env , DB * src_db , DB_TXN * txn ,
const DBT * key , const DBT * val ,
uint32_t num_dbs , DB * * db_array , DBT * keys , uint32_t * flags_array ,
void * extra ) /* Insert into multiple dbs */ ;
int ( * set_generate_row_callback_for_del ) ( DB_ENV * env ,
int ( * generate_row_for_del ) ( DB * dest_db , DB * src_db ,
DBT * dest_key ,
const DBT * src_key , const DBT * src_val ,
2013-04-16 23:58:59 -04:00
void * extra ) ) ;
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: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 * , . . . ) ;
int ( * get_cachesize ) ( DB_ENV * , u_int32_t * , u_int32_t * , int * ) ;
int ( * get_flags ) ( DB_ENV * , u_int32_t * ) ;
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 ) ;
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:57:48 -04:00
typedef int ( * toku_dbt_upgradef ) ( DB * ,
u_int32_t old_version , const DBT * old_descriptor , const DBT * old_key , const DBT * old_val ,
u_int32_t new_version , const DBT * new_descriptor , const DBT * new_key , const DBT * new_val ) ;
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 * ) ;
2013-04-16 23:58:02 -04:00
void * app_private ;
DB_ENV * dbenv ;
2013-04-16 23:57:47 -04:00
int ( * pre_acquire_read_lock ) ( DB * , DB_TXN * , const DBT * , const DBT * , const DBT * , const DBT * ) ;
2008-07-09 16:55:59 +00:00
int ( * pre_acquire_table_lock ) ( DB * , DB_TXN * ) ;
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.*/ ;
2008-08-18 03:27:37 +00:00
int ( * delboth ) ( DB * , DB_TXN * , DBT * , DBT * , u_int32_t ) /* Delete the key/value pair. */ ;
2013-04-16 23:57:42 -04:00
int ( * row_size_supported ) ( DB * , u_int32_t ) /* Test whether a row size is supported. */ ;
2013-04-16 23:57:48 -04:00
const DBT * descriptor /* saved row/dictionary descriptor for aiding in comparisons */ ;
2013-04-16 23:57:48 -04:00
int ( * set_descriptor ) ( DB * , u_int32_t version , const DBT * descriptor , toku_dbt_upgradef dbt_userformat_upgrade ) /* set 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) */ ;
int ( * getf_get_both ) ( DB * , DB_TXN * , u_int32_t , DBT * , DBT * , YDB_CALLBACK_FUNCTION , void * ) /* same as DBC->c_getf_get_both without a persistent cursor) */ ;
2013-04-16 23:57:59 -04:00
int ( * flatten ) ( DB * , DB_TXN * ) /* Flatten a dictionary, similar to (but faster than) a table scan */ ;
2013-04-16 23:59:01 -04:00
int ( * get_fragmentation ) ( DB * , TOKU_DB_FRAGMENTATION ) ;
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 ) ;
int ( * set_bt_compare ) ( DB * , int ( * ) ( DB * , const DBT * , const DBT * ) ) ;
int ( * set_dup_compare ) ( DB * , int ( * ) ( DB * , const DBT * , const DBT * ) ) ;
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:58:02 -04:00
DB_ENV * mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/ ;
DB_TXN * parent ;
2013-04-16 23:57:38 -04:00
int ( * txn_stat ) ( DB_TXN * , struct txn_stat * * ) ;
2013-04-16 23:58:03 -04:00
struct { void * next , * prev ; } 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-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-16 23:58:57 -04:00
char iic [ 0 ] __attribute__ ( ( aligned ( __BIGGEST_ALIGNMENT__ ) ) ) ;
# define db_txn_struct_i(x) ((struct __toku_db_txn_internal *)(&(x)->iic))
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:58:02 -04:00
DB * dbp ;
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_next_dup ) ( DBC * , u_int32_t , YDB_CALLBACK_FUNCTION , void * ) ;
int ( * c_getf_next_nodup ) ( DBC * , u_int32_t , YDB_CALLBACK_FUNCTION , void * ) ;
int ( * c_getf_prev ) ( DBC * , u_int32_t , YDB_CALLBACK_FUNCTION , void * ) ;
int ( * c_getf_prev_dup ) ( DBC * , u_int32_t , YDB_CALLBACK_FUNCTION , void * ) ;
int ( * c_getf_prev_nodup ) ( 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_heaviside ) ( DBC * , u_int32_t , YDB_HEAVISIDE_CALLBACK_FUNCTION f , void * extra_f , YDB_HEAVISIDE_FUNCTION h , void * extra_h , int direction ) ;
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:57:41 -04:00
int ( * c_getf_get_both ) ( DBC * , u_int32_t , DBT * , DBT * , YDB_CALLBACK_FUNCTION , void * ) ;
int ( * c_getf_get_both_range ) ( DBC * , u_int32_t , DBT * , DBT * , YDB_CALLBACK_FUNCTION , void * ) ;
2013-04-16 23:57:59 -04:00
int ( * c_getf_get_both_range_reverse ) ( DBC * , u_int32_t , DBT * , DBT * , YDB_CALLBACK_FUNCTION , void * ) ;
2013-04-16 23:58:02 -04:00
int ( * c_close ) ( DBC * ) ;
int ( * c_count ) ( DBC * , db_recno_t * , u_int32_t ) ;
int ( * c_del ) ( DBC * , u_int32_t ) ;
int ( * c_get ) ( DBC * , DBT * , DBT * , u_int32_t ) ;
2013-04-16 23:58:57 -04:00
char iic [ 0 ] __attribute__ ( ( aligned ( __BIGGEST_ALIGNMENT__ ) ) ) ;
# define dbc_struct_i(x) ((struct __toku_dbc_internal *)(&(x)->iic))
2007-09-06 20:13:56 +00:00
} ;
# ifdef _TOKUDB_WRAP_H
# define txn_begin txn_begin_tokudb
2007-07-17 15:38:36 +00:00
# endif
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: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:57:38 -04:00
int db_env_set_func_write ( ssize_t ( * ) ( int , const void * , size_t ) ) __attribute__ ( ( __visibility__ ( " default " ) ) ) ;
2013-04-16 23:57:34 -04:00
int db_env_set_func_realloc ( void * ( * ) ( void * , size_t ) ) __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 " ) ) ) ;
2007-07-13 19:37:47 +00:00
# if defined(__cplusplus)
}
# endif
# endif