tdb.h 46.3 KB
Newer Older
1 2 3 4 5 6 7
#ifndef _DB_H
#define _DB_H
/* This code generated by make_db_h.   Copyright (c) 2007, 2008 Tokutek */
#ident "Copyright (c) 2007, 2008 Tokutek Inc.  All rights reserved."
#include <sys/types.h>
/*stdio is needed for the FILE* in db->verify*/
#include <stdio.h>
8
#include <stdint.h>
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
#if defined(__cplusplus)
extern "C" {
#endif
#define TOKUDB 1
#define TOKUDB_NATIVE_H 1
#define DB_VERSION_MAJOR 4
#define DB_VERSION_MINOR 6
#define DB_VERSION_PATCH 19
#ifndef _TOKUDB_WRAP_H
#define DB_VERSION_STRING "Tokutek: TokuDB 4.6.19"
#else
#define DB_VERSION_STRING_ydb "Tokutek: TokuDB (wrapped bdb)"
#endif
#ifndef TOKU_OFF_T_DEFINED
#define TOKU_OFF_T_DEFINED
typedef int64_t toku_off_t;
#endif
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;
typedef u_int32_t db_recno_t;
typedef int(*YDB_CALLBACK_FUNCTION)(DBT const*, DBT const*, void*);
#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
  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 */ 
93 94 95 96 97 98 99 100
  uint64_t         checkpoint_wait_sched_cs;      /* how many times a scheduled checkpoint waited for the checkpoint_safe lock */ 
  uint64_t         checkpoint_wait_client_cs;     /* how many times a client checkpoint waited for the checkpoint_safe lock */ 
  uint64_t         checkpoint_wait_txn_cs;        /* how many times a txn_commitcheckpoint waited for the checkpoint_safe lock */ 
  uint64_t         checkpoint_wait_other_cs;      /* how many times a checkpoint for another purpose waited for the checkpoint_safe lock */ 
  uint64_t         checkpoint_wait_sched_mo;      /* how many times a scheduled checkpoint waited for the multi_operation lock */ 
  uint64_t         checkpoint_wait_client_mo;     /* how many times a client checkpoint waited for the multi_operation lock */ 
  uint64_t         checkpoint_wait_txn_mo;        /* how many times a txn_commitcheckpoint waited for the multi_operation lock */ 
  uint64_t         checkpoint_wait_other_mo;      /* how many times a checkpoint for another purpose waited for the multi_operation lock */ 
101 102
  u_int64_t        cleaner_period;          /* delay between executions of cleaner  */ 
  u_int64_t        cleaner_iterations;      /* number of nodes to flush per cleaner execution  */ 
103 104 105 106
  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)   */ 
107 108
  u_int64_t        txn_num_open;            /* should be begin - close                       */ 
  u_int64_t        txn_max_open;            /* max value of num_open                         */ 
109
  u_int64_t        txn_oldest_live;         /* oldest extant txn txnid                            */ 
110
  char             txn_oldest_live_starttime[26];   /* oldest extant txn start time                      */ 
111
  u_int64_t        next_lsn;                /* lsn that will be assigned to next log entry   */ 
112 113
  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 */ 
114 115
  u_int64_t        cachetable_hit;          /* how many cache hits   */ 
  u_int64_t        cachetable_miss;         /* how many cache misses */ 
116 117
  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 */ 
118 119
  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 */ 
120
  u_int64_t        cachetable_wait_checkpoint; /* how many times get_and_pin waits for a node to be written for a checkpoint*/ 
121 122
  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 */ 
123 124
  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 */ 
125 126 127 128
  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 */ 
129
  uint64_t         cachetable_size_nonleaf; /* the number of bytes of nonleaf nodes */ 
130
  uint64_t         cachetable_size_leaf;    /* the number of bytes of leaf nodes */ 
Zardosht Kasheff's avatar
Zardosht Kasheff committed
131
  uint64_t         cachetable_size_rollback; /* the number of bytes of nonleaf nodes */ 
132 133 134
  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 */ 
135 136
  u_int64_t        range_locks_max;         /* max total number of range locks */ 
  u_int64_t        range_locks_curr;        /* total range locks currently in use */ 
137 138
  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 */ 
139 140
  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 */ 
141 142 143 144 145 146
  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 */ 
147 148 149 150 151
  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 */ 
152 153 154 155
  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 */ 
156 157 158 159
  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  */ 
160 161
  u_int64_t        updates;                 /* ydb row update operations              */ 
  u_int64_t        updates_fail;            /* ydb row update operations that failed  */ 
162 163
  u_int64_t        updates_broadcast;       /* ydb row update broadcast operations              */ 
  u_int64_t        updates_broadcast_fail;  /* ydb row update broadcast operations that failed  */ 
164 165 166 167 168 169
  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  */ 
170 171 172 173
  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 */
174
  u_int64_t        num_open_dbs;            /* number of currently open dbs */
175
  u_int64_t        max_open_dbs;            /* max number of simultaneously open dbs */
176 177
  u_int64_t        le_updates;              /* leafentry update operations                        */ 
  u_int64_t        le_updates_broadcast;    /* leafentry update broadcast operations              */ 
178
  u_int64_t        descriptor_set;          /* descriptor set operations              */ 
179 180 181
  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  */ 
182
  u_int64_t        partial_evictions_nonleaf; /* number of nonleaf node partial evictions */ 
183
  u_int64_t        partial_evictions_leaf;   /* number of leaf node partial evictions */ 
184 185
  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  */ 
186 187 188 189 190 191 192
  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 */ 
193 194 195 196 197 198 199 200 201 202 203
  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 */
204
  uint64_t         cleaner_num_leaf_merges_started;     /* number of times cleaner thread tries to merge a leaf */
205
  uint64_t         cleaner_num_leaf_merges_running;     /* number of cleaner thread leaf merges in progress */
206
  uint64_t         cleaner_num_leaf_merges_completed;   /* number of times cleaner thread successfully merges a leaf */
Leif Walsh's avatar
Leif Walsh committed
207
  uint64_t         cleaner_num_dirtied_for_leaf_merge;  /* nodes dirtied by the "flush from root" process to merge a leaf node */
Leif Walsh's avatar
Leif Walsh committed
208 209 210 211 212 213 214 215 216 217
  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 */
218 219 220 221
  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 */
222 223
  uint64_t         create_leaf;                 /* number of leaf nodes created */
  uint64_t         create_nonleaf;              /* number of nonleaf nodes created */
224 225
  uint64_t         destroy_leaf;                /* number of leaf nodes destroyed */
  uint64_t         destroy_nonleaf;             /* number of nonleaf nodes destroyed */
226 227 228 229 230 231 232
  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 */
Leif Walsh's avatar
Leif Walsh committed
233 234 235 236
  uint64_t         hot_num_started;             /* number of HOT operations that have begun */
  uint64_t         hot_num_completed;           /* number of HOT operations that have successfully completed */
  uint64_t         hot_num_aborted;             /* number of HOT operations that have been aborted */
  uint64_t         hot_max_root_flush_count;    /* max number of flushes from root ever required to optimize a tree */
237 238 239 240 241 242
  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*/
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261
  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;
262 263 264 265
  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     */ 
266 267
  u_int64_t        fsync_count;             /* number of times fsync performed        */ 
  u_int64_t        fsync_time;              /* total time required to fsync           */ 
268 269 270 271 272
  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  */ 
  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 */ 
273 274 275 276 277
  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 */ 
278 279
  u_int64_t        loader_put;              /* number of loader puts (success) */ 
  u_int64_t        loader_put_fail;         /* number of loader puts that failed */ 
280 281 282
  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  */ 
283 284
  u_int64_t        loader_current;          /* number of loaders currently existing           */ 
  u_int64_t        loader_max;              /* max number of loaders extant simultaneously    */ 
285 286
  u_int64_t        logsuppress;             /* number of times logging is suppressed */ 
  u_int64_t        logsuppressfail;         /* number of times logging cannot be suppressed  */ 
287 288 289 290 291 292 293
  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  */ 
294 295
  u_int64_t        indexer_current;         /* number of indexers currently existing           */ 
  u_int64_t        indexer_max;             /* max number of indexers extant simultaneously    */ 
296 297 298 299
  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? */ 
300
  u_int64_t        optimized_for_upgrade;   /* how many optimized_for_upgrade messages were broadcast */ 
301 302
  u_int64_t        original_ver;            /* original environment version  */ 
  u_int64_t        ver_at_startup;          /* environment version at startup */ 
303 304
  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 */ 
305 306 307
  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 */ 
308 309 310
  uint64_t         malloc_count;            /* number of malloc operations */ 
  uint64_t         free_count;              /* number of free operations */ 
  uint64_t         realloc_count;           /* number of realloc operations */ 
311 312
  uint64_t         malloc_fail;             /* number of failed malloc operations */ 
  uint64_t         realloc_fail;            /* number of failed realloc operations */ 
313 314 315
  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 */ 
316
  uint64_t         max_mem_in_use;          /* estimated max value of (used - freed) */ 
317
  uint64_t         malloc_mmap_threshold;   /* threshold for malloc to use mmap  */ 
318
  const char *     mallocator_version;      /* version string from malloc lib */ 
319
} ENGINE_STATUS;
320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336
typedef enum {
 DB_BTREE=1,
 DB_UNKNOWN=5
} DBTYPE;
#ifndef _TOKUDB_WRAP_H
#define DB_VERB_DEADLOCK 1
#define DB_VERB_RECOVERY 8
#define DB_VERB_REPLICATION 32
#define DB_VERB_WAITSFOR 64
#define DB_ARCH_ABS 1
#define DB_ARCH_LOG 4
#define DB_CREATE 1
#define DB_CXX_NO_EXCEPTIONS 1
#define DB_EXCL 16384
#define DB_PRIVATE 8388608
#define DB_RDONLY 32
#define DB_RECOVER 64
337
#define DB_RUNRECOVERY -30975
338 339 340 341 342 343 344 345
#define DB_THREAD 128
#define DB_TXN_NOSYNC 512
#define DB_LOCK_DEFAULT 1
#define DB_LOCK_OLDEST 7
#define DB_LOCK_RANDOM 8
#define DB_KEYFIRST 13
#define DB_KEYLAST 14
#define DB_NOOVERWRITE 20
346
#define DB_NODUPDATA 19
347
#define DB_NOOVERWRITE_NO_ERROR 1
348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
#define DB_OPFLAGS_MASK 255
#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
#define DB_KEYEXIST -30996
#define DB_LOCK_DEADLOCK -30995
#define DB_LOCK_NOTGRANTED -30994
#define DB_NOTFOUND -30989
#define DB_SECONDARY_BAD -30974
#define DB_DONOTINDEX -30998
#define DB_BUFFER_SMALL -30999
#define DB_BADFORMAT -30500
#define DB_DELETE_ANY 65536
363
#define DB_TRUNCATE_WITHCURSORS 131072
364 365 366 367 368 369 370 371 372 373
#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
#define DB_CURRENT_BINDING 253
374
#define DB_SET_RANGE_REVERSE 252
375
#define DB_RMW 1073741824
376
#define DB_IS_RESETTING_OP 0x01000000
377 378
#define DB_PRELOCKED 0x00800000
#define DB_PRELOCKED_WRITE 0x00400000
379
#define DB_PRELOCKED_FILE_READ 0x00200000
380
#define DB_IS_HOT_INDEX 0x00100000
381
#define DBC_DISABLE_PREFETCHING 0x20000000
382
#define DB_DBT_APPMALLOC 1
383 384
#define DB_DBT_DUPOK 2
#define DB_DBT_MALLOC 8
385
#define DB_DBT_MULTIPLE 16
386 387
#define DB_DBT_REALLOC 64
#define DB_DBT_USERMEM 256
388 389 390 391
#define DB_LOG_AUTOREMOVE 524288
#define DB_TXN_WRITE_NOSYNC 4096
#define DB_TXN_NOWAIT 1024
#define DB_TXN_SYNC 16384
392
#define DB_TXN_SNAPSHOT 268435456
393
#define DB_READ_UNCOMMITTED 134217728
394
#define DB_READ_COMMITTED 67108864
395
#define DB_INHERIT_ISOLATION 1
396
#define DB_SERIALIZABLE 2
397 398 399 400
#endif
/* TOKUDB specific error codes */
#define TOKUDB_OUT_OF_LOCKS -100000
#define TOKUDB_SUCCEEDED_EARLY -100001
401 402
#define TOKUDB_FOUND_BUT_REJECTED -100002
#define TOKUDB_USER_CALLBACK_ERROR -100003
403
#define TOKUDB_DICTIONARY_TOO_OLD -100004
404 405
#define TOKUDB_DICTIONARY_TOO_NEW -100005
#define TOKUDB_DICTIONARY_NO_HEADER -100006
406
#define TOKUDB_CANCELED -100007
407
#define TOKUDB_NO_DATA -100008
408 409
#define TOKUDB_ACCEPT -100009
#define TOKUDB_MVCC_DICTIONARY_TOO_NEW -100010
410
#define TOKUDB_UPGRADE_FAILURE -100011
411
#define TOKUDB_TRY_AGAIN -100012
412
#define TOKUDB_NEEDS_REPAIR -100013
413
#define TOKUDB_CURSOR_CONTINUE -100014
414 415
/* LOADER flags */
#define LOADER_USE_PUTS 1
416
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);
417
typedef int (*generate_row_for_del_func)(DB *dest_db, DB *src_db, DBT *dest_key, const DBT *src_key, const DBT *src_val);
418 419 420 421 422 423 424
/* 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
#undef txn_begin
#endif
struct __toku_db_env {
  struct __toku_db_env_internal *i;
#define db_env_struct_i(x) ((x)->i)
425 426
  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
427 428 429 430
  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. */;
