Commit 90270467 authored by Bradley C. Kuszmaul's avatar Bradley C. Kuszmaul Committed by Yoni Fogel

Fixes #2276. closes[t:2276]

git-svn-id: file:///svn/toku/tokudb@16801 c7de825b-a66e-492c-adef-691d508d4ae1
parent ba049a25
...@@ -15,7 +15,11 @@ BDB = 4_6 ...@@ -15,7 +15,11 @@ BDB = 4_6
BDBDIR = ../../../berkeleydb BDBDIR = ../../../berkeleydb
MYSQL_H = -I$(BDBDIR)/db-4.1.25/build_unix/ MYSQL_H = -I$(BDBDIR)/db-4.1.25/build_unix/
OPTFLAGS = -O2 OPTFLAGS = -O2
CFLAGS = -Wall -W -Werror -g $(OPTFLAGS) ifeq ($(GCCVERSION),4.4.2)
GCC_VERSION_SPECIFIC_WARNINGS = -Wno-strict-aliasing -Wno-deprecated
endif
CFLAGS = $(GCC_VERSION_SPECIFIC_WARNINGS) -Wall -W -Werror -g $(OPTFLAGS)
CPPFLAGS = -I. -I../toku_include
runs: runs_mysql runs_installed runs: runs_mysql runs_installed
samples: sample_offsets_4_6 sample_offsets_4_5 sample_offsets_4_4 sample_offsets_4_3 sample_offsets_4_1 samples: sample_offsets_4_6 sample_offsets_4_5 sample_offsets_4_4 sample_offsets_4_3 sample_offsets_4_1
...@@ -25,59 +29,59 @@ runs_mysql: ./sample_offsets_mysql ...@@ -25,59 +29,59 @@ runs_mysql: ./sample_offsets_mysql
./sample_offsets_mysql ./sample_offsets_mysql
runs_installed: sample_offsets runs_installed: sample_offsets
./sample_offsets ./sample_offsets
sample_offsets_mysql: CPPFLAGS=$(MYSQL_H) sample_offsets_mysql: CPPFLAGS+=$(MYSQL_H)
sample_offsets_mysql: sample_offsets.c sample_offsets_mysql: sample_offsets.c
$(CC) $(CFLAGS) $(CPPFLAGS) $< -o $@ $(CC) $(CFLAGS) $(CPPFLAGS) $< -o $@
make_db_h_4_1.o: make_db_h.c sample_offsets_32_4_1.h sample_offsets_64_4_1.h make_db_h_4_1.o: make_db_h.c sample_offsets_32_4_1.h sample_offsets_64_4_1.h
$(CC) $(CFLAGS) -I. -I$(BDBDIR)/db-4.1.25/build_unix $< -c -o $@ -DUSE_MAJOR=4 -DUSE_MINOR=1 -DTDB_NATIVE=0 $(CC) $(CFLAGS) $(CPPFLAGS) -I$(BDBDIR)/db-4.1.25/build_unix $< -c -o $@ -DUSE_MAJOR=4 -DUSE_MINOR=1 -DTDB_NATIVE=0
db.h_4_1: make_db_h_4_1 db.h_4_1: make_db_h_4_1
./make_db_h_4_1 > $@ ./make_db_h_4_1 > $@
sample_offsets_4_1: sample_offsets.c sample_offsets_4_1: sample_offsets.c
$(CC) $(CFLAGS) -I. -I$(BDBDIR)/db-4.1.25/build_unix $< -o $@ $(CC) $(CFLAGS) $(CPPFLAGS) -I$(BDBDIR)/db-4.1.25/build_unix $< -o $@
./sample_offsets_4_1 ./sample_offsets_4_1
make_db_h_4_3.o: make_db_h.c sample_offsets_32_4_3.h sample_offsets_64_4_3.h make_db_h_4_3.o: make_db_h.c sample_offsets_32_4_3.h sample_offsets_64_4_3.h
$(CC) $(CFLAGS) -I. -I$(BDBDIR)/db-4.3.29/build_unix $< -c -o $@ -DUSE_MAJOR=4 -DUSE_MINOR=3 -DTDB_NATIVE=0 $(CC) $(CFLAGS) $(CPPFLAGS) -I$(BDBDIR)/db-4.3.29/build_unix $< -c -o $@ -DUSE_MAJOR=4 -DUSE_MINOR=3 -DTDB_NATIVE=0
db.h_4_3: make_db_h_4_3 db.h_4_3: make_db_h_4_3
./make_db_h_4_3 > $@ ./make_db_h_4_3 > $@
sample_offsets_4_3: sample_offsets.c sample_offsets_4_3: sample_offsets.c
$(CC) $(CFLAGS) -I. -I$(BDBDIR)/db-4.3.29/build_unix $< -o $@ $(CC) $(CFLAGS) $(CPPFLAGS) -I$(BDBDIR)/db-4.3.29/build_unix $< -o $@
./sample_offsets_4_3 ./sample_offsets_4_3
make_db_h_4_4.o: make_db_h.c sample_offsets_32_4_4.h sample_offsets_64_4_4.h make_db_h_4_4.o: make_db_h.c sample_offsets_32_4_4.h sample_offsets_64_4_4.h
$(CC) $(CFLAGS) -I. -I$(BDBDIR)/db-4.4.20/build_unix $< -c -o $@ -DUSE_MAJOR=4 -DUSE_MINOR=4 -DTDB_NATIVE=0 $(CC) $(CFLAGS) $(CPPFLAGS) -I$(BDBDIR)/db-4.4.20/build_unix $< -c -o $@ -DUSE_MAJOR=4 -DUSE_MINOR=4 -DTDB_NATIVE=0
db.h_4_4: make_db_h_4_4 db.h_4_4: make_db_h_4_4
./make_db_h_4_4 > $@ ./make_db_h_4_4 > $@
sample_offsets_4_4: sample_offsets.c sample_offsets_4_4: sample_offsets.c
$(CC) $(CFLAGS) -I. -I$(BDBDIR)/db-4.4.20/build_unix $< -o $@ $(CC) $(CFLAGS) $(CPPFLAGS) -I$(BDBDIR)/db-4.4.20/build_unix $< -o $@
./sample_offsets_4_4 ./sample_offsets_4_4
make_db_h_4_5.o: make_db_h.c sample_offsets_32_4_5.h sample_offsets_64_4_5.h make_db_h_4_5.o: make_db_h.c sample_offsets_32_4_5.h sample_offsets_64_4_5.h
$(CC) $(CFLAGS) -I. -I$(BDBDIR)/db-4.5.20/build_unix $< -c -o $@ -DUSE_MAJOR=4 -DUSE_MINOR=5 -DTDB_NATIVE=0 $(CC) $(CFLAGS) $(CPPFLAGS) -I$(BDBDIR)/db-4.5.20/build_unix $< -c -o $@ -DUSE_MAJOR=4 -DUSE_MINOR=5 -DTDB_NATIVE=0
db.h_4_5: make_db_h_4_5 db.h_4_5: make_db_h_4_5
./make_db_h_4_5 > $@ ./make_db_h_4_5 > $@
sample_offsets_4_5: sample_offsets.c sample_offsets_4_5: sample_offsets.c
$(CC) $(CFLAGS) -I. -I$(BDBDIR)/db-4.5.20/build_unix $< -o $@ $(CC) $(CFLAGS) $(CPPFLAGS) -I$(BDBDIR)/db-4.5.20/build_unix $< -o $@
./sample_offsets_4_5 ./sample_offsets_4_5
make_db_h_4_6.o: make_db_h.c sample_offsets_32_4_6.h sample_offsets_64_4_6.h make_db_h_4_6.o: make_db_h.c sample_offsets_32_4_6.h sample_offsets_64_4_6.h
$(CC) $(CFLAGS) -I. -I$(BDBDIR)/db-4.6.19/build_unix $< -c -o $@ -DUSE_MAJOR=4 -DUSE_MINOR=6 -DTDB_NATIVE=0 $(CC) $(CFLAGS) $(CPPFLAGS) -I$(BDBDIR)/db-4.6.19/build_unix $< -c -o $@ -DUSE_MAJOR=4 -DUSE_MINOR=6 -DTDB_NATIVE=0
db.h_4_6: make_db_h_4_6 db.h_4_6: make_db_h_4_6
./make_db_h_4_6 > $@ ./make_db_h_4_6 > $@
sample_offsets_4_6: sample_offsets.c sample_offsets_4_6: sample_offsets.c
$(CC) $(CFLAGS) -I. -I$(BDBDIR)/db-4.6.19/build_unix $< -o $@ $(CC) $(CFLAGS) $(CPPFLAGS) -I$(BDBDIR)/db-4.6.19/build_unix $< -o $@
./sample_offsets_4_6 ./sample_offsets_4_6
make_tdb_h.o: make_db_h.c make_tdb_h.o: make_db_h.c
$(CC) $(CFLAGS) -I. -I$(BDBDIR)/db-4.6.19/build_unix $< -c -o $@ -DUSE_MAJOR=4 -DUSE_MINOR=6 -DTDB_NATIVE=1 $(CC) $(CFLAGS) $(CPPFLAGS) -I$(BDBDIR)/db-4.6.19/build_unix $< -c -o $@ -DUSE_MAJOR=4 -DUSE_MINOR=6 -DTDB_NATIVE=1
tdb.h: make_tdb_h tdb.h: make_tdb_h
./make_tdb_h > $@ ./make_tdb_h > $@
sample_offsets: sample_offsets:
sample_offsets_local: ./db.h sample_offsets_local: ./db.h
sample_offsets_local: sample_offsets.c sample_offsets_local: sample_offsets.c
$(CC) $(CFLAGS) -I. -DLOCAL $< -o $@ $(CC) $(CFLAGS) $(CPPFLAGS) -DLOCAL $< -o $@
hfiles: db.h_4_1 db.h_4_3 db.h_4_4 db.h_4_5 db.h_4_6 tdb.h hfiles: db.h_4_1 db.h_4_3 db.h_4_4 db.h_4_5 db.h_4_6 tdb.h
......
...@@ -37,6 +37,9 @@ typedef int(*YDB_CALLBACK_FUNCTION)(DBT const*, DBT const*, void*); ...@@ -37,6 +37,9 @@ typedef int(*YDB_CALLBACK_FUNCTION)(DBT const*, DBT const*, void*);
typedef int(*YDB_HEAVISIDE_CALLBACK_FUNCTION)(DBT const *key, DBT const *value, void *extra_f, int r_h); typedef int(*YDB_HEAVISIDE_CALLBACK_FUNCTION)(DBT const *key, DBT const *value, void *extra_f, int r_h);
typedef int(*YDB_HEAVISIDE_FUNCTION)(const DBT *key, const DBT *value, void *extra_h); typedef int(*YDB_HEAVISIDE_FUNCTION)(const DBT *key, const DBT *value, void *extra_h);
#include <tdb-internal.h> #include <tdb-internal.h>
#ifndef __BIGGEST_ALIGNMENT__
#define __BIGGEST_ALIGNMENT__ 16
#endif
typedef struct __toku_db_btree_stat64 { 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_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_ndata; /* how many key-value pairs (an estimate, but exact when flattened) */
...@@ -319,11 +322,9 @@ struct txn_stat { ...@@ -319,11 +322,9 @@ struct txn_stat {
struct __toku_db_txn { struct __toku_db_txn {
DB_ENV *mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */ DB_ENV *mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */
DB_TXN *parent; /* 32-bit offset=4 size=4, 64=bit offset=8 size=8 */ DB_TXN *parent; /* 32-bit offset=4 size=4, 64=bit offset=8 size=8 */
struct __toku_db_txn_internal *i;
#define db_txn_struct_i(x) ((x)->i)
int (*txn_stat)(DB_TXN *, struct txn_stat **); int (*txn_stat)(DB_TXN *, struct txn_stat **);
struct { void *next, *prev; } open_txns; struct { void *next, *prev; } open_txns;
void* __toku_dummy0[6]; void* __toku_dummy0[7];
char __toku_dummy1[24]; char __toku_dummy1[24];
void *api_internal; /* 32-bit offset=68 size=4, 64=bit offset=112 size=8 */ void *api_internal; /* 32-bit offset=68 size=4, 64=bit offset=112 size=8 */
void* __toku_dummy2[1]; void* __toku_dummy2[1];
...@@ -332,6 +333,8 @@ struct __toku_db_txn { ...@@ -332,6 +333,8 @@ struct __toku_db_txn {
void* __toku_dummy3[1]; void* __toku_dummy3[1];
u_int32_t (*id) (DB_TXN *); /* 32-bit offset=88 size=4, 64=bit offset=152 size=8 */ u_int32_t (*id) (DB_TXN *); /* 32-bit offset=88 size=4, 64=bit offset=152 size=8 */
void* __toku_dummy4[3]; /* Padding at the end */ void* __toku_dummy4[3]; /* Padding at the end */
char iic[0] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
#define db_txn_struct_i(x) ((struct __toku_db_txn_internal *)(&(x)->iic))
}; };
struct __toku_db_txn_stat { struct __toku_db_txn_stat {
void* __toku_dummy0[1]; void* __toku_dummy0[1];
...@@ -344,8 +347,6 @@ struct __toku_db_txn_stat { ...@@ -344,8 +347,6 @@ struct __toku_db_txn_stat {
}; };
struct __toku_dbc { struct __toku_dbc {
DB *dbp; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */ DB *dbp; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */
struct __toku_dbc_internal *i;
#define dbc_struct_i(x) ((x)->i)
int (*c_getf_first)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *); 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_last)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *);
int (*c_getf_next)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_next)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *);
...@@ -363,7 +364,7 @@ struct __toku_dbc { ...@@ -363,7 +364,7 @@ struct __toku_dbc {
int (*c_getf_get_both)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_get_both)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *);
int (*c_getf_get_both_range)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_get_both_range)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *);
int (*c_getf_get_both_range_reverse)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_get_both_range_reverse)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *);
void* __toku_dummy0[2]; void* __toku_dummy0[3];
char __toku_dummy1[104]; char __toku_dummy1[104];
int (*c_close) (DBC *); /* 32-bit offset=188 size=4, 64=bit offset=272 size=8 */ int (*c_close) (DBC *); /* 32-bit offset=188 size=4, 64=bit offset=272 size=8 */
int (*c_count) (DBC *, db_recno_t *, u_int32_t); /* 32-bit offset=192 size=4, 64=bit offset=280 size=8 */ int (*c_count) (DBC *, db_recno_t *, u_int32_t); /* 32-bit offset=192 size=4, 64=bit offset=280 size=8 */
...@@ -371,6 +372,8 @@ struct __toku_dbc { ...@@ -371,6 +372,8 @@ struct __toku_dbc {
void* __toku_dummy2[1]; void* __toku_dummy2[1];
int (*c_get) (DBC *, DBT *, DBT *, u_int32_t); /* 32-bit offset=204 size=4, 64=bit offset=304 size=8 */ int (*c_get) (DBC *, DBT *, DBT *, u_int32_t); /* 32-bit offset=204 size=4, 64=bit offset=304 size=8 */
void* __toku_dummy3[11]; /* Padding at the end */ void* __toku_dummy3[11]; /* Padding at the end */
char iic[0] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
#define dbc_struct_i(x) ((struct __toku_dbc_internal *)(&(x)->iic))
}; };
#ifdef _TOKUDB_WRAP_H #ifdef _TOKUDB_WRAP_H
#define txn_begin txn_begin_tokudb #define txn_begin txn_begin_tokudb
......
...@@ -37,6 +37,9 @@ typedef int(*YDB_CALLBACK_FUNCTION)(DBT const*, DBT const*, void*); ...@@ -37,6 +37,9 @@ typedef int(*YDB_CALLBACK_FUNCTION)(DBT const*, DBT const*, void*);
typedef int(*YDB_HEAVISIDE_CALLBACK_FUNCTION)(DBT const *key, DBT const *value, void *extra_f, int r_h); typedef int(*YDB_HEAVISIDE_CALLBACK_FUNCTION)(DBT const *key, DBT const *value, void *extra_f, int r_h);
typedef int(*YDB_HEAVISIDE_FUNCTION)(const DBT *key, const DBT *value, void *extra_h); typedef int(*YDB_HEAVISIDE_FUNCTION)(const DBT *key, const DBT *value, void *extra_h);
#include <tdb-internal.h> #include <tdb-internal.h>
#ifndef __BIGGEST_ALIGNMENT__
#define __BIGGEST_ALIGNMENT__ 16
#endif
typedef struct __toku_db_btree_stat64 { 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_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_ndata; /* how many key-value pairs (an estimate, but exact when flattened) */
...@@ -335,11 +338,9 @@ struct txn_stat { ...@@ -335,11 +338,9 @@ struct txn_stat {
struct __toku_db_txn { struct __toku_db_txn {
DB_ENV *mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */ DB_ENV *mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */
DB_TXN *parent; /* 32-bit offset=4 size=4, 64=bit offset=8 size=8 */ DB_TXN *parent; /* 32-bit offset=4 size=4, 64=bit offset=8 size=8 */
struct __toku_db_txn_internal *i;
#define db_txn_struct_i(x) ((x)->i)
int (*txn_stat)(DB_TXN *, struct txn_stat **); int (*txn_stat)(DB_TXN *, struct txn_stat **);
struct { void *next, *prev; } open_txns; struct { void *next, *prev; } open_txns;
void* __toku_dummy0[11]; void* __toku_dummy0[12];
char __toku_dummy1[24]; char __toku_dummy1[24];
void *api_internal; /* 32-bit offset=88 size=4, 64=bit offset=152 size=8 */ void *api_internal; /* 32-bit offset=88 size=4, 64=bit offset=152 size=8 */
void* __toku_dummy2[2]; void* __toku_dummy2[2];
...@@ -348,6 +349,8 @@ struct __toku_db_txn { ...@@ -348,6 +349,8 @@ struct __toku_db_txn {
void* __toku_dummy3[1]; void* __toku_dummy3[1];
u_int32_t (*id) (DB_TXN *); /* 32-bit offset=112 size=4, 64=bit offset=200 size=8 */ u_int32_t (*id) (DB_TXN *); /* 32-bit offset=112 size=4, 64=bit offset=200 size=8 */
void* __toku_dummy4[4]; /* Padding at the end */ void* __toku_dummy4[4]; /* Padding at the end */
char iic[0] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
#define db_txn_struct_i(x) ((struct __toku_db_txn_internal *)(&(x)->iic))
}; };
struct __toku_db_txn_stat { struct __toku_db_txn_stat {
void* __toku_dummy0[1]; void* __toku_dummy0[1];
...@@ -360,8 +363,6 @@ struct __toku_db_txn_stat { ...@@ -360,8 +363,6 @@ struct __toku_db_txn_stat {
}; };
struct __toku_dbc { struct __toku_dbc {
DB *dbp; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */ DB *dbp; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */
struct __toku_dbc_internal *i;
#define dbc_struct_i(x) ((x)->i)
int (*c_getf_first)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *); 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_last)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *);
int (*c_getf_next)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_next)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *);
...@@ -379,13 +380,16 @@ struct __toku_dbc { ...@@ -379,13 +380,16 @@ struct __toku_dbc {
int (*c_getf_get_both)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_get_both)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *);
int (*c_getf_get_both_range)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_get_both_range)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *);
int (*c_getf_get_both_range_reverse)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_get_both_range_reverse)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *);
char __toku_dummy0[112]; void* __toku_dummy0[1];
char __toku_dummy1[112];
int (*c_close) (DBC *); /* 32-bit offset=188 size=4, 64=bit offset=264 size=8 */ int (*c_close) (DBC *); /* 32-bit offset=188 size=4, 64=bit offset=264 size=8 */
int (*c_count) (DBC *, db_recno_t *, u_int32_t); /* 32-bit offset=192 size=4, 64=bit offset=272 size=8 */ int (*c_count) (DBC *, db_recno_t *, u_int32_t); /* 32-bit offset=192 size=4, 64=bit offset=272 size=8 */
int (*c_del) (DBC *, u_int32_t); /* 32-bit offset=196 size=4, 64=bit offset=280 size=8 */ int (*c_del) (DBC *, u_int32_t); /* 32-bit offset=196 size=4, 64=bit offset=280 size=8 */
void* __toku_dummy1[1]; void* __toku_dummy2[1];
int (*c_get) (DBC *, DBT *, DBT *, u_int32_t); /* 32-bit offset=204 size=4, 64=bit offset=296 size=8 */ int (*c_get) (DBC *, DBT *, DBT *, u_int32_t); /* 32-bit offset=204 size=4, 64=bit offset=296 size=8 */
void* __toku_dummy2[10]; /* Padding at the end */ void* __toku_dummy3[10]; /* Padding at the end */
char iic[0] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
#define dbc_struct_i(x) ((struct __toku_dbc_internal *)(&(x)->iic))
}; };
#ifdef _TOKUDB_WRAP_H #ifdef _TOKUDB_WRAP_H
#define txn_begin txn_begin_tokudb #define txn_begin txn_begin_tokudb
......
...@@ -37,6 +37,9 @@ typedef int(*YDB_CALLBACK_FUNCTION)(DBT const*, DBT const*, void*); ...@@ -37,6 +37,9 @@ typedef int(*YDB_CALLBACK_FUNCTION)(DBT const*, DBT const*, void*);
typedef int(*YDB_HEAVISIDE_CALLBACK_FUNCTION)(DBT const *key, DBT const *value, void *extra_f, int r_h); typedef int(*YDB_HEAVISIDE_CALLBACK_FUNCTION)(DBT const *key, DBT const *value, void *extra_f, int r_h);
typedef int(*YDB_HEAVISIDE_FUNCTION)(const DBT *key, const DBT *value, void *extra_h); typedef int(*YDB_HEAVISIDE_FUNCTION)(const DBT *key, const DBT *value, void *extra_h);
#include <tdb-internal.h> #include <tdb-internal.h>
#ifndef __BIGGEST_ALIGNMENT__
#define __BIGGEST_ALIGNMENT__ 16
#endif
typedef struct __toku_db_btree_stat64 { 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_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_ndata; /* how many key-value pairs (an estimate, but exact when flattened) */
...@@ -342,11 +345,9 @@ struct txn_stat { ...@@ -342,11 +345,9 @@ struct txn_stat {
struct __toku_db_txn { struct __toku_db_txn {
DB_ENV *mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */ DB_ENV *mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */
DB_TXN *parent; /* 32-bit offset=4 size=4, 64=bit offset=8 size=8 */ DB_TXN *parent; /* 32-bit offset=4 size=4, 64=bit offset=8 size=8 */
struct __toku_db_txn_internal *i;
#define db_txn_struct_i(x) ((x)->i)
int (*txn_stat)(DB_TXN *, struct txn_stat **); int (*txn_stat)(DB_TXN *, struct txn_stat **);
struct { void *next, *prev; } open_txns; struct { void *next, *prev; } open_txns;
void* __toku_dummy0[14]; void* __toku_dummy0[15];
char __toku_dummy1[8]; char __toku_dummy1[8];
void *api_internal; /* 32-bit offset=84 size=4, 64=bit offset=160 size=8 */ void *api_internal; /* 32-bit offset=84 size=4, 64=bit offset=160 size=8 */
void* __toku_dummy2[2]; void* __toku_dummy2[2];
...@@ -355,6 +356,8 @@ struct __toku_db_txn { ...@@ -355,6 +356,8 @@ struct __toku_db_txn {
void* __toku_dummy3[2]; void* __toku_dummy3[2];
u_int32_t (*id) (DB_TXN *); /* 32-bit offset=112 size=4, 64=bit offset=216 size=8 */ u_int32_t (*id) (DB_TXN *); /* 32-bit offset=112 size=4, 64=bit offset=216 size=8 */
void* __toku_dummy4[5]; /* Padding at the end */ void* __toku_dummy4[5]; /* Padding at the end */
char iic[0] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
#define db_txn_struct_i(x) ((struct __toku_db_txn_internal *)(&(x)->iic))
}; };
struct __toku_db_txn_stat { struct __toku_db_txn_stat {
void* __toku_dummy0[1]; void* __toku_dummy0[1];
...@@ -367,8 +370,6 @@ struct __toku_db_txn_stat { ...@@ -367,8 +370,6 @@ struct __toku_db_txn_stat {
}; };
struct __toku_dbc { struct __toku_dbc {
DB *dbp; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */ DB *dbp; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */
struct __toku_dbc_internal *i;
#define dbc_struct_i(x) ((x)->i)
int (*c_getf_first)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *); 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_last)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *);
int (*c_getf_next)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_next)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *);
...@@ -386,7 +387,7 @@ struct __toku_dbc { ...@@ -386,7 +387,7 @@ struct __toku_dbc {
int (*c_getf_get_both)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_get_both)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *);
int (*c_getf_get_both_range)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_get_both_range)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *);
int (*c_getf_get_both_range_reverse)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_get_both_range_reverse)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *);
void* __toku_dummy0[2]; void* __toku_dummy0[3];
char __toku_dummy1[104]; char __toku_dummy1[104];
int (*c_close) (DBC *); /* 32-bit offset=188 size=4, 64=bit offset=272 size=8 */ int (*c_close) (DBC *); /* 32-bit offset=188 size=4, 64=bit offset=272 size=8 */
int (*c_count) (DBC *, db_recno_t *, u_int32_t); /* 32-bit offset=192 size=4, 64=bit offset=280 size=8 */ int (*c_count) (DBC *, db_recno_t *, u_int32_t); /* 32-bit offset=192 size=4, 64=bit offset=280 size=8 */
...@@ -394,6 +395,8 @@ struct __toku_dbc { ...@@ -394,6 +395,8 @@ struct __toku_dbc {
void* __toku_dummy2[1]; void* __toku_dummy2[1];
int (*c_get) (DBC *, DBT *, DBT *, u_int32_t); /* 32-bit offset=204 size=4, 64=bit offset=304 size=8 */ int (*c_get) (DBC *, DBT *, DBT *, u_int32_t); /* 32-bit offset=204 size=4, 64=bit offset=304 size=8 */
void* __toku_dummy3[10]; /* Padding at the end */ void* __toku_dummy3[10]; /* Padding at the end */
char iic[0] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
#define dbc_struct_i(x) ((struct __toku_dbc_internal *)(&(x)->iic))
}; };
#ifdef _TOKUDB_WRAP_H #ifdef _TOKUDB_WRAP_H
#define txn_begin txn_begin_tokudb #define txn_begin txn_begin_tokudb
......
...@@ -37,6 +37,9 @@ typedef int(*YDB_CALLBACK_FUNCTION)(DBT const*, DBT const*, void*); ...@@ -37,6 +37,9 @@ typedef int(*YDB_CALLBACK_FUNCTION)(DBT const*, DBT const*, void*);
typedef int(*YDB_HEAVISIDE_CALLBACK_FUNCTION)(DBT const *key, DBT const *value, void *extra_f, int r_h); typedef int(*YDB_HEAVISIDE_CALLBACK_FUNCTION)(DBT const *key, DBT const *value, void *extra_f, int r_h);
typedef int(*YDB_HEAVISIDE_FUNCTION)(const DBT *key, const DBT *value, void *extra_h); typedef int(*YDB_HEAVISIDE_FUNCTION)(const DBT *key, const DBT *value, void *extra_h);
#include <tdb-internal.h> #include <tdb-internal.h>
#ifndef __BIGGEST_ALIGNMENT__
#define __BIGGEST_ALIGNMENT__ 16
#endif
typedef struct __toku_db_btree_stat64 { 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_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_ndata; /* how many key-value pairs (an estimate, but exact when flattened) */
...@@ -343,11 +346,9 @@ struct txn_stat { ...@@ -343,11 +346,9 @@ struct txn_stat {
struct __toku_db_txn { struct __toku_db_txn {
DB_ENV *mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */ DB_ENV *mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */
DB_TXN *parent; /* 32-bit offset=4 size=4, 64=bit offset=8 size=8 */ DB_TXN *parent; /* 32-bit offset=4 size=4, 64=bit offset=8 size=8 */
struct __toku_db_txn_internal *i;
#define db_txn_struct_i(x) ((x)->i)
int (*txn_stat)(DB_TXN *, struct txn_stat **); int (*txn_stat)(DB_TXN *, struct txn_stat **);
struct { void *next, *prev; } open_txns; struct { void *next, *prev; } open_txns;
void* __toku_dummy0[14]; void* __toku_dummy0[15];
char __toku_dummy1[8]; char __toku_dummy1[8];
void *api_internal; /* 32-bit offset=84 size=4, 64=bit offset=160 size=8 */ void *api_internal; /* 32-bit offset=84 size=4, 64=bit offset=160 size=8 */
void* __toku_dummy2[2]; void* __toku_dummy2[2];
...@@ -356,6 +357,8 @@ struct __toku_db_txn { ...@@ -356,6 +357,8 @@ struct __toku_db_txn {
void* __toku_dummy3[2]; void* __toku_dummy3[2];
u_int32_t (*id) (DB_TXN *); /* 32-bit offset=112 size=4, 64=bit offset=216 size=8 */ u_int32_t (*id) (DB_TXN *); /* 32-bit offset=112 size=4, 64=bit offset=216 size=8 */
void* __toku_dummy4[5]; /* Padding at the end */ void* __toku_dummy4[5]; /* Padding at the end */
char iic[0] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
#define db_txn_struct_i(x) ((struct __toku_db_txn_internal *)(&(x)->iic))
}; };
struct __toku_db_txn_stat { struct __toku_db_txn_stat {
void* __toku_dummy0[1]; void* __toku_dummy0[1];
...@@ -368,8 +371,6 @@ struct __toku_db_txn_stat { ...@@ -368,8 +371,6 @@ struct __toku_db_txn_stat {
}; };
struct __toku_dbc { struct __toku_dbc {
DB *dbp; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */ DB *dbp; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */
struct __toku_dbc_internal *i;
#define dbc_struct_i(x) ((x)->i)
int (*c_getf_first)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *); 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_last)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *);
int (*c_getf_next)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_next)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *);
...@@ -387,7 +388,7 @@ struct __toku_dbc { ...@@ -387,7 +388,7 @@ struct __toku_dbc {
int (*c_getf_get_both)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_get_both)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *);
int (*c_getf_get_both_range)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_get_both_range)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *);
int (*c_getf_get_both_range_reverse)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_get_both_range_reverse)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *);
void* __toku_dummy0[6]; void* __toku_dummy0[7];
char __toku_dummy1[104]; char __toku_dummy1[104];
int (*c_close) (DBC *); /* 32-bit offset=204 size=4, 64=bit offset=304 size=8 */ int (*c_close) (DBC *); /* 32-bit offset=204 size=4, 64=bit offset=304 size=8 */
int (*c_count) (DBC *, db_recno_t *, u_int32_t); /* 32-bit offset=208 size=4, 64=bit offset=312 size=8 */ int (*c_count) (DBC *, db_recno_t *, u_int32_t); /* 32-bit offset=208 size=4, 64=bit offset=312 size=8 */
...@@ -395,6 +396,8 @@ struct __toku_dbc { ...@@ -395,6 +396,8 @@ struct __toku_dbc {
void* __toku_dummy2[1]; void* __toku_dummy2[1];
int (*c_get) (DBC *, DBT *, DBT *, u_int32_t); /* 32-bit offset=220 size=4, 64=bit offset=336 size=8 */ int (*c_get) (DBC *, DBT *, DBT *, u_int32_t); /* 32-bit offset=220 size=4, 64=bit offset=336 size=8 */
void* __toku_dummy3[10]; /* Padding at the end */ void* __toku_dummy3[10]; /* Padding at the end */
char iic[0] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
#define dbc_struct_i(x) ((struct __toku_dbc_internal *)(&(x)->iic))
}; };
#ifdef _TOKUDB_WRAP_H #ifdef _TOKUDB_WRAP_H
#define txn_begin txn_begin_tokudb #define txn_begin txn_begin_tokudb
......
...@@ -37,6 +37,9 @@ typedef int(*YDB_CALLBACK_FUNCTION)(DBT const*, DBT const*, void*); ...@@ -37,6 +37,9 @@ typedef int(*YDB_CALLBACK_FUNCTION)(DBT const*, DBT const*, void*);
typedef int(*YDB_HEAVISIDE_CALLBACK_FUNCTION)(DBT const *key, DBT const *value, void *extra_f, int r_h); typedef int(*YDB_HEAVISIDE_CALLBACK_FUNCTION)(DBT const *key, DBT const *value, void *extra_f, int r_h);
typedef int(*YDB_HEAVISIDE_FUNCTION)(const DBT *key, const DBT *value, void *extra_h); typedef int(*YDB_HEAVISIDE_FUNCTION)(const DBT *key, const DBT *value, void *extra_h);
#include <tdb-internal.h> #include <tdb-internal.h>
#ifndef __BIGGEST_ALIGNMENT__
#define __BIGGEST_ALIGNMENT__ 16
#endif
typedef struct __toku_db_btree_stat64 { 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_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_ndata; /* how many key-value pairs (an estimate, but exact when flattened) */
...@@ -347,11 +350,9 @@ struct txn_stat { ...@@ -347,11 +350,9 @@ struct txn_stat {
struct __toku_db_txn { struct __toku_db_txn {
DB_ENV *mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */ DB_ENV *mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */
DB_TXN *parent; /* 32-bit offset=4 size=4, 64=bit offset=8 size=8 */ DB_TXN *parent; /* 32-bit offset=4 size=4, 64=bit offset=8 size=8 */
struct __toku_db_txn_internal *i;
#define db_txn_struct_i(x) ((x)->i)
int (*txn_stat)(DB_TXN *, struct txn_stat **); int (*txn_stat)(DB_TXN *, struct txn_stat **);
struct { void *next, *prev; } open_txns; struct { void *next, *prev; } open_txns;
void* __toku_dummy0[15]; void* __toku_dummy0[16];
char __toku_dummy1[8]; char __toku_dummy1[8];
void *api_internal; /* 32-bit offset=88 size=4, 64=bit offset=168 size=8 */ void *api_internal; /* 32-bit offset=88 size=4, 64=bit offset=168 size=8 */
void* __toku_dummy2[2]; void* __toku_dummy2[2];
...@@ -360,6 +361,8 @@ struct __toku_db_txn { ...@@ -360,6 +361,8 @@ struct __toku_db_txn {
void* __toku_dummy3[2]; void* __toku_dummy3[2];
u_int32_t (*id) (DB_TXN *); /* 32-bit offset=116 size=4, 64=bit offset=224 size=8 */ u_int32_t (*id) (DB_TXN *); /* 32-bit offset=116 size=4, 64=bit offset=224 size=8 */
void* __toku_dummy4[5]; /* Padding at the end */ void* __toku_dummy4[5]; /* Padding at the end */
char iic[0] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
#define db_txn_struct_i(x) ((struct __toku_db_txn_internal *)(&(x)->iic))
}; };
struct __toku_db_txn_stat { struct __toku_db_txn_stat {
void* __toku_dummy0[2]; void* __toku_dummy0[2];
...@@ -373,8 +376,6 @@ struct __toku_db_txn_stat { ...@@ -373,8 +376,6 @@ struct __toku_db_txn_stat {
}; };
struct __toku_dbc { struct __toku_dbc {
DB *dbp; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */ DB *dbp; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */
struct __toku_dbc_internal *i;
#define dbc_struct_i(x) ((x)->i)
int (*c_getf_first)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *); 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_last)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *);
int (*c_getf_next)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_next)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *);
...@@ -392,7 +393,7 @@ struct __toku_dbc { ...@@ -392,7 +393,7 @@ struct __toku_dbc {
int (*c_getf_get_both)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_get_both)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *);
int (*c_getf_get_both_range)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_get_both_range)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *);
int (*c_getf_get_both_range_reverse)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_get_both_range_reverse)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *);
void* __toku_dummy0[16]; void* __toku_dummy0[17];
char __toku_dummy1[104]; char __toku_dummy1[104];
int (*c_close) (DBC *); /* 32-bit offset=244 size=4, 64=bit offset=384 size=8 */ int (*c_close) (DBC *); /* 32-bit offset=244 size=4, 64=bit offset=384 size=8 */
int (*c_count) (DBC *, db_recno_t *, u_int32_t); /* 32-bit offset=248 size=4, 64=bit offset=392 size=8 */ int (*c_count) (DBC *, db_recno_t *, u_int32_t); /* 32-bit offset=248 size=4, 64=bit offset=392 size=8 */
...@@ -400,6 +401,8 @@ struct __toku_dbc { ...@@ -400,6 +401,8 @@ struct __toku_dbc {
void* __toku_dummy2[1]; void* __toku_dummy2[1];
int (*c_get) (DBC *, DBT *, DBT *, u_int32_t); /* 32-bit offset=260 size=4, 64=bit offset=416 size=8 */ int (*c_get) (DBC *, DBT *, DBT *, u_int32_t); /* 32-bit offset=260 size=4, 64=bit offset=416 size=8 */
void* __toku_dummy3[10]; /* Padding at the end */ void* __toku_dummy3[10]; /* Padding at the end */
char iic[0] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
#define dbc_struct_i(x) ((struct __toku_dbc_internal *)(&(x)->iic))
}; };
#ifdef _TOKUDB_WRAP_H #ifdef _TOKUDB_WRAP_H
#define txn_begin txn_begin_tokudb #define txn_begin txn_begin_tokudb
......
...@@ -197,7 +197,9 @@ struct fieldinfo { ...@@ -197,7 +197,9 @@ struct fieldinfo {
#error #error
#endif #endif
void print_struct (const char *structname, int need_internal, struct fieldinfo *fields32, struct fieldinfo *fields64, unsigned int N, const char *extra_decls[]) { enum need_internal_type { NO_INTERNAL=0, INTERNAL_NAMED=1, INTERNAL_AT_END=2};
void print_struct (const char *structname, enum need_internal_type need_internal, struct fieldinfo *fields32, struct fieldinfo *fields64, unsigned int N, const char *extra_decls[]) {
unsigned int i; unsigned int i;
unsigned int current_32 = 0; unsigned int current_32 = 0;
unsigned int current_64 = 0; unsigned int current_64 = 0;
...@@ -205,6 +207,7 @@ void print_struct (const char *structname, int need_internal, struct fieldinfo * ...@@ -205,6 +207,7 @@ void print_struct (const char *structname, int need_internal, struct fieldinfo *
int did_toku_internal=0; int did_toku_internal=0;
// int total32 = fields32[N-1].size; // int total32 = fields32[N-1].size;
// int total64 = fields32[N-1].size; // int total64 = fields32[N-1].size;
assert(need_internal==NO_INTERNAL || need_internal==INTERNAL_NAMED || need_internal==INTERNAL_AT_END);
printf("struct __toku_%s {\n", structname); printf("struct __toku_%s {\n", structname);
for (i=0; i<N-1; i++) { for (i=0; i<N-1; i++) {
unsigned int this_32 = fields32[i].off; unsigned int this_32 = fields32[i].off;
...@@ -217,7 +220,7 @@ void print_struct (const char *structname, int need_internal, struct fieldinfo * ...@@ -217,7 +220,7 @@ void print_struct (const char *structname, int need_internal, struct fieldinfo *
if (diff32!=diff64) { if (diff32!=diff64) {
unsigned int diff = diff64-diff32; unsigned int diff = diff64-diff32;
unsigned int n_dummys = diff/4; unsigned int n_dummys = diff/4;
if (need_internal && !did_toku_internal) { if (need_internal==INTERNAL_NAMED && !did_toku_internal) {
if (TDB_NATIVE && if (TDB_NATIVE &&
(strcmp(structname, "dbc")==0 || (strcmp(structname, "dbc")==0 ||
strcmp(structname, "db_txn")==0)) { strcmp(structname, "db_txn")==0)) {
...@@ -295,6 +298,11 @@ void print_struct (const char *structname, int need_internal, struct fieldinfo * ...@@ -295,6 +298,11 @@ void print_struct (const char *structname, int need_internal, struct fieldinfo *
printf(" /* %d more bytes of alignment in the 64-bit case. */\n", diff64); printf(" /* %d more bytes of alignment in the 64-bit case. */\n", diff64);
assert(diff64<8); /* there could be a few left from alignment. */ assert(diff64<8); /* there could be a few left from alignment. */
} }
if (need_internal==INTERNAL_AT_END) {
printf(" char iic[0] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));\n");
printf("#define %s_struct_i(x) ((struct __toku_%s_internal *)(&(x)->iic))\n", structname, structname);
did_toku_internal = 1;
}
printf("};\n"); printf("};\n");
assert(did_toku_internal || !need_internal); assert(did_toku_internal || !need_internal);
} }
...@@ -354,6 +362,8 @@ int main (int argc __attribute__((__unused__)), char *argv[] __attribute__((__un ...@@ -354,6 +362,8 @@ int main (int argc __attribute__((__unused__)), char *argv[] __attribute__((__un
printf("#include <tdb-internal.h>\n"); printf("#include <tdb-internal.h>\n");
printf("#ifndef __BIGGEST_ALIGNMENT__\n #define __BIGGEST_ALIGNMENT__ 16\n#endif\n");
//stat64 //stat64
printf("typedef struct __toku_db_btree_stat64 {\n"); printf("typedef struct __toku_db_btree_stat64 {\n");
printf(" u_int64_t bt_nkeys; /* how many unique keys (guaranteed only to be an estimate, even when flattened) */\n"); printf(" u_int64_t bt_nkeys; /* how many unique keys (guaranteed only to be an estimate, even when flattened) */\n");
...@@ -486,7 +496,7 @@ int main (int argc __attribute__((__unused__)), char *argv[] __attribute__((__un ...@@ -486,7 +496,7 @@ int main (int argc __attribute__((__unused__)), char *argv[] __attribute__((__un
"struct { void *next, *prev; } open_txns", "struct { void *next, *prev; } open_txns",
NULL, NULL,
}; };
print_struct("db_txn", 1, db_txn_fields32, db_txn_fields64, sizeof(db_txn_fields32)/sizeof(db_txn_fields32[0]), extra); print_struct("db_txn", INTERNAL_AT_END, db_txn_fields32, db_txn_fields64, sizeof(db_txn_fields32)/sizeof(db_txn_fields32[0]), extra);
} }
assert(sizeof(db_txn_stat_fields32)==sizeof(db_txn_stat_fields64)); assert(sizeof(db_txn_stat_fields32)==sizeof(db_txn_stat_fields64));
...@@ -515,7 +525,7 @@ int main (int argc __attribute__((__unused__)), char *argv[] __attribute__((__un ...@@ -515,7 +525,7 @@ int main (int argc __attribute__((__unused__)), char *argv[] __attribute__((__un
"int (*c_getf_get_both_range_reverse)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *)", "int (*c_getf_get_both_range_reverse)(DBC *, u_int32_t, DBT *, DBT *, YDB_CALLBACK_FUNCTION, void *)",
NULL}; NULL};
assert(sizeof(dbc_fields32)==sizeof(dbc_fields64)); assert(sizeof(dbc_fields32)==sizeof(dbc_fields64));
print_struct("dbc", 1, dbc_fields32, dbc_fields64, sizeof(dbc_fields32)/sizeof(dbc_fields32[0]), extra); print_struct("dbc", INTERNAL_AT_END, dbc_fields32, dbc_fields64, sizeof(dbc_fields32)/sizeof(dbc_fields32[0]), extra);
} }
printf("#ifdef _TOKUDB_WRAP_H\n#define txn_begin txn_begin_tokudb\n#endif\n"); printf("#ifdef _TOKUDB_WRAP_H\n#define txn_begin txn_begin_tokudb\n#endif\n");
......
...@@ -11,6 +11,8 @@ struct fieldinfo db_env_fields64[] = { ...@@ -11,6 +11,8 @@ struct fieldinfo db_env_fields64[] = {
{"void *app_private", 216, 8}, {"void *app_private", 216, 8},
{"void *api1_internal", 224, 8}, {"void *api1_internal", 224, 8},
{"int (*close) (DB_ENV *, u_int32_t)", 408, 8}, {"int (*close) (DB_ENV *, u_int32_t)", 408, 8},
{"int (*dbremove) (DB_ENV *, DB_TXN *, const char *, const char *, u_int32_t)", 416, 8},
{"int (*dbrename) (DB_ENV *, DB_TXN *, const char *, const char *, const char *, u_int32_t)", 424, 8},
{"void (*err) (const DB_ENV *, int, const char *, ...)", 432, 8}, {"void (*err) (const DB_ENV *, int, const char *, ...)", 432, 8},
{"int (*get_cachesize) (DB_ENV *, u_int32_t *, u_int32_t *, int *)", 472, 8}, {"int (*get_cachesize) (DB_ENV *, u_int32_t *, u_int32_t *, int *)", 472, 8},
{"int (*get_flags) (DB_ENV *, u_int32_t *)", 520, 8}, {"int (*get_flags) (DB_ENV *, u_int32_t *)", 520, 8},
......
...@@ -37,6 +37,9 @@ typedef int(*YDB_CALLBACK_FUNCTION)(DBT const*, DBT const*, void*); ...@@ -37,6 +37,9 @@ typedef int(*YDB_CALLBACK_FUNCTION)(DBT const*, DBT const*, void*);
typedef int(*YDB_HEAVISIDE_CALLBACK_FUNCTION)(DBT const *key, DBT const *value, void *extra_f, int r_h); typedef int(*YDB_HEAVISIDE_CALLBACK_FUNCTION)(DBT const *key, DBT const *value, void *extra_f, int r_h);
typedef int(*YDB_HEAVISIDE_FUNCTION)(const DBT *key, const DBT *value, void *extra_h); typedef int(*YDB_HEAVISIDE_FUNCTION)(const DBT *key, const DBT *value, void *extra_h);
#include <tdb-internal.h> #include <tdb-internal.h>
#ifndef __BIGGEST_ALIGNMENT__
#define __BIGGEST_ALIGNMENT__ 16
#endif
typedef struct __toku_db_btree_stat64 { 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_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_ndata; /* how many key-value pairs (an estimate, but exact when flattened) */
...@@ -293,14 +296,14 @@ struct txn_stat { ...@@ -293,14 +296,14 @@ struct txn_stat {
struct __toku_db_txn { struct __toku_db_txn {
DB_ENV *mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/; DB_ENV *mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/;
DB_TXN *parent; DB_TXN *parent;
struct __toku_db_txn_internal ii;
#define db_txn_struct_i(x) (&(x)->ii)
int (*txn_stat)(DB_TXN *, struct txn_stat **); int (*txn_stat)(DB_TXN *, struct txn_stat **);
struct { void *next, *prev; } open_txns; struct { void *next, *prev; } open_txns;
void *api_internal; void *api_internal;
int (*abort) (DB_TXN *); int (*abort) (DB_TXN *);
int (*commit) (DB_TXN*, u_int32_t); int (*commit) (DB_TXN*, u_int32_t);
u_int32_t (*id) (DB_TXN *); u_int32_t (*id) (DB_TXN *);
char iic[0] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
#define db_txn_struct_i(x) ((struct __toku_db_txn_internal *)(&(x)->iic))
}; };
struct __toku_db_txn_stat { struct __toku_db_txn_stat {
u_int32_t st_nactive; u_int32_t st_nactive;
...@@ -308,8 +311,6 @@ struct __toku_db_txn_stat { ...@@ -308,8 +311,6 @@ struct __toku_db_txn_stat {
}; };
struct __toku_dbc { struct __toku_dbc {
DB *dbp; DB *dbp;
struct __toku_dbc_internal ii;
#define dbc_struct_i(x) (&(x)->ii)
int (*c_getf_first)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *); 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_last)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *);
int (*c_getf_next)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_next)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *);
...@@ -331,6 +332,8 @@ struct __toku_dbc { ...@@ -331,6 +332,8 @@ struct __toku_dbc {
int (*c_count) (DBC *, db_recno_t *, u_int32_t); int (*c_count) (DBC *, db_recno_t *, u_int32_t);
int (*c_del) (DBC *, u_int32_t); int (*c_del) (DBC *, u_int32_t);
int (*c_get) (DBC *, DBT *, DBT *, u_int32_t); int (*c_get) (DBC *, DBT *, DBT *, u_int32_t);
char iic[0] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
#define dbc_struct_i(x) ((struct __toku_dbc_internal *)(&(x)->iic))
}; };
#ifdef _TOKUDB_WRAP_H #ifdef _TOKUDB_WRAP_H
#define txn_begin txn_begin_tokudb #define txn_begin txn_begin_tokudb
......
...@@ -20,7 +20,7 @@ include $(TOKUROOT)toku_include/Makefile.include ...@@ -20,7 +20,7 @@ include $(TOKUROOT)toku_include/Makefile.include
BENCHDBS = bench.bdb/ bench.tokudb BENCHDBS = bench.bdb/ bench.tokudb
OPTFLAGS = -O2 OPTFLAGS = -O2
CXXFLAGS = -Wall -Werror -g $(OPTFLAGS) $(GCOV_FLAGS) CXXFLAGS = $(GCC_VERSION_SPECIFIC) -Wall -Werror -g $(OPTFLAGS) $(GCOV_FLAGS)
# CFLAGS += -pg # CFLAGS += -pg
ifdef BDBDIR ifdef BDBDIR
......
...@@ -37,6 +37,9 @@ typedef int(*YDB_CALLBACK_FUNCTION)(DBT const*, DBT const*, void*); ...@@ -37,6 +37,9 @@ typedef int(*YDB_CALLBACK_FUNCTION)(DBT const*, DBT const*, void*);
typedef int(*YDB_HEAVISIDE_CALLBACK_FUNCTION)(DBT const *key, DBT const *value, void *extra_f, int r_h); typedef int(*YDB_HEAVISIDE_CALLBACK_FUNCTION)(DBT const *key, DBT const *value, void *extra_f, int r_h);
typedef int(*YDB_HEAVISIDE_FUNCTION)(const DBT *key, const DBT *value, void *extra_h); typedef int(*YDB_HEAVISIDE_FUNCTION)(const DBT *key, const DBT *value, void *extra_h);
#include <tdb-internal.h> #include <tdb-internal.h>
#ifndef __BIGGEST_ALIGNMENT__
#define __BIGGEST_ALIGNMENT__ 16
#endif
typedef struct __toku_db_btree_stat64 { 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_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_ndata; /* how many key-value pairs (an estimate, but exact when flattened) */
...@@ -293,14 +296,14 @@ struct txn_stat { ...@@ -293,14 +296,14 @@ struct txn_stat {
struct __toku_db_txn { struct __toku_db_txn {
DB_ENV *mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/; DB_ENV *mgrp /*In TokuDB, mgrp is a DB_ENV not a DB_TXNMGR*/;
DB_TXN *parent; DB_TXN *parent;
struct __toku_db_txn_internal ii;
#define db_txn_struct_i(x) (&(x)->ii)
int (*txn_stat)(DB_TXN *, struct txn_stat **); int (*txn_stat)(DB_TXN *, struct txn_stat **);
struct { void *next, *prev; } open_txns; struct { void *next, *prev; } open_txns;
void *api_internal; void *api_internal;
int (*abort) (DB_TXN *); int (*abort) (DB_TXN *);
int (*commit) (DB_TXN*, u_int32_t); int (*commit) (DB_TXN*, u_int32_t);
u_int32_t (*id) (DB_TXN *); u_int32_t (*id) (DB_TXN *);
char iic[0] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
#define db_txn_struct_i(x) ((struct __toku_db_txn_internal *)(&(x)->iic))
}; };
struct __toku_db_txn_stat { struct __toku_db_txn_stat {
u_int32_t st_nactive; u_int32_t st_nactive;
...@@ -308,8 +311,6 @@ struct __toku_db_txn_stat { ...@@ -308,8 +311,6 @@ struct __toku_db_txn_stat {
}; };
struct __toku_dbc { struct __toku_dbc {
DB *dbp; DB *dbp;
struct __toku_dbc_internal ii;
#define dbc_struct_i(x) (&(x)->ii)
int (*c_getf_first)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *); 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_last)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *);
int (*c_getf_next)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *); int (*c_getf_next)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *);
...@@ -331,6 +332,8 @@ struct __toku_dbc { ...@@ -331,6 +332,8 @@ struct __toku_dbc {
int (*c_count) (DBC *, db_recno_t *, u_int32_t); int (*c_count) (DBC *, db_recno_t *, u_int32_t);
int (*c_del) (DBC *, u_int32_t); int (*c_del) (DBC *, u_int32_t);
int (*c_get) (DBC *, DBT *, DBT *, u_int32_t); int (*c_get) (DBC *, DBT *, DBT *, u_int32_t);
char iic[0] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
#define dbc_struct_i(x) ((struct __toku_dbc_internal *)(&(x)->iic))
}; };
#ifdef _TOKUDB_WRAP_H #ifdef _TOKUDB_WRAP_H
#define txn_begin txn_begin_tokudb #define txn_begin txn_begin_tokudb
......
...@@ -18,21 +18,5 @@ struct simple_dbt { ...@@ -18,21 +18,5 @@ struct simple_dbt {
void *data; void *data;
}; };
struct __toku_db_txn_internal {
//TXNID txnid64; /* A sixty-four bit txn id. */
struct tokutxn *tokutxn;
struct __toku_lth *lth; //Hash table holding list of dictionaries this txn has touched
u_int32_t flags;
DB_TXN *child;
struct toku_list dbs_that_must_close_before_abort;
};
struct __toku_dbc_internal {
struct brt_cursor *c;
DB_TXN *txn;
struct simple_dbt skey_s,sval_s;
struct simple_dbt *skey,*sval;
};
// end of _TDB_INTERNAL_H: // end of _TDB_INTERNAL_H:
#endif #endif
...@@ -163,4 +163,20 @@ int toku_env_is_panicked(DB_ENV *dbenv); ...@@ -163,4 +163,20 @@ int toku_env_is_panicked(DB_ENV *dbenv);
void toku_locked_env_err(const DB_ENV * env, int error, const char *fmt, ...) void toku_locked_env_err(const DB_ENV * env, int error, const char *fmt, ...)
__attribute__((__format__(__printf__, 3, 4))); __attribute__((__format__(__printf__, 3, 4)));
struct __toku_db_txn_internal {
//TXNID txnid64; /* A sixty-four bit txn id. */
struct tokutxn *tokutxn;
struct __toku_lth *lth; //Hash table holding list of dictionaries this txn has touched
u_int32_t flags;
DB_TXN *child;
struct toku_list dbs_that_must_close_before_abort;
};
struct __toku_dbc_internal {
struct brt_cursor *c;
DB_TXN *txn;
struct simple_dbt skey_s,sval_s;
struct simple_dbt *skey,*sval;
};
#endif #endif
...@@ -1737,10 +1737,11 @@ static int toku_txn_begin(DB_ENV *env, DB_TXN * stxn, DB_TXN ** txn, u_int32_t f ...@@ -1737,10 +1737,11 @@ static int toku_txn_begin(DB_ENV *env, DB_TXN * stxn, DB_TXN ** txn, u_int32_t f
return toku_ydb_do_error(env, EINVAL, "DB_ENV->txn_begin: Child transaction isolation level must match parent's isolation level.\n"); return toku_ydb_do_error(env, EINVAL, "DB_ENV->txn_begin: Child transaction isolation level must match parent's isolation level.\n");
} }
DB_TXN *MALLOC(result); size_t result_size = sizeof(DB_TXN)+sizeof(struct __toku_db_txn_internal); // the internal stuff is stuck on the end.
DB_TXN *result = toku_malloc(result_size);
if (result == 0) if (result == 0)
return ENOMEM; return ENOMEM;
memset(result, 0, sizeof *result); memset(result, 0, result_size);
//toku_ydb_notef("parent=%p flags=0x%x\n", stxn, flags); //toku_ydb_notef("parent=%p flags=0x%x\n", stxn, flags);
result->mgrp = env; result->mgrp = env;
result->abort = locked_txn_abort; result->abort = locked_txn_abort;
...@@ -3599,10 +3600,11 @@ static int toku_db_cursor(DB * db, DB_TXN * txn, DBC ** c, u_int32_t flags, int ...@@ -3599,10 +3600,11 @@ static int toku_db_cursor(DB * db, DB_TXN * txn, DBC ** c, u_int32_t flags, int
HANDLE_DB_ILLEGAL_WORKING_PARENT_TXN(db, txn); HANDLE_DB_ILLEGAL_WORKING_PARENT_TXN(db, txn);
if (flags != 0) if (flags != 0)
return EINVAL; return EINVAL;
DBC *MALLOC(result); size_t result_size = sizeof(DBC)+sizeof(struct __toku_dbc_internal); // internal stuff stuck on the end
DBC *result = toku_malloc(result_size);
if (result == 0) if (result == 0)
return ENOMEM; return ENOMEM;
memset(result, 0, sizeof *result); memset(result, 0, result_size);
#define SCRS(name) result->name = locked_ ## name #define SCRS(name) result->name = locked_ ## name
SCRS(c_get); SCRS(c_get);
SCRS(c_close); SCRS(c_close);
......
...@@ -100,7 +100,7 @@ endif ...@@ -100,7 +100,7 @@ endif
# -Wno-deprecated is needed on gcc 4.4.2 to make the #ident complaints go away. # -Wno-deprecated is needed on gcc 4.4.2 to make the #ident complaints go away.
# -Wno-strict-aliasing is needed on gcc 4.4.2 to make certain gratuitous warnings go away. # -Wno-strict-aliasing is needed on gcc 4.4.2 to make certain gratuitous warnings go away.
ifeq ($(GCCVERSION),4.4.2) ifeq ($(GCCVERSION),4.4.2)
GCC_VERSION_SPECIFIC = -Wno-strict-aliasing -Wno-deprecated GCC_VERSION_SPECIFIC = -Wno-deprecated
endif endif
WALL = $(GCC_VERSION_SPECIFIC) -Wall -Wextra -Wcast-align -Wbad-function-cast -Wno-missing-noreturn -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations WALL = $(GCC_VERSION_SPECIFIC) -Wall -Wextra -Wcast-align -Wbad-function-cast -Wno-missing-noreturn -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations
...@@ -116,6 +116,9 @@ SYMBOLS = -g3 -ggdb3 ...@@ -116,6 +116,9 @@ SYMBOLS = -g3 -ggdb3
PORTABILITY= PORTABILITY=
SKIP_WARNING= SKIP_WARNING=
COMBINE_C = -combine -c COMBINE_C = -combine -c
ifeq ($(GCCVERSION),4.4.2)
COMBINE_C += -Wno-strict-aliasing
endif
LIBPORTABILITY = $(TOKUROOT)lib/libtokuportability.$(AEXT) LIBPORTABILITY = $(TOKUROOT)lib/libtokuportability.$(AEXT)
LIBPORTABILITY_BUNDLE = $(TOKUROOT)lib/libtokuportability.bundle LIBPORTABILITY_BUNDLE = $(TOKUROOT)lib/libtokuportability.bundle
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment