Commit 4edd04f5 authored by Bradley C. Kuszmaul's avatar Bradley C. Kuszmaul

Logging

git-svn-id: file:///svn/tokudb@462 c7de825b-a66e-492c-adef-691d508d4ae1
parent 168b8d8e
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
#define _DB_H #define _DB_H
/* This code generated by make_db_h. Copyright (c) 2007 Tokutek */ /* This code generated by make_db_h. Copyright (c) 2007 Tokutek */
#include <sys/types.h> #include <sys/types.h>
/*stdio is needed for the FILE* in db->verify*/
#include <stdio.h>
#if defined(__cplusplus) #if defined(__cplusplus)
extern "C" { extern "C" {
#endif #endif
......
#include <unistd.h> #include <unistd.h>
#include "brttypes.h"
#include "log-internal.h" #include "log-internal.h"
#include "wbuf.h" #include "wbuf.h"
#include "memory.h" #include "memory.h"
#include "../src/ydb-internal.h"
#include <dirent.h> #include <dirent.h>
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
...@@ -131,16 +131,22 @@ n ...@@ -131,16 +131,22 @@ n
} }
#endif #endif
int tokulogger_log_phys_add_or_delete_in_leaf (TOKUTXN txn, diskoff diskoff, int is_add, const struct kv_pair *pair) { int tokulogger_log_phys_add_or_delete_in_leaf (DB *db, TOKUTXN txn, diskoff diskoff, int is_add, const struct kv_pair *pair) {
if (txn==0) return 0; if (txn==0) return 0;
int keylen = pair->keylen; int keylen = pair->keylen;
int vallen = pair->vallen; int vallen = pair->vallen;
int buflen=30+keylen+vallen; int buflen=(keylen+vallen+4+4 // the key and value
+1 // log command
+8 // txnid
+8 // fileid
+8 // diskoff
);
unsigned char buf[buflen]; unsigned char buf[buflen];
struct wbuf wbuf; struct wbuf wbuf;
wbuf_init(&wbuf, buf, buflen) ; wbuf_init(&wbuf, buf, buflen) ;
wbuf_char(&wbuf, is_add ? LT_INSERT_WITH_NO_OVERWRITE : LT_DELETE); wbuf_char(&wbuf, is_add ? LT_INSERT_WITH_NO_OVERWRITE : LT_DELETE);
wbuf_txnid(&wbuf, txn->txnid64); wbuf_txnid(&wbuf, txn->txnid64);
wbuf_fileid(&wbuf, db->i->fileid);
wbuf_diskoff(&wbuf, diskoff); wbuf_diskoff(&wbuf, diskoff);
wbuf_bytes(&wbuf, kv_pair_key_const(pair), keylen); wbuf_bytes(&wbuf, kv_pair_key_const(pair), keylen);
wbuf_bytes(&wbuf, kv_pair_val_const(pair), vallen); wbuf_bytes(&wbuf, kv_pair_val_const(pair), vallen);
......
#ifndef TOKULOGGGER_H #ifndef TOKULOGGGER_H
#define TOKULOGGGER_H #define TOKULOGGGER_H
#include "../include/db.h"
#include "brttypes.h"
#include "kv-pair.h" #include "kv-pair.h"
typedef struct tokulogger *TOKULOGGER; typedef struct tokulogger *TOKULOGGER;
typedef struct tokutxn *TOKUTXN; typedef struct tokutxn *TOKUTXN;
...@@ -7,7 +9,7 @@ int tokulogger_create_and_open_logger (const char *directory, TOKULOGGER *result ...@@ -7,7 +9,7 @@ int tokulogger_create_and_open_logger (const char *directory, TOKULOGGER *result
int tokulogger_log_bytes(TOKULOGGER logger, int nbytes, void *bytes); int tokulogger_log_bytes(TOKULOGGER logger, int nbytes, void *bytes);
int tokulogger_log_close(TOKULOGGER *logger); int tokulogger_log_close(TOKULOGGER *logger);
int tokulogger_log_phys_add_or_delete_in_leaf (TOKUTXN txn, diskoff diskoff, int is_add, const struct kv_pair *pair); int tokulogger_log_phys_add_or_delete_in_leaf (DB *db, TOKUTXN txn, diskoff diskoff, int is_add, const struct kv_pair *pair);
int tokulogger_log_commit (TOKUTXN txn); int tokulogger_log_commit (TOKUTXN txn);
......
...@@ -737,7 +737,7 @@ int pma_insert (PMA pma, DBT *k, DBT *v, DB* db, TOKUTXN txn, diskoff diskoff) { ...@@ -737,7 +737,7 @@ int pma_insert (PMA pma, DBT *k, DBT *v, DB* db, TOKUTXN txn, diskoff diskoff) {
pma_mfree_kv_pair(pma, pma->pairs[idx]); pma_mfree_kv_pair(pma, pma->pairs[idx]);
pma->pairs[idx] = pma_malloc_kv_pair(pma, k->data, k->size, v->data, v->size); pma->pairs[idx] = pma_malloc_kv_pair(pma, k->data, k->size, v->data, v->size);
assert(pma->pairs[idx]); assert(pma->pairs[idx]);
int r = tokulogger_log_phys_add_or_delete_in_leaf(txn, diskoff, 0, pma->pairs[idx]); int r = tokulogger_log_phys_add_or_delete_in_leaf(db, txn, diskoff, 0, pma->pairs[idx]);
return r; return r;
} else } else
return BRT_ALREADY_THERE; /* It is already here. Return an error. */ return BRT_ALREADY_THERE; /* It is already here. Return an error. */
...@@ -750,7 +750,7 @@ int pma_insert (PMA pma, DBT *k, DBT *v, DB* db, TOKUTXN txn, diskoff diskoff) { ...@@ -750,7 +750,7 @@ int pma_insert (PMA pma, DBT *k, DBT *v, DB* db, TOKUTXN txn, diskoff diskoff) {
pma->pairs[idx] = pma_malloc_kv_pair(pma, k->data, k->size, v->data, v->size); pma->pairs[idx] = pma_malloc_kv_pair(pma, k->data, k->size, v->data, v->size);
assert(pma->pairs[idx]); assert(pma->pairs[idx]);
pma->n_pairs_present++; pma->n_pairs_present++;
return tokulogger_log_phys_add_or_delete_in_leaf(txn, diskoff, 1, pma->pairs[idx]); return tokulogger_log_phys_add_or_delete_in_leaf(db, txn, diskoff, 1, pma->pairs[idx]);
} }
int pma_delete (PMA pma, DBT *k, DB *db) { int pma_delete (PMA pma, DBT *k, DB *db) {
...@@ -866,7 +866,7 @@ int pma_insert_or_replace (PMA pma, DBT *k, DBT *v, ...@@ -866,7 +866,7 @@ int pma_insert_or_replace (PMA pma, DBT *k, DBT *v,
if (0==pma->compare_fun(db, k, fill_dbt(&k2, kv->key, kv->keylen))) { if (0==pma->compare_fun(db, k, fill_dbt(&k2, kv->key, kv->keylen))) {
if (!kv_pair_deleted(pma->pairs[idx])) { if (!kv_pair_deleted(pma->pairs[idx])) {
*replaced_v_size = kv->vallen; *replaced_v_size = kv->vallen;
r=tokulogger_log_phys_add_or_delete_in_leaf(txn, diskoff, 0, kv); r=tokulogger_log_phys_add_or_delete_in_leaf(db, txn, diskoff, 0, kv);
if (r!=0) return r; if (r!=0) return r;
} }
if (v->size == (unsigned int) kv_pair_vallen(kv)) { if (v->size == (unsigned int) kv_pair_vallen(kv)) {
...@@ -876,7 +876,7 @@ int pma_insert_or_replace (PMA pma, DBT *k, DBT *v, ...@@ -876,7 +876,7 @@ int pma_insert_or_replace (PMA pma, DBT *k, DBT *v,
pma->pairs[idx] = pma_malloc_kv_pair(pma, k->data, k->size, v->data, v->size); pma->pairs[idx] = pma_malloc_kv_pair(pma, k->data, k->size, v->data, v->size);
assert(pma->pairs[idx]); assert(pma->pairs[idx]);
} }
r = tokulogger_log_phys_add_or_delete_in_leaf(txn, diskoff, 0, pma->pairs[idx]); r = tokulogger_log_phys_add_or_delete_in_leaf(db, txn, diskoff, 0, pma->pairs[idx]);
return r; return r;
} }
} }
...@@ -890,7 +890,7 @@ int pma_insert_or_replace (PMA pma, DBT *k, DBT *v, ...@@ -890,7 +890,7 @@ int pma_insert_or_replace (PMA pma, DBT *k, DBT *v,
pma->n_pairs_present++; pma->n_pairs_present++;
*replaced_v_size = -1; *replaced_v_size = -1;
//printf("%s:%d txn=%p\n", __FILE__, __LINE__, txn); //printf("%s:%d txn=%p\n", __FILE__, __LINE__, txn);
r = tokulogger_log_phys_add_or_delete_in_leaf(txn, diskoff, 1, pma->pairs[idx]); r = tokulogger_log_phys_add_or_delete_in_leaf(db, txn, diskoff, 1, pma->pairs[idx]);
return r; return r;
} }
......
...@@ -27,3 +27,5 @@ test_log1.bdb_link: test_log1.c ...@@ -27,3 +27,5 @@ test_log1.bdb_link: test_log1.c
test_log1.tokudb_link: test_log1.c test_log1.tokudb_link: test_log1.c
cc -Wall -Werror -O2 -g test_log1.c -o $@ $(LOADLIBES) cc -Wall -Werror -O2 -g test_log1.c -o $@ $(LOADLIBES)
clean:
rm -f test_log0 test_log1 test_db_close_no_open test_db_version
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#include <assert.h> #include <assert.h>
#include <brt.h> #include <brt.h>
#include <db.h> #include "ydb-internal.h"
#include <errno.h> #include <errno.h>
#include <limits.h> #include <limits.h>
#include <stdarg.h> #include <stdarg.h>
...@@ -18,27 +18,6 @@ ...@@ -18,27 +18,6 @@
#include "log.h" #include "log.h"
#include "memory.h" #include "memory.h"
struct db_header {
int n_databases; // Or there can be >=1 named databases. This is the count.
char *database_names; // These are the names
BRT *database_brts; // These
};
struct __toku_db_internal {
int freed;
int (*bt_compare)(DB *, const DBT *, const DBT *);
struct db_header *header;
int database_number; // -1 if it is the single unnamed database. Nonnengative number otherwise.
DB_ENV *env;
char *full_fname;
char *database_name;
//int fd;
u_int32_t open_flags;
int open_mode;
BRT brt;
int is_db_dup;
};
static inline void *malloc_zero(size_t size) { static inline void *malloc_zero(size_t size) {
void *vp = toku_malloc(size); void *vp = toku_malloc(size);
if (vp) if (vp)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment