db.h 44.9 KB
Newer Older
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
1 2
#ifndef _DB_H
#define _DB_H
3 4
/* This code generated by make_db_h.   Copyright (c) 2007, 2008 Tokutek */
#ident "Copyright (c) 2007, 2008 Tokutek Inc.  All rights reserved."
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
5
#include <sys/types.h>
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
6 7
/*stdio is needed for the FILE* in db->verify*/
#include <stdio.h>
8
#include <stdint.h>
Bradley C. Kuszmaul's avatar
Rename  
Bradley C. Kuszmaul committed
9 10 11
#if defined(__cplusplus)
extern "C" {
#endif
12
#define TOKUDB 1
13
#define TOKUDB_NATIVE_H 1
14
#define DB_VERSION_MAJOR 4
15
#define DB_VERSION_MINOR 6
16
#define DB_VERSION_PATCH 19
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
17
#ifndef _TOKUDB_WRAP_H
18
#define DB_VERSION_STRING "Tokutek: TokuDB 4.6.19"
Bradley C. Kuszmaul's avatar
up  
Bradley C. Kuszmaul committed
19 20
#else
#define DB_VERSION_STRING_ydb "Tokutek: TokuDB (wrapped bdb)"
Bradley C. Kuszmaul's avatar
Rename  
Bradley C. Kuszmaul committed
21
#endif
22 23 24 25
#ifndef TOKU_OFF_T_DEFINED
#define TOKU_OFF_T_DEFINED
typedef int64_t toku_off_t;
#endif
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
26 27 28 29 30 31 32 33 34
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;
35
typedef u_int32_t db_recno_t;
36
typedef int(*YDB_CALLBACK_FUNCTION)(DBT const*, DBT const*, void*);
37
#include <tdb-internal.h>
38 39 40
#ifndef __BIGGEST_ALIGNMENT__
  #define __BIGGEST_ALIGNMENT__ 16
#endif
41 42 43 44 45
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                                                         */
John Esmet's avatar
John Esmet committed
46 47
  u_int64_t bt_create_time_sec; /* Creation time, in seconds */
  u_int64_t bt_modify_time_sec; /* Time of last serialization, in seconds */
48
  u_int64_t bt_verify_time_sec; /* Time of last verification, in seconds */
49
} DB_BTREE_STAT64;
50 51 52 53
typedef struct __toku_loader DB_LOADER;
struct __toku_loader_internal;
struct __toku_loader {
  struct __toku_loader_internal *i;
54
  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 */
55
  int (*set_poll_function)(DB_LOADER *loader, int (*poll_func)(void *extra, float progress), void *poll_extra);             /* set the polling function */
56 57 58
  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 */
59
};
60 61 62 63 64 65 66 67 68 69
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 */
};
70
typedef struct __toku_engine_status {
71
  char             creationtime[26];        /* time of environment creation */ 
72
  char             startuptime[26];         /* time of engine startup */ 
73
  char             now[26];                 /* time of engine status query (i.e. now)  */ 
74
  u_int64_t        ydb_lock_ctr;            /* how many times has ydb lock been taken/released?                                                                      */
75 76
  u_int64_t        num_waiters_now;         /* How many are waiting on the ydb lock right now (including the current lock holder if any)?                            */
  u_int64_t        max_waiters;             /* The maximum of num_waiters_now.                                                                                       */
77
  u_int64_t        total_sleep_time;        /* Total time spent (since the system was booted) sleeping (by the indexer) to give foreground threads a chance to work. */
78 79 80
  u_int64_t        max_time_ydb_lock_held;  /* Maximum time that the ydb lock was held (tokutime_t).                                                                 */
  u_int64_t        total_time_ydb_lock_held;/* Total time client threads held the ydb lock (really tokutime_t, convert to seconds with tokutime_to_seconds())        */
  u_int64_t        total_time_since_start;  /* Total time since the lock was created (tokutime_t).  Use this as total_time_ydb_lock_held/total_time_since_start to get a ratio.   */
81 82
  u_int64_t        checkpoint_period;       /* delay between automatic checkpoints  */ 
  u_int64_t        checkpoint_footprint;    /* state of checkpoint procedure        */ 
83 84 85
  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      */ 
86 87 88 89 90 91 92 93 94 95 96
  uint64_t         checkpoint_last_lsn;     /* LSN of last complete checkpoint  */ 
  uint64_t         checkpoint_count;        /* number of checkpoints taken        */ 
  uint64_t         checkpoint_count_fail;   /* number of checkpoints failed        */ 
  uint64_t         checkpoint_waiters_now;  /* number of threads currently waiting to perform a checkpoint */ 
  uint64_t         checkpoint_waiters_max;  /* max threads ever simultaneously waiting to perform a checkpoint */ 
  uint64_t         checkpoint_client_wait_on_mo;  /* how many times a client thread waited for the multi_operation lock */ 
  uint64_t         checkpoint_client_wait_on_cs;  /* how many times a client thread waited for the checkpoint_safe lock */ 
  uint64_t         checkpoint_wait_sched;         /* how many times a scheduled checkpoint waited for the checkpoint_safe lock */ 
  uint64_t         checkpoint_wait_client;        /* how many times a client checkpoint waited for the checkpoint_safe lock */ 
  uint64_t         checkpoint_wait_txn;           /* how many times a txn_commitcheckpoint waited for the checkpoint_safe lock */ 
  uint64_t         checkpoint_wait_other;         /* how many times a checkpoint for another purpose waited for the checkpoint_safe lock */ 
97 98
  u_int64_t        cleaner_period;          /* delay between executions of cleaner  */ 
  u_int64_t        cleaner_iterations;      /* number of nodes to flush per cleaner execution  */ 
99 100 101 102
  u_int64_t        txn_begin;               /* number of transactions ever begun             */ 
  u_int64_t        txn_commit;              /* txn commit operations                         */ 
  u_int64_t        txn_abort;               /* txn abort operations                          */ 
  u_int64_t        txn_close;               /* txn completions (should equal commit+abort)   */ 
103 104
  u_int64_t        txn_num_open;            /* should be begin - close                       */ 
  u_int64_t        txn_max_open;            /* max value of num_open                         */ 
105
  u_int64_t        txn_oldest_live;         /* oldest extant txn txnid                            */ 
106
  char             txn_oldest_live_starttime[26];   /* oldest extant txn start time                      */ 
107
  u_int64_t        next_lsn;                /* lsn that will be assigned to next log entry   */ 
108 109
  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 */ 
110 111
  u_int64_t        cachetable_hit;          /* how many cache hits   */ 
  u_int64_t        cachetable_miss;         /* how many cache misses */ 
112 113
  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 */ 
114 115
  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 */ 
116
  u_int64_t        cachetable_wait_checkpoint; /* how many times get_and_pin waits for a node to be written for a checkpoint*/ 
117 118
  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 */ 
119 120
  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 */ 
121 122 123 124
  uint64_t         cachetable_size_current; /* sum of the sizes of the nodes represented in the cachetable */ 
  uint64_t         cachetable_size_limit;   /* the limit to the sum of the node sizes */ 
  uint64_t         cachetable_size_max;     /* the max value (high water mark) of cachetable_size_current */ 
  uint64_t         cachetable_size_writing; /* the sum of the sizes of the nodes being written */ 
125
  uint64_t         cachetable_size_nonleaf; /* the number of bytes of nonleaf nodes */ 
126
  uint64_t         cachetable_size_leaf;    /* the number of bytes of leaf nodes */ 
Zardosht Kasheff's avatar
Zardosht Kasheff committed
127
  uint64_t         cachetable_size_rollback; /* the number of bytes of nonleaf nodes */ 
128 129 130
  uint64_t         cachetable_size_cachepressure; /* number of bytes causing cache pressure (sum of buffers and workdone counters)  */ 
  u_int64_t        cachetable_evictions;    /* how many cache table blocks are evicted */ 
  u_int64_t        cleaner_executions;      /* how many times the loop in cleaner_thread has executed */ 
131 132
  u_int64_t        range_locks_max;         /* max total number of range locks */ 
  u_int64_t        range_locks_curr;        /* total range locks currently in use */ 
133 134
  u_int64_t        range_locks_max_memory;   /* max total bytes of range locks */ 
  u_int64_t        range_locks_curr_memory;  /* total bytes of range locks currently in use */ 
135 136
  u_int64_t        range_lock_escalation_successes;       /* number of times range locks escalation succeeded */ 
  u_int64_t        range_lock_escalation_failures;        /* number of times range locks escalation failed */ 
137 138 139 140 141 142
  u_int64_t        range_read_locks;        /* total range read locks taken */ 
  u_int64_t        range_read_locks_fail;   /* total range read locks unable to be taken */ 
  u_int64_t        range_out_of_read_locks; /* total times range read locks exhausted */ 
  u_int64_t        range_write_locks;       /* total range write locks taken */ 
  u_int64_t        range_write_locks_fail;  /* total range write locks unable to be taken */ 
  u_int64_t        range_out_of_write_locks; /* total times range write locks exhausted */ 
143 144 145 146 147
  u_int64_t        range_lt_create;         /* number of locktrees created */ 
  u_int64_t        range_lt_create_fail;    /* number of locktree create failures */ 
  u_int64_t        range_lt_destroy;        /* number of locktrees destroyed */ 
  u_int64_t        range_lt_num;            /* number of locktrees (should be created - destroyed) */ 
  u_int64_t        range_lt_num_max;        /* max number of locktrees that have existed simultaneously */ 
148 149 150 151
  u_int64_t        directory_read_locks;        /* total directory read locks taken */ 
  u_int64_t        directory_read_locks_fail;   /* total directory read locks unable to be taken */ 
  u_int64_t        directory_write_locks;       /* total directory write locks taken */ 
  u_int64_t        directory_write_locks_fail;  /* total directory write locks unable to be taken */ 
152 153 154 155
  u_int64_t        inserts;                 /* ydb row insert operations              */ 
  u_int64_t        inserts_fail;            /* ydb row insert operations that failed  */ 
  u_int64_t        deletes;                 /* ydb row delete operations              */ 
  u_int64_t        deletes_fail;            /* ydb row delete operations that failed  */ 
156 157
  u_int64_t        updates;                 /* ydb row update operations              */ 
  u_int64_t        updates_fail;            /* ydb row update operations that failed  */ 
158 159
  u_int64_t        updates_broadcast;       /* ydb row update broadcast operations              */ 
  u_int64_t        updates_broadcast_fail;  /* ydb row update broadcast operations that failed  */ 
160 161 162 163 164 165
  u_int64_t        multi_inserts;           /* ydb multi_row insert operations, dictionaray count             */ 
  u_int64_t        multi_inserts_fail;      /* ydb multi_row insert operations that failed, dictionary count  */ 
  u_int64_t        multi_deletes;           /* ydb multi_row delete operations, dictionary count              */ 
  u_int64_t        multi_deletes_fail;      /* ydb multi_row delete operations that failed, dictionary count  */ 
  u_int64_t        multi_updates;           /* ydb row update operations, dictionary count              */ 
  u_int64_t        multi_updates_fail;      /* ydb row update operations that failed, dictionary count  */ 
166 167 168 169
  u_int64_t        point_queries;           /* ydb point queries                      */ 
  u_int64_t        sequential_queries;      /* ydb sequential queries                 */ 
  u_int64_t        num_db_open;             /* number of db_open operations */
  u_int64_t        num_db_close;            /* number of db_close operations */
170
  u_int64_t        num_open_dbs;            /* number of currently open dbs */
171
  u_int64_t        max_open_dbs;            /* max number of simultaneously open dbs */
172 173
  u_int64_t        le_updates;              /* leafentry update operations                        */ 
  u_int64_t        le_updates_broadcast;    /* leafentry update broadcast operations              */ 
174
  u_int64_t        descriptor_set;          /* descriptor set operations              */ 
175 176 177
  u_int64_t        partial_fetch_hit;        /* node partition is present             */ 
  u_int64_t        partial_fetch_miss;       /* node is present but partition is absent */ 
  u_int64_t        partial_fetch_compressed; /* node partition is present but compressed  */ 
178
  u_int64_t        partial_evictions_nonleaf; /* number of nonleaf node partial evictions */ 
179
  u_int64_t        partial_evictions_leaf;   /* number of leaf node partial evictions */ 
180 181
  u_int64_t        msn_discards;             /* how many messages were ignored by leaf because of msn */ 
  u_int64_t        max_workdone;             /* max workdone value of any buffer  */ 
182 183 184 185 186 187 188
  uint64_t         total_searches;              /* total number of searches */ 
  uint64_t         total_retries;               /* total number of search retries due to TRY_AGAIN */ 
  uint64_t         max_search_excess_retries;   /* max number of excess search retries (retries - treeheight) due to TRY_AGAIN */ 
  uint64_t         max_search_root_tries;       /* max number of times root node was fetched in a single search */ 
  uint64_t         search_root_retries;         /* number of searches that required the root node to be fetched more than once */ 
  uint64_t         search_tries_gt_height;      /* number of searches that required more tries than the height of the tree */ 
  uint64_t         search_tries_gt_heightplus3; /* number of searches that required more tries than the height of the tree plus three */ 
189 190 191 192 193 194 195 196 197 198 199
  uint64_t         cleaner_total_nodes;           /* total number of nodes whose buffers are potentially flushed by cleaner thread */
  uint64_t         cleaner_h1_nodes;              /* number of nodes of height one whose message buffers are flushed by cleaner thread */
  uint64_t         cleaner_hgt1_nodes;            /* number of nodes of height > 1 whose message buffers are flushed by cleaner thread */
  uint64_t         cleaner_empty_nodes;           /* number of nodes that are selected by cleaner, but whose buffers are empty */
  uint64_t         cleaner_nodes_dirtied;         /* number of nodes that are made dirty by the cleaner thread */
  uint64_t         cleaner_max_buffer_size;       /* max number of bytes in message buffer flushed by cleaner thread */
  uint64_t         cleaner_min_buffer_size;       /* min number of bytes in message buffer flushed by cleaner thread */
  uint64_t         cleaner_total_buffer_size;     /* total number of bytes in message buffers flushed by cleaner thread */
  uint64_t         cleaner_max_buffer_workdone;   /* max workdone value of any message buffer flushed by cleaner thread */
  uint64_t         cleaner_min_buffer_workdone;   /* min workdone value of any message buffer flushed by cleaner thread */
  uint64_t         cleaner_total_buffer_workdone; /* total workdone value of message buffers flushed by cleaner thread */
200
  uint64_t         cleaner_num_leaves_unmerged;   /* number of leaves left unmerged by the cleaner thread */
Leif Walsh's avatar
Leif Walsh committed
201 202 203 204 205 206 207 208 209 210
  uint64_t         flush_total;                 /* total number of flushes done by flusher threads or cleaner threads */
  uint64_t         flush_in_memory;             /* number of in memory flushes */
  uint64_t         flush_needed_io;             /* number of flushes that had to read a child (or part) off disk */
  uint64_t         flush_cascades;              /* number of flushes that triggered another flush in the child */
  uint64_t         flush_cascades_1;            /* number of flushes that triggered 1 cascading flush */
  uint64_t         flush_cascades_2;            /* number of flushes that triggered 2 cascading flushes */
  uint64_t         flush_cascades_3;            /* number of flushes that triggered 3 cascading flushes */
  uint64_t         flush_cascades_4;            /* number of flushes that triggered 4 cascading flushes */
  uint64_t         flush_cascades_5;            /* number of flushes that triggered 5 cascading flushes */
  uint64_t         flush_cascades_gt_5;         /* number of flushes that triggered more than 5 cascading flushes */
211 212 213 214
  uint64_t         disk_flush_leaf;             /* number of leaf nodes flushed to disk, not for checkpoint */
  uint64_t         disk_flush_nonleaf;          /* number of nonleaf nodes flushed to disk, not for checkpoint */
  uint64_t         disk_flush_leaf_for_checkpoint; /* number of leaf nodes flushed to disk for checkpoint */
  uint64_t         disk_flush_nonleaf_for_checkpoint; /* number of nonleaf nodes flushed to disk for checkpoint */
215 216
  uint64_t         create_leaf;                 /* number of leaf nodes created */
  uint64_t         create_nonleaf;              /* number of nonleaf nodes created */
217 218
  uint64_t         destroy_leaf;                /* number of leaf nodes destroyed */
  uint64_t         destroy_nonleaf;             /* number of nonleaf nodes destroyed */
219 220 221 222 223 224 225
  uint64_t         split_leaf;                  /* number of leaf nodes split */
  uint64_t         split_nonleaf;               /* number of nonleaf nodes split */
  uint64_t         merge_leaf;                  /* number of times leaf nodes are merged */
  uint64_t         merge_nonleaf;               /* number of times nonleaf nodes are merged  */
  uint64_t         dirty_leaf;                  /* number of times leaf nodes are dirtied when previously clean */
  uint64_t         dirty_nonleaf;               /* number of times nonleaf nodes are dirtied when previously clean */
  uint64_t         balance_leaf;                /* number of times a leaf node is balanced inside brt */
226 227 228 229 230 231
  uint64_t         msg_bytes_in;                /* how many bytes of messages injected at root (for all trees)*/
  uint64_t         msg_bytes_out;               /* how many bytes of messages flushed from h1 nodes to leaves*/
  uint64_t         msg_bytes_curr;              /* how many bytes of messages currently in trees (estimate)*/
  uint64_t         msg_bytes_max;               /* how many bytes of messages currently in trees (estimate)*/
  uint64_t         msg_num;                     /* how many messages injected at root*/
  uint64_t         msg_num_broadcast;           /* how many broadcast messages injected at root*/
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250
  uint64_t         num_basements_decompressed_normal;  /* how many basement nodes were decompressed because they were the target of a query */
  uint64_t         num_basements_decompressed_aggressive; /* ... because they were between lc and rc */
  uint64_t         num_basements_decompressed_prefetch;
  uint64_t         num_basements_decompressed_write;
  uint64_t         num_msg_buffer_decompressed_normal;  /* how many msg buffers were decompressed because they were the target of a query */
  uint64_t         num_msg_buffer_decompressed_aggressive; /* ... because they were between lc and rc */
  uint64_t         num_msg_buffer_decompressed_prefetch;
  uint64_t         num_msg_buffer_decompressed_write;
  uint64_t         num_pivots_fetched_query;           /* how many pivots were fetched were fetched for a query */
  uint64_t         num_pivots_fetched_prefetch;        /* ... for a prefetch */
  uint64_t         num_pivots_fetched_write;           /* ... for a write */
  uint64_t         num_basements_fetched_normal;       /* how many basement nodes were fetched because they were the target of a query */
  uint64_t         num_basements_fetched_aggressive;      /* ... because they were between lc and rc */
  uint64_t         num_basements_fetched_prefetch;
  uint64_t         num_basements_fetched_write;
  uint64_t         num_msg_buffer_fetched_normal;       /* how many msg buffers were fetched because they were the target of a query */
  uint64_t         num_msg_buffer_fetched_aggressive;      /* ... because they were between lc and rc */
  uint64_t         num_msg_buffer_fetched_prefetch;
  uint64_t         num_msg_buffer_fetched_write;
251 252 253 254
  u_int64_t        le_max_committed_xr;     /* max committed transaction records in any packed le  */ 
  u_int64_t        le_max_provisional_xr;   /* max provisional transaction records in any packed le   */ 
  u_int64_t        le_max_memsize;          /* max memsize of any packed le     */ 
  u_int64_t        le_expanded;             /* number of times ule used expanded memory     */ 
255 256
  u_int64_t        fsync_count;             /* number of times fsync performed        */ 
  u_int64_t        fsync_time;              /* total time required to fsync           */ 
257 258 259
  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  */ 
260 261
  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 */ 
262 263 264 265 266
  u_int64_t        enospc_ctr;              /* how many times has ENOSPC been returned by disk write */ 
  u_int64_t        enospc_redzone_ctr;      /* how many times has ENOSPC been returned to user (red zone) */ 
  u_int64_t        enospc_state;            /* state of ydb-level ENOSPC prevention (0 = green, 1 = yellow, 2 = red) */ 
  u_int64_t        loader_create;           /* number of loaders created */ 
  u_int64_t        loader_create_fail;      /* number of failed loader creations */ 
267 268
  u_int64_t        loader_put;              /* number of loader puts (success) */ 
  u_int64_t        loader_put_fail;         /* number of loader puts that failed */ 
269 270 271
  u_int64_t        loader_close;            /* number of loaders closed (succeed or fail) */ 
  u_int64_t        loader_close_fail;       /* number of loaders closed with error return */ 
  u_int64_t        loader_abort;            /* number of loaders aborted  */ 
272 273
  u_int64_t        loader_current;          /* number of loaders currently existing           */ 
  u_int64_t        loader_max;              /* max number of loaders extant simultaneously    */ 
274 275
  u_int64_t        logsuppress;             /* number of times logging is suppressed */ 
  u_int64_t        logsuppressfail;         /* number of times logging cannot be suppressed  */ 
276 277 278 279 280 281 282
  u_int64_t        indexer_create;          /* number of indexers created successfully */ 
  u_int64_t        indexer_create_fail;     /* number of failed indexer creations */ 
  u_int64_t        indexer_build;           /* number of indexer build calls (succeeded) */ 
  u_int64_t        indexer_build_fail;      /* number of indexers build calls with error return */ 
  u_int64_t        indexer_close;           /* number of indexers closed successfully) */ 
  u_int64_t        indexer_close_fail;      /* number of indexers closed with error return */ 
  u_int64_t        indexer_abort;           /* number of indexers aborted  */ 
283 284
  u_int64_t        indexer_current;         /* number of indexers currently existing           */ 
  u_int64_t        indexer_max;             /* max number of indexers extant simultaneously    */ 
285 286 287 288
  u_int64_t        upgrade_env_status;      /* Was an environment upgrade done?  What was done?  */ 
  u_int64_t        upgrade_header;          /* how many brt headers were upgraded? */ 
  u_int64_t        upgrade_nonleaf;         /* how many brt nonleaf nodes  were upgraded? */ 
  u_int64_t        upgrade_leaf;            /* how many brt leaf nodes were upgraded? */ 
289
  u_int64_t        optimized_for_upgrade;   /* how many optimized_for_upgrade messages were broadcast */ 
290 291
  u_int64_t        original_ver;            /* original environment version  */ 
  u_int64_t        ver_at_startup;          /* environment version at startup */ 
292 293
  u_int64_t        last_lsn_v13;            /* last lsn of version 13 environment */ 
  char             upgrade_v14_time[26];    /* timestamp of when upgrade to version 14 environment was done */ 
294 295 296
  u_int64_t        env_panic;               /* non-zero if environment is panicked */ 
  u_int64_t        logger_panic;            /* non-zero if logger is panicked */ 
  u_int64_t        logger_panic_errno;      /* non-zero if environment is panicked */ 
297 298 299
  uint64_t         malloc_count;            /* number of malloc operations */ 
  uint64_t         free_count;              /* number of free operations */ 
  uint64_t         realloc_count;           /* number of realloc operations */ 
300 301
  uint64_t         malloc_fail;             /* number of failed malloc operations */ 
  uint64_t         realloc_fail;            /* number of failed realloc operations */ 
302 303 304
  uint64_t         mem_requested;           /* number of bytes requested via malloc/realloc */ 
  uint64_t         mem_used;                /* number of bytes used (obtained from malloc_usable_size()) */ 
  uint64_t         mem_freed;               /* number of bytes freed */ 
305
  uint64_t         max_mem_in_use;          /* estimated max value of (used - freed) */ 
306
  uint64_t         malloc_mmap_threshold;   /* threshold for malloc to use mmap  */ 
307
  const char *     mallocator_version;      /* version string from malloc lib */ 
308
} ENGINE_STATUS;
Bradley C. Kuszmaul's avatar
Rename  
Bradley C. Kuszmaul committed
309
typedef enum {
Yoni Fogel's avatar
Yoni Fogel committed
310 311
 DB_BTREE=1,
 DB_UNKNOWN=5
Bradley C. Kuszmaul's avatar
Rename  
Bradley C. Kuszmaul committed
312
} DBTYPE;
Bradley C. Kuszmaul's avatar
up  
Bradley C. Kuszmaul committed
313
#ifndef _TOKUDB_WRAP_H
314
#define DB_VERB_DEADLOCK 1
315 316 317
#define DB_VERB_RECOVERY 8
#define DB_VERB_REPLICATION 32
#define DB_VERB_WAITSFOR 64
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
318 319 320
#define DB_ARCH_ABS 1
#define DB_ARCH_LOG 4
#define DB_CREATE 1
321
#define DB_CXX_NO_EXCEPTIONS 1
322 323 324 325
#define DB_EXCL 16384
#define DB_PRIVATE 8388608
#define DB_RDONLY 32
#define DB_RECOVER 64
326
#define DB_RUNRECOVERY -30975
327 328
#define DB_THREAD 128
#define DB_TXN_NOSYNC 512
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
329
#define DB_LOCK_DEFAULT 1
330 331
#define DB_LOCK_OLDEST 7
#define DB_LOCK_RANDOM 8
332 333 334
#define DB_KEYFIRST 13
#define DB_KEYLAST 14
#define DB_NOOVERWRITE 20
335
#define DB_NODUPDATA 19
336
#define DB_NOOVERWRITE_NO_ERROR 1
337
#define DB_OPFLAGS_MASK 255
338 339 340 341 342
#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
343 344
#define DB_KEYEXIST -30996
#define DB_LOCK_DEADLOCK -30995
Yoni Fogel's avatar
Yoni Fogel committed
345
#define DB_LOCK_NOTGRANTED -30994
346
#define DB_NOTFOUND -30989
347
#define DB_SECONDARY_BAD -30974
348
#define DB_DONOTINDEX -30998
349
#define DB_BUFFER_SMALL -30999
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
350
#define DB_BADFORMAT -30500
351
#define DB_DELETE_ANY 65536
352
#define DB_TRUNCATE_WITHCURSORS 131072
353 354 355 356 357 358 359 360 361
#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
362
#define DB_CURRENT_BINDING 253
363
#define DB_SET_RANGE_REVERSE 252
364
#define DB_RMW 1073741824
365
#define DB_IS_RESETTING_OP 0x01000000
366
#define DB_PRELOCKED 0x00800000
Yoni Fogel's avatar
Yoni Fogel committed
367
#define DB_PRELOCKED_WRITE 0x00400000
368
#define DB_PRELOCKED_FILE_READ 0x00200000
369
#define DB_IS_HOT_INDEX 0x00100000
370
#define DBC_DISABLE_PREFETCHING 0x20000000
371
#define DB_DBT_APPMALLOC 1
372 373
#define DB_DBT_DUPOK 2
#define DB_DBT_MALLOC 8
374
#define DB_DBT_MULTIPLE 16
375 376
#define DB_DBT_REALLOC 64
#define DB_DBT_USERMEM 256
377 378 379
#define DB_LOG_AUTOREMOVE 524288
#define DB_TXN_WRITE_NOSYNC 4096
#define DB_TXN_NOWAIT 1024
Rich Prohaska's avatar
Rich Prohaska committed
380
#define DB_TXN_SYNC 16384
381
#define DB_TXN_SNAPSHOT 268435456
382
#define DB_READ_UNCOMMITTED 134217728
383
#define DB_READ_COMMITTED 67108864
384
#define DB_INHERIT_ISOLATION 1
385
#define DB_SERIALIZABLE 2
386
#endif
387 388
/* TOKUDB specific error codes */
#define TOKUDB_OUT_OF_LOCKS -100000
Yoni Fogel's avatar
Yoni Fogel committed
389
#define TOKUDB_SUCCEEDED_EARLY -100001
390 391
#define TOKUDB_FOUND_BUT_REJECTED -100002
#define TOKUDB_USER_CALLBACK_ERROR -100003
392
#define TOKUDB_DICTIONARY_TOO_OLD -100004
393 394
#define TOKUDB_DICTIONARY_TOO_NEW -100005
#define TOKUDB_DICTIONARY_NO_HEADER -100006
395
#define TOKUDB_CANCELED -100007
396
#define TOKUDB_NO_DATA -100008
397 398
#define TOKUDB_ACCEPT -100009
#define TOKUDB_MVCC_DICTIONARY_TOO_NEW -100010
399
#define TOKUDB_UPGRADE_FAILURE -100011
400
#define TOKUDB_TRY_AGAIN -100012
401
#define TOKUDB_NEEDS_REPAIR -100013
402
#define TOKUDB_CURSOR_CONTINUE -100014
403 404
/* LOADER flags */
#define LOADER_USE_PUTS 1
405
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);
406
typedef int (*generate_row_for_del_func)(DB *dest_db, DB *src_db, DBT *dest_key, const DBT *src_key, const DBT *src_val);
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
407 408
/* 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
409 410
#undef txn_begin
#endif
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
411 412
struct __toku_db_env {
  struct __toku_db_env_internal *i;
413
#define db_env_struct_i(x) ((x)->i)
414 415
  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. */;
Zardosht Kasheff's avatar
Zardosht Kasheff committed
416 417 418 419
  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. */;
420 421 422 423 424
  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. */;
425
  int (*get_engine_status)                    (DB_ENV*, ENGINE_STATUS*, char*, int) /* Fill in status struct, possibly env panic string */;
Zardosht Kasheff's avatar
Zardosht Kasheff committed
426
  void *app_private;
427
  int (*get_engine_status_text)               (DB_ENV*, char*, int)     /* Fill in status text */;
428 429
  int (*crash)                                (DB_ENV*, const char*/*expr_as_string*/,const char */*fun*/,const char*/*file*/,int/*line*/, int/*errno*/);;
  int (*get_iname)                            (DB_ENV* env, DBT* dname_dbt, DBT* iname_dbt) /* FOR TEST ONLY: lookup existing iname */;
430 431
  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);
432
  int (*put_multiple)                         (DB_ENV *env, DB *src_db, DB_TXN *txn,
433 434
                                             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 */;
435
  int (*set_generate_row_callback_for_put)    (DB_ENV *env, generate_row_for_put_func generate_row_for_put);
436
  int (*del_multiple)                         (DB_ENV *env, DB *src_db, DB_TXN *txn,
437 438
                                             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 */;
439
  int (*set_generate_row_callback_for_del)    (DB_ENV *env, generate_row_for_del_func generate_row_for_del);
440
  int (*update_multiple)                      (DB_ENV *env, DB *src_db, DB_TXN *txn,
441 442 443
                                             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,
444
                                             uint32_t num_keys, DBT *keys,
445
                                             uint32_t num_vals, DBT *vals) /* update multiple DBs */;
446 447
  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 */;
448 449
  int (*set_lk_max_memory)                    (DB_ENV *env, uint64_t max);
  int (*get_lk_max_memory)                    (DB_ENV *env, uint64_t *max);
450
  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));
451 452
  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);
453 454
  void *api1_internal;
  int  (*close) (DB_ENV *, u_int32_t);
455 456
  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);
457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480
  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);
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
481 482
};
struct __toku_db_key_range {
483 484 485
  double less;
  double equal;
  double greater;
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
486 487 488
};
struct __toku_db_lsn {
};
489
struct __toku_dbt {
490 491 492 493
  void*data;
  u_int32_t size;
  u_int32_t ulen;
  u_int32_t flags;
494
};
495 496 497
typedef struct __toku_descriptor {
    DBT       dbt;
} *DESCRIPTOR, DESCRIPTOR_S;
498 499 500 501 502 503 504 505 506 507 508 509
//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;
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
510 511
struct __toku_db {
  struct __toku_db_internal *i;
512
#define db_struct_i(x) ((x)->i)
513
  int (*key_range64)(DB*, DB_TXN *, DBT *, u_int64_t *less, u_int64_t *equal, u_int64_t *greater, int *is_exact);
514
  int (*stat64)(DB *, DB_TXN *, DB_BTREE_STAT64 *);
515 516
  void *app_private;
  DB_ENV *dbenv;
517
  int (*pre_acquire_table_lock)(DB*, DB_TXN*);
518
  int (*pre_acquire_fileops_lock)(DB*, DB_TXN*);
519
  int (*pre_acquire_fileops_shared_lock)(DB*, DB_TXN*);
520 521
  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.*/;
522
  int (*row_size_supported) (DB*, u_int32_t) /* Test whether a row size is supported. */;
523
  DESCRIPTOR descriptor /* saved row/dictionary descriptor for aiding in comparisons */;
524
  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 */;
525
  int (*getf_set)(DB*, DB_TXN*, u_int32_t, DBT*, YDB_CALLBACK_FUNCTION, void*) /* same as DBC->c_getf_set without a persistent cursor) */;
526
  int (*flatten)(DB*, DB_TXN*) /* Flatten a dictionary, similar to (but faster than) a table scan */;
527
  int (*optimize)(DB*) /* Run garbage collecion and promote all transactions older than oldest. Amortized (happens during flattening) */;
528
  int (*get_fragmentation)(DB*,TOKU_DB_FRAGMENTATION);
529 530
  int (*get_readpagesize)(DB*,u_int32_t*);
  int (*set_readpagesize)(DB*,u_int32_t);
531 532
  int (*set_indexer)(DB*, DB_INDEXER*);
  void (*get_indexer)(DB*, DB_INDEXER**);
533
  int (*verify_with_progress)(DB *, int (*progress_callback)(void *progress_extra, float progress), void *progress_extra, int verbose, int keep_going);
534 535
  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);
536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554
  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);
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
555 556
};
struct __toku_db_txn_active {
557 558
  u_int32_t txnid;
  DB_LSN lsn;
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
559
};
560 561 562 563 564 565 566
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*);
567
struct txn_stat {
568
  u_int64_t rollback_raw_count;
569
};
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
570
struct __toku_db_txn {
571 572
  DB_ENV *mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/;
  DB_TXN *parent;
573
  int (*txn_stat)(DB_TXN *, struct txn_stat **);
574
  struct { void *next, *prev; } open_txns;
575 576
  int (*commit_with_progress)(DB_TXN*, uint32_t, TXN_PROGRESS_POLL_FUNCTION, void*);
  int (*abort_with_progress)(DB_TXN*, TXN_PROGRESS_POLL_FUNCTION, void*);
577 578 579 580
  void *api_internal;
  int (*abort) (DB_TXN *);
  int (*commit) (DB_TXN*, u_int32_t);
  u_int32_t (*id) (DB_TXN *);
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
581 582
};
struct __toku_db_txn_stat {
583 584
  u_int32_t st_nactive;
  DB_TXN_ACTIVE *st_txnarray;
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
585 586
};
struct __toku_dbc {
587
  DB *dbp;
588 589 590 591 592 593 594 595
  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 *);