431 432 433 434 435
  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. */;
436
  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
437
  void *app_private;
438
  int (*get_engine_status_text)               (DB_ENV*, char*, int)     /* Fill in status text */;
439 440
  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 */;
441 442
  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);
443
  int (*put_multiple)                         (DB_ENV *env, DB *src_db, DB_TXN *txn,
444 445
                                             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 */;
446
  int (*set_generate_row_callback_for_put)    (DB_ENV *env, generate_row_for_put_func generate_row_for_put);
447
  int (*del_multiple)                         (DB_ENV *env, DB *src_db, DB_TXN *txn,
448 449
                                             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 */;
450
  int (*set_generate_row_callback_for_del)    (DB_ENV *env, generate_row_for_del_func generate_row_for_del);
451
  int (*update_multiple)                      (DB_ENV *env, DB *src_db, DB_TXN *txn,
452 453 454
                                             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,
455
                                             uint32_t num_keys, DBT *keys,
456
                                             uint32_t num_vals, DBT *vals) /* update multiple DBs */;
457 458
  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 */;
459 460
  int (*set_lk_max_memory)                    (DB_ENV *env, uint64_t max);
  int (*get_lk_max_memory)                    (DB_ENV *env, uint64_t *max);
461
  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));
462 463
  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);
464 465
  void *api1_internal;
  int  (*close) (DB_ENV *, u_int32_t);
466 467
  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);
468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505
  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);
};
struct __toku_db_key_range {
  double less;
  double equal;
  double greater;
};
struct __toku_db_lsn {
};
struct __toku_dbt {
  void*data;
  u_int32_t size;
  u_int32_t ulen;
  u_int32_t flags;
};
506 507 508
typedef struct __toku_descriptor {
    DBT       dbt;
} *DESCRIPTOR, DESCRIPTOR_S;
509 510 511 512 513 514 515 516 517 518 519 520
//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;
521 522 523 524 525 526 527 528
struct __toku_db {
  struct __toku_db_internal *i;
#define db_struct_i(x) ((x)->i)
  int (*key_range64)(DB*, DB_TXN *, DBT *, u_int64_t *less, u_int64_t *equal, u_int64_t *greater, int *is_exact);
  int (*stat64)(DB *, DB_TXN *, DB_BTREE_STAT64 *);
  void *app_private;
  DB_ENV *dbenv;
  int (*pre_acquire_table_lock)(DB*, DB_TXN*);
529
  int (*pre_acquire_fileops_lock)(DB*, DB_TXN*);
530
  int (*pre_acquire_fileops_shared_lock)(DB*, DB_TXN*);
531 532
  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.*/;
533
  void (*get_max_row_size)(DB*, u_int32_t *max_key_size, u_int32_t *max_row_size) /* Test whether a row size is supported. */;
534
  DESCRIPTOR descriptor /* saved row/dictionary descriptor for aiding in comparisons */;
535
  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 */;
536
  int (*getf_set)(DB*, DB_TXN*, u_int32_t, DBT*, YDB_CALLBACK_FUNCTION, void*) /* same as DBC->c_getf_set without a persistent cursor) */;
537
  int (*flatten)(DB*, DB_TXN*) /* Flatten a dictionary, similar to (but faster than) a table scan */;
538
  int (*optimize)(DB*) /* Run garbage collecion and promote all transactions older than oldest. Amortized (happens during flattening) */;
Leif Walsh's avatar
Leif Walsh committed
539
  int (*hot_optimize)(DB*, int (*progress_callback)(void *progress_extra, float progress), void *progress_extra);
540
  int (*get_fragmentation)(DB*,TOKU_DB_FRAGMENTATION);
541 542
  int (*get_readpagesize)(DB*,u_int32_t*);
  int (*set_readpagesize)(DB*,u_int32_t);
543 544
  int (*set_indexer)(DB*, DB_INDEXER*);
  void (*get_indexer)(DB*, DB_INDEXER**);
545
  int (*verify_with_progress)(DB *, int (*progress_callback)(void *progress_extra, float progress), void *progress_extra, int verbose, int keep_going);
546 547
  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);
