diff options
Diffstat (limited to 'lang/java/libdb_java')
-rw-r--r-- | lang/java/libdb_java/db.i | 223 | ||||
-rw-r--r-- | lang/java/libdb_java/db_java.i | 29 | ||||
-rw-r--r-- | lang/java/libdb_java/db_java_wrap.c | 1376 | ||||
-rw-r--r-- | lang/java/libdb_java/java_callbacks.i | 65 | ||||
-rw-r--r-- | lang/java/libdb_java/java_except.i | 4 | ||||
-rw-r--r-- | lang/java/libdb_java/java_stat_auto.c | 22 | ||||
-rw-r--r-- | lang/java/libdb_java/java_typemaps.i | 212 | ||||
-rw-r--r-- | lang/java/libdb_java/java_util.i | 65 |
8 files changed, 1893 insertions, 103 deletions
diff --git a/lang/java/libdb_java/db.i b/lang/java/libdb_java/db.i index 0199a167..75ecf080 100644 --- a/lang/java/libdb_java/db.i +++ b/lang/java/libdb_java/db.i @@ -18,6 +18,7 @@ typedef unsigned char u_int8_t; typedef long int32_t; +typedef long long db_off_t; typedef long long db_seq_t; typedef long long pid_t; #ifndef SWIGJAVA @@ -43,6 +44,7 @@ struct DbLsn; typedef struct DbLsn DB_LSN; struct DbMpoolFile; typedef struct DbMpoolFile DB_MPOOLFILE; struct DbSequence; typedef struct Db DB_SEQUENCE; struct DbSite; typedef struct DbSite DB_SITE; +struct DbStream; typedef struct DbStream DB_STREAM; struct DbTxn; typedef struct DbTxn DB_TXN; /* Methods that allocate new objects */ @@ -138,6 +140,24 @@ struct Db return ret; } + const char *get_blob_dir() { + const char *ret; + errno = self->get_blob_dir(self, &ret); + return ret; + } + + const char *get_blob_sub_dir() { + const char *ret; + errno = self->get_blob_sub_dir(self, &ret); + return ret; + } + + u_int32_t get_blob_threshold () { + u_int32_t ret = 0; + errno = self->get_blob_threshold(self, &ret); + return ret; + } + int_bool get_byteswapped() { int ret = 0; errno = self->get_byteswapped(self, &ret); @@ -282,9 +302,13 @@ struct Db return ret; } - DBT *get_partition_keys() { - DBT *ret = NULL; - errno = self->get_partition_keys(self, NULL, &ret); + /* __dbt_arr is used to differentiate from DBT * as a return value. */ + struct __dbt_arr get_partition_keys() { + struct __dbt_arr ret; + u_int32_t len; + errno = self->get_partition_keys(self, &len, &ret.arr_ptr); + ret.len = (int)len; + ret.len--; return ret; } @@ -383,8 +407,16 @@ struct Db return self->set_append_recno(self, db_append_recno_fcn); } + db_ret_t set_blob_dir(const char *dir) { + return self->set_blob_dir(self, dir); + } + + db_ret_t set_blob_threshold(u_int32_t bytes, u_int32_t flags) { + return self->set_blob_threshold(self, bytes, flags); + } + db_ret_t set_bt_compare( - int (*bt_compare_fcn)(DB *, const DBT *, const DBT *)) { + int (*bt_compare_fcn)(DB *, const DBT *, const DBT *, size_t *)) { return self->set_bt_compare(self, bt_compare_fcn); } @@ -417,7 +449,7 @@ struct Db } db_ret_t set_dup_compare( - int (*dup_compare_fcn)(DB *, const DBT *, const DBT *)) { + int (*dup_compare_fcn)(DB *, const DBT *, const DBT *, size_t *)) { return self->set_dup_compare(self, dup_compare_fcn); } @@ -457,7 +489,7 @@ struct Db } db_ret_t set_h_compare( - int (*h_compare_fcn)(DB *, const DBT *, const DBT *)) { + int (*h_compare_fcn)(DB *, const DBT *, const DBT *, size_t *)) { return self->set_h_compare(self, h_compare_fcn); } @@ -488,6 +520,33 @@ struct Db } #endif /* SWIGJAVA */ + int set_msgfile(const char *msgfile) { + int ret; + FILE *fmsg; + ret = 0; + fmsg = NULL; + self->get_msgfile(self, &fmsg); + if (fmsg != NULL && fmsg != stdout && fmsg != stderr) { + fclose(fmsg); + fmsg = NULL; + } + if (strcmp(msgfile, "") == 0 || msgfile == NULL) + self->set_msgfile(self, NULL); + else if (strcmp(msgfile, "stdout") == 0) + self->set_msgfile(self, stdout); + else if (strcmp(msgfile, "stderr") == 0) + self->set_msgfile(self, stderr); + else { + fmsg = fopen(msgfile, "a"); + if (fmsg != NULL) { + self->set_msgfile(self, fmsg); + } + else + ret = 1; + } + return ret; + } + db_ret_t set_pagesize(u_int32_t pagesize) { return self->set_pagesize(self, pagesize); } @@ -542,6 +601,10 @@ struct Db return statp; } + int stat_print(u_int32_t flags) { + return self->stat_print(self, flags); + } + JAVA_EXCEPT(DB_RETOK_STD, DB2JDBENV) db_ret_t sync(u_int32_t flags) { return self->sync(self, flags); @@ -601,6 +664,13 @@ struct Dbc return count; } + JAVA_EXCEPT_ERRNO(DB_RETOK_STD, DB2JDBENV) + DB_STREAM *db_stream(u_int32_t flags) { + DB_STREAM *dbsp = NULL; + errno = self->db_stream(self, &dbsp, flags); + return dbsp; + } + JAVA_EXCEPT(DB_RETOK_DBCDEL, DBC2JDBENV) int del(u_int32_t flags) { return self->del(self, flags); @@ -737,6 +807,18 @@ struct DbEnv } JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV) + const char *get_blob_dir() { + const char *ret; + errno = self->get_blob_dir(self, &ret); + return ret; + } + + u_int32_t get_blob_threshold() { + u_int32_t ret; + errno = self->get_blob_threshold(self, &ret); + return ret; + } + const char **get_data_dirs() { const char **ret; errno = self->get_data_dirs(self, &ret); @@ -826,6 +908,14 @@ struct DbEnv } JAVA_EXCEPT(DB_RETOK_STD, JDBENV) + db_ret_t set_blob_dir(const char *dir) { + return self->set_blob_dir(self, dir); + } + + db_ret_t set_blob_threshold(u_int32_t bytes, u_int32_t flags) { + return self->set_blob_threshold(self, bytes, flags); + } + db_ret_t set_cachesize(jlong bytes, int ncache) { return self->set_cachesize(self, (u_int32_t)(bytes / GIGABYTE), @@ -904,6 +994,33 @@ struct DbEnv self->set_msgcall(self, db_msgcall_fcn); } + int set_msgfile(const char *msgfile) { + int ret; + FILE *fmsg; + ret = 0; + fmsg = NULL; + self->get_msgfile(self, &fmsg); + if (fmsg != NULL && fmsg != stdout && fmsg != stderr) { + fclose(fmsg); + fmsg = NULL; + } + if (strcmp(msgfile, "") == 0 || msgfile == NULL) + self->set_msgfile(self, NULL); + else if (strcmp(msgfile, "stdout") == 0) + self->set_msgfile(self, stdout); + else if (strcmp(msgfile, "stderr") == 0) + self->set_msgfile(self, stderr); + else { + fmsg = fopen(msgfile, "a"); + if (fmsg != NULL) { + self->set_msgfile(self, fmsg); + } + else + ret = 1; + } + return ret; + } + JAVA_EXCEPT(DB_RETOK_STD, JDBENV) db_ret_t set_paniccall(void (*db_panic_fcn)(DB_ENV *, int)) { return self->set_paniccall(self, db_panic_fcn); @@ -1043,6 +1160,10 @@ struct DbEnv return statp; } + int lock_stat_print(u_int32_t flags) { + return self->lock_stat_print(self, flags); + } + #ifndef SWIGJAVA /* For Java, this is defined in native code */ db_ret_t lock_vec(u_int32_t locker, u_int32_t flags, DB_LOCKREQ *list, @@ -1187,6 +1308,10 @@ struct DbEnv return sp; } + int log_stat_print(u_int32_t flags) { + return self->log_stat_print(self, flags); + } + int log_verify(const char *envhome, u_int32_t cachesz, const char *dbfile, const char *dbname, time_t stime, time_t etime, @@ -1289,6 +1414,10 @@ struct DbEnv return mp_stat; } + int memp_stat_print(u_int32_t flags) { + return self->memp_stat_print(self, flags); + } + DB_MPOOL_FSTAT **memp_fstat(u_int32_t flags) { DB_MPOOL_FSTAT **mp_fstat = NULL; errno = self->memp_stat(self, NULL, &mp_fstat, flags); @@ -1366,6 +1495,10 @@ struct DbEnv return statp; } + int mutex_stat_print(u_int32_t flags) { + return self->mutex_stat_print(self, flags); + } + /* Transaction functions */ u_int32_t get_tx_max() { u_int32_t ret; @@ -1385,6 +1518,10 @@ struct DbEnv return ret; } + int stat_print(u_int32_t flags) { + return self->stat_print(self, flags); + } + JAVA_EXCEPT(DB_RETOK_TXNAPPLIED, JDBENV) int txn_applied(DB_TXN_TOKEN *token, u_int32_t maxwait, u_int32_t flags) { return self->txn_applied(self, token, maxwait, flags); @@ -1429,6 +1566,10 @@ struct DbEnv return statp; } + int txn_stat_print(u_int32_t flags) { + return self->txn_stat_print(self, flags); + } + /* Replication functions */ jlong rep_get_limit() { u_int32_t gbytes, bytes; @@ -1496,6 +1637,10 @@ struct DbEnv return statp; } + int rep_stat_print(u_int32_t flags) { + return self->rep_stat_print(self, flags); + } + JAVA_EXCEPT(DB_RETOK_STD, JDBENV) db_ret_t rep_set_limit(jlong bytes) { return self->rep_set_limit(self, @@ -1533,6 +1678,11 @@ struct DbEnv return self->rep_set_transport(self, envid, send); } + db_ret_t rep_set_view(int (*rep_view_fcn)(DB_ENV *, + const char *, int *, u_int32_t)) { + return self->rep_set_view(self, rep_view_fcn); + } + /* Advanced replication functions. */ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV) u_int32_t rep_get_nsites() { @@ -1573,6 +1723,13 @@ struct DbEnv return ret; } + JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV) + jlong repmgr_get_incoming_queue_max() { + u_int32_t gbytes = 0, bytes = 0; + errno = self->repmgr_get_incoming_queue_max(self, &gbytes, &bytes); + return (jlong)gbytes * GIGABYTE + bytes; + } + JAVA_EXCEPT_ERRNO(DB_RETOK_REPMGR_LOCALSITE, JDBENV) DB_SITE *repmgr_local_site() { DB_SITE *site = NULL; @@ -1585,6 +1742,13 @@ struct DbEnv return self->repmgr_set_ack_policy(self, policy); } + JAVA_EXCEPT(DB_RETOK_STD, JDBENV) + db_ret_t repmgr_set_incoming_queue_max(jlong bytes) { + return self->repmgr_set_incoming_queue_max(self, + (u_int32_t)(bytes / GIGABYTE), + (u_int32_t)(bytes % GIGABYTE)); + } + JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV) DB_SITE *repmgr_site(const char *host, u_int port) { DB_SITE *site = NULL; @@ -1624,9 +1788,18 @@ struct DbEnv return statp; } + int repmgr_stat_print(u_int32_t flags) { + return self->repmgr_stat_print(self, flags); + } + u_int32_t get_backup_config(u_int32_t config_type) { u_int32_t ret; errno = self->get_backup_config(self, (DB_BACKUP_CONFIG)config_type, &ret); + if (errno == EINVAL) { + errno = 0; + ret = 0; + } + return ret; } @@ -1812,14 +1985,14 @@ struct DbSequence } JAVA_EXCEPT_ERRNO(DB_RETOK_STD, NULL) - db_seq_t get(DB_TXN *txnid, int32_t delta, u_int32_t flags) { + db_seq_t get(DB_TXN *txnid, u_int32_t delta, u_int32_t flags) { db_seq_t ret = 0; errno = self->get(self, txnid, delta, &ret, flags); return ret; } - int32_t get_cachesize() { - int32_t ret = 0; + u_int32_t get_cachesize() { + u_int32_t ret = 0; errno = self->get_cachesize(self, &ret); return ret; } @@ -1867,7 +2040,7 @@ struct DbSequence return self->remove(self, txnid, flags); } - db_ret_t set_cachesize(int32_t size) { + db_ret_t set_cachesize(u_int32_t size) { return self->set_cachesize(self, size); } @@ -1885,6 +2058,10 @@ struct DbSequence errno = self->stat(self, &ret, flags); return ret; } + + int stat_print(u_int32_t flags) { + return self->stat_print(self, flags); + } } }; @@ -1926,6 +2103,32 @@ struct DbSite } }; +struct DbStream +{ +%extend { + JAVA_EXCEPT(DB_RETOK_STD, NULL) + db_ret_t close(u_int32_t flags) { + return self->close(self, flags); + } + + int read(DBT *data, db_off_t offset, u_int32_t size, u_int32_t flags) { + return self->read(self, data, offset, size, flags); + } + + JAVA_EXCEPT_ERRNO(DB_RETOK_STD, NULL) + db_off_t size(u_int32_t flags) { + db_off_t ret = 0; + errno = self->size(self, &ret, flags); + return ret; + } + + JAVA_EXCEPT(DB_RETOK_STD, NULL) + int write(DBT *data, db_off_t offset, u_int32_t flags) { + return self->write(self, data, offset, flags); + } +} +}; + struct DbTxn { %extend { diff --git a/lang/java/libdb_java/db_java.i b/lang/java/libdb_java/db_java.i index f47029b0..1d380a0c 100644 --- a/lang/java/libdb_java/db_java.i +++ b/lang/java/libdb_java/db_java.i @@ -76,6 +76,7 @@ import java.util.Comparator; private String errpfx; private MessageHandler message_handler; private PanicHandler panic_handler; + private ReplicationViewHandler rep_view_handler; private ReplicationManagerMessageDispatch repmgr_msg_dispatch_handler; private ReplicationTransport rep_transport_handler; private java.io.OutputStream error_stream; @@ -133,6 +134,10 @@ import java.util.Comparator; event_notify_handler.handlePanicEvent(); } + private final void handle_rep_autotakeover_failed_event_notify() { + event_notify_handler.handleRepAutoTakeoverFailedEvent(); + } + private final void handle_rep_client_event_notify() { event_notify_handler.handleRepClientEvent(); } @@ -161,9 +166,13 @@ import java.util.Comparator; event_notify_handler.handleRepElectionFailedEvent(); } - private final void handle_rep_init_done_event_notify() { - event_notify_handler.handleRepInitDoneEvent(); - } + private final void handle_rep_init_done_event_notify() { + event_notify_handler.handleRepInitDoneEvent(); + } + + private final void handle_rep_inqueue_full_event_notify() { + event_notify_handler.handleRepInQueueFullEvent(); + } private final void handle_rep_join_failure_event_notify() { event_notify_handler.handleRepJoinFailureEvent(); @@ -281,6 +290,10 @@ import java.util.Comparator; return panic_handler; } + public final boolean handle_rep_view(String name, int flags) { + return rep_view_handler.partial_view(wrapper, name, flags); + } + private final int handle_rep_transport(DatabaseEntry control, DatabaseEntry rec, LogSequenceNumber lsn, @@ -726,6 +739,16 @@ import java.util.Comparator; } %} +%typemap(javacode) struct DbStream %{ + public synchronized void close(int flags) throws DatabaseException { + try { + close0(flags); + } finally { + swigCPtr = 0; + } + } +%} + %typemap(javacode) struct DbChannel %{ public synchronized void close(int flags) throws DatabaseException { try { diff --git a/lang/java/libdb_java/db_java_wrap.c b/lang/java/libdb_java/db_java_wrap.c index dcaac8e0..976a9d8d 100644 --- a/lang/java/libdb_java/db_java_wrap.c +++ b/lang/java/libdb_java/db_java_wrap.c @@ -1,12 +1,12 @@ #include "db_config.h" /* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). - * Version 2.0.4 - * - * This file is not intended to be easily readable and contains a number of + * Version 2.0.12 + * + * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make - * changes to this file unless you know what you are doing--modify the SWIG - * interface file instead. + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. * ----------------------------------------------------------------------------- */ #define SWIGJAVA @@ -42,28 +42,28 @@ #ifndef SWIGUNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define SWIGUNUSED __attribute__ ((__unused__)) +# define SWIGUNUSED __attribute__ ((__unused__)) # else # define SWIGUNUSED # endif # elif defined(__ICC) -# define SWIGUNUSED __attribute__ ((__unused__)) +# define SWIGUNUSED __attribute__ ((__unused__)) # else -# define SWIGUNUSED +# define SWIGUNUSED # endif #endif #ifndef SWIG_MSC_UNSUPPRESS_4505 # if defined(_MSC_VER) # pragma warning(disable : 4505) /* unreferenced local function has been removed */ -# endif +# endif #endif #ifndef SWIGUNUSEDPARM # ifdef __cplusplus # define SWIGUNUSEDPARM(p) # else -# define SWIGUNUSEDPARM(p) p SWIGUNUSED +# define SWIGUNUSEDPARM(p) p SWIGUNUSED # endif #endif @@ -106,7 +106,7 @@ # define SWIGSTDCALL __stdcall # else # define SWIGSTDCALL -# endif +# endif #endif /* Deal with Microsoft's attempt at deprecating C standard runtime functions */ @@ -215,7 +215,7 @@ static int __dbj_throw(JNIEnv *jenv, static JavaVM *javavm; static jclass db_class, dbc_class, dbenv_class, dbt_class, dblsn_class; -static jclass dbpreplist_class, dbtxn_class; +static jclass dbpreplist_class, dbstream_class, dbtxn_class; static jclass keyrange_class; static jclass bt_stat_class, compact_class, h_stat_class, heap_stat_class; static jclass lock_stat_class, log_stat_class, mpool_stat_class, mpool_fstat_class; @@ -225,7 +225,7 @@ static jclass seq_stat_class, txn_stat_class; static jclass txn_active_class; static jclass lock_class, lockreq_class; static jclass dbex_class, deadex_class, heapfullex_class, lockex_class, memex_class; -static jclass repdupmasterex_class, rephandledeadex_class; +static jclass metachkfailex_class, repdupmasterex_class, rephandledeadex_class; static jclass repholdelectionex_class, repjoinfailex_class; static jclass repleaseexpiredex_class; static jclass replockoutex_class, repunavailex_class; @@ -237,6 +237,7 @@ static jfieldID dbc_cptr_fid; static jfieldID dblsn_file_fid, dblsn_offset_fid; static jfieldID dbt_data_fid, dbt_data_nio_fid, dbt_size_fid, dbt_ulen_fid; static jfieldID dbt_dlen_fid, dbt_doff_fid, dbt_flags_fid, dbt_offset_fid; +static jfieldID dbstream_cptr_fid; static jfieldID kr_less_fid, kr_equal_fid, kr_greater_fid; static jfieldID lock_cptr_fid; static jfieldID lockreq_op_fid, lockreq_modeflag_fid, lockreq_timeout_fid; @@ -253,6 +254,7 @@ static jfieldID bt_stat_bt_ndata_fid; static jfieldID bt_stat_bt_pagecnt_fid; static jfieldID bt_stat_bt_pagesize_fid; static jfieldID bt_stat_bt_minkey_fid; +static jfieldID bt_stat_bt_nblobs_fid; static jfieldID bt_stat_bt_re_len_fid; static jfieldID bt_stat_bt_re_pad_fid; static jfieldID bt_stat_bt_levels_fid; @@ -281,6 +283,7 @@ static jfieldID h_stat_hash_version_fid; static jfieldID h_stat_hash_metaflags_fid; static jfieldID h_stat_hash_nkeys_fid; static jfieldID h_stat_hash_ndata_fid; +static jfieldID h_stat_hash_nblobs_fid; static jfieldID h_stat_hash_pagecnt_fid; static jfieldID h_stat_hash_pagesize_fid; static jfieldID h_stat_hash_ffactor_fid; @@ -296,6 +299,7 @@ static jfieldID h_stat_hash_dup_free_fid; static jfieldID heap_stat_heap_magic_fid; static jfieldID heap_stat_heap_version_fid; static jfieldID heap_stat_heap_metaflags_fid; +static jfieldID heap_stat_heap_nblobs_fid; static jfieldID heap_stat_heap_nrecs_fid; static jfieldID heap_stat_heap_pagecnt_fid; static jfieldID heap_stat_heap_pagesize_fid; @@ -348,6 +352,8 @@ static jfieldID lock_stat_st_lockers_wait_fid; static jfieldID lock_stat_st_lockers_nowait_fid; static jfieldID lock_stat_st_region_wait_fid; static jfieldID lock_stat_st_region_nowait_fid; +static jfieldID lock_stat_st_nlockers_hit_fid; +static jfieldID lock_stat_st_nlockers_reused_fid; static jfieldID lock_stat_st_hash_len_fid; static jfieldID lock_stat_st_regsize_fid; static jfieldID log_stat_st_magic_fid; @@ -420,6 +426,7 @@ static jfieldID mpool_stat_st_region_wait_fid; static jfieldID mpool_stat_st_mvcc_frozen_fid; static jfieldID mpool_stat_st_mvcc_thawed_fid; static jfieldID mpool_stat_st_mvcc_freed_fid; +static jfieldID mpool_stat_st_mvcc_reused_fid; static jfieldID mpool_stat_st_alloc_fid; static jfieldID mpool_stat_st_alloc_buckets_fid; static jfieldID mpool_stat_st_alloc_max_buckets_fid; @@ -427,6 +434,8 @@ static jfieldID mpool_stat_st_alloc_pages_fid; static jfieldID mpool_stat_st_alloc_max_pages_fid; static jfieldID mpool_stat_st_io_wait_fid; static jfieldID mpool_stat_st_sync_interrupted_fid; +static jfieldID mpool_stat_st_oddfsize_detect_fid; +static jfieldID mpool_stat_st_oddfsize_resolve_fid; static jfieldID mpool_stat_st_regsize_fid; static jfieldID mpool_stat_st_regmax_fid; static jfieldID mutex_stat_st_mutex_align_fid; @@ -455,6 +464,7 @@ static jfieldID qam_stat_qs_pgfree_fid; static jfieldID qam_stat_qs_first_recno_fid; static jfieldID qam_stat_qs_cur_recno_fid; static jfieldID rep_stat_st_startup_complete_fid; +static jfieldID rep_stat_st_view_fid; static jfieldID rep_stat_st_log_queued_fid; static jfieldID rep_stat_st_status_fid; static jfieldID rep_stat_st_next_lsn_fid; @@ -518,10 +528,17 @@ static jfieldID rep_stat_st_max_lease_usec_fid; static jfieldID repmgr_stat_st_perm_failed_fid; static jfieldID repmgr_stat_st_msgs_queued_fid; static jfieldID repmgr_stat_st_msgs_dropped_fid; +static jfieldID repmgr_stat_st_incoming_queue_gbytes_fid; +static jfieldID repmgr_stat_st_incoming_queue_bytes_fid; +static jfieldID repmgr_stat_st_incoming_msgs_dropped_fid; static jfieldID repmgr_stat_st_connection_drop_fid; static jfieldID repmgr_stat_st_connect_fail_fid; static jfieldID repmgr_stat_st_elect_threads_fid; static jfieldID repmgr_stat_st_max_elect_threads_fid; +static jfieldID repmgr_stat_st_site_participants_fid; +static jfieldID repmgr_stat_st_site_total_fid; +static jfieldID repmgr_stat_st_site_views_fid; +static jfieldID repmgr_stat_st_takeovers_fid; static jfieldID seq_stat_st_wait_fid; static jfieldID seq_stat_st_nowait_fid; static jfieldID seq_stat_st_current_fid; @@ -569,7 +586,8 @@ static jmethodID rep_stat_construct, repmgr_stat_construct, seq_stat_construct; static jmethodID txn_stat_construct, txn_active_construct; static jmethodID dbex_construct, deadex_construct, lockex_construct; static jmethodID heapfullex_construct, memex_construct, memex_update_method; -static jmethodID repdupmasterex_construct, rephandledeadex_construct; +static jmethodID metachkfailex_construct, repdupmasterex_construct; +static jmethodID rephandledeadex_construct; static jmethodID repholdelectionex_construct, repjoinfailex_construct; static jmethodID repmgr_siteinfo_construct, rephost_construct, repleaseexpiredex_construct; static jmethodID replockoutex_construct; @@ -581,7 +599,9 @@ static jmethodID lock_construct; static jmethodID app_dispatch_method, errcall_method, env_feedback_method; static jmethodID msgcall_method, paniccall_method, rep_transport_method; -static jmethodID panic_event_notify_method, rep_client_event_notify_method; +static jmethodID panic_event_notify_method; +static jmethodID rep_autotakeover_failed_event_notify_method; +static jmethodID rep_client_event_notify_method; static jmethodID rep_connect_broken_event_notify_method; static jmethodID rep_connect_established_event_notify_method; static jmethodID rep_connect_try_failed_event_notify_method; @@ -589,6 +609,7 @@ static jmethodID rep_dupmaster_event_notify_method; static jmethodID rep_elected_event_notify_method; static jmethodID rep_election_failed_event_notify_method; static jmethodID rep_init_done_event_notify_method; +static jmethodID rep_inqueue_full_event_notify_method; static jmethodID rep_join_failure_event_notify_method; static jmethodID rep_local_site_removed_notify_method; static jmethodID rep_master_event_notify_method; @@ -606,7 +627,7 @@ static jmethodID backup_write_method, bt_compare_method, bt_compress_method; static jmethodID bt_decompress_method, bt_prefix_method; static jmethodID db_feedback_method, dup_compare_method; static jmethodID foreignkey_nullify_method, h_compare_method, h_hash_method; -static jmethodID partition_method, seckey_create_method; +static jmethodID rep_view_method, partition_method, seckey_create_method; static jmethodID outputstream_write_method; @@ -620,6 +641,7 @@ const struct { { &dbt_class, DB_PKG "DatabaseEntry" }, { &dblsn_class, DB_PKG "LogSequenceNumber" }, { &dbpreplist_class, DB_PKG "PreparedTransaction" }, + { &dbstream_class, DB_PKG "internal/DbStream" }, { &dbtxn_class, DB_PKG "internal/DbTxn" }, { &bt_stat_class, DB_PKG "BtreeStats" }, @@ -647,6 +669,7 @@ const struct { { &heapfullex_class, DB_PKG "HeapFullException" }, { &lockex_class, DB_PKG "LockNotGrantedException" }, { &memex_class, DB_PKG "MemoryException" }, + { &metachkfailex_class, DB_PKG "MetaCheckSumFailException" }, { &repdupmasterex_class, DB_PKG "ReplicationDuplicateMasterException" }, { &rephandledeadex_class, DB_PKG "ReplicationHandleDeadException" }, { &repholdelectionex_class, DB_PKG "ReplicationHoldElectionException" }, @@ -678,6 +701,8 @@ const struct { { &dblsn_file_fid, &dblsn_class, "file", "I" }, { &dblsn_offset_fid, &dblsn_class, "offset", "I" }, + { &dbstream_cptr_fid, &dbstream_class, "swigCPtr", "J" }, + { &dbt_data_fid, &dbt_class, "data", "[B" }, { &dbt_data_nio_fid, &dbt_class, "data_nio", "Ljava/nio/ByteBuffer;" }, { &dbt_size_fid, &dbt_class, "size", "I" }, @@ -711,6 +736,7 @@ const struct { { &bt_stat_bt_pagecnt_fid, &bt_stat_class, "bt_pagecnt", "I" }, { &bt_stat_bt_pagesize_fid, &bt_stat_class, "bt_pagesize", "I" }, { &bt_stat_bt_minkey_fid, &bt_stat_class, "bt_minkey", "I" }, + { &bt_stat_bt_nblobs_fid, &bt_stat_class, "bt_nblobs", "I" }, { &bt_stat_bt_re_len_fid, &bt_stat_class, "bt_re_len", "I" }, { &bt_stat_bt_re_pad_fid, &bt_stat_class, "bt_re_pad", "I" }, { &bt_stat_bt_levels_fid, &bt_stat_class, "bt_levels", "I" }, @@ -739,6 +765,7 @@ const struct { { &h_stat_hash_metaflags_fid, &h_stat_class, "hash_metaflags", "I" }, { &h_stat_hash_nkeys_fid, &h_stat_class, "hash_nkeys", "I" }, { &h_stat_hash_ndata_fid, &h_stat_class, "hash_ndata", "I" }, + { &h_stat_hash_nblobs_fid, &h_stat_class, "hash_nblobs", "I" }, { &h_stat_hash_pagecnt_fid, &h_stat_class, "hash_pagecnt", "I" }, { &h_stat_hash_pagesize_fid, &h_stat_class, "hash_pagesize", "I" }, { &h_stat_hash_ffactor_fid, &h_stat_class, "hash_ffactor", "I" }, @@ -754,6 +781,7 @@ const struct { { &heap_stat_heap_magic_fid, &heap_stat_class, "heap_magic", "I" }, { &heap_stat_heap_version_fid, &heap_stat_class, "heap_version", "I" }, { &heap_stat_heap_metaflags_fid, &heap_stat_class, "heap_metaflags", "I" }, + { &heap_stat_heap_nblobs_fid, &heap_stat_class, "heap_nblobs", "I" }, { &heap_stat_heap_nrecs_fid, &heap_stat_class, "heap_nrecs", "I" }, { &heap_stat_heap_pagecnt_fid, &heap_stat_class, "heap_pagecnt", "I" }, { &heap_stat_heap_pagesize_fid, &heap_stat_class, "heap_pagesize", "I" }, @@ -806,6 +834,8 @@ const struct { { &lock_stat_st_lockers_nowait_fid, &lock_stat_class, "st_lockers_nowait", "J" }, { &lock_stat_st_region_wait_fid, &lock_stat_class, "st_region_wait", "J" }, { &lock_stat_st_region_nowait_fid, &lock_stat_class, "st_region_nowait", "J" }, + { &lock_stat_st_nlockers_hit_fid, &lock_stat_class, "st_nlockers_hit", "J" }, + { &lock_stat_st_nlockers_reused_fid, &lock_stat_class, "st_nlockers_reused", "J" }, { &lock_stat_st_hash_len_fid, &lock_stat_class, "st_hash_len", "I" }, { &lock_stat_st_regsize_fid, &lock_stat_class, "st_regsize", "J" }, { &log_stat_st_magic_fid, &log_stat_class, "st_magic", "I" }, @@ -878,6 +908,7 @@ const struct { { &mpool_stat_st_mvcc_frozen_fid, &mpool_stat_class, "st_mvcc_frozen", "J" }, { &mpool_stat_st_mvcc_thawed_fid, &mpool_stat_class, "st_mvcc_thawed", "J" }, { &mpool_stat_st_mvcc_freed_fid, &mpool_stat_class, "st_mvcc_freed", "J" }, + { &mpool_stat_st_mvcc_reused_fid, &mpool_stat_class, "st_mvcc_reused", "J" }, { &mpool_stat_st_alloc_fid, &mpool_stat_class, "st_alloc", "J" }, { &mpool_stat_st_alloc_buckets_fid, &mpool_stat_class, "st_alloc_buckets", "J" }, { &mpool_stat_st_alloc_max_buckets_fid, &mpool_stat_class, "st_alloc_max_buckets", "J" }, @@ -885,6 +916,8 @@ const struct { { &mpool_stat_st_alloc_max_pages_fid, &mpool_stat_class, "st_alloc_max_pages", "J" }, { &mpool_stat_st_io_wait_fid, &mpool_stat_class, "st_io_wait", "J" }, { &mpool_stat_st_sync_interrupted_fid, &mpool_stat_class, "st_sync_interrupted", "J" }, + { &mpool_stat_st_oddfsize_detect_fid, &mpool_stat_class, "st_oddfsize_detect", "I" }, + { &mpool_stat_st_oddfsize_resolve_fid, &mpool_stat_class, "st_oddfsize_resolve", "I" }, { &mpool_stat_st_regsize_fid, &mpool_stat_class, "st_regsize", "J" }, { &mpool_stat_st_regmax_fid, &mpool_stat_class, "st_regmax", "J" }, { &mutex_stat_st_mutex_align_fid, &mutex_stat_class, "st_mutex_align", "I" }, @@ -913,6 +946,7 @@ const struct { { &qam_stat_qs_first_recno_fid, &qam_stat_class, "qs_first_recno", "I" }, { &qam_stat_qs_cur_recno_fid, &qam_stat_class, "qs_cur_recno", "I" }, { &rep_stat_st_startup_complete_fid, &rep_stat_class, "st_startup_complete", "I" }, + { &rep_stat_st_view_fid, &rep_stat_class, "st_view", "I" }, { &rep_stat_st_log_queued_fid, &rep_stat_class, "st_log_queued", "J" }, { &rep_stat_st_status_fid, &rep_stat_class, "st_status", "I" }, { &rep_stat_st_next_lsn_fid, &rep_stat_class, "st_next_lsn", "L" DB_PKG "LogSequenceNumber;" }, @@ -976,10 +1010,17 @@ const struct { { &repmgr_stat_st_perm_failed_fid, &repmgr_stat_class, "st_perm_failed", "J" }, { &repmgr_stat_st_msgs_queued_fid, &repmgr_stat_class, "st_msgs_queued", "J" }, { &repmgr_stat_st_msgs_dropped_fid, &repmgr_stat_class, "st_msgs_dropped", "J" }, + { &repmgr_stat_st_incoming_queue_gbytes_fid, &repmgr_stat_class, "st_incoming_queue_gbytes", "I" }, + { &repmgr_stat_st_incoming_queue_bytes_fid, &repmgr_stat_class, "st_incoming_queue_bytes", "I" }, + { &repmgr_stat_st_incoming_msgs_dropped_fid, &repmgr_stat_class, "st_incoming_msgs_dropped", "J" }, { &repmgr_stat_st_connection_drop_fid, &repmgr_stat_class, "st_connection_drop", "J" }, { &repmgr_stat_st_connect_fail_fid, &repmgr_stat_class, "st_connect_fail", "J" }, - { &repmgr_stat_st_elect_threads_fid, &repmgr_stat_class, "st_elect_threads", "J" }, - { &repmgr_stat_st_max_elect_threads_fid, &repmgr_stat_class, "st_max_elect_threads", "J" }, + { &repmgr_stat_st_elect_threads_fid, &repmgr_stat_class, "st_elect_threads", "I" }, + { &repmgr_stat_st_max_elect_threads_fid, &repmgr_stat_class, "st_max_elect_threads", "I" }, + { &repmgr_stat_st_site_participants_fid, &repmgr_stat_class, "st_site_participants", "I" }, + { &repmgr_stat_st_site_total_fid, &repmgr_stat_class, "st_site_total", "I" }, + { &repmgr_stat_st_site_views_fid, &repmgr_stat_class, "st_site_views", "I" }, + { &repmgr_stat_st_takeovers_fid, &repmgr_stat_class, "st_takeovers", "J" }, { &seq_stat_st_wait_fid, &seq_stat_class, "st_wait", "J" }, { &seq_stat_st_nowait_fid, &seq_stat_class, "st_nowait", "J" }, { &seq_stat_st_current_fid, &seq_stat_class, "st_current", "J" }, @@ -1068,6 +1109,8 @@ const struct { DB_PKG "internal/DbEnv;)V" }, { &memex_update_method, &memex_class, "updateDatabaseEntry", "(L" DB_PKG "DatabaseEntry;)V" }, + { &metachkfailex_construct, &metachkfailex_class, "<init>", + "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" }, { &repdupmasterex_construct, &repdupmasterex_class, "<init>", "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" }, { &rephandledeadex_construct, &rephandledeadex_class, "<init>", @@ -1105,6 +1148,8 @@ const struct { "(III[B)I" }, { &panic_event_notify_method, &dbenv_class, "handle_panic_event_notify", "()V" }, + { &rep_autotakeover_failed_event_notify_method, &dbenv_class, + "handle_rep_autotakeover_failed_event_notify", "()V" }, { &rep_connect_broken_event_notify_method, &dbenv_class, "handle_rep_connect_broken_event_notify", "()V" }, { &rep_connect_established_event_notify_method, &dbenv_class, @@ -1121,6 +1166,8 @@ const struct { "handle_rep_election_failed_event_notify" ,"()V" }, { &rep_init_done_event_notify_method, &dbenv_class, "handle_rep_init_done_event_notify" , "()V" }, + { &rep_inqueue_full_event_notify_method, &dbenv_class, + "handle_rep_inqueue_full_event_notify" , "()V" }, { &rep_join_failure_event_notify_method, &dbenv_class, "handle_rep_join_failure_event_notify" ,"()V" }, { &rep_master_event_notify_method, &dbenv_class, @@ -1183,6 +1230,8 @@ const struct { { &seckey_create_method, &db_class, "handle_seckey_create", "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;)[L" DB_PKG "DatabaseEntry;" }, + {&rep_view_method, &dbenv_class, "handle_rep_view", + "(Ljava/lang/String;I)Z" }, { &outputstream_write_method, &outputstream_class, "write", "([BII)V" } }; @@ -1291,7 +1340,7 @@ static void __dbj_detach() (void)(*javavm)->DetachCurrentThread(javavm); } -static jobject __dbj_wrap_DB_LSN(JNIEnv *jenv, DB_LSN *lsn) +static jobject __dbj_wrap_DB_LSN(JNIEnv *jenv, const DB_LSN *lsn) { return (*jenv)->NewObject(jenv, dblsn_class, dblsn_construct, lsn->file, lsn->offset); @@ -1344,6 +1393,10 @@ static jthrowable __dbj_get_except(JNIEnv *jenv, return (jthrowable)(*jenv)->NewObject(jenv, heapfullex_class, heapfullex_construct, jmsg, ret, jdbenv); + case DB_META_CHKSUM_FAIL: + return (jthrowable)(*jenv)->NewObject(jenv, metachkfailex_class, + metachkfailex_construct, jmsg, ret, jdbenv); + case DB_REP_DUPMASTER: return (jthrowable)(*jenv)->NewObject(jenv, repdupmasterex_class, repdupmasterex_construct, @@ -1464,6 +1517,7 @@ struct __db_repmgr_sites { #define DbMpoolFile __db_mpoolfile #define DbSequence __db_sequence #define DbSite __db_site +#define DbStream __db_stream #define DbTxn __db_txn /* Suppress a compilation warning for an unused symbol */ @@ -1482,6 +1536,11 @@ typedef struct __dbt_locked { jsize array_len; } DBT_LOCKED; +struct __dbt_arr { + DBT *arr_ptr; + int len; +}; + static int __dbj_dbt_memcopy(DBT *dbt, u_int32_t offset, void *buf, u_int32_t size, u_int32_t flags) { DBT_LOCKED *ldbt = dbt->app_data; JNIEnv *jenv = ldbt->jenv; @@ -1947,11 +2006,14 @@ SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1commit(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { struct DbTxn *txn = (struct DbTxn *) 0 ; + DB_ENV *dbenv = (DB_ENV *) 0 ; + DB_REP_STAT *rep_stat = (DB_REP_STAT *) 0 ; ENV *env = (ENV *) 0 ; u_int32_t flags; DB_TXN_TOKEN token; db_ret_t result; db_ret_t result1; + db_ret_t result2; int is_nested, is_logging_enabled, is_rep_client, commit_token_enabled; (void)jcls; @@ -1973,11 +2035,22 @@ Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1commit(JNIEnv *jenv, * client node. */ env = txn->mgrp->env; + dbenv = env->dbenv; is_nested = (txn->parent != NULL); is_logging_enabled = env->lg_handle != NULL; - is_rep_client = (env->rep_handle != NULL && - env->rep_handle->region != NULL && - F_ISSET((env->rep_handle->region), REP_F_CLIENT)); + /* + * It is an illegal configuration to enable Java and disable statistics + * or enable the small build, so Java should always have access to the + * stat function. + */ + is_rep_client = 0; + if (env->rep_handle != NULL && env->rep_handle->region != NULL) { + result2 = dbenv->rep_stat(dbenv, &rep_stat, 0); + if (DB_RETOK_STD(result2)) { + is_rep_client = (rep_stat->st_status == DB_REP_CLIENT); + free(rep_stat); + } + } commit_token_enabled = (!is_nested && is_logging_enabled && !is_rep_client); if (commit_token_enabled) { @@ -2200,6 +2273,10 @@ static void __dbj_event_notify(DB_ENV *dbenv, u_int32_t event_id, void * info) (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class, panic_event_notify_method); break; + case DB_EVENT_REP_AUTOTAKEOVER_FAILED: + (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, + dbenv_class, rep_autotakeover_failed_event_notify_method); + break; case DB_EVENT_REP_CLIENT: (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class, rep_client_event_notify_method); @@ -2232,6 +2309,10 @@ static void __dbj_event_notify(DB_ENV *dbenv, u_int32_t event_id, void * info) (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class, rep_init_done_event_notify_method); break; + case DB_EVENT_REP_INQUEUE_FULL: + (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, + dbenv_class, rep_inqueue_full_event_notify_method); + break; case DB_EVENT_REP_JOIN_FAILURE: (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class, rep_join_failure_event_notify_method); @@ -2672,8 +2753,11 @@ err: if (dbt1->app_data == NULL) return (ret); } -static int __dbj_bt_compare(DB *db, const DBT *dbt1, const DBT *dbt2) +static int __dbj_bt_compare(DB *db, + const DBT *dbt1, const DBT *dbt2, size_t *locp) { + if (locp != NULL) + locp = NULL; return __dbj_am_compare(db, dbt1, dbt2, bt_compare_method); } @@ -2879,7 +2963,8 @@ err: if (dbt1->app_data == NULL) { return (ret); } -static int __dbj_dup_compare(DB *db, const DBT *dbt1, const DBT *dbt2) +static int __dbj_dup_compare(DB *db, + const DBT *dbt1, const DBT *dbt2, size_t *locp) { int detach; JNIEnv *jenv = __dbj_get_jnienv(&detach); @@ -2887,6 +2972,8 @@ static int __dbj_dup_compare(DB *db, const DBT *dbt1, const DBT *dbt2) jbyteArray jdbtarr1, jdbtarr2; int ret; + if (locp != NULL) + locp = NULL; if (jdb == NULL) return (EINVAL); @@ -2932,8 +3019,11 @@ static void __dbj_db_feedback(DB *db, int opcode, int percent) __dbj_detach(); } -static int __dbj_h_compare(DB *db, const DBT *dbt1, const DBT *dbt2) +static int __dbj_h_compare(DB *db, + const DBT *dbt1, const DBT *dbt2, size_t *locp) { + if (locp != NULL) + locp = NULL; return __dbj_am_compare(db, dbt1, dbt2, h_compare_method); } @@ -3078,6 +3168,40 @@ err: if (detach) return (ret); } +static int __dbj_rep_view(DB_ENV *dbenv, const char *name, int *result, u_int32_t flags) { + int detach; + JNIEnv *jenv = __dbj_get_jnienv(&detach); + jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv); + jobject jname; + jboolean jresult; + int ret; + + if (jdbenv == NULL) { + ret = EINVAL; + goto err; + } + + jname = (*jenv)->NewStringUTF(jenv, name); + + jresult = (*jenv)->CallNonvirtualBooleanMethod(jenv, jdbenv, dbenv_class, rep_view_method, jname, flags); + + if ((*jenv)->ExceptionOccurred(jenv)) { + /* The exception will be thrown, so this could be any error. */ + ret = EINVAL; + goto err; + } + + ret = 0; + if (jresult == JNI_FALSE) + *result = 0; + else + *result = 1; + +err: if (detach) + __dbj_detach(); + return (ret); +} + SWIGEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_initDbEnvRef0( @@ -3185,6 +3309,21 @@ SWIGINTERN u_int32_t Db_get_assoc_flags(struct Db *self){ errno = self->get_assoc_flags(self, &ret); return ret; } +SWIGINTERN char const *Db_get_blob_dir(struct Db *self){ + const char *ret; + errno = self->get_blob_dir(self, &ret); + return ret; + } +SWIGINTERN char const *Db_get_blob_sub_dir(struct Db *self){ + const char *ret; + errno = self->get_blob_sub_dir(self, &ret); + return ret; + } +SWIGINTERN u_int32_t Db_get_blob_threshold(struct Db *self){ + u_int32_t ret = 0; + errno = self->get_blob_threshold(self, &ret); + return ret; + } SWIGINTERN int_bool Db_get_byteswapped(struct Db *self){ int ret = 0; errno = self->get_byteswapped(self, &ret); @@ -3289,9 +3428,12 @@ SWIGINTERN char const **Db_get_partition_dirs(struct Db *self){ errno = self->get_partition_dirs(self, &ret); return ret; } -SWIGINTERN DBT *Db_get_partition_keys(struct Db *self){ - DBT *ret = NULL; - errno = self->get_partition_keys(self, NULL, &ret); +SWIGINTERN struct __dbt_arr Db_get_partition_keys(struct Db *self){ + struct __dbt_arr ret; + u_int32_t len; + errno = self->get_partition_keys(self, &len, &ret.arr_ptr); + ret.len = (int)len; + ret.len--; return ret; } SWIGINTERN int Db_get_partition_parts(struct Db *self){ @@ -3360,7 +3502,13 @@ SWIGINTERN db_ret_t Db_rename(struct Db *self,char const *file,char const *datab SWIGINTERN db_ret_t Db_set_append_recno(struct Db *self,int (*db_append_recno_fcn)(DB *,DBT *,db_recno_t)){ return self->set_append_recno(self, db_append_recno_fcn); } -SWIGINTERN db_ret_t Db_set_bt_compare(struct Db *self,int (*bt_compare_fcn)(DB *,DBT const *,DBT const *)){ +SWIGINTERN db_ret_t Db_set_blob_dir(struct Db *self,char const *dir){ + return self->set_blob_dir(self, dir); + } +SWIGINTERN db_ret_t Db_set_blob_threshold(struct Db *self,u_int32_t bytes,u_int32_t flags){ + return self->set_blob_threshold(self, bytes, flags); + } +SWIGINTERN db_ret_t Db_set_bt_compare(struct Db *self,int (*bt_compare_fcn)(DB *,DBT const *,DBT const *,size_t *)){ return self->set_bt_compare(self, bt_compare_fcn); } SWIGINTERN db_ret_t Db_set_bt_minkey(struct Db *self,u_int32_t bt_minkey){ @@ -3381,7 +3529,7 @@ SWIGINTERN db_ret_t Db_set_cachesize(struct Db *self,jlong bytes,int ncache){ SWIGINTERN db_ret_t Db_set_create_dir(struct Db *self,char const *dir){ return self->set_create_dir(self, dir); } -SWIGINTERN db_ret_t Db_set_dup_compare(struct Db *self,int (*dup_compare_fcn)(DB *,DBT const *,DBT const *)){ +SWIGINTERN db_ret_t Db_set_dup_compare(struct Db *self,int (*dup_compare_fcn)(DB *,DBT const *,DBT const *,size_t *)){ return self->set_dup_compare(self, dup_compare_fcn); } SWIGINTERN db_ret_t Db_set_encrypt(struct Db *self,char const *passwd,u_int32_t flags){ @@ -3401,7 +3549,7 @@ SWIGINTERN db_ret_t Db_set_heapsize(struct Db *self,jlong bytes){ SWIGINTERN db_ret_t Db_set_heap_regionsize(struct Db *self,u_int32_t npages){ return self->set_heap_regionsize(self, npages); } -SWIGINTERN db_ret_t Db_set_h_compare(struct Db *self,int (*h_compare_fcn)(DB *,DBT const *,DBT const *)){ +SWIGINTERN db_ret_t Db_set_h_compare(struct Db *self,int (*h_compare_fcn)(DB *,DBT const *,DBT const *,size_t *)){ return self->set_h_compare(self, h_compare_fcn); } SWIGINTERN db_ret_t Db_set_h_ffactor(struct Db *self,u_int32_t h_ffactor){ @@ -3419,6 +3567,32 @@ SWIGINTERN db_ret_t Db_set_lk_exclusive(struct Db *self,int nowait){ SWIGINTERN db_ret_t Db_set_lorder(struct Db *self,int lorder){ return self->set_lorder(self, lorder); } +SWIGINTERN int Db_set_msgfile(struct Db *self,char const *msgfile){ + int ret; + FILE *fmsg; + ret = 0; + fmsg = NULL; + self->get_msgfile(self, &fmsg); + if (fmsg != NULL && fmsg != stdout && fmsg != stderr) { + fclose(fmsg); + fmsg = NULL; + } + if (strcmp(msgfile, "") == 0 || msgfile == NULL) + self->set_msgfile(self, NULL); + else if (strcmp(msgfile, "stdout") == 0) + self->set_msgfile(self, stdout); + else if (strcmp(msgfile, "stderr") == 0) + self->set_msgfile(self, stderr); + else { + fmsg = fopen(msgfile, "a"); + if (fmsg != NULL) { + self->set_msgfile(self, fmsg); + } + else + ret = 1; + } + return ret; + } SWIGINTERN db_ret_t Db_set_pagesize(struct Db *self,u_int32_t pagesize){ return self->set_pagesize(self, pagesize); } @@ -3454,6 +3628,9 @@ SWIGINTERN void *Db_stat(struct Db *self,DB_TXN *txnid,u_int32_t flags){ errno = self->stat(self, txnid, &statp, flags); return statp; } +SWIGINTERN int Db_stat_print(struct Db *self,u_int32_t flags){ + return self->stat_print(self, flags); + } SWIGINTERN db_ret_t Db_sync(struct Db *self,u_int32_t flags){ return self->sync(self, flags); } @@ -3493,6 +3670,11 @@ SWIGINTERN db_recno_t Dbc_count(struct Dbc *self,u_int32_t flags){ errno = self->count(self, &count, flags); return count; } +SWIGINTERN DB_STREAM *Dbc_db_stream(struct Dbc *self,u_int32_t flags){ + DB_STREAM *dbsp = NULL; + errno = self->db_stream(self, &dbsp, flags); + return dbsp; + } SWIGINTERN int Dbc_del(struct Dbc *self,u_int32_t flags){ return self->del(self, flags); } @@ -3549,6 +3731,16 @@ SWIGINTERN DB_TXN *DbEnv_cdsgroup_begin(struct DbEnv *self){ SWIGINTERN db_ret_t DbEnv_fileid_reset(struct DbEnv *self,char const *file,u_int32_t flags){ return self->fileid_reset(self, file, flags); } +SWIGINTERN char const *DbEnv_get_blob_dir(struct DbEnv *self){ + const char *ret; + errno = self->get_blob_dir(self, &ret); + return ret; + } +SWIGINTERN u_int32_t DbEnv_get_blob_threshold(struct DbEnv *self){ + u_int32_t ret; + errno = self->get_blob_threshold(self, &ret); + return ret; + } SWIGINTERN char const **DbEnv_get_data_dirs(struct DbEnv *self){ const char **ret; errno = self->get_data_dirs(self, &ret); @@ -3612,6 +3804,12 @@ SWIGINTERN db_ret_t DbEnv_open(struct DbEnv *self,char const *db_home,u_int32_t SWIGINTERN db_ret_t DbEnv_remove(struct DbEnv *self,char const *db_home,u_int32_t flags){ return self->remove(self, db_home, flags); } +SWIGINTERN db_ret_t DbEnv_set_blob_dir(struct DbEnv *self,char const *dir){ + return self->set_blob_dir(self, dir); + } +SWIGINTERN db_ret_t DbEnv_set_blob_threshold(struct DbEnv *self,u_int32_t bytes,u_int32_t flags){ + return self->set_blob_threshold(self, bytes, flags); + } SWIGINTERN db_ret_t DbEnv_set_cachesize(struct DbEnv *self,jlong bytes,int ncache){ return self->set_cachesize(self, (u_int32_t)(bytes / GIGABYTE), @@ -3664,6 +3862,32 @@ SWIGINTERN db_ret_t DbEnv_set_mp_tablesize(struct DbEnv *self,u_int32_t mp_table SWIGINTERN void DbEnv_set_msgcall(struct DbEnv *self,void (*db_msgcall_fcn)(DB_ENV const *,char const *)){ self->set_msgcall(self, db_msgcall_fcn); } +SWIGINTERN int DbEnv_set_msgfile(struct DbEnv *self,char const *msgfile){ + int ret; + FILE *fmsg; + ret = 0; + fmsg = NULL; + self->get_msgfile(self, &fmsg); + if (fmsg != NULL && fmsg != stdout && fmsg != stderr) { + fclose(fmsg); + fmsg = NULL; + } + if (strcmp(msgfile, "") == 0 || msgfile == NULL) + self->set_msgfile(self, NULL); + else if (strcmp(msgfile, "stdout") == 0) + self->set_msgfile(self, stdout); + else if (strcmp(msgfile, "stderr") == 0) + self->set_msgfile(self, stderr); + else { + fmsg = fopen(msgfile, "a"); + if (fmsg != NULL) { + self->set_msgfile(self, fmsg); + } + else + ret = 1; + } + return ret; + } SWIGINTERN db_ret_t DbEnv_set_paniccall(struct DbEnv *self,void (*db_panic_fcn)(DB_ENV *,int)){ return self->set_paniccall(self, db_panic_fcn); } @@ -3770,6 +3994,9 @@ SWIGINTERN DB_LOCK_STAT *DbEnv_lock_stat(struct DbEnv *self,u_int32_t flags){ errno = self->lock_stat(self, &statp, flags); return statp; } +SWIGINTERN int DbEnv_lock_stat_print(struct DbEnv *self,u_int32_t flags){ + return self->lock_stat_print(self, flags); + } SWIGINTERN db_ret_t DbEnv_set_lk_conflicts(struct DbEnv *self,struct __db_lk_conflicts conflicts){ return self->set_lk_conflicts(self, conflicts.lk_conflicts, conflicts.lk_modes); @@ -3868,6 +4095,9 @@ SWIGINTERN DB_LOG_STAT *DbEnv_log_stat(struct DbEnv *self,u_int32_t flags){ errno = self->log_stat(self, &sp, flags); return sp; } +SWIGINTERN int DbEnv_log_stat_print(struct DbEnv *self,u_int32_t flags){ + return self->log_stat_print(self, flags); + } SWIGINTERN int DbEnv_log_verify(struct DbEnv *self,char const *envhome,u_int32_t cachesz,char const *dbfile,char const *dbname,time_t stime,time_t etime,u_int32_t stfile,u_int32_t stoffset,u_int32_t efile,u_int32_t eoffset,int caf,int verbose){ return self->env->log_verify_wrap(self->env, envhome, cachesz, dbfile, dbname, stime, etime, stfile, stoffset, efile, @@ -3945,6 +4175,9 @@ SWIGINTERN DB_MPOOL_STAT *DbEnv_memp_stat(struct DbEnv *self,u_int32_t flags){ errno = self->memp_stat(self, &mp_stat, NULL, flags); return mp_stat; } +SWIGINTERN int DbEnv_memp_stat_print(struct DbEnv *self,u_int32_t flags){ + return self->memp_stat_print(self, flags); + } SWIGINTERN DB_MPOOL_FSTAT **DbEnv_memp_fstat(struct DbEnv *self,u_int32_t flags){ DB_MPOOL_FSTAT **mp_fstat = NULL; errno = self->memp_stat(self, NULL, &mp_fstat, flags); @@ -4003,6 +4236,9 @@ SWIGINTERN DB_MUTEX_STAT *DbEnv_mutex_stat(struct DbEnv *self,u_int32_t flags){ errno = self->mutex_stat(self, &statp, flags); return statp; } +SWIGINTERN int DbEnv_mutex_stat_print(struct DbEnv *self,u_int32_t flags){ + return self->mutex_stat_print(self, flags); + } SWIGINTERN u_int32_t DbEnv_get_tx_max(struct DbEnv *self){ u_int32_t ret; errno = self->get_tx_max(self, &ret); @@ -4018,6 +4254,9 @@ SWIGINTERN db_timeout_t DbEnv_get_timeout(struct DbEnv *self,u_int32_t flag){ errno = self->get_timeout(self, &ret, flag); return ret; } +SWIGINTERN int DbEnv_stat_print(struct DbEnv *self,u_int32_t flags){ + return self->stat_print(self, flags); + } SWIGINTERN int DbEnv_txn_applied(struct DbEnv *self,DB_TXN_TOKEN *token,u_int32_t maxwait,u_int32_t flags){ return self->txn_applied(self, token, maxwait, flags); } @@ -4052,6 +4291,9 @@ SWIGINTERN DB_TXN_STAT *DbEnv_txn_stat(struct DbEnv *self,u_int32_t flags){ errno = self->txn_stat(self, &statp, flags); return statp; } +SWIGINTERN int DbEnv_txn_stat_print(struct DbEnv *self,u_int32_t flags){ + return self->txn_stat_print(self, flags); + } SWIGINTERN jlong DbEnv_rep_get_limit(struct DbEnv *self){ u_int32_t gbytes, bytes; errno = self->rep_get_limit(self, &gbytes, &bytes); @@ -4099,6 +4341,9 @@ SWIGINTERN DB_REP_STAT *DbEnv_rep_stat(struct DbEnv *self,u_int32_t flags){ errno = self->rep_stat(self, &statp, flags); return statp; } +SWIGINTERN int DbEnv_rep_stat_print(struct DbEnv *self,u_int32_t flags){ + return self->rep_stat_print(self, flags); + } SWIGINTERN db_ret_t DbEnv_rep_set_limit(struct DbEnv *self,jlong bytes){ return self->rep_set_limit(self, (u_int32_t)(bytes / GIGABYTE), @@ -4125,6 +4370,9 @@ SWIGINTERN db_ret_t DbEnv_rep_set_request(struct DbEnv *self,u_int32_t min,u_int SWIGINTERN db_ret_t DbEnv_rep_set_transport(struct DbEnv *self,int envid,int (*send)(DB_ENV *,DBT const *,DBT const *,DB_LSN const *,int,u_int32_t)){ return self->rep_set_transport(self, envid, send); } +SWIGINTERN db_ret_t DbEnv_rep_set_view(struct DbEnv *self,int (*rep_view_fcn)(DB_ENV *,char const *,int *,u_int32_t)){ + return self->rep_set_view(self, rep_view_fcn); + } SWIGINTERN u_int32_t DbEnv_rep_get_nsites(struct DbEnv *self){ u_int32_t ret; errno = self->rep_get_nsites(self, &ret); @@ -4154,6 +4402,11 @@ SWIGINTERN int DbEnv_repmgr_get_ack_policy(struct DbEnv *self){ errno = self->repmgr_get_ack_policy(self, &ret); return ret; } +SWIGINTERN jlong DbEnv_repmgr_get_incoming_queue_max(struct DbEnv *self){ + u_int32_t gbytes = 0, bytes = 0; + errno = self->repmgr_get_incoming_queue_max(self, &gbytes, &bytes); + return (jlong)gbytes * GIGABYTE + bytes; + } SWIGINTERN DB_SITE *DbEnv_repmgr_local_site(struct DbEnv *self){ DB_SITE *site = NULL; errno = self->repmgr_local_site(self, &site); @@ -4162,6 +4415,11 @@ SWIGINTERN DB_SITE *DbEnv_repmgr_local_site(struct DbEnv *self){ SWIGINTERN db_ret_t DbEnv_repmgr_set_ack_policy(struct DbEnv *self,int policy){ return self->repmgr_set_ack_policy(self, policy); } +SWIGINTERN db_ret_t DbEnv_repmgr_set_incoming_queue_max(struct DbEnv *self,jlong bytes){ + return self->repmgr_set_incoming_queue_max(self, + (u_int32_t)(bytes / GIGABYTE), + (u_int32_t)(bytes % GIGABYTE)); + } SWIGINTERN DB_SITE *DbEnv_repmgr_site(struct DbEnv *self,char const *host,u_int port){ DB_SITE *site = NULL; errno = self->repmgr_site(self, host, port, &site, 0); @@ -4189,9 +4447,17 @@ SWIGINTERN DB_REPMGR_STAT *DbEnv_repmgr_stat(struct DbEnv *self,u_int32_t flags) errno = self->repmgr_stat(self, &statp, flags); return statp; } +SWIGINTERN int DbEnv_repmgr_stat_print(struct DbEnv *self,u_int32_t flags){ + return self->repmgr_stat_print(self, flags); + } SWIGINTERN u_int32_t DbEnv_get_backup_config(struct DbEnv *self,u_int32_t config_type){ u_int32_t ret; errno = self->get_backup_config(self, (DB_BACKUP_CONFIG)config_type, &ret); + if (errno == EINVAL) { + errno = 0; + ret = 0; + } + return ret; } SWIGINTERN db_ret_t DbEnv_backup(struct DbEnv *self,char const *target,u_int32_t flags){ @@ -4210,25 +4476,25 @@ SWIGINTERN db_ret_t DbEnv_set_backup_config(struct DbEnv *self,u_int32_t config_ SWIGINTERN char const *DbEnv_strerror(int ret){ return db_strerror(ret); } -SWIGINTERN int DbEnv_get_version_family(){ +SWIGINTERN int DbEnv_get_version_family(void){ return DB_VERSION_FAMILY; } -SWIGINTERN int DbEnv_get_version_release(){ +SWIGINTERN int DbEnv_get_version_release(void){ return DB_VERSION_RELEASE; } -SWIGINTERN int DbEnv_get_version_major(){ +SWIGINTERN int DbEnv_get_version_major(void){ return DB_VERSION_MAJOR; } -SWIGINTERN int DbEnv_get_version_minor(){ +SWIGINTERN int DbEnv_get_version_minor(void){ return DB_VERSION_MINOR; } -SWIGINTERN int DbEnv_get_version_patch(){ +SWIGINTERN int DbEnv_get_version_patch(void){ return DB_VERSION_PATCH; } -SWIGINTERN char const *DbEnv_get_version_string(){ +SWIGINTERN char const *DbEnv_get_version_string(void){ return DB_VERSION_STRING; } -SWIGINTERN char const *DbEnv_get_version_full_string(){ +SWIGINTERN char const *DbEnv_get_version_full_string(void){ return DB_VERSION_FULL_STRING; } SWIGINTERN void delete_DbLock(struct DbLock *self){ @@ -4279,13 +4545,13 @@ SWIGINTERN struct DbSequence *new_DbSequence(DB *db,u_int32_t flags){ SWIGINTERN db_ret_t DbSequence_close(struct DbSequence *self,u_int32_t flags){ return self->close(self, flags); } -SWIGINTERN db_seq_t DbSequence_get(struct DbSequence *self,DB_TXN *txnid,int32_t delta,u_int32_t flags){ +SWIGINTERN db_seq_t DbSequence_get(struct DbSequence *self,DB_TXN *txnid,u_int32_t delta,u_int32_t flags){ db_seq_t ret = 0; errno = self->get(self, txnid, delta, &ret, flags); return ret; } -SWIGINTERN int32_t DbSequence_get_cachesize(struct DbSequence *self){ - int32_t ret = 0; +SWIGINTERN u_int32_t DbSequence_get_cachesize(struct DbSequence *self){ + u_int32_t ret = 0; errno = self->get_cachesize(self, &ret); return ret; } @@ -4321,7 +4587,7 @@ SWIGINTERN db_ret_t DbSequence_open(struct DbSequence *self,DB_TXN *txnid,DBT *k SWIGINTERN db_ret_t DbSequence_remove(struct DbSequence *self,DB_TXN *txnid,u_int32_t flags){ return self->remove(self, txnid, flags); } -SWIGINTERN db_ret_t DbSequence_set_cachesize(struct DbSequence *self,int32_t size){ +SWIGINTERN db_ret_t DbSequence_set_cachesize(struct DbSequence *self,u_int32_t size){ return self->set_cachesize(self, size); } SWIGINTERN db_ret_t DbSequence_set_flags(struct DbSequence *self,u_int32_t flags){ @@ -4335,6 +4601,9 @@ SWIGINTERN DB_SEQUENCE_STAT *DbSequence_stat(struct DbSequence *self,u_int32_t f errno = self->stat(self, &ret, flags); return ret; } +SWIGINTERN int DbSequence_stat_print(struct DbSequence *self,u_int32_t flags){ + return self->stat_print(self, flags); + } SWIGINTERN db_ret_t DbSite_close(struct DbSite *self){ return self->close(self); } @@ -4359,6 +4628,20 @@ SWIGINTERN db_ret_t DbSite_remove(struct DbSite *self){ SWIGINTERN db_ret_t DbSite_set_config(struct DbSite *self,u_int32_t which,int_bool onoff){ return self->set_config(self, which, onoff); } +SWIGINTERN db_ret_t DbStream_close(struct DbStream *self,u_int32_t flags){ + return self->close(self, flags); + } +SWIGINTERN int DbStream_read(struct DbStream *self,DBT *data,db_off_t offset,u_int32_t size,u_int32_t flags){ + return self->read(self, data, offset, size, flags); + } +SWIGINTERN db_off_t DbStream_size(struct DbStream *self,u_int32_t flags){ + db_off_t ret = 0; + errno = self->size(self, &ret, flags); + return ret; + } +SWIGINTERN int DbStream_write(struct DbStream *self,DBT *data,db_off_t offset,u_int32_t flags){ + return self->write(self, data, offset, flags); + } SWIGINTERN db_ret_t DbTxn_abort(struct DbTxn *self){ return self->abort(self); } @@ -4807,6 +5090,84 @@ SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1asso } +SWIGEXPORT jstring JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1blob_1dir(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jstring jresult = 0 ; + struct Db *arg1 = (struct Db *) 0 ; + char *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct Db **)&jarg1; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = (char *)Db_get_blob_dir(arg1); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV); + } + + if (result) jresult = (*jenv)->NewStringUTF(jenv, (const char *)result); + return jresult; +} + + +SWIGEXPORT jstring JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1blob_1sub_1dir(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jstring jresult = 0 ; + struct Db *arg1 = (struct Db *) 0 ; + char *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct Db **)&jarg1; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = (char *)Db_get_blob_sub_dir(arg1); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV); + } + + if (result) jresult = (*jenv)->NewStringUTF(jenv, (const char *)result); + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1blob_1threshold(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + struct Db *arg1 = (struct Db *) 0 ; + u_int32_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct Db **)&jarg1; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = (u_int32_t)Db_get_blob_threshold(arg1); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV); + } + + jresult = (jint)result; + return jresult; +} + + SWIGEXPORT jboolean JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1byteswapped(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { jboolean jresult = 0 ; struct Db *arg1 = (struct Db *) 0 ; @@ -5350,7 +5711,7 @@ SWIGEXPORT jobjectArray JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1g { if (result != NULL) { - /*@SWIG:../lang/java/libdb_java/java_typemaps.i,456,STRING_ARRAY_OUT@*/ int i, len; + /*@SWIG:../lang/java/libdb_java/java_typemaps.i,596,STRING_ARRAY_OUT@*/ int i, len; len = 0; while (result[len] != NULL) @@ -5372,7 +5733,7 @@ SWIGEXPORT jobjectArray JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1g SWIGEXPORT jobject JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1partition_1keys(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { jobject jresult = 0 ; struct Db *arg1 = (struct Db *) 0 ; - DBT *result = 0 ; + struct __dbt_arr result; (void)jenv; (void)jcls; @@ -5385,12 +5746,53 @@ SWIGEXPORT jobject JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1get_1p } errno = 0; - result = (DBT *)Db_get_partition_keys(arg1); + result = Db_get_partition_keys(arg1); if (!DB_RETOK_STD(errno)) { __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV); } - jresult = (jobject)result; + { + DBT *dbt; + void *ptr; + int i, ret; + u_int32_t buflen; + + if ((&result)->arr_ptr == NULL || (&result)->len <= 0) + jresult = NULL; + else { + /* Allocate the bulk buffer and make the bulk DBT. */ + for (i = 0, buflen = 0; i < (&result)->len; i++) + buflen += (&result)->arr_ptr[i].size * sizeof(u_int32_t); + buflen += ((&result)->len * 2 + 1) * sizeof(u_int32_t); + if ((ret = __os_malloc(NULL, sizeof(DBT), &dbt)) != 0) { + __dbj_throw(jenv, ret, NULL, NULL, NULL); + goto err; + } + if ((ret = __os_malloc(NULL, buflen, &dbt->data)) != 0) { + __dbj_throw(jenv, ret, NULL, NULL, NULL); + goto err; + } + dbt->size = dbt->ulen = buflen; + DB_MULTIPLE_INIT(ptr, dbt); + for (i = 0; i < (&result)->len; i++) + DB_MULTIPLE_WRITE_NEXT(ptr, dbt, + (&result)->arr_ptr[i].data, (&result)->arr_ptr[i].size); + + /* Map a bulk DBT into a DatabaseEntry. */ + jresult = (*jenv)->NewObject(jenv, dbt_class, dbt_construct); + __dbj_dbt_copyout(jenv, dbt, NULL, jresult); + if (jresult == NULL) + goto err; + + err: if (dbt != NULL) { + if (dbt->data != NULL) + __os_free(NULL, dbt->data); + __os_free(NULL, dbt); + } + if (ret != 0 || jresult == NULL) + return 0; + } + } return jresult; } @@ -5940,9 +6342,64 @@ SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1appe } +SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1blob_1dir(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) { + struct Db *arg1 = (struct Db *) 0 ; + char *arg2 = (char *) 0 ; + db_ret_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct Db **)&jarg1; + arg2 = 0; + if (jarg2) { + arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0); + if (!arg2) return ; + } + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return ; + } + + result = (db_ret_t)Db_set_blob_dir(arg1,(char const *)arg2); + if (!DB_RETOK_STD(result)) { + __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV); + } + + if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, (const char *)arg2); +} + + +SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1blob_1threshold(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jint jarg3) { + struct Db *arg1 = (struct Db *) 0 ; + u_int32_t arg2 ; + u_int32_t arg3 ; + db_ret_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct Db **)&jarg1; + arg2 = (u_int32_t)jarg2; + arg3 = (u_int32_t)jarg3; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return ; + } + + result = (db_ret_t)Db_set_blob_threshold(arg1,arg2,arg3); + if (!DB_RETOK_STD(result)) { + __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV); + } + +} + + SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1bt_1compare(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jboolean jarg2) { struct Db *arg1 = (struct Db *) 0 ; - int (*arg2)(DB *,DBT const *,DBT const *) = (int (*)(DB *,DBT const *,DBT const *)) 0 ; + int (*arg2)(DB *,DBT const *,DBT const *,size_t *) = (int (*)(DB *,DBT const *,DBT const *,size_t *)) 0 ; db_ret_t result; (void)jenv; @@ -6103,7 +6560,7 @@ SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1crea SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1dup_1compare(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jboolean jarg2) { struct Db *arg1 = (struct Db *) 0 ; - int (*arg2)(DB *,DBT const *,DBT const *) = (int (*)(DB *,DBT const *,DBT const *)) 0 ; + int (*arg2)(DB *,DBT const *,DBT const *,size_t *) = (int (*)(DB *,DBT const *,DBT const *,size_t *)) 0 ; db_ret_t result; (void)jenv; @@ -6258,7 +6715,7 @@ SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1heap SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1h_1compare(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jboolean jarg2) { struct Db *arg1 = (struct Db *) 0 ; - int (*arg2)(DB *,DBT const *,DBT const *) = (int (*)(DB *,DBT const *,DBT const *)) 0 ; + int (*arg2)(DB *,DBT const *,DBT const *,size_t *) = (int (*)(DB *,DBT const *,DBT const *,size_t *)) 0 ; db_ret_t result; (void)jenv; @@ -6404,6 +6861,38 @@ SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1lord } +SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1msgfile(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) { + jint jresult = 0 ; + struct Db *arg1 = (struct Db *) 0 ; + char *arg2 = (char *) 0 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct Db **)&jarg1; + arg2 = 0; + if (jarg2) { + arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0); + if (!arg2) return 0; + } + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + result = (int)Db_set_msgfile(arg1,(char const *)arg2); + if (!DB_RETOK_STD(result)) { + __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV); + } + + jresult = (jint)result; + if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, (const char *)arg2); + return jresult; +} + + SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1pagesize(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { struct Db *arg1 = (struct Db *) 0 ; u_int32_t arg2 ; @@ -6433,7 +6922,6 @@ SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1part u_int32_t arg2 ; DBT *arg3 = (DBT *) 0 ; u_int32_t (*arg4)(DB *,DBT *) = (u_int32_t (*)(DB *,DBT *)) 0 ; - DBT_LOCKED ldbt3 ; db_ret_t result; (void)jenv; @@ -6441,9 +6929,77 @@ SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1part (void)jarg1_; arg1 = *(struct Db **)&jarg1; arg2 = (u_int32_t)jarg2; - - if (__dbj_dbt_copyin(jenv, &ldbt3, &arg3, jarg3, 1) != 0) { - return ; /* An exception will be pending. */ + { + DBT_LOCKED lresult; + DBT *dbt; + void *ptr, *retdata; + int cnt, i, ret; + u_int32_t retlen; + + if (jarg3 == NULL) + arg3 = NULL; + else { + /* Copy the DBT from Java to C. */ + if ((ret = __dbj_dbt_copyin(jenv, + &lresult, &dbt, jarg3, 0)) != 0) + /* An exception will be pending. */ + return ; + + /* Get the number of DBT from the bulk buffer. */ + DB_MULTIPLE_INIT(ptr, dbt); + DB_MULTIPLE_NEXT(ptr, dbt, retdata, retlen); + cnt = 0; + while (ptr != NULL) { + cnt++; + DB_MULTIPLE_NEXT(ptr, dbt, retdata, retlen); + } + + /* Make an array of DBTs. */ + if ((ret = __os_malloc(NULL, + (cnt + 1) * sizeof(DBT), &arg3)) != 0) { + __dbj_throw(jenv, ret, NULL, NULL, NULL); + goto err; + } + memset(arg3, 0, (cnt + 1) * sizeof(DBT)); + /* + * Save the key array size in the last entry so that it can + * be used later when free the key array and mark its flags + * as DB_DBT_BULK which is an internal flag that can't be + * passed by users. The last entry will not be read by the C + * call __partition_set since it only reads the first cnt + * DBTs from the key array. + */ + arg3[cnt].size = sizeof(int); + arg3[cnt].data = &cnt; + arg3[cnt].flags = DB_DBT_BULK; + DB_MULTIPLE_INIT(ptr, dbt); + for (i = 0; i < cnt; i++) { + DB_MULTIPLE_NEXT(ptr, dbt, retdata, retlen); + if (retlen != 0) { + /* + * If there's data, we need to take a copy + * of it. + */ + arg3[i].size = retlen; + if ((ret = __os_malloc(NULL, + arg3[i].size, &arg3[i].data)) != 0) { + __dbj_throw(jenv, + ret, NULL, NULL, NULL); + goto err; + } + memcpy(arg3[i].data, retdata, retlen); + } + } + + err: if (ret != 0) { + if (arg3 != NULL) { + for (i = 0; i < cnt; i++) + __os_free(NULL, arg3[i].data); + __os_free(NULL, arg3); + } + return ; + } + } } arg4 = (jarg4 == JNI_TRUE) ? __dbj_partition : NULL; @@ -6459,20 +7015,60 @@ SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1part __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV); } - __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3); + + { + int cnt, i; + + if (arg3 != NULL) { + /* Get the array size. */ + cnt = 0; + while (arg3[cnt].flags != DB_DBT_BULK) + cnt++; + for (i = 0; i < cnt; i++) + __os_free(NULL, arg3[i].data); + __os_free(NULL, arg3); + } + } + } SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1partition_1dirs(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jobjectArray jarg2) { struct Db *arg1 = (struct Db *) 0 ; char **arg2 = (char **) 0 ; + jint size2 ; db_ret_t result; (void)jenv; (void)jcls; (void)jarg1_; arg1 = *(struct Db **)&jarg1; - arg2 = *(char ***)&jarg2; + { + /*@SWIG:../lang/java/libdb_java/java_typemaps.i,624,STRING_ARRAY_IN@*/ int i, ret; + size_t sz; + + size2 = (*jenv)->GetArrayLength(jenv, jarg2); + sz = (size_t)(size2 + 1) * sizeof(char *); + if ((ret = __os_malloc(NULL, sz, &arg2)) != 0) { + __dbj_throw(jenv, ret, NULL, NULL, NULL); + return ; + } + /* Make a copy of each string. */ + for (i = 0; i < size2; i++) { + jstring j_string = (jstring)(*jenv)->GetObjectArrayElement(jenv, jarg2, i); + const char * c_string = (*jenv)->GetStringUTFChars(jenv, j_string, 0); + sz = strlen(c_string) + 1; + if ((ret = __os_malloc(NULL, sz, &arg2[i])) != 0) { + __dbj_throw(jenv, ret, NULL, NULL, NULL); + return ; + } + strcpy(arg2[i], c_string); + (*jenv)->ReleaseStringUTFChars(jenv, j_string, c_string); + (*jenv)->DeleteLocalRef(jenv, j_string); + } + arg2[i] = 0; + /*@SWIG@*/ + } if (jarg1 == 0) { __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); @@ -6484,6 +7080,12 @@ SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1set_1part __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV); } + { + int i; + for (i = 0; i < size2-1; i++) + __os_free(NULL, arg2[i]); + __os_free(NULL, arg2); + } } @@ -6762,6 +7364,34 @@ SWIGEXPORT jobject JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1stat(J } +SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1stat_1print(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jint jresult = 0 ; + struct Db *arg1 = (struct Db *) 0 ; + u_int32_t arg2 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct Db **)&jarg1; + arg2 = (u_int32_t)jarg2; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = (int)Db_stat_print(arg1,arg2); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV); + } + + jresult = (jint)result; + return jresult; +} + + SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Db_1sync(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { struct Db *arg1 = (struct Db *) 0 ; u_int32_t arg2 ; @@ -6981,6 +7611,34 @@ SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Dbc_1count(JN } +SWIGEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Dbc_1db_1stream(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jlong jresult = 0 ; + struct Dbc *arg1 = (struct Dbc *) 0 ; + u_int32_t arg2 ; + DB_STREAM *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct Dbc **)&jarg1; + arg2 = (u_int32_t)jarg2; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = (DB_STREAM *)Dbc_db_stream(arg1,arg2); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV); + } + + *(DB_STREAM **)&jresult = result; + return jresult; +} + + SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_Dbc_1del(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { jint jresult = 0 ; struct Dbc *arg1 = (struct Dbc *) 0 ; @@ -7444,6 +8102,58 @@ SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1fileid } +SWIGEXPORT jstring JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1blob_1dir(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jstring jresult = 0 ; + struct DbEnv *arg1 = (struct DbEnv *) 0 ; + char *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbEnv **)&jarg1; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = (char *)DbEnv_get_blob_dir(arg1); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, JDBENV); + } + + if (result) jresult = (*jenv)->NewStringUTF(jenv, (const char *)result); + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1blob_1threshold(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + struct DbEnv *arg1 = (struct DbEnv *) 0 ; + u_int32_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbEnv **)&jarg1; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = (u_int32_t)DbEnv_get_blob_threshold(arg1); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, JDBENV); + } + + jresult = (jint)result; + return jresult; +} + + SWIGEXPORT jobjectArray JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1data_1dirs(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { jobjectArray jresult = 0 ; struct DbEnv *arg1 = (struct DbEnv *) 0 ; @@ -7467,7 +8177,7 @@ SWIGEXPORT jobjectArray JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv { if (result != NULL) { - /*@SWIG:../lang/java/libdb_java/java_typemaps.i,456,STRING_ARRAY_OUT@*/ int i, len; + /*@SWIG:../lang/java/libdb_java/java_typemaps.i,596,STRING_ARRAY_OUT@*/ int i, len; len = 0; while (result[len] != NULL) @@ -7837,6 +8547,61 @@ SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1remove } +SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1blob_1dir(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) { + struct DbEnv *arg1 = (struct DbEnv *) 0 ; + char *arg2 = (char *) 0 ; + db_ret_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbEnv **)&jarg1; + arg2 = 0; + if (jarg2) { + arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0); + if (!arg2) return ; + } + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return ; + } + + result = (db_ret_t)DbEnv_set_blob_dir(arg1,(char const *)arg2); + if (!DB_RETOK_STD(result)) { + __dbj_throw(jenv, result, NULL, NULL, JDBENV); + } + + if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, (const char *)arg2); +} + + +SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1blob_1threshold(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jint jarg3) { + struct DbEnv *arg1 = (struct DbEnv *) 0 ; + u_int32_t arg2 ; + u_int32_t arg3 ; + db_ret_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbEnv **)&jarg1; + arg2 = (u_int32_t)jarg2; + arg3 = (u_int32_t)jarg3; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return ; + } + + result = (db_ret_t)DbEnv_set_blob_threshold(arg1,arg2,arg3); + if (!DB_RETOK_STD(result)) { + __dbj_throw(jenv, result, NULL, NULL, JDBENV); + } + +} + + SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1cachesize(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jint jarg3) { struct DbEnv *arg1 = (struct DbEnv *) 0 ; jlong arg2 ; @@ -8248,6 +9013,33 @@ SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1m } +SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1msgfile(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) { + jint jresult = 0 ; + struct DbEnv *arg1 = (struct DbEnv *) 0 ; + char *arg2 = (char *) 0 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbEnv **)&jarg1; + arg2 = 0; + if (jarg2) { + arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0); + if (!arg2) return 0; + } + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + result = (int)DbEnv_set_msgfile(arg1,(char const *)arg2); + jresult = (jint)result; + if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, (const char *)arg2); + return jresult; +} + + SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1paniccall(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jboolean jarg2) { struct DbEnv *arg1 = (struct DbEnv *) 0 ; void (*arg2)(DB_ENV *,int) = (void (*)(DB_ENV *,int)) 0 ; @@ -8944,6 +9736,34 @@ SWIGEXPORT jobject JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1loc } +SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1stat_1print(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jint jresult = 0 ; + struct DbEnv *arg1 = (struct DbEnv *) 0 ; + u_int32_t arg2 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbEnv **)&jarg1; + arg2 = (u_int32_t)jarg2; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = (int)DbEnv_lock_stat_print(arg1,arg2); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, JDBENV); + } + + jresult = (jint)result; + return jresult; +} + + SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1set_1lk_1conflicts(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jobjectArray jarg2) { struct DbEnv *arg1 = (struct DbEnv *) 0 ; struct __db_lk_conflicts arg2 ; @@ -9364,7 +10184,7 @@ SWIGEXPORT jobjectArray JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv { if (result != NULL) { - /*@SWIG:../lang/java/libdb_java/java_typemaps.i,456,STRING_ARRAY_OUT@*/ int i, len; + /*@SWIG:../lang/java/libdb_java/java_typemaps.i,596,STRING_ARRAY_OUT@*/ int i, len; len = 0; while (result[len] != NULL) @@ -9746,6 +10566,34 @@ SWIGEXPORT jobject JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1log } +SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1log_1stat_1print(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jint jresult = 0 ; + struct DbEnv *arg1 = (struct DbEnv *) 0 ; + u_int32_t arg2 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbEnv **)&jarg1; + arg2 = (u_int32_t)jarg2; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = (int)DbEnv_log_stat_print(arg1,arg2); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, JDBENV); + } + + jresult = (jint)result; + return jresult; +} + + SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1log_1verify(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jint jarg3, jstring jarg4, jstring jarg5, jlong jarg6, jlong jarg7, jint jarg8, jint jarg9, jint jarg10, jint jarg11, jint jarg12, jint jarg13) { jint jresult = 0 ; struct DbEnv *arg1 = (struct DbEnv *) 0 ; @@ -10237,6 +11085,34 @@ SWIGEXPORT jobject JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1mem } +SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1memp_1stat_1print(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jint jresult = 0 ; + struct DbEnv *arg1 = (struct DbEnv *) 0 ; + u_int32_t arg2 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbEnv **)&jarg1; + arg2 = (u_int32_t)jarg2; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = (int)DbEnv_memp_stat_print(arg1,arg2); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, JDBENV); + } + + jresult = (jint)result; + return jresult; +} + + SWIGEXPORT jobjectArray JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1memp_1fstat(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { jobjectArray jresult = 0 ; struct DbEnv *arg1 = (struct DbEnv *) 0 ; @@ -10650,6 +11526,34 @@ SWIGEXPORT jobject JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1mut } +SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1mutex_1stat_1print(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jint jresult = 0 ; + struct DbEnv *arg1 = (struct DbEnv *) 0 ; + u_int32_t arg2 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbEnv **)&jarg1; + arg2 = (u_int32_t)jarg2; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = (int)DbEnv_mutex_stat_print(arg1,arg2); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, JDBENV); + } + + jresult = (jint)result; + return jresult; +} + + SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1tx_1max(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { jint jresult = 0 ; struct DbEnv *arg1 = (struct DbEnv *) 0 ; @@ -10730,6 +11634,34 @@ SWIGEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1 } +SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1stat_1print(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jint jresult = 0 ; + struct DbEnv *arg1 = (struct DbEnv *) 0 ; + u_int32_t arg2 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbEnv **)&jarg1; + arg2 = (u_int32_t)jarg2; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = (int)DbEnv_stat_print(arg1,arg2); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, JDBENV); + } + + jresult = (jint)result; + return jresult; +} + + SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1txn_1applied(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jobject jarg2, jint jarg3, jint jarg4) { jint jresult = 0 ; struct DbEnv *arg1 = (struct DbEnv *) 0 ; @@ -10748,7 +11680,7 @@ SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1txn_1a arg2 = NULL; } else { arg2 = &token2; - (*jenv)->GetByteArrayRegion(jenv, (jbyteArray)jarg2, 0, DB_TXN_TOKEN_SIZE, arg2->buf); + (*jenv)->GetByteArrayRegion(jenv, (jbyteArray)jarg2, 0, DB_TXN_TOKEN_SIZE, (jbyte *)arg2->buf); } arg3 = (u_int32_t)jarg3; @@ -10953,6 +11885,34 @@ SWIGEXPORT jobject JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1txn } +SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1txn_1stat_1print(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jint jresult = 0 ; + struct DbEnv *arg1 = (struct DbEnv *) 0 ; + u_int32_t arg2 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbEnv **)&jarg1; + arg2 = (u_int32_t)jarg2; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = (int)DbEnv_txn_stat_print(arg1,arg2); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, JDBENV); + } + + jresult = (jint)result; + return jresult; +} + + SWIGEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1get_1limit(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { jlong jresult = 0 ; struct DbEnv *arg1 = (struct DbEnv *) 0 ; @@ -11319,6 +12279,34 @@ SWIGEXPORT jobject JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep } +SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1stat_1print(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jint jresult = 0 ; + struct DbEnv *arg1 = (struct DbEnv *) 0 ; + u_int32_t arg2 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbEnv **)&jarg1; + arg2 = (u_int32_t)jarg2; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = (int)DbEnv_rep_stat_print(arg1,arg2); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, JDBENV); + } + + jresult = (jint)result; + return jresult; +} + + SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1set_1limit(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { struct DbEnv *arg1 = (struct DbEnv *) 0 ; jlong arg2 ; @@ -11479,6 +12467,32 @@ SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1s } +SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1set_1view(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jboolean jarg2) { + struct DbEnv *arg1 = (struct DbEnv *) 0 ; + int (*arg2)(DB_ENV *,char const *,int *,u_int32_t) = (int (*)(DB_ENV *,char const *,int *,u_int32_t)) 0 ; + db_ret_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbEnv **)&jarg1; + + arg2 = (jarg2 == JNI_TRUE) ? __dbj_rep_view : NULL; + + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return ; + } + + result = (db_ret_t)DbEnv_rep_set_view(arg1,arg2); + if (!DB_RETOK_STD(result)) { + __dbj_throw(jenv, result, NULL, NULL, JDBENV); + } + +} + + SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep_1get_1nsites(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { jint jresult = 0 ; struct DbEnv *arg1 = (struct DbEnv *) 0 ; @@ -11659,6 +12673,32 @@ SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1repmgr } +SWIGEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1repmgr_1get_1incoming_1queue_1max(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + struct DbEnv *arg1 = (struct DbEnv *) 0 ; + jlong result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbEnv **)&jarg1; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = DbEnv_repmgr_get_incoming_queue_max(arg1); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, JDBENV); + } + + jresult = result; + return jresult; +} + + SWIGEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1repmgr_1local_1site(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { jlong jresult = 0 ; struct DbEnv *arg1 = (struct DbEnv *) 0 ; @@ -11709,6 +12749,30 @@ SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1repmgr } +SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1repmgr_1set_1incoming_1queue_1max(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + struct DbEnv *arg1 = (struct DbEnv *) 0 ; + jlong arg2 ; + db_ret_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbEnv **)&jarg1; + arg2 = jarg2; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return ; + } + + result = (db_ret_t)DbEnv_repmgr_set_incoming_queue_max(arg1,arg2); + if (!DB_RETOK_STD(result)) { + __dbj_throw(jenv, result, NULL, NULL, JDBENV); + } + +} + + SWIGEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1repmgr_1site(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jlong jarg3) { jlong jresult = 0 ; struct DbEnv *arg1 = (struct DbEnv *) 0 ; @@ -11726,7 +12790,7 @@ SWIGEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1repmg if (!arg2) return 0; } - arg3 = jarg3; + arg3 = (u_int)jarg3; if (jarg1 == 0) { @@ -11922,6 +12986,34 @@ SWIGEXPORT jobject JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1rep } +SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1repmgr_1stat_1print(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jint jresult = 0 ; + struct DbEnv *arg1 = (struct DbEnv *) 0 ; + u_int32_t arg2 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbEnv **)&jarg1; + arg2 = (u_int32_t)jarg2; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = (int)DbEnv_repmgr_stat_print(arg1,arg2); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, JDBENV); + } + + jresult = (jint)result; + return jresult; +} + + SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1get_1backup_1config(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { jint jresult = 0 ; struct DbEnv *arg1 = (struct DbEnv *) 0 ; @@ -12506,7 +13598,7 @@ SWIGEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1 jlong jresult = 0 ; struct DbSequence *arg1 = (struct DbSequence *) 0 ; DB_TXN *arg2 = (DB_TXN *) 0 ; - int32_t arg3 ; + u_int32_t arg3 ; u_int32_t arg4 ; db_seq_t result; @@ -12516,7 +13608,7 @@ SWIGEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1 (void)jarg2_; arg1 = *(struct DbSequence **)&jarg1; arg2 = *(DB_TXN **)&jarg2; - arg3 = (int32_t)jarg3; + arg3 = (u_int32_t)jarg3; arg4 = (u_int32_t)jarg4; if (jarg1 == 0) { @@ -12538,7 +13630,7 @@ SWIGEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1 SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1get_1cachesize(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { jint jresult = 0 ; struct DbSequence *arg1 = (struct DbSequence *) 0 ; - int32_t result; + u_int32_t result; (void)jenv; (void)jcls; @@ -12551,7 +13643,7 @@ SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1g } errno = 0; - result = (int32_t)DbSequence_get_cachesize(arg1); + result = (u_int32_t)DbSequence_get_cachesize(arg1); if (!DB_RETOK_STD(errno)) { __dbj_throw(jenv, errno, NULL, NULL, NULL); } @@ -12781,14 +13873,14 @@ SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1r SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1set_1cachesize(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { struct DbSequence *arg1 = (struct DbSequence *) 0 ; - int32_t arg2 ; + u_int32_t arg2 ; db_ret_t result; (void)jenv; (void)jcls; (void)jarg1_; arg1 = *(struct DbSequence **)&jarg1; - arg2 = (int32_t)jarg2; + arg2 = (u_int32_t)jarg2; if (jarg1 == 0) { __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); @@ -12890,6 +13982,34 @@ SWIGEXPORT jobject JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence } +SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSequence_1stat_1print(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jint jresult = 0 ; + struct DbSequence *arg1 = (struct DbSequence *) 0 ; + u_int32_t arg2 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbSequence **)&jarg1; + arg2 = (u_int32_t)jarg2; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = (int)DbSequence_stat_print(arg1,arg2); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, NULL); + } + + jresult = (jint)result; + return jresult; +} + + SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSite_1close0(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { struct DbSite *arg1 = (struct DbSite *) 0 ; db_ret_t result; @@ -13051,6 +14171,132 @@ SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbSite_1set_1 } +SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbStream_1close0(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + struct DbStream *arg1 = (struct DbStream *) 0 ; + u_int32_t arg2 ; + db_ret_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbStream **)&jarg1; + arg2 = (u_int32_t)jarg2; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return ; + } + + result = (db_ret_t)DbStream_close(arg1,arg2); + if (!DB_RETOK_STD(result)) { + __dbj_throw(jenv, result, NULL, NULL, NULL); + } + +} + + +SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbStream_1read(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jobject jarg2, jlong jarg3, jint jarg4, jint jarg5) { + jint jresult = 0 ; + struct DbStream *arg1 = (struct DbStream *) 0 ; + DBT *arg2 = (DBT *) 0 ; + db_off_t arg3 ; + u_int32_t arg4 ; + u_int32_t arg5 ; + DBT_LOCKED ldbt2 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbStream **)&jarg1; + + if (__dbj_dbt_copyin(jenv, &ldbt2, &arg2, jarg2, 0) != 0) { + return 0; /* An exception will be pending. */ + } + arg3 = (db_off_t)jarg3; + arg4 = (u_int32_t)jarg4; + arg5 = (u_int32_t)jarg5; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + result = (int)DbStream_read(arg1,arg2,arg3,arg4,arg5); + if (!DB_RETOK_STD(result)) { + __dbj_throw(jenv, result, NULL, NULL, NULL); + } + + jresult = (jint)result; + __dbj_dbt_release(jenv, jarg2, arg2, &ldbt2); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbStream_1size(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jlong jresult = 0 ; + struct DbStream *arg1 = (struct DbStream *) 0 ; + u_int32_t arg2 ; + db_off_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbStream **)&jarg1; + arg2 = (u_int32_t)jarg2; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + errno = 0; + result = (db_off_t)DbStream_size(arg1,arg2); + if (!DB_RETOK_STD(errno)) { + __dbj_throw(jenv, errno, NULL, NULL, NULL); + } + + jresult = (jlong)result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbStream_1write(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jobject jarg2, jlong jarg3, jint jarg4) { + jint jresult = 0 ; + struct DbStream *arg1 = (struct DbStream *) 0 ; + DBT *arg2 = (DBT *) 0 ; + db_off_t arg3 ; + u_int32_t arg4 ; + DBT_LOCKED ldbt2 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(struct DbStream **)&jarg1; + + if (__dbj_dbt_copyin(jenv, &ldbt2, &arg2, jarg2, 0) != 0) { + return 0; /* An exception will be pending. */ + } + arg3 = (db_off_t)jarg3; + arg4 = (u_int32_t)jarg4; + + if (jarg1 == 0) { + __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL); + return 0; + } + + result = (int)DbStream_write(arg1,arg2,arg3,arg4); + if (!DB_RETOK_STD(result)) { + __dbj_throw(jenv, result, NULL, NULL, NULL); + } + + jresult = (jint)result; + __dbj_dbt_release(jenv, jarg2, arg2, &ldbt2); + return jresult; +} + + SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1abort0(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { struct DbTxn *arg1 = (struct DbTxn *) 0 ; db_ret_t result; diff --git a/lang/java/libdb_java/java_callbacks.i b/lang/java/libdb_java/java_callbacks.i index 6c3805dc..cee83795 100644 --- a/lang/java/libdb_java/java_callbacks.i +++ b/lang/java/libdb_java/java_callbacks.i @@ -174,6 +174,10 @@ static void __dbj_event_notify(DB_ENV *dbenv, u_int32_t event_id, void * info) (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class, panic_event_notify_method); break; + case DB_EVENT_REP_AUTOTAKEOVER_FAILED: + (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, + dbenv_class, rep_autotakeover_failed_event_notify_method); + break; case DB_EVENT_REP_CLIENT: (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class, rep_client_event_notify_method); @@ -206,6 +210,10 @@ static void __dbj_event_notify(DB_ENV *dbenv, u_int32_t event_id, void * info) (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class, rep_init_done_event_notify_method); break; + case DB_EVENT_REP_INQUEUE_FULL: + (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, + dbenv_class, rep_inqueue_full_event_notify_method); + break; case DB_EVENT_REP_JOIN_FAILURE: (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class, rep_join_failure_event_notify_method); @@ -646,8 +654,11 @@ err: if (dbt1->app_data == NULL) return (ret); } -static int __dbj_bt_compare(DB *db, const DBT *dbt1, const DBT *dbt2) +static int __dbj_bt_compare(DB *db, + const DBT *dbt1, const DBT *dbt2, size_t *locp) { + if (locp != NULL) + locp = NULL; return __dbj_am_compare(db, dbt1, dbt2, bt_compare_method); } @@ -853,7 +864,8 @@ err: if (dbt1->app_data == NULL) { return (ret); } -static int __dbj_dup_compare(DB *db, const DBT *dbt1, const DBT *dbt2) +static int __dbj_dup_compare(DB *db, + const DBT *dbt1, const DBT *dbt2, size_t *locp) { int detach; JNIEnv *jenv = __dbj_get_jnienv(&detach); @@ -861,6 +873,8 @@ static int __dbj_dup_compare(DB *db, const DBT *dbt1, const DBT *dbt2) jbyteArray jdbtarr1, jdbtarr2; int ret; + if (locp != NULL) + locp = NULL; if (jdb == NULL) return (EINVAL); @@ -906,8 +920,11 @@ static void __dbj_db_feedback(DB *db, int opcode, int percent) __dbj_detach(); } -static int __dbj_h_compare(DB *db, const DBT *dbt1, const DBT *dbt2) +static int __dbj_h_compare(DB *db, + const DBT *dbt1, const DBT *dbt2, size_t *locp) { + if (locp != NULL) + locp = NULL; return __dbj_am_compare(db, dbt1, dbt2, h_compare_method); } @@ -1051,6 +1068,40 @@ err: if (detach) __dbj_detach(); return (ret); } + +static int __dbj_rep_view(DB_ENV *dbenv, const char *name, int *result, u_int32_t flags) { + int detach; + JNIEnv *jenv = __dbj_get_jnienv(&detach); + jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv); + jobject jname; + jboolean jresult; + int ret; + + if (jdbenv == NULL) { + ret = EINVAL; + goto err; + } + + jname = (*jenv)->NewStringUTF(jenv, name); + + jresult = (*jenv)->CallNonvirtualBooleanMethod(jenv, jdbenv, dbenv_class, rep_view_method, jname, flags); + + if ((*jenv)->ExceptionOccurred(jenv)) { + /* The exception will be thrown, so this could be any error. */ + ret = EINVAL; + goto err; + } + + ret = 0; + if (jresult == JNI_FALSE) + *result = 0; + else + *result = 1; + +err: if (detach) + __dbj_detach(); + return (ret); +} %} JAVA_CALLBACK(int (*backup_close_fcn)(DB_ENV *, @@ -1098,7 +1149,7 @@ JAVA_CALLBACK(int (*callback)(DB *, const DBT *, DBT *, const DBT *, int *), JAVA_CALLBACK(int (*db_append_recno_fcn)(DB *, DBT *, db_recno_t), com.sleepycat.db.RecordNumberAppender, append_recno) -JAVA_CALLBACK(int (*bt_compare_fcn)(DB *, const DBT *, const DBT *), +JAVA_CALLBACK(int (*bt_compare_fcn)(DB *, const DBT *, const DBT *, size_t *), java.util.Comparator, bt_compare) JAVA_CALLBACK(int (*bt_compress_fcn)(DB *, const DBT *, const DBT *, const DBT *, const DBT *, DBT *), @@ -1109,11 +1160,13 @@ JAVA_CALLBACK(u_int32_t (*db_partition_fcn)(DB *, DBT *), com.sleepycat.db.PartitionHandler, partition) JAVA_CALLBACK(size_t (*bt_prefix_fcn)(DB *, const DBT *, const DBT *), com.sleepycat.db.BtreePrefixCalculator, bt_prefix) -JAVA_CALLBACK(int (*dup_compare_fcn)(DB *, const DBT *, const DBT *), +JAVA_CALLBACK(int (*dup_compare_fcn)(DB *, const DBT *, const DBT *, size_t *), java.util.Comparator, dup_compare) JAVA_CALLBACK(void (*db_feedback_fcn)(DB *, int, int), com.sleepycat.db.FeedbackHandler, db_feedback) -JAVA_CALLBACK(int (*h_compare_fcn)(DB *, const DBT *, const DBT *), +JAVA_CALLBACK(int (*h_compare_fcn)(DB *, const DBT *, const DBT *, size_t *), java.util.Comparator, h_compare) JAVA_CALLBACK(u_int32_t (*h_hash_fcn)(DB *, const void *, u_int32_t), com.sleepycat.db.Hasher, h_hash) +JAVA_CALLBACK(int (*rep_view_fcn)(DB_ENV *, const char *, int *, u_int32_t), + com.sleepycat.db.ReplicationViewHandler, rep_view); diff --git a/lang/java/libdb_java/java_except.i b/lang/java/libdb_java/java_except.i index 2105940b..d0e080c8 100644 --- a/lang/java/libdb_java/java_except.i +++ b/lang/java/libdb_java/java_except.i @@ -92,6 +92,10 @@ static jthrowable __dbj_get_except(JNIEnv *jenv, return (jthrowable)(*jenv)->NewObject(jenv, heapfullex_class, heapfullex_construct, jmsg, ret, jdbenv); + case DB_META_CHKSUM_FAIL: + return (jthrowable)(*jenv)->NewObject(jenv, metachkfailex_class, + metachkfailex_construct, jmsg, ret, jdbenv); + case DB_REP_DUPMASTER: return (jthrowable)(*jenv)->NewObject(jenv, repdupmasterex_class, repdupmasterex_construct, diff --git a/lang/java/libdb_java/java_stat_auto.c b/lang/java/libdb_java/java_stat_auto.c index a17335f9..0d6d2068 100644 --- a/lang/java/libdb_java/java_stat_auto.c +++ b/lang/java/libdb_java/java_stat_auto.c @@ -4,7 +4,7 @@ * * See the file LICENSE for redistribution information. * - * Copyright (c) 2002, 2012 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015 Oracle and/or its affiliates. All rights reserved. */ static int __dbj_fill_bt_stat(JNIEnv *jnienv, jobject jobj, struct __db_bt_stat *statp) { @@ -16,6 +16,7 @@ static int __dbj_fill_bt_stat(JNIEnv *jnienv, JAVADB_STAT_INT(jnienv, jobj, bt_stat_bt_pagecnt_fid, statp, bt_pagecnt); JAVADB_STAT_INT(jnienv, jobj, bt_stat_bt_pagesize_fid, statp, bt_pagesize); JAVADB_STAT_INT(jnienv, jobj, bt_stat_bt_minkey_fid, statp, bt_minkey); + JAVADB_STAT_INT(jnienv, jobj, bt_stat_bt_nblobs_fid, statp, bt_nblobs); JAVADB_STAT_INT(jnienv, jobj, bt_stat_bt_re_len_fid, statp, bt_re_len); JAVADB_STAT_INT(jnienv, jobj, bt_stat_bt_re_pad_fid, statp, bt_re_pad); JAVADB_STAT_INT(jnienv, jobj, bt_stat_bt_levels_fid, statp, bt_levels); @@ -52,6 +53,7 @@ static int __dbj_fill_h_stat(JNIEnv *jnienv, JAVADB_STAT_INT(jnienv, jobj, h_stat_hash_metaflags_fid, statp, hash_metaflags); JAVADB_STAT_INT(jnienv, jobj, h_stat_hash_nkeys_fid, statp, hash_nkeys); JAVADB_STAT_INT(jnienv, jobj, h_stat_hash_ndata_fid, statp, hash_ndata); + JAVADB_STAT_INT(jnienv, jobj, h_stat_hash_nblobs_fid, statp, hash_nblobs); JAVADB_STAT_INT(jnienv, jobj, h_stat_hash_pagecnt_fid, statp, hash_pagecnt); JAVADB_STAT_INT(jnienv, jobj, h_stat_hash_pagesize_fid, statp, hash_pagesize); JAVADB_STAT_INT(jnienv, jobj, h_stat_hash_ffactor_fid, statp, hash_ffactor); @@ -71,6 +73,7 @@ static int __dbj_fill_heap_stat(JNIEnv *jnienv, JAVADB_STAT_INT(jnienv, jobj, heap_stat_heap_magic_fid, statp, heap_magic); JAVADB_STAT_INT(jnienv, jobj, heap_stat_heap_version_fid, statp, heap_version); JAVADB_STAT_INT(jnienv, jobj, heap_stat_heap_metaflags_fid, statp, heap_metaflags); + JAVADB_STAT_INT(jnienv, jobj, heap_stat_heap_nblobs_fid, statp, heap_nblobs); JAVADB_STAT_INT(jnienv, jobj, heap_stat_heap_nrecs_fid, statp, heap_nrecs); JAVADB_STAT_INT(jnienv, jobj, heap_stat_heap_pagecnt_fid, statp, heap_pagecnt); JAVADB_STAT_INT(jnienv, jobj, heap_stat_heap_pagesize_fid, statp, heap_pagesize); @@ -127,6 +130,8 @@ static int __dbj_fill_lock_stat(JNIEnv *jnienv, JAVADB_STAT_LONG(jnienv, jobj, lock_stat_st_lockers_nowait_fid, statp, st_lockers_nowait); JAVADB_STAT_LONG(jnienv, jobj, lock_stat_st_region_wait_fid, statp, st_region_wait); JAVADB_STAT_LONG(jnienv, jobj, lock_stat_st_region_nowait_fid, statp, st_region_nowait); + JAVADB_STAT_LONG(jnienv, jobj, lock_stat_st_nlockers_hit_fid, statp, st_nlockers_hit); + JAVADB_STAT_LONG(jnienv, jobj, lock_stat_st_nlockers_reused_fid, statp, st_nlockers_reused); JAVADB_STAT_INT(jnienv, jobj, lock_stat_st_hash_len_fid, statp, st_hash_len); JAVADB_STAT_LONG(jnienv, jobj, lock_stat_st_regsize_fid, statp, st_regsize); return (0); @@ -211,6 +216,7 @@ static int __dbj_fill_mpool_stat(JNIEnv *jnienv, JAVADB_STAT_LONG(jnienv, jobj, mpool_stat_st_mvcc_frozen_fid, statp, st_mvcc_frozen); JAVADB_STAT_LONG(jnienv, jobj, mpool_stat_st_mvcc_thawed_fid, statp, st_mvcc_thawed); JAVADB_STAT_LONG(jnienv, jobj, mpool_stat_st_mvcc_freed_fid, statp, st_mvcc_freed); + JAVADB_STAT_LONG(jnienv, jobj, mpool_stat_st_mvcc_reused_fid, statp, st_mvcc_reused); JAVADB_STAT_LONG(jnienv, jobj, mpool_stat_st_alloc_fid, statp, st_alloc); JAVADB_STAT_LONG(jnienv, jobj, mpool_stat_st_alloc_buckets_fid, statp, st_alloc_buckets); JAVADB_STAT_LONG(jnienv, jobj, mpool_stat_st_alloc_max_buckets_fid, statp, st_alloc_max_buckets); @@ -218,6 +224,8 @@ static int __dbj_fill_mpool_stat(JNIEnv *jnienv, JAVADB_STAT_LONG(jnienv, jobj, mpool_stat_st_alloc_max_pages_fid, statp, st_alloc_max_pages); JAVADB_STAT_LONG(jnienv, jobj, mpool_stat_st_io_wait_fid, statp, st_io_wait); JAVADB_STAT_LONG(jnienv, jobj, mpool_stat_st_sync_interrupted_fid, statp, st_sync_interrupted); + JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_oddfsize_detect_fid, statp, st_oddfsize_detect); + JAVADB_STAT_INT(jnienv, jobj, mpool_stat_st_oddfsize_resolve_fid, statp, st_oddfsize_resolve); JAVADB_STAT_LONG(jnienv, jobj, mpool_stat_st_regsize_fid, statp, st_regsize); JAVADB_STAT_LONG(jnienv, jobj, mpool_stat_st_regmax_fid, statp, st_regmax); return (0); @@ -258,6 +266,7 @@ static int __dbj_fill_qam_stat(JNIEnv *jnienv, static int __dbj_fill_rep_stat(JNIEnv *jnienv, jobject jobj, struct __db_rep_stat *statp) { JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_startup_complete_fid, statp, st_startup_complete); + JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_view_fid, statp, st_view); JAVADB_STAT_LONG(jnienv, jobj, rep_stat_st_log_queued_fid, statp, st_log_queued); JAVADB_STAT_INT(jnienv, jobj, rep_stat_st_status_fid, statp, st_status); JAVADB_STAT_LSN(jnienv, jobj, rep_stat_st_next_lsn_fid, statp, st_next_lsn); @@ -325,10 +334,17 @@ static int __dbj_fill_repmgr_stat(JNIEnv *jnienv, JAVADB_STAT_LONG(jnienv, jobj, repmgr_stat_st_perm_failed_fid, statp, st_perm_failed); JAVADB_STAT_LONG(jnienv, jobj, repmgr_stat_st_msgs_queued_fid, statp, st_msgs_queued); JAVADB_STAT_LONG(jnienv, jobj, repmgr_stat_st_msgs_dropped_fid, statp, st_msgs_dropped); + JAVADB_STAT_INT(jnienv, jobj, repmgr_stat_st_incoming_queue_gbytes_fid, statp, st_incoming_queue_gbytes); + JAVADB_STAT_INT(jnienv, jobj, repmgr_stat_st_incoming_queue_bytes_fid, statp, st_incoming_queue_bytes); + JAVADB_STAT_LONG(jnienv, jobj, repmgr_stat_st_incoming_msgs_dropped_fid, statp, st_incoming_msgs_dropped); JAVADB_STAT_LONG(jnienv, jobj, repmgr_stat_st_connection_drop_fid, statp, st_connection_drop); JAVADB_STAT_LONG(jnienv, jobj, repmgr_stat_st_connect_fail_fid, statp, st_connect_fail); - JAVADB_STAT_LONG(jnienv, jobj, repmgr_stat_st_elect_threads_fid, statp, st_elect_threads); - JAVADB_STAT_LONG(jnienv, jobj, repmgr_stat_st_max_elect_threads_fid, statp, st_max_elect_threads); + JAVADB_STAT_INT(jnienv, jobj, repmgr_stat_st_elect_threads_fid, statp, st_elect_threads); + JAVADB_STAT_INT(jnienv, jobj, repmgr_stat_st_max_elect_threads_fid, statp, st_max_elect_threads); + JAVADB_STAT_INT(jnienv, jobj, repmgr_stat_st_site_participants_fid, statp, st_site_participants); + JAVADB_STAT_INT(jnienv, jobj, repmgr_stat_st_site_total_fid, statp, st_site_total); + JAVADB_STAT_INT(jnienv, jobj, repmgr_stat_st_site_views_fid, statp, st_site_views); + JAVADB_STAT_LONG(jnienv, jobj, repmgr_stat_st_takeovers_fid, statp, st_takeovers); return (0); } static int __dbj_fill_seq_stat(JNIEnv *jnienv, diff --git a/lang/java/libdb_java/java_typemaps.i b/lang/java/libdb_java/java_typemaps.i index 31aacede..48baa306 100644 --- a/lang/java/libdb_java/java_typemaps.i +++ b/lang/java/libdb_java/java_typemaps.i @@ -69,6 +69,7 @@ struct __db_repmgr_sites { #define DbMpoolFile __db_mpoolfile #define DbSequence __db_sequence #define DbSite __db_site +#define DbStream __db_stream #define DbTxn __db_txn /* Suppress a compilation warning for an unused symbol */ @@ -91,6 +92,11 @@ typedef struct __dbt_locked { jsize array_len; } DBT_LOCKED; +struct __dbt_arr { + DBT *arr_ptr; + int len; +}; + static int __dbj_dbt_memcopy(DBT *dbt, u_int32_t offset, void *buf, u_int32_t size, u_int32_t flags) { DBT_LOCKED *ldbt = dbt->app_data; JNIEnv *jenv = ldbt->jenv; @@ -305,16 +311,150 @@ static void __dbj_dbt_release( return $null; /* An exception will be pending. */ }%} -/* Special cases for DBTs that may be null: DbEnv.rep_start, Db.compact Db.set_partition */ +/* Special cases for DBTs that may be null: DbEnv.rep_start, Db.compact */ %typemap(in) DBT *data_or_null (DBT_LOCKED ldbt) %{ if (__dbj_dbt_copyin(jenv, &ldbt, &$1, $input, 1) != 0) { return $null; /* An exception will be pending. */ }%} -%apply DBT *data_or_null {DBT *cdata, DBT *start, DBT *stop, DBT *end, DBT *db_put_data, DBT *keys}; +%apply DBT *data_or_null {DBT *cdata, DBT *start, DBT *stop, DBT *end, DBT *db_put_data}; %typemap(freearg) DBT * %{ __dbj_dbt_release(jenv, $input, $1, &ldbt$argnum); %} +/* Special case for Db.set_partition. */ +%typemap(in) DBT *keys { + DBT_LOCKED lresult; + DBT *dbt; + void *ptr, *retdata; + int cnt, i, ret; + u_int32_t retlen; + + if ($input == NULL) + $1 = NULL; + else { + /* Copy the DBT from Java to C. */ + if ((ret = __dbj_dbt_copyin(jenv, + &lresult, &dbt, $input, 0)) != 0) + /* An exception will be pending. */ + return $null; + + /* Get the number of DBT from the bulk buffer. */ + DB_MULTIPLE_INIT(ptr, dbt); + DB_MULTIPLE_NEXT(ptr, dbt, retdata, retlen); + cnt = 0; + while (ptr != NULL) { + cnt++; + DB_MULTIPLE_NEXT(ptr, dbt, retdata, retlen); + } + + /* Make an array of DBTs. */ + if ((ret = __os_malloc(NULL, + (cnt + 1) * sizeof(DBT), &$1)) != 0) { + __dbj_throw(jenv, ret, NULL, NULL, NULL); + goto err; + } + memset($1, 0, (cnt + 1) * sizeof(DBT)); + /* + * Save the key array size in the last entry so that it can + * be used later when free the key array and mark its flags + * as DB_DBT_BULK which is an internal flag that can't be + * passed by users. The last entry will not be read by the C + * call __partition_set since it only reads the first cnt + * DBTs from the key array. + */ + $1[cnt].size = sizeof(int); + $1[cnt].data = &cnt; + $1[cnt].flags = DB_DBT_BULK; + DB_MULTIPLE_INIT(ptr, dbt); + for (i = 0; i < cnt; i++) { + DB_MULTIPLE_NEXT(ptr, dbt, retdata, retlen); + if (retlen != 0) { + /* + * If there's data, we need to take a copy + * of it. + */ + $1[i].size = retlen; + if ((ret = __os_malloc(NULL, + $1[i].size, &$1[i].data)) != 0) { + __dbj_throw(jenv, + ret, NULL, NULL, NULL); + goto err; + } + memcpy($1[i].data, retdata, retlen); + } + } + +err: if (ret != 0) { + if ($1 != NULL) { + for (i = 0; i < cnt; i++) + __os_free(NULL, $1[i].data); + __os_free(NULL, $1); + } + return $null; + } + } +} + +%typemap(freearg) DBT *keys %{ +{ + int cnt, i; + + if ($1 != NULL) { + /* Get the array size. */ + cnt = 0; + while ($1[cnt].flags != DB_DBT_BULK) + cnt++; + for (i = 0; i < cnt; i++) + __os_free(NULL, $1[i].data); + __os_free(NULL, $1); + } +} +%} + +JAVA_TYPEMAP(struct __dbt_arr, com.sleepycat.db.DatabaseEntry, jobject) +%typemap(out) struct __dbt_arr { + DBT *dbt; + void *ptr; + int i, ret; + u_int32_t buflen; + + if ($1.arr_ptr == NULL || $1.len <= 0) + $result = NULL; + else { + /* Allocate the bulk buffer and make the bulk DBT. */ + for (i = 0, buflen = 0; i < $1.len; i++) + buflen += $1.arr_ptr[i].size * sizeof(u_int32_t); + buflen += ($1.len * 2 + 1) * sizeof(u_int32_t); + if ((ret = __os_malloc(NULL, sizeof(DBT), &dbt)) != 0) { + __dbj_throw(jenv, ret, NULL, NULL, NULL); + goto err; + } + if ((ret = __os_malloc(NULL, buflen, &dbt->data)) != 0) { + __dbj_throw(jenv, ret, NULL, NULL, NULL); + goto err; + } + dbt->size = dbt->ulen = buflen; + DB_MULTIPLE_INIT(ptr, dbt); + for (i = 0; i < $1.len; i++) + DB_MULTIPLE_WRITE_NEXT(ptr, dbt, + $1.arr_ptr[i].data, $1.arr_ptr[i].size); + + /* Map a bulk DBT into a DatabaseEntry. */ + $result = (*jenv)->NewObject(jenv, dbt_class, dbt_construct); + __dbj_dbt_copyout(jenv, dbt, NULL, $result); + if ($result == NULL) + goto err; + +err: if (dbt != NULL) { + if (dbt->data != NULL) + __os_free(NULL, dbt->data); + __os_free(NULL, dbt); + } + if (ret != 0 || $result == NULL) + return $null; + } +} + /* DB_TXN_TOKEN handling */ JAVA_TYPEMAP(DB_TXN_TOKEN *, byte[], jobject) @@ -331,13 +471,13 @@ JAVA_TYPEMAP(DB_TXN_TOKEN *, byte[], jobject) $1 = NULL; } else { $1 = &token; - (*jenv)->GetByteArrayRegion(jenv, (jbyteArray)$input, 0, DB_TXN_TOKEN_SIZE, $1->buf); + (*jenv)->GetByteArrayRegion(jenv, (jbyteArray)$input, 0, DB_TXN_TOKEN_SIZE, (jbyte *)$1->buf); } %} %typemap(out) DB_TXN_TOKEN * %{ if ($input != NULL) { - (*jenv)->SetByteArrayRegion(jenv, (jbyteArray)$input, 0, DB_TXN_TOKEN_SIZE, $1->buf); + (*jenv)->SetByteArrayRegion(jenv, (jbyteArray)$input, 0, DB_TXN_TOKEN_SIZE, (jbyte *)$1->buf); } %} @@ -392,7 +532,7 @@ JAVA_TYPEMAP(u_int *, long, jlong) %} %typemap(in) u_int %{ - $1 = $input; + $1 = (u_int)$input; %} JAVA_TYPEMAP(DB_KEY_RANGE *, com.sleepycat.db.KeyRange, jobject) @@ -481,6 +621,48 @@ JAVA_TYPEMAP(char **, String[], jobjectArray) } } +%define STRING_ARRAY_IN + int i, ret; + size_t sz; + + size = (*jenv)->GetArrayLength(jenv, $input); + sz = (size_t)(size + 1) * sizeof(char *); + if ((ret = __os_malloc(NULL, sz, &$1)) != 0) { + __dbj_throw(jenv, ret, NULL, NULL, NULL); + return $null; + } + /* Make a copy of each string. */ + for (i = 0; i < size; i++) { + jstring j_string = (jstring)(*jenv)->GetObjectArrayElement(jenv, $input, i); + const char * c_string = (*jenv)->GetStringUTFChars(jenv, j_string, 0); + sz = strlen(c_string) + 1; + if ((ret = __os_malloc(NULL, sz, &$1[i])) != 0) { + __dbj_throw(jenv, ret, NULL, NULL, NULL); + return $null; + } + strcpy($1[i], c_string); + (*jenv)->ReleaseStringUTFChars(jenv, j_string, c_string); + (*jenv)->DeleteLocalRef(jenv, j_string); + } + $1[i] = 0; +%enddef + +/* This cleans up the memory we malloc'd before the function call. */ +%typemap(freearg) char ** { + int i; + for (i = 0; i < size$argnum-1; i++) + __os_free(NULL, $1[i]); + __os_free(NULL, $1); +} + +%typemap(in) char ** (jint size) { + STRING_ARRAY_IN +} + +%typemap(in) const char ** (jint size) { + STRING_ARRAY_IN +} + JAVA_TYPEMAP(char **hostp, String, jobjectArray) JAVA_TYPEMAP(struct __db_lk_conflicts, byte[][], jobjectArray) @@ -834,11 +1016,14 @@ SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1commit(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { struct DbTxn *txn = (struct DbTxn *) 0 ; + DB_ENV *dbenv = (DB_ENV *) 0 ; + DB_REP_STAT *rep_stat = (DB_REP_STAT *) 0 ; ENV *env = (ENV *) 0 ; u_int32_t flags; DB_TXN_TOKEN token; db_ret_t result; db_ret_t result1; + db_ret_t result2; int is_nested, is_logging_enabled, is_rep_client, commit_token_enabled; (void)jcls; @@ -860,11 +1045,22 @@ Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1commit(JNIEnv *jenv, * client node. */ env = txn->mgrp->env; + dbenv = env->dbenv; is_nested = (txn->parent != NULL); is_logging_enabled = env->lg_handle != NULL; - is_rep_client = (env->rep_handle != NULL && - env->rep_handle->region != NULL && - F_ISSET((env->rep_handle->region), REP_F_CLIENT)); + /* + * It is an illegal configuration to enable Java and disable statistics + * or enable the small build, so Java should always have access to the + * stat function. + */ + is_rep_client = 0; + if (env->rep_handle != NULL && env->rep_handle->region != NULL) { + result2 = dbenv->rep_stat(dbenv, &rep_stat, 0); + if (DB_RETOK_STD(result2)) { + is_rep_client = (rep_stat->st_status == DB_REP_CLIENT); + free(rep_stat); + } + } commit_token_enabled = (!is_nested && is_logging_enabled && !is_rep_client); if (commit_token_enabled) { diff --git a/lang/java/libdb_java/java_util.i b/lang/java/libdb_java/java_util.i index 62855776..3273a0f9 100644 --- a/lang/java/libdb_java/java_util.i +++ b/lang/java/libdb_java/java_util.i @@ -77,7 +77,7 @@ static int __dbj_throw(JNIEnv *jenv, static JavaVM *javavm; static jclass db_class, dbc_class, dbenv_class, dbt_class, dblsn_class; -static jclass dbpreplist_class, dbtxn_class; +static jclass dbpreplist_class, dbstream_class, dbtxn_class; static jclass keyrange_class; static jclass bt_stat_class, compact_class, h_stat_class, heap_stat_class; static jclass lock_stat_class, log_stat_class, mpool_stat_class, mpool_fstat_class; @@ -87,7 +87,7 @@ static jclass seq_stat_class, txn_stat_class; static jclass txn_active_class; static jclass lock_class, lockreq_class; static jclass dbex_class, deadex_class, heapfullex_class, lockex_class, memex_class; -static jclass repdupmasterex_class, rephandledeadex_class; +static jclass metachkfailex_class, repdupmasterex_class, rephandledeadex_class; static jclass repholdelectionex_class, repjoinfailex_class; static jclass repleaseexpiredex_class; static jclass replockoutex_class, repunavailex_class; @@ -99,6 +99,7 @@ static jfieldID dbc_cptr_fid; static jfieldID dblsn_file_fid, dblsn_offset_fid; static jfieldID dbt_data_fid, dbt_data_nio_fid, dbt_size_fid, dbt_ulen_fid; static jfieldID dbt_dlen_fid, dbt_doff_fid, dbt_flags_fid, dbt_offset_fid; +static jfieldID dbstream_cptr_fid; static jfieldID kr_less_fid, kr_equal_fid, kr_greater_fid; static jfieldID lock_cptr_fid; static jfieldID lockreq_op_fid, lockreq_modeflag_fid, lockreq_timeout_fid; @@ -115,6 +116,7 @@ static jfieldID bt_stat_bt_ndata_fid; static jfieldID bt_stat_bt_pagecnt_fid; static jfieldID bt_stat_bt_pagesize_fid; static jfieldID bt_stat_bt_minkey_fid; +static jfieldID bt_stat_bt_nblobs_fid; static jfieldID bt_stat_bt_re_len_fid; static jfieldID bt_stat_bt_re_pad_fid; static jfieldID bt_stat_bt_levels_fid; @@ -143,6 +145,7 @@ static jfieldID h_stat_hash_version_fid; static jfieldID h_stat_hash_metaflags_fid; static jfieldID h_stat_hash_nkeys_fid; static jfieldID h_stat_hash_ndata_fid; +static jfieldID h_stat_hash_nblobs_fid; static jfieldID h_stat_hash_pagecnt_fid; static jfieldID h_stat_hash_pagesize_fid; static jfieldID h_stat_hash_ffactor_fid; @@ -158,6 +161,7 @@ static jfieldID h_stat_hash_dup_free_fid; static jfieldID heap_stat_heap_magic_fid; static jfieldID heap_stat_heap_version_fid; static jfieldID heap_stat_heap_metaflags_fid; +static jfieldID heap_stat_heap_nblobs_fid; static jfieldID heap_stat_heap_nrecs_fid; static jfieldID heap_stat_heap_pagecnt_fid; static jfieldID heap_stat_heap_pagesize_fid; @@ -210,6 +214,8 @@ static jfieldID lock_stat_st_lockers_wait_fid; static jfieldID lock_stat_st_lockers_nowait_fid; static jfieldID lock_stat_st_region_wait_fid; static jfieldID lock_stat_st_region_nowait_fid; +static jfieldID lock_stat_st_nlockers_hit_fid; +static jfieldID lock_stat_st_nlockers_reused_fid; static jfieldID lock_stat_st_hash_len_fid; static jfieldID lock_stat_st_regsize_fid; static jfieldID log_stat_st_magic_fid; @@ -282,6 +288,7 @@ static jfieldID mpool_stat_st_region_wait_fid; static jfieldID mpool_stat_st_mvcc_frozen_fid; static jfieldID mpool_stat_st_mvcc_thawed_fid; static jfieldID mpool_stat_st_mvcc_freed_fid; +static jfieldID mpool_stat_st_mvcc_reused_fid; static jfieldID mpool_stat_st_alloc_fid; static jfieldID mpool_stat_st_alloc_buckets_fid; static jfieldID mpool_stat_st_alloc_max_buckets_fid; @@ -289,6 +296,8 @@ static jfieldID mpool_stat_st_alloc_pages_fid; static jfieldID mpool_stat_st_alloc_max_pages_fid; static jfieldID mpool_stat_st_io_wait_fid; static jfieldID mpool_stat_st_sync_interrupted_fid; +static jfieldID mpool_stat_st_oddfsize_detect_fid; +static jfieldID mpool_stat_st_oddfsize_resolve_fid; static jfieldID mpool_stat_st_regsize_fid; static jfieldID mpool_stat_st_regmax_fid; static jfieldID mutex_stat_st_mutex_align_fid; @@ -317,6 +326,7 @@ static jfieldID qam_stat_qs_pgfree_fid; static jfieldID qam_stat_qs_first_recno_fid; static jfieldID qam_stat_qs_cur_recno_fid; static jfieldID rep_stat_st_startup_complete_fid; +static jfieldID rep_stat_st_view_fid; static jfieldID rep_stat_st_log_queued_fid; static jfieldID rep_stat_st_status_fid; static jfieldID rep_stat_st_next_lsn_fid; @@ -380,10 +390,17 @@ static jfieldID rep_stat_st_max_lease_usec_fid; static jfieldID repmgr_stat_st_perm_failed_fid; static jfieldID repmgr_stat_st_msgs_queued_fid; static jfieldID repmgr_stat_st_msgs_dropped_fid; +static jfieldID repmgr_stat_st_incoming_queue_gbytes_fid; +static jfieldID repmgr_stat_st_incoming_queue_bytes_fid; +static jfieldID repmgr_stat_st_incoming_msgs_dropped_fid; static jfieldID repmgr_stat_st_connection_drop_fid; static jfieldID repmgr_stat_st_connect_fail_fid; static jfieldID repmgr_stat_st_elect_threads_fid; static jfieldID repmgr_stat_st_max_elect_threads_fid; +static jfieldID repmgr_stat_st_site_participants_fid; +static jfieldID repmgr_stat_st_site_total_fid; +static jfieldID repmgr_stat_st_site_views_fid; +static jfieldID repmgr_stat_st_takeovers_fid; static jfieldID seq_stat_st_wait_fid; static jfieldID seq_stat_st_nowait_fid; static jfieldID seq_stat_st_current_fid; @@ -431,7 +448,8 @@ static jmethodID rep_stat_construct, repmgr_stat_construct, seq_stat_construct; static jmethodID txn_stat_construct, txn_active_construct; static jmethodID dbex_construct, deadex_construct, lockex_construct; static jmethodID heapfullex_construct, memex_construct, memex_update_method; -static jmethodID repdupmasterex_construct, rephandledeadex_construct; +static jmethodID metachkfailex_construct, repdupmasterex_construct; +static jmethodID rephandledeadex_construct; static jmethodID repholdelectionex_construct, repjoinfailex_construct; static jmethodID repmgr_siteinfo_construct, rephost_construct, repleaseexpiredex_construct; static jmethodID replockoutex_construct; @@ -443,7 +461,9 @@ static jmethodID lock_construct; static jmethodID app_dispatch_method, errcall_method, env_feedback_method; static jmethodID msgcall_method, paniccall_method, rep_transport_method; -static jmethodID panic_event_notify_method, rep_client_event_notify_method; +static jmethodID panic_event_notify_method; +static jmethodID rep_autotakeover_failed_event_notify_method; +static jmethodID rep_client_event_notify_method; static jmethodID rep_connect_broken_event_notify_method; static jmethodID rep_connect_established_event_notify_method; static jmethodID rep_connect_try_failed_event_notify_method; @@ -451,6 +471,7 @@ static jmethodID rep_dupmaster_event_notify_method; static jmethodID rep_elected_event_notify_method; static jmethodID rep_election_failed_event_notify_method; static jmethodID rep_init_done_event_notify_method; +static jmethodID rep_inqueue_full_event_notify_method; static jmethodID rep_join_failure_event_notify_method; static jmethodID rep_local_site_removed_notify_method; static jmethodID rep_master_event_notify_method; @@ -468,7 +489,7 @@ static jmethodID backup_write_method, bt_compare_method, bt_compress_method; static jmethodID bt_decompress_method, bt_prefix_method; static jmethodID db_feedback_method, dup_compare_method; static jmethodID foreignkey_nullify_method, h_compare_method, h_hash_method; -static jmethodID partition_method, seckey_create_method; +static jmethodID rep_view_method, partition_method, seckey_create_method; static jmethodID outputstream_write_method; @@ -482,6 +503,7 @@ const struct { { &dbt_class, DB_PKG "DatabaseEntry" }, { &dblsn_class, DB_PKG "LogSequenceNumber" }, { &dbpreplist_class, DB_PKG "PreparedTransaction" }, + { &dbstream_class, DB_PKG "internal/DbStream" }, { &dbtxn_class, DB_PKG "internal/DbTxn" }, { &bt_stat_class, DB_PKG "BtreeStats" }, @@ -509,6 +531,7 @@ const struct { { &heapfullex_class, DB_PKG "HeapFullException" }, { &lockex_class, DB_PKG "LockNotGrantedException" }, { &memex_class, DB_PKG "MemoryException" }, + { &metachkfailex_class, DB_PKG "MetaCheckSumFailException" }, { &repdupmasterex_class, DB_PKG "ReplicationDuplicateMasterException" }, { &rephandledeadex_class, DB_PKG "ReplicationHandleDeadException" }, { &repholdelectionex_class, DB_PKG "ReplicationHoldElectionException" }, @@ -540,6 +563,8 @@ const struct { { &dblsn_file_fid, &dblsn_class, "file", "I" }, { &dblsn_offset_fid, &dblsn_class, "offset", "I" }, + { &dbstream_cptr_fid, &dbstream_class, "swigCPtr", "J" }, + { &dbt_data_fid, &dbt_class, "data", "[B" }, { &dbt_data_nio_fid, &dbt_class, "data_nio", "Ljava/nio/ByteBuffer;" }, { &dbt_size_fid, &dbt_class, "size", "I" }, @@ -573,6 +598,7 @@ const struct { { &bt_stat_bt_pagecnt_fid, &bt_stat_class, "bt_pagecnt", "I" }, { &bt_stat_bt_pagesize_fid, &bt_stat_class, "bt_pagesize", "I" }, { &bt_stat_bt_minkey_fid, &bt_stat_class, "bt_minkey", "I" }, + { &bt_stat_bt_nblobs_fid, &bt_stat_class, "bt_nblobs", "I" }, { &bt_stat_bt_re_len_fid, &bt_stat_class, "bt_re_len", "I" }, { &bt_stat_bt_re_pad_fid, &bt_stat_class, "bt_re_pad", "I" }, { &bt_stat_bt_levels_fid, &bt_stat_class, "bt_levels", "I" }, @@ -601,6 +627,7 @@ const struct { { &h_stat_hash_metaflags_fid, &h_stat_class, "hash_metaflags", "I" }, { &h_stat_hash_nkeys_fid, &h_stat_class, "hash_nkeys", "I" }, { &h_stat_hash_ndata_fid, &h_stat_class, "hash_ndata", "I" }, + { &h_stat_hash_nblobs_fid, &h_stat_class, "hash_nblobs", "I" }, { &h_stat_hash_pagecnt_fid, &h_stat_class, "hash_pagecnt", "I" }, { &h_stat_hash_pagesize_fid, &h_stat_class, "hash_pagesize", "I" }, { &h_stat_hash_ffactor_fid, &h_stat_class, "hash_ffactor", "I" }, @@ -616,6 +643,7 @@ const struct { { &heap_stat_heap_magic_fid, &heap_stat_class, "heap_magic", "I" }, { &heap_stat_heap_version_fid, &heap_stat_class, "heap_version", "I" }, { &heap_stat_heap_metaflags_fid, &heap_stat_class, "heap_metaflags", "I" }, + { &heap_stat_heap_nblobs_fid, &heap_stat_class, "heap_nblobs", "I" }, { &heap_stat_heap_nrecs_fid, &heap_stat_class, "heap_nrecs", "I" }, { &heap_stat_heap_pagecnt_fid, &heap_stat_class, "heap_pagecnt", "I" }, { &heap_stat_heap_pagesize_fid, &heap_stat_class, "heap_pagesize", "I" }, @@ -668,6 +696,8 @@ const struct { { &lock_stat_st_lockers_nowait_fid, &lock_stat_class, "st_lockers_nowait", "J" }, { &lock_stat_st_region_wait_fid, &lock_stat_class, "st_region_wait", "J" }, { &lock_stat_st_region_nowait_fid, &lock_stat_class, "st_region_nowait", "J" }, + { &lock_stat_st_nlockers_hit_fid, &lock_stat_class, "st_nlockers_hit", "J" }, + { &lock_stat_st_nlockers_reused_fid, &lock_stat_class, "st_nlockers_reused", "J" }, { &lock_stat_st_hash_len_fid, &lock_stat_class, "st_hash_len", "I" }, { &lock_stat_st_regsize_fid, &lock_stat_class, "st_regsize", "J" }, { &log_stat_st_magic_fid, &log_stat_class, "st_magic", "I" }, @@ -740,6 +770,7 @@ const struct { { &mpool_stat_st_mvcc_frozen_fid, &mpool_stat_class, "st_mvcc_frozen", "J" }, { &mpool_stat_st_mvcc_thawed_fid, &mpool_stat_class, "st_mvcc_thawed", "J" }, { &mpool_stat_st_mvcc_freed_fid, &mpool_stat_class, "st_mvcc_freed", "J" }, + { &mpool_stat_st_mvcc_reused_fid, &mpool_stat_class, "st_mvcc_reused", "J" }, { &mpool_stat_st_alloc_fid, &mpool_stat_class, "st_alloc", "J" }, { &mpool_stat_st_alloc_buckets_fid, &mpool_stat_class, "st_alloc_buckets", "J" }, { &mpool_stat_st_alloc_max_buckets_fid, &mpool_stat_class, "st_alloc_max_buckets", "J" }, @@ -747,6 +778,8 @@ const struct { { &mpool_stat_st_alloc_max_pages_fid, &mpool_stat_class, "st_alloc_max_pages", "J" }, { &mpool_stat_st_io_wait_fid, &mpool_stat_class, "st_io_wait", "J" }, { &mpool_stat_st_sync_interrupted_fid, &mpool_stat_class, "st_sync_interrupted", "J" }, + { &mpool_stat_st_oddfsize_detect_fid, &mpool_stat_class, "st_oddfsize_detect", "I" }, + { &mpool_stat_st_oddfsize_resolve_fid, &mpool_stat_class, "st_oddfsize_resolve", "I" }, { &mpool_stat_st_regsize_fid, &mpool_stat_class, "st_regsize", "J" }, { &mpool_stat_st_regmax_fid, &mpool_stat_class, "st_regmax", "J" }, { &mutex_stat_st_mutex_align_fid, &mutex_stat_class, "st_mutex_align", "I" }, @@ -775,6 +808,7 @@ const struct { { &qam_stat_qs_first_recno_fid, &qam_stat_class, "qs_first_recno", "I" }, { &qam_stat_qs_cur_recno_fid, &qam_stat_class, "qs_cur_recno", "I" }, { &rep_stat_st_startup_complete_fid, &rep_stat_class, "st_startup_complete", "I" }, + { &rep_stat_st_view_fid, &rep_stat_class, "st_view", "I" }, { &rep_stat_st_log_queued_fid, &rep_stat_class, "st_log_queued", "J" }, { &rep_stat_st_status_fid, &rep_stat_class, "st_status", "I" }, { &rep_stat_st_next_lsn_fid, &rep_stat_class, "st_next_lsn", "L" DB_PKG "LogSequenceNumber;" }, @@ -838,10 +872,17 @@ const struct { { &repmgr_stat_st_perm_failed_fid, &repmgr_stat_class, "st_perm_failed", "J" }, { &repmgr_stat_st_msgs_queued_fid, &repmgr_stat_class, "st_msgs_queued", "J" }, { &repmgr_stat_st_msgs_dropped_fid, &repmgr_stat_class, "st_msgs_dropped", "J" }, + { &repmgr_stat_st_incoming_queue_gbytes_fid, &repmgr_stat_class, "st_incoming_queue_gbytes", "I" }, + { &repmgr_stat_st_incoming_queue_bytes_fid, &repmgr_stat_class, "st_incoming_queue_bytes", "I" }, + { &repmgr_stat_st_incoming_msgs_dropped_fid, &repmgr_stat_class, "st_incoming_msgs_dropped", "J" }, { &repmgr_stat_st_connection_drop_fid, &repmgr_stat_class, "st_connection_drop", "J" }, { &repmgr_stat_st_connect_fail_fid, &repmgr_stat_class, "st_connect_fail", "J" }, - { &repmgr_stat_st_elect_threads_fid, &repmgr_stat_class, "st_elect_threads", "J" }, - { &repmgr_stat_st_max_elect_threads_fid, &repmgr_stat_class, "st_max_elect_threads", "J" }, + { &repmgr_stat_st_elect_threads_fid, &repmgr_stat_class, "st_elect_threads", "I" }, + { &repmgr_stat_st_max_elect_threads_fid, &repmgr_stat_class, "st_max_elect_threads", "I" }, + { &repmgr_stat_st_site_participants_fid, &repmgr_stat_class, "st_site_participants", "I" }, + { &repmgr_stat_st_site_total_fid, &repmgr_stat_class, "st_site_total", "I" }, + { &repmgr_stat_st_site_views_fid, &repmgr_stat_class, "st_site_views", "I" }, + { &repmgr_stat_st_takeovers_fid, &repmgr_stat_class, "st_takeovers", "J" }, { &seq_stat_st_wait_fid, &seq_stat_class, "st_wait", "J" }, { &seq_stat_st_nowait_fid, &seq_stat_class, "st_nowait", "J" }, { &seq_stat_st_current_fid, &seq_stat_class, "st_current", "J" }, @@ -930,6 +971,8 @@ const struct { DB_PKG "internal/DbEnv;)V" }, { &memex_update_method, &memex_class, "updateDatabaseEntry", "(L" DB_PKG "DatabaseEntry;)V" }, + { &metachkfailex_construct, &metachkfailex_class, "<init>", + "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" }, { &repdupmasterex_construct, &repdupmasterex_class, "<init>", "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" }, { &rephandledeadex_construct, &rephandledeadex_class, "<init>", @@ -967,6 +1010,8 @@ const struct { "(III[B)I" }, { &panic_event_notify_method, &dbenv_class, "handle_panic_event_notify", "()V" }, + { &rep_autotakeover_failed_event_notify_method, &dbenv_class, + "handle_rep_autotakeover_failed_event_notify", "()V" }, { &rep_connect_broken_event_notify_method, &dbenv_class, "handle_rep_connect_broken_event_notify", "()V" }, { &rep_connect_established_event_notify_method, &dbenv_class, @@ -983,6 +1028,8 @@ const struct { "handle_rep_election_failed_event_notify" ,"()V" }, { &rep_init_done_event_notify_method, &dbenv_class, "handle_rep_init_done_event_notify" , "()V" }, + { &rep_inqueue_full_event_notify_method, &dbenv_class, + "handle_rep_inqueue_full_event_notify" , "()V" }, { &rep_join_failure_event_notify_method, &dbenv_class, "handle_rep_join_failure_event_notify" ,"()V" }, { &rep_master_event_notify_method, &dbenv_class, @@ -1045,6 +1092,8 @@ const struct { { &seckey_create_method, &db_class, "handle_seckey_create", "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;)[L" DB_PKG "DatabaseEntry;" }, + {&rep_view_method, &dbenv_class, "handle_rep_view", + "(Ljava/lang/String;I)Z" }, { &outputstream_write_method, &outputstream_class, "write", "([BII)V" } }; @@ -1153,7 +1202,7 @@ static void __dbj_detach() (void)(*javavm)->DetachCurrentThread(javavm); } -static jobject __dbj_wrap_DB_LSN(JNIEnv *jenv, DB_LSN *lsn) +static jobject __dbj_wrap_DB_LSN(JNIEnv *jenv, const DB_LSN *lsn) { return (*jenv)->NewObject(jenv, dblsn_class, dblsn_construct, lsn->file, lsn->offset); |