596
  int (*c_getf_set_range_reverse)(DBC *, u_int32_t, DBT *, YDB_CALLBACK_FUNCTION, void *);
597
  int (*c_pre_acquire_range_lock)(DBC*, const DBT*, const DBT*);
598 599 600 601
  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);
Bradley C. Kuszmaul's avatar
Bradley C. Kuszmaul committed
602 603 604
};
#ifdef _TOKUDB_WRAP_H
#define txn_begin txn_begin_tokudb
605
#endif
606 607 608 609 610
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")));
611
int db_env_set_func_fsync (int (*)(int)) __attribute__((__visibility__("default")));
612 613
int toku_set_trace_file (char *fname) __attribute__((__visibility__("default")));
int toku_close_trace_file (void) __attribute__((__visibility__("default")));
614
int db_env_set_func_free (void (*)(void*)) __attribute__((__visibility__("default")));
615
int db_env_set_func_malloc (void *(*)(size_t)) __attribute__((__visibility__("default")));
616
int db_env_set_func_realloc (void *(*)(void*, size_t)) __attribute__((__visibility__("default")));
617
int db_env_set_func_pwrite (ssize_t (*)(int, const void *, size_t, toku_off_t)) __attribute__((__visibility__("default")));
618
int db_env_set_func_full_pwrite (ssize_t (*)(int, const void *, size_t, toku_off_t)) __attribute__((__visibility__("default")));
619
int db_env_set_func_write (ssize_t (*)(int, const void *, size_t)) __attribute__((__visibility__("default")));
620
int db_env_set_func_full_write (ssize_t (*)(int, const void *, size_t)) __attribute__((__visibility__("default")));
621 622 623 624
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")));
625
int db_env_set_func_pread (ssize_t (*)(int, void *, size_t, off_t)) __attribute__((__visibility__("default")));
626
void db_env_set_func_loader_fwrite (size_t (*fwrite_fun)(const void*,size_t,size_t,FILE*)) __attribute__((__visibility__("default")));
627
void db_env_set_checkpoint_callback (void (*)(void*), void*) __attribute__((__visibility__("default")));
628
void db_env_set_checkpoint_callback2 (void (*)(void*), void*) __attribute__((__visibility__("default")));
629 630
void db_env_set_recover_callback (void (*)(void*), void*) __attribute__((__visibility__("default")));
void db_env_set_recover_callback2 (void (*)(void*), void*) __attribute__((__visibility__("default")));
631
void db_env_set_loader_size_factor (uint32_t) __attribute__((__visibility__("default")));
Zardosht Kasheff's avatar
Zardosht Kasheff committed
632
void db_env_set_mvcc_garbage_collection_verification(u_int32_t) __attribute__((__visibility__("default")));
633
void db_env_enable_engine_status(u_int32_t) __attribute__((__visibility__("default")));
Zardosht Kasheff's avatar
Zardosht Kasheff committed
634
void db_env_set_flusher_thread_callback (void (*)(int, void*), void*) __attribute__((__visibility__("default")));
Bradley C. Kuszmaul's avatar
Rename  
Bradley C. Kuszmaul committed
635 636 637 638
#if defined(__cplusplus)
}
#endif
#endif