548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571
  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);
};
struct __toku_db_txn_active {
  u_int32_t txnid;
  DB_LSN lsn;
};
572 573 574 575 576 577 578
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*);
579
struct txn_stat {
580
  u_int64_t rollback_raw_count;
581 582 583 584 585
};
struct __toku_db_txn {
  DB_ENV *mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/;
  DB_TXN *parent;
  int (*txn_stat)(DB_TXN *, struct txn_stat **);
586
  struct { void *next, *prev; } open_txns;
587 588
  int (*commit_with_progress)(DB_TXN*, uint32_t, TXN_PROGRESS_POLL_FUNCTION, void*);
  int (*abort_with_progress)(DB_TXN*, TXN_PROGRESS_POLL_FUNCTION, void*);
589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607
  void *api_internal;
  int (*abort) (DB_TXN *);
  int (*commit) (DB_TXN*, u_int32_t);
  u_int32_t (*id) (DB_TXN *);
};
struct __toku_db_txn_stat {
  u_int32_t st_nactive;
  DB_TXN_ACTIVE *st_txnarray;
};
struct __toku_dbc {
  DB *dbp;
  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 *);
608
  int (*c_getf_set_range_reverse)(DBC *, u_int32_t, DBT *, YDB_CALLBACK_FUNCTION, void *);
609
  int (*c_pre_acquire_range_lock)(DBC*, const DBT*, const DBT*);
610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627
  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);
};
#ifdef _TOKUDB_WRAP_H
#define txn_begin txn_begin_tokudb
#endif
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")));
int db_env_set_func_fsync (int (*)(int)) __attribute__((__visibility__("default")));
int toku_set_trace_file (char *fname) __attribute__((__visibility__("default")));
int toku_close_trace_file (void) __attribute__((__visibility__("default")));
int db_env_set_func_free (void (*)(void*)) __attribute__((__visibility__("default")));
int db_env_set_func_malloc (void *(*)(size_t)) __attribute__((__visibility__("default")));
628
int db_env_set_func_realloc (void *(*)(void*, size_t)) __attribute__((__visibility__("default")));
629
int db_env_set_func_pwrite (ssize_t (*)(int, const void *, size_t, toku_off_t)) __attribute__((__visibility__("default")));
630
int db_env_set_func_full_pwrite (ssize_t (*)(int, const void *, size_t, toku_off_t)) __attribute__((__visibility__("default")));
631
int db_env_set_func_write (ssize_t (*)(int, const void *, size_t)) __attribute__((__visibility__("default")));
632
int db_env_set_func_full_write (ssize_t (*)(int, const void *, size_t)) __attribute__((__visibility__("default")));
633 634 635 636
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")));
637
int db_env_set_func_pread (ssize_t (*)(int, void *, size_t, off_t)) __attribute__((__visibility__("default")));
638
void db_env_set_func_loader_fwrite (size_t (*fwrite_fun)(const void*,size_t,size_t,FILE*)) __attribute__((__visibility__("default")));
639
void db_env_set_checkpoint_callback (void (*)(void*), void*) __attribute__((__visibility__("default")));
640
void db_env_set_checkpoint_callback2 (void (*)(void*), void*) __attribute__((__visibility__("default")));
641 642
void db_env_set_recover_callback (void (*)(void*), void*) __attribute__((__visibility__("default")));
void db_env_set_recover_callback2 (void (*)(void*), void*) __attribute__((__visibility__("default")));
643
void db_env_set_loader_size_factor (uint32_t) __attribute__((__visibility__("default")));
Zardosht Kasheff's avatar
Zardosht Kasheff committed
644
void db_env_set_mvcc_garbage_collection_verification(u_int32_t) __attribute__((__visibility__("default")));
645
void db_env_enable_engine_status(u_int32_t) __attribute__((__visibility__("default")));
Zardosht Kasheff's avatar
Zardosht Kasheff committed
646
void db_env_set_flusher_thread_callback (void (*)(int, void*), void*) __attribute__((__visibility__("default")));
647 648 649 650
#if defined(__cplusplus)
}
#endif
#endif