mirror of
https://github.com/MariaDB/server.git
synced 2025-02-02 03:51:50 +01:00
Addresses #1396
Merge tokudb.1396 back into main git-svn-id: file:///svn/toku/tokudb@9110 c7de825b-a66e-492c-adef-691d508d4ae1
This commit is contained in:
parent
14bdceffe6
commit
83eee5663a
54 changed files with 1670 additions and 1360 deletions
|
@ -102,6 +102,7 @@ typedef enum {
|
||||||
/* TOKUDB specific error codes */
|
/* TOKUDB specific error codes */
|
||||||
#define TOKUDB_OUT_OF_LOCKS -100000
|
#define TOKUDB_OUT_OF_LOCKS -100000
|
||||||
#define TOKUDB_SUCCEEDED_EARLY -100001
|
#define TOKUDB_SUCCEEDED_EARLY -100001
|
||||||
|
#define TOKUDB_DIRTY_DICTIONARY -100004
|
||||||
/* in wrap mode, top-level function txn_begin is renamed, but the field isn't renamed, so we have to hack it here.*/
|
/* in wrap mode, top-level function txn_begin is renamed, but the field isn't renamed, so we have to hack it here.*/
|
||||||
#ifdef _TOKUDB_WRAP_H
|
#ifdef _TOKUDB_WRAP_H
|
||||||
#undef txn_begin
|
#undef txn_begin
|
||||||
|
|
|
@ -104,6 +104,7 @@ typedef enum {
|
||||||
/* TOKUDB specific error codes */
|
/* TOKUDB specific error codes */
|
||||||
#define TOKUDB_OUT_OF_LOCKS -100000
|
#define TOKUDB_OUT_OF_LOCKS -100000
|
||||||
#define TOKUDB_SUCCEEDED_EARLY -100001
|
#define TOKUDB_SUCCEEDED_EARLY -100001
|
||||||
|
#define TOKUDB_DIRTY_DICTIONARY -100004
|
||||||
/* in wrap mode, top-level function txn_begin is renamed, but the field isn't renamed, so we have to hack it here.*/
|
/* in wrap mode, top-level function txn_begin is renamed, but the field isn't renamed, so we have to hack it here.*/
|
||||||
#ifdef _TOKUDB_WRAP_H
|
#ifdef _TOKUDB_WRAP_H
|
||||||
#undef txn_begin
|
#undef txn_begin
|
||||||
|
|
|
@ -105,6 +105,7 @@ typedef enum {
|
||||||
/* TOKUDB specific error codes */
|
/* TOKUDB specific error codes */
|
||||||
#define TOKUDB_OUT_OF_LOCKS -100000
|
#define TOKUDB_OUT_OF_LOCKS -100000
|
||||||
#define TOKUDB_SUCCEEDED_EARLY -100001
|
#define TOKUDB_SUCCEEDED_EARLY -100001
|
||||||
|
#define TOKUDB_DIRTY_DICTIONARY -100004
|
||||||
/* in wrap mode, top-level function txn_begin is renamed, but the field isn't renamed, so we have to hack it here.*/
|
/* in wrap mode, top-level function txn_begin is renamed, but the field isn't renamed, so we have to hack it here.*/
|
||||||
#ifdef _TOKUDB_WRAP_H
|
#ifdef _TOKUDB_WRAP_H
|
||||||
#undef txn_begin
|
#undef txn_begin
|
||||||
|
|
|
@ -105,6 +105,7 @@ typedef enum {
|
||||||
/* TOKUDB specific error codes */
|
/* TOKUDB specific error codes */
|
||||||
#define TOKUDB_OUT_OF_LOCKS -100000
|
#define TOKUDB_OUT_OF_LOCKS -100000
|
||||||
#define TOKUDB_SUCCEEDED_EARLY -100001
|
#define TOKUDB_SUCCEEDED_EARLY -100001
|
||||||
|
#define TOKUDB_DIRTY_DICTIONARY -100004
|
||||||
/* in wrap mode, top-level function txn_begin is renamed, but the field isn't renamed, so we have to hack it here.*/
|
/* in wrap mode, top-level function txn_begin is renamed, but the field isn't renamed, so we have to hack it here.*/
|
||||||
#ifdef _TOKUDB_WRAP_H
|
#ifdef _TOKUDB_WRAP_H
|
||||||
#undef txn_begin
|
#undef txn_begin
|
||||||
|
|
|
@ -11,9 +11,9 @@ extern "C" {
|
||||||
#define TOKUDB 1
|
#define TOKUDB 1
|
||||||
#define DB_VERSION_MAJOR 4
|
#define DB_VERSION_MAJOR 4
|
||||||
#define DB_VERSION_MINOR 6
|
#define DB_VERSION_MINOR 6
|
||||||
#define DB_VERSION_PATCH 21
|
#define DB_VERSION_PATCH 19
|
||||||
#ifndef _TOKUDB_WRAP_H
|
#ifndef _TOKUDB_WRAP_H
|
||||||
#define DB_VERSION_STRING "Tokutek: TokuDB 4.6.21"
|
#define DB_VERSION_STRING "Tokutek: TokuDB 4.6.19"
|
||||||
#else
|
#else
|
||||||
#define DB_VERSION_STRING_ydb "Tokutek: TokuDB (wrapped bdb)"
|
#define DB_VERSION_STRING_ydb "Tokutek: TokuDB (wrapped bdb)"
|
||||||
#endif
|
#endif
|
||||||
|
@ -106,6 +106,7 @@ typedef enum {
|
||||||
/* TOKUDB specific error codes */
|
/* TOKUDB specific error codes */
|
||||||
#define TOKUDB_OUT_OF_LOCKS -100000
|
#define TOKUDB_OUT_OF_LOCKS -100000
|
||||||
#define TOKUDB_SUCCEEDED_EARLY -100001
|
#define TOKUDB_SUCCEEDED_EARLY -100001
|
||||||
|
#define TOKUDB_DIRTY_DICTIONARY -100004
|
||||||
/* in wrap mode, top-level function txn_begin is renamed, but the field isn't renamed, so we have to hack it here.*/
|
/* in wrap mode, top-level function txn_begin is renamed, but the field isn't renamed, so we have to hack it here.*/
|
||||||
#ifdef _TOKUDB_WRAP_H
|
#ifdef _TOKUDB_WRAP_H
|
||||||
#undef txn_begin
|
#undef txn_begin
|
||||||
|
|
|
@ -30,8 +30,9 @@ void print_db_notices (void) {
|
||||||
#define dodefine(name) printf("#define %s %d\n", #name, name)
|
#define dodefine(name) printf("#define %s %d\n", #name, name)
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
TOKUDB_OUT_OF_LOCKS = -100000,
|
TOKUDB_OUT_OF_LOCKS = -100000,
|
||||||
TOKUDB_SUCCEEDED_EARLY = -100001
|
TOKUDB_SUCCEEDED_EARLY = -100001,
|
||||||
|
TOKUDB_DIRTY_DICTIONARY = -100004
|
||||||
};
|
};
|
||||||
|
|
||||||
void print_defines (void) {
|
void print_defines (void) {
|
||||||
|
@ -138,6 +139,7 @@ void print_defines (void) {
|
||||||
printf("/* TOKUDB specific error codes */\n");
|
printf("/* TOKUDB specific error codes */\n");
|
||||||
dodefine(TOKUDB_OUT_OF_LOCKS);
|
dodefine(TOKUDB_OUT_OF_LOCKS);
|
||||||
dodefine(TOKUDB_SUCCEEDED_EARLY);
|
dodefine(TOKUDB_SUCCEEDED_EARLY);
|
||||||
|
dodefine(TOKUDB_DIRTY_DICTIONARY);
|
||||||
}
|
}
|
||||||
|
|
||||||
//#define DECL_LIMIT 100
|
//#define DECL_LIMIT 100
|
||||||
|
|
|
@ -11,9 +11,9 @@ extern "C" {
|
||||||
#define TOKUDB 1
|
#define TOKUDB 1
|
||||||
#define DB_VERSION_MAJOR 4
|
#define DB_VERSION_MAJOR 4
|
||||||
#define DB_VERSION_MINOR 6
|
#define DB_VERSION_MINOR 6
|
||||||
#define DB_VERSION_PATCH 21
|
#define DB_VERSION_PATCH 19
|
||||||
#ifndef _TOKUDB_WRAP_H
|
#ifndef _TOKUDB_WRAP_H
|
||||||
#define DB_VERSION_STRING "Tokutek: TokuDB 4.6.21"
|
#define DB_VERSION_STRING "Tokutek: TokuDB 4.6.19"
|
||||||
#else
|
#else
|
||||||
#define DB_VERSION_STRING_ydb "Tokutek: TokuDB (wrapped bdb)"
|
#define DB_VERSION_STRING_ydb "Tokutek: TokuDB (wrapped bdb)"
|
||||||
#endif
|
#endif
|
||||||
|
@ -106,6 +106,7 @@ typedef enum {
|
||||||
/* TOKUDB specific error codes */
|
/* TOKUDB specific error codes */
|
||||||
#define TOKUDB_OUT_OF_LOCKS -100000
|
#define TOKUDB_OUT_OF_LOCKS -100000
|
||||||
#define TOKUDB_SUCCEEDED_EARLY -100001
|
#define TOKUDB_SUCCEEDED_EARLY -100001
|
||||||
|
#define TOKUDB_DIRTY_DICTIONARY -100004
|
||||||
/* in wrap mode, top-level function txn_begin is renamed, but the field isn't renamed, so we have to hack it here.*/
|
/* in wrap mode, top-level function txn_begin is renamed, but the field isn't renamed, so we have to hack it here.*/
|
||||||
#ifdef _TOKUDB_WRAP_H
|
#ifdef _TOKUDB_WRAP_H
|
||||||
#undef txn_begin
|
#undef txn_begin
|
||||||
|
|
2537
newbrt/brt.c
2537
newbrt/brt.c
File diff suppressed because it is too large
Load diff
|
@ -128,6 +128,7 @@ struct cachefile {
|
||||||
* every record in the transaction, we'll be ok. Hence we use a 64-bit counter to make sure we don't run out.
|
* every record in the transaction, we'll be ok. Hence we use a 64-bit counter to make sure we don't run out.
|
||||||
*/
|
*/
|
||||||
int fd; /* Bug: If a file is opened read-only, then it is stuck in read-only. If it is opened read-write, then subsequent writers can write to it too. */
|
int fd; /* Bug: If a file is opened read-only, then it is stuck in read-only. If it is opened read-write, then subsequent writers can write to it too. */
|
||||||
|
BOOL is_dirty; /* Has this been written to since it was closed? */
|
||||||
CACHETABLE cachetable;
|
CACHETABLE cachetable;
|
||||||
struct fileid fileid;
|
struct fileid fileid;
|
||||||
FILENUM filenum;
|
FILENUM filenum;
|
||||||
|
@ -220,7 +221,14 @@ int toku_cachetable_openfd (CACHEFILE *cfptr, CACHETABLE ct, int fd, const char
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
CACHEFILE MALLOC(newcf);
|
BOOL was_dirty = FALSE;
|
||||||
|
r = toku_graceful_open(fname, &was_dirty);
|
||||||
|
if (r!=0) {
|
||||||
|
close(fd);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
CACHEFILE MALLOC(newcf);
|
||||||
newcf->cachetable = ct;
|
newcf->cachetable = ct;
|
||||||
newcf->filenum.fileid = next_filenum_to_use.fileid++;
|
newcf->filenum.fileid = next_filenum_to_use.fileid++;
|
||||||
cachefile_init_filenum(newcf, fd, fname, fileid);
|
cachefile_init_filenum(newcf, fd, fname, fileid);
|
||||||
|
@ -231,6 +239,7 @@ int toku_cachetable_openfd (CACHEFILE *cfptr, CACHETABLE ct, int fd, const char
|
||||||
newcf->userdata = 0;
|
newcf->userdata = 0;
|
||||||
newcf->close_userdata = 0;
|
newcf->close_userdata = 0;
|
||||||
newcf->checkpoint_userdata = 0;
|
newcf->checkpoint_userdata = 0;
|
||||||
|
newcf->is_dirty = was_dirty;
|
||||||
|
|
||||||
*cfptr = newcf;
|
*cfptr = newcf;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -314,13 +323,20 @@ int toku_cachefile_close (CACHEFILE *cfp, TOKULOGGER logger, char **error_string
|
||||||
if (cf->refcount==0) {
|
if (cf->refcount==0) {
|
||||||
int r;
|
int r;
|
||||||
if ((r = cachetable_flush_cachefile(ct, cf))) {
|
if ((r = cachetable_flush_cachefile(ct, cf))) {
|
||||||
|
//This is not a graceful shutdown; do not set file as clean.
|
||||||
cachetable_unlock(ct);
|
cachetable_unlock(ct);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
if (cf->close_userdata && (r = cf->close_userdata(cf, cf->userdata, error_string))) {
|
if (cf->close_userdata && (r = cf->close_userdata(cf, cf->userdata, error_string))) {
|
||||||
|
//This is not a graceful shutdown; do not set file as clean.
|
||||||
cachetable_unlock(ct);
|
cachetable_unlock(ct);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
//Graceful shutdown. 'clean' the file.
|
||||||
|
if ((r = toku_graceful_close(cf))) {
|
||||||
|
cachetable_unlock(ct);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
cf->close_userdata = NULL;
|
cf->close_userdata = NULL;
|
||||||
cf->checkpoint_userdata = NULL;
|
cf->checkpoint_userdata = NULL;
|
||||||
cf->userdata = NULL;
|
cf->userdata = NULL;
|
||||||
|
@ -334,8 +350,7 @@ int toku_cachefile_close (CACHEFILE *cfp, TOKULOGGER logger, char **error_string
|
||||||
//BYTESTRING bs = {.len=strlen(cf->fname), .data=cf->fname};
|
//BYTESTRING bs = {.len=strlen(cf->fname), .data=cf->fname};
|
||||||
//r = toku_log_cfclose(logger, 0, 0, bs, cf->filenum);
|
//r = toku_log_cfclose(logger, 0, 0, bs, cf->filenum);
|
||||||
}
|
}
|
||||||
if (cf->fname)
|
if (cf->fname) toku_free(cf->fname);
|
||||||
toku_free(cf->fname);
|
|
||||||
toku_free(cf);
|
toku_free(cf);
|
||||||
*cfp=0;
|
*cfp=0;
|
||||||
return r;
|
return r;
|
||||||
|
@ -1039,6 +1054,7 @@ static int cachetable_flush_cachefile(CACHETABLE ct, CACHEFILE cf) {
|
||||||
// are dirty. pairs in the READING or WRITING states are already in the
|
// are dirty. pairs in the READING or WRITING states are already in the
|
||||||
// work queue.
|
// work queue.
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
for (i=0; i < ct->table_size; i++) {
|
for (i=0; i < ct->table_size; i++) {
|
||||||
PAIR p;
|
PAIR p;
|
||||||
for (p = ct->table[i]; p; p = p->hash_chain) {
|
for (p = ct->table[i]; p; p = p->hash_chain) {
|
||||||
|
@ -1362,3 +1378,239 @@ int toku_cachefile_redirect_nullfd (CACHEFILE cf) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static toku_pthread_mutex_t graceful_mutex = TOKU_PTHREAD_MUTEX_INITIALIZER;
|
||||||
|
static int graceful_is_locked=0;
|
||||||
|
|
||||||
|
void toku_graceful_lock_init(void) {
|
||||||
|
int r = toku_pthread_mutex_init(&graceful_mutex, NULL); assert(r == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void toku_graceful_lock_destroy(void) {
|
||||||
|
int r = toku_pthread_mutex_destroy(&graceful_mutex); assert(r == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
lock_for_graceful (void) {
|
||||||
|
// Locks the graceful_mutex.
|
||||||
|
int r = toku_pthread_mutex_lock(&graceful_mutex);
|
||||||
|
assert(r==0);
|
||||||
|
graceful_is_locked = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
unlock_for_graceful (void) {
|
||||||
|
graceful_is_locked = 0;
|
||||||
|
int r = toku_pthread_mutex_unlock(&graceful_mutex);
|
||||||
|
assert(r==0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
graceful_open_get_append_fd(const char *db_fname, BOOL *is_dirtyp, BOOL *create) {
|
||||||
|
BOOL clean_exists;
|
||||||
|
BOOL dirty_exists;
|
||||||
|
char cleanbuf[strlen(db_fname) + sizeof(".clean")];
|
||||||
|
char dirtybuf[strlen(db_fname) + sizeof(".dirty")];
|
||||||
|
|
||||||
|
sprintf(cleanbuf, "%s.clean", db_fname);
|
||||||
|
sprintf(dirtybuf, "%s.dirty", db_fname);
|
||||||
|
|
||||||
|
struct stat tmpbuf;
|
||||||
|
clean_exists = stat(cleanbuf, &tmpbuf) == 0;
|
||||||
|
dirty_exists = stat(dirtybuf, &tmpbuf) == 0;
|
||||||
|
mode_t mode = S_IRWXU|S_IRWXG|S_IRWXO;
|
||||||
|
int r = 0;
|
||||||
|
|
||||||
|
*create = FALSE;
|
||||||
|
if (dirty_exists && clean_exists) {
|
||||||
|
r = unlink(cleanbuf);
|
||||||
|
clean_exists = FALSE;
|
||||||
|
}
|
||||||
|
if (r==0) {
|
||||||
|
if (!dirty_exists && !clean_exists) {
|
||||||
|
*create = TRUE;
|
||||||
|
dirty_exists = TRUE;
|
||||||
|
}
|
||||||
|
if (dirty_exists) {
|
||||||
|
*is_dirtyp = TRUE;
|
||||||
|
r = open(dirtybuf, O_WRONLY | O_CREAT | O_BINARY | O_APPEND, mode);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
assert(clean_exists);
|
||||||
|
*is_dirtyp = FALSE;
|
||||||
|
r = open(cleanbuf, O_WRONLY | O_CREAT | O_BINARY | O_APPEND, mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
graceful_close_get_append_fd(const char *db_fname, BOOL *db_missing) {
|
||||||
|
BOOL clean_exists;
|
||||||
|
BOOL dirty_exists;
|
||||||
|
BOOL db_exists;
|
||||||
|
char cleanbuf[strlen(db_fname) + sizeof(".clean")];
|
||||||
|
char dirtybuf[strlen(db_fname) + sizeof(".dirty")];
|
||||||
|
|
||||||
|
sprintf(cleanbuf, "%s.clean", db_fname);
|
||||||
|
sprintf(dirtybuf, "%s.dirty", db_fname);
|
||||||
|
|
||||||
|
struct stat tmpbuf;
|
||||||
|
clean_exists = stat(cleanbuf, &tmpbuf) == 0;
|
||||||
|
dirty_exists = stat(dirtybuf, &tmpbuf) == 0;
|
||||||
|
db_exists = stat(db_fname, &tmpbuf) == 0;
|
||||||
|
mode_t mode = S_IRWXU|S_IRWXG|S_IRWXO;
|
||||||
|
int r = 0;
|
||||||
|
|
||||||
|
if (dirty_exists) {
|
||||||
|
if (clean_exists) r = unlink(dirtybuf);
|
||||||
|
else r = rename(dirtybuf, cleanbuf);
|
||||||
|
}
|
||||||
|
if (db_exists) r = open(cleanbuf, O_WRONLY | O_CREAT | O_BINARY | O_APPEND, mode);
|
||||||
|
else if (clean_exists) r = unlink(cleanbuf);
|
||||||
|
*db_missing = !db_exists;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
graceful_dirty_get_append_fd(const char *db_fname) {
|
||||||
|
BOOL clean_exists;
|
||||||
|
BOOL dirty_exists;
|
||||||
|
char cleanbuf[strlen(db_fname) + sizeof(".clean")];
|
||||||
|
char dirtybuf[strlen(db_fname) + sizeof(".dirty")];
|
||||||
|
|
||||||
|
sprintf(cleanbuf, "%s.clean", db_fname);
|
||||||
|
sprintf(dirtybuf, "%s.dirty", db_fname);
|
||||||
|
|
||||||
|
struct stat tmpbuf;
|
||||||
|
clean_exists = stat(cleanbuf, &tmpbuf) == 0;
|
||||||
|
dirty_exists = stat(dirtybuf, &tmpbuf) == 0;
|
||||||
|
mode_t mode = S_IRWXU|S_IRWXG|S_IRWXO;
|
||||||
|
int r = 0;
|
||||||
|
|
||||||
|
if (clean_exists) {
|
||||||
|
if (dirty_exists) r = unlink(cleanbuf);
|
||||||
|
else r = rename(cleanbuf, dirtybuf);
|
||||||
|
}
|
||||||
|
r = open(dirtybuf, O_WRONLY | O_CREAT | O_BINARY | O_APPEND, mode);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
graceful_log(int fd, char *operation, BOOL was_dirty, BOOL is_dirty) {
|
||||||
|
//Logging. Ignore errors.
|
||||||
|
static char buf[sizeof(":-> pid= tid= ")
|
||||||
|
+7 //operation
|
||||||
|
+5 //was dirty
|
||||||
|
+5 //is dirty
|
||||||
|
+5 //process id
|
||||||
|
+5 //thread id
|
||||||
|
+26 //ctime string (including \n)
|
||||||
|
];
|
||||||
|
assert(graceful_is_locked); //ctime uses static buffer. Lock must be held.
|
||||||
|
time_t temptime;
|
||||||
|
time(&temptime);
|
||||||
|
snprintf(buf, sizeof(buf), "%-7s:%-5s->%-5s pid=%-5d tid=%-5d %s",
|
||||||
|
operation,
|
||||||
|
was_dirty ? "dirty" : "clean",
|
||||||
|
is_dirty ? "dirty" : "clean",
|
||||||
|
toku_os_getpid(),
|
||||||
|
toku_os_gettid(),
|
||||||
|
ctime(&temptime));
|
||||||
|
write(fd, buf, strlen(buf));
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
toku_graceful_open(const char *db_fname, BOOL *is_dirtyp) {
|
||||||
|
int r;
|
||||||
|
int r2 = 0;
|
||||||
|
BOOL is_dirty;
|
||||||
|
BOOL created;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
lock_for_graceful();
|
||||||
|
fd = graceful_open_get_append_fd(db_fname, &is_dirty, &created);
|
||||||
|
if (fd == -1) r = errno;
|
||||||
|
else {
|
||||||
|
graceful_log(fd, created ? "Created" : "Opened", is_dirty, is_dirty);
|
||||||
|
*is_dirtyp = is_dirty;
|
||||||
|
if (created || !is_dirty) r = 0;
|
||||||
|
else r = TOKUDB_DIRTY_DICTIONARY;
|
||||||
|
r2 = close(fd);
|
||||||
|
}
|
||||||
|
unlock_for_graceful();
|
||||||
|
return r ? r : r2;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
toku_graceful_close(CACHEFILE cf) {
|
||||||
|
int r = 0;
|
||||||
|
int r2 = 0;
|
||||||
|
int fd;
|
||||||
|
const char *db_fname = cf->fname;
|
||||||
|
|
||||||
|
if (db_fname) {
|
||||||
|
lock_for_graceful();
|
||||||
|
BOOL db_missing = FALSE;
|
||||||
|
BOOL was_dirty = cf->is_dirty;
|
||||||
|
fd = graceful_close_get_append_fd(db_fname, &db_missing);
|
||||||
|
if (fd == -1) {
|
||||||
|
if (!db_missing) r = errno;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
graceful_log(fd, "Closed", was_dirty, FALSE);
|
||||||
|
r2 = close(fd);
|
||||||
|
cf->is_dirty = FALSE;
|
||||||
|
}
|
||||||
|
unlock_for_graceful();
|
||||||
|
}
|
||||||
|
return r ? r : r2;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
toku_graceful_dirty(CACHEFILE cf) {
|
||||||
|
int r = 0;
|
||||||
|
int r2 = 0;
|
||||||
|
int fd;
|
||||||
|
const char *db_fname = cf->fname;
|
||||||
|
|
||||||
|
if (!cf->is_dirty && db_fname) {
|
||||||
|
lock_for_graceful();
|
||||||
|
fd = graceful_dirty_get_append_fd(db_fname);
|
||||||
|
if (fd == -1) r = errno;
|
||||||
|
else {
|
||||||
|
graceful_log(fd, "Dirtied", FALSE, TRUE);
|
||||||
|
r2 = close(fd);
|
||||||
|
cf->is_dirty = TRUE;
|
||||||
|
}
|
||||||
|
unlock_for_graceful();
|
||||||
|
}
|
||||||
|
return r ? r : r2;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
toku_graceful_delete(const char *db_fname) {
|
||||||
|
BOOL clean_exists;
|
||||||
|
char cleanbuf[strlen(db_fname) + sizeof(".clean")];
|
||||||
|
BOOL dirty_exists;
|
||||||
|
char dirtybuf[strlen(db_fname) + sizeof(".dirty")];
|
||||||
|
|
||||||
|
sprintf(cleanbuf, "%s.clean", db_fname);
|
||||||
|
sprintf(dirtybuf, "%s.dirty", db_fname);
|
||||||
|
|
||||||
|
struct stat tmpbuf;
|
||||||
|
lock_for_graceful();
|
||||||
|
clean_exists = stat(cleanbuf, &tmpbuf) == 0;
|
||||||
|
dirty_exists = stat(dirtybuf, &tmpbuf) == 0;
|
||||||
|
|
||||||
|
int r = 0;
|
||||||
|
if (clean_exists) {
|
||||||
|
r = unlink(cleanbuf);
|
||||||
|
}
|
||||||
|
if (r==0 && dirty_exists) {
|
||||||
|
r = unlink(dirtybuf);
|
||||||
|
}
|
||||||
|
unlock_for_graceful();
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -209,4 +209,13 @@ void toku_cachetable_verify (CACHETABLE t);
|
||||||
// Not for use in production, but useful for testing.
|
// Not for use in production, but useful for testing.
|
||||||
void print_hash_histogram (void) __attribute__((__visibility__("default")));
|
void print_hash_histogram (void) __attribute__((__visibility__("default")));
|
||||||
|
|
||||||
|
int toku_graceful_open(const char *db_fname, BOOL *is_dirtyp);
|
||||||
|
int toku_graceful_close(CACHEFILE cf);
|
||||||
|
int toku_graceful_dirty(CACHEFILE cf);
|
||||||
|
int toku_graceful_delete(const char *db_fname);
|
||||||
|
void toku_graceful_lock_init(void);
|
||||||
|
void toku_graceful_lock_destroy(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -48,6 +48,8 @@ toku_rollback_fcreate (TXNID UU(xid),
|
||||||
#endif
|
#endif
|
||||||
int r = unlink(full_fname);
|
int r = unlink(full_fname);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
r = toku_graceful_delete(full_fname);
|
||||||
|
assert(r==0);
|
||||||
toku_free(fname);
|
toku_free(fname);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,6 +143,6 @@ clean:
|
||||||
rm -rf log-test7.c.dir_*
|
rm -rf log-test7.c.dir_*
|
||||||
rm -rf *.dir
|
rm -rf *.dir
|
||||||
rm -f cachetable-fd-test.ctest2.data test_oexcl.c.tmp
|
rm -f cachetable-fd-test.ctest2.data test_oexcl.c.tmp
|
||||||
rm -f *.brt *.tdb *.dat *.data *.out
|
rm -f *.brt *brt.clean *brt.dirty *.tdb *.dat *.data *.out
|
||||||
|
|
||||||
$(BINS):
|
$(BINS):
|
||||||
|
|
|
@ -28,7 +28,7 @@ static BRT t;
|
||||||
|
|
||||||
static void setup (void) {
|
static void setup (void) {
|
||||||
int r;
|
int r;
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
r = toku_open_brt(fname, 0, 1, &t, nodesize, ct, NULL_TXN, toku_default_compare_fun, (DB*)0); assert(r==0);
|
r = toku_open_brt(fname, 0, 1, &t, nodesize, ct, NULL_TXN, toku_default_compare_fun, (DB*)0); assert(r==0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ char wrotedata[RECORDS*RECORDLEN];
|
||||||
static void
|
static void
|
||||||
test (int seed) {
|
test (int seed) {
|
||||||
srandom(seed);
|
srandom(seed);
|
||||||
unlink(FNAME);
|
unlink_file_and_bit(FNAME);
|
||||||
int i;
|
int i;
|
||||||
{
|
{
|
||||||
int fd = open(FNAME, O_CREAT+O_RDWR+O_BINARY, 0777);
|
int fd = open(FNAME, O_CREAT+O_RDWR+O_BINARY, 0777);
|
||||||
|
@ -69,7 +69,7 @@ test (int seed) {
|
||||||
|
|
||||||
{ int r=close_bread_without_closing_fd(br); assert(r==0); }
|
{ int r=close_bread_without_closing_fd(br); assert(r==0); }
|
||||||
{ int r=close(fd); assert(r==0); }
|
{ int r=close(fd); assert(r==0); }
|
||||||
unlink(FNAME);
|
unlink_file_and_bit(FNAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -18,7 +18,7 @@ static void test_multiple_brt_cursor_dbts(int n, DB *db) {
|
||||||
BRT brt;
|
BRT brt;
|
||||||
BRT_CURSOR cursors[n];
|
BRT_CURSOR cursors[n];
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
|
|
@ -105,7 +105,7 @@ static void test_brt_cursor_first(int n, DB *db) {
|
||||||
|
|
||||||
if (verbose) printf("test_brt_cursor_first:%d %p\n", n, db);
|
if (verbose) printf("test_brt_cursor_first:%d %p\n", n, db);
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
@ -146,7 +146,7 @@ static void test_brt_cursor_last(int n, DB *db) {
|
||||||
|
|
||||||
if (verbose) printf("test_brt_cursor_last:%d %p\n", n, db);
|
if (verbose) printf("test_brt_cursor_last:%d %p\n", n, db);
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
@ -187,7 +187,7 @@ static void test_brt_cursor_first_last(int n, DB *db) {
|
||||||
|
|
||||||
if (verbose) printf("test_brt_cursor_first_last:%d %p\n", n, db);
|
if (verbose) printf("test_brt_cursor_first_last:%d %p\n", n, db);
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
@ -232,7 +232,7 @@ static void test_brt_cursor_rfirst(int n, DB *db) {
|
||||||
|
|
||||||
if (verbose) printf("test_brt_cursor_rfirst:%d %p\n", n, db);
|
if (verbose) printf("test_brt_cursor_rfirst:%d %p\n", n, db);
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
@ -306,7 +306,7 @@ static void test_brt_cursor_walk(int n, DB *db) {
|
||||||
|
|
||||||
if (verbose) printf("test_brt_cursor_walk:%d %p\n", n, db);
|
if (verbose) printf("test_brt_cursor_walk:%d %p\n", n, db);
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
@ -378,7 +378,7 @@ static void test_brt_cursor_rwalk(int n, DB *db) {
|
||||||
|
|
||||||
if (verbose) printf("test_brt_cursor_rwalk:%d %p\n", n, db);
|
if (verbose) printf("test_brt_cursor_rwalk:%d %p\n", n, db);
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
@ -456,7 +456,7 @@ static void test_brt_cursor_rand(int n, DB *db) {
|
||||||
|
|
||||||
if (verbose) printf("test_brt_cursor_rand:%d %p\n", n, db);
|
if (verbose) printf("test_brt_cursor_rand:%d %p\n", n, db);
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
@ -508,7 +508,7 @@ static void test_brt_cursor_split(int n, DB *db) {
|
||||||
|
|
||||||
if (verbose) printf("test_brt_cursor_split:%d %p\n", n, db);
|
if (verbose) printf("test_brt_cursor_split:%d %p\n", n, db);
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
@ -585,7 +585,7 @@ static void test_multiple_brt_cursors(int n, DB *db) {
|
||||||
BRT brt;
|
BRT brt;
|
||||||
BRT_CURSOR cursors[n];
|
BRT_CURSOR cursors[n];
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
@ -631,7 +631,7 @@ static void test_multiple_brt_cursor_walk(int n, DB *db) {
|
||||||
const int ncursors = n/cursor_gap;
|
const int ncursors = n/cursor_gap;
|
||||||
BRT_CURSOR cursors[ncursors];
|
BRT_CURSOR cursors[ncursors];
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
|
|
||||||
int nodesize = 1<<12;
|
int nodesize = 1<<12;
|
||||||
int h = log16(n);
|
int h = log16(n);
|
||||||
|
@ -715,7 +715,7 @@ static void test_brt_cursor_set(int n, int cursor_op, DB *db) {
|
||||||
BRT brt;
|
BRT brt;
|
||||||
BRT_CURSOR cursor=0;
|
BRT_CURSOR cursor=0;
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
@ -787,7 +787,7 @@ static void test_brt_cursor_set_range(int n, DB *db) {
|
||||||
BRT brt;
|
BRT brt;
|
||||||
BRT_CURSOR cursor=0;
|
BRT_CURSOR cursor=0;
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
@ -853,7 +853,7 @@ static void test_brt_cursor_delete(int n, DB *db) {
|
||||||
BRT brt;
|
BRT brt;
|
||||||
BRT_CURSOR cursor=0;
|
BRT_CURSOR cursor=0;
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
|
|
||||||
error = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
error = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(error == 0);
|
assert(error == 0);
|
||||||
|
@ -914,7 +914,7 @@ static void test_brt_cursor_get_both(int n, DB *db) {
|
||||||
BRT brt;
|
BRT brt;
|
||||||
BRT_CURSOR cursor=0;
|
BRT_CURSOR cursor=0;
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
|
|
||||||
error = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
error = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(error == 0);
|
assert(error == 0);
|
||||||
|
|
|
@ -15,7 +15,7 @@ static void test_named_db (void) {
|
||||||
DBT k,v;
|
DBT k,v;
|
||||||
|
|
||||||
if (verbose) printf("test_named_db\n");
|
if (verbose) printf("test_named_db\n");
|
||||||
unlink(n0);
|
unlink_file_and_bit(n0);
|
||||||
toku_memory_check_all_free();
|
toku_memory_check_all_free();
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
r = toku_open_brt(n0, "db1", 1, &t0, 1<<12, ct, null_txn, toku_default_compare_fun, null_db); assert(r==0);
|
r = toku_open_brt(n0, "db1", 1, &t0, 1<<12, ct, null_txn, toku_default_compare_fun, null_db); assert(r==0);
|
||||||
|
|
|
@ -16,7 +16,7 @@ static void test_dump_empty_db (void) {
|
||||||
toku_memory_check=1;
|
toku_memory_check=1;
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_open_brt(fname, 0, 1, &t, 1024, ct, null_txn, toku_default_compare_fun, null_db);
|
r = toku_open_brt(fname, 0, 1, &t, 1024, ct, null_txn, toku_default_compare_fun, null_db);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
if (verbose) toku_dump_brt(stdout, t);
|
if (verbose) toku_dump_brt(stdout, t);
|
||||||
|
@ -33,8 +33,8 @@ static void test_multiple_files_of_size (int size) {
|
||||||
BRT t0,t1;
|
BRT t0,t1;
|
||||||
int r,i;
|
int r,i;
|
||||||
if (verbose) printf("test_multiple_files_of_size(%d)\n", size);
|
if (verbose) printf("test_multiple_files_of_size(%d)\n", size);
|
||||||
unlink(n0);
|
unlink_file_and_bit(n0);
|
||||||
unlink(n1);
|
unlink_file_and_bit(n1);
|
||||||
toku_memory_check_all_free();
|
toku_memory_check_all_free();
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
r = toku_open_brt(n0, 0, 1, &t0, size, ct, null_txn, toku_default_compare_fun, null_db); assert(r==0);
|
r = toku_open_brt(n0, 0, 1, &t0, size, ct, null_txn, toku_default_compare_fun, null_db); assert(r==0);
|
||||||
|
@ -101,8 +101,8 @@ static void test_multiple_dbs (void) {
|
||||||
int r;
|
int r;
|
||||||
DBT k,v;
|
DBT k,v;
|
||||||
if (verbose) printf("test_multiple_dbs: ");
|
if (verbose) printf("test_multiple_dbs: ");
|
||||||
unlink(n0);
|
unlink_file_and_bit(n0);
|
||||||
unlink(n1);
|
unlink_file_and_bit(n1);
|
||||||
toku_memory_check_all_free();
|
toku_memory_check_all_free();
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
r = toku_open_brt(n0, "db1", 1, &t0, 1<<12, ct, null_txn, toku_default_compare_fun, null_db); assert(r==0);
|
r = toku_open_brt(n0, "db1", 1, &t0, 1<<12, ct, null_txn, toku_default_compare_fun, null_db); assert(r==0);
|
||||||
|
@ -156,7 +156,7 @@ static void test_multiple_dbs_many (void) {
|
||||||
BRT trees[MANYN];
|
BRT trees[MANYN];
|
||||||
if (verbose) printf("test_multiple_dbs_many:\n");
|
if (verbose) printf("test_multiple_dbs_many:\n");
|
||||||
toku_memory_check_all_free();
|
toku_memory_check_all_free();
|
||||||
unlink(name);
|
unlink_file_and_bit(name);
|
||||||
r = toku_brt_create_cachetable(&ct, (MANYN+4), ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, (MANYN+4), ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
for (i=0; i<MANYN; i++) {
|
for (i=0; i<MANYN; i++) {
|
||||||
char dbname[20];
|
char dbname[20];
|
||||||
|
@ -186,7 +186,7 @@ static void test_multiple_brts_one_db_one_file (void) {
|
||||||
BRT trees[MANYN];
|
BRT trees[MANYN];
|
||||||
if (verbose) printf("test_multiple_brts_one_db_one_file:");
|
if (verbose) printf("test_multiple_brts_one_db_one_file:");
|
||||||
toku_memory_check_all_free();
|
toku_memory_check_all_free();
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_brt_create_cachetable(&ct, 32, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 32, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
for (i=0; i<MANYN; i++) {
|
for (i=0; i<MANYN; i++) {
|
||||||
r = toku_open_brt(fname, 0, (i==0), &trees[i], 1<<12, ct, null_txn, toku_default_compare_fun, null_db);
|
r = toku_open_brt(fname, 0, (i==0), &trees[i], 1<<12, ct, null_txn, toku_default_compare_fun, null_db);
|
||||||
|
@ -227,7 +227,7 @@ static void test_read_what_was_written (void) {
|
||||||
|
|
||||||
if (verbose) printf("test_read_what_was_written(): "); fflush(stdout);
|
if (verbose) printf("test_read_what_was_written(): "); fflush(stdout);
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
toku_memory_check_all_free();
|
toku_memory_check_all_free();
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
|
@ -370,7 +370,7 @@ static void test_cursor_last_empty(void) {
|
||||||
int r;
|
int r;
|
||||||
DBT kbt, vbt;
|
DBT kbt, vbt;
|
||||||
if (verbose) printf("%s", __FUNCTION__);
|
if (verbose) printf("%s", __FUNCTION__);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
toku_memory_check_all_free();
|
toku_memory_check_all_free();
|
||||||
//printf("%s:%d %d alloced\n", __FILE__, __LINE__, toku_get_n_items_malloced()); toku_print_malloced_items();
|
//printf("%s:%d %d alloced\n", __FILE__, __LINE__, toku_get_n_items_malloced()); toku_print_malloced_items();
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
|
@ -402,7 +402,7 @@ static void test_cursor_next (void) {
|
||||||
int r;
|
int r;
|
||||||
DBT kbt, vbt;
|
DBT kbt, vbt;
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
toku_memory_check_all_free();
|
toku_memory_check_all_free();
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
//printf("%s:%d %d alloced\n", __FILE__, __LINE__, toku_get_n_items_malloced()); toku_print_malloced_items();
|
//printf("%s:%d %d alloced\n", __FILE__, __LINE__, toku_get_n_items_malloced()); toku_print_malloced_items();
|
||||||
|
@ -470,7 +470,7 @@ static void test_wrongendian_compare (int wrong_p, unsigned int N) {
|
||||||
DBT kbt, vbt;
|
DBT kbt, vbt;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
toku_memory_check_all_free();
|
toku_memory_check_all_free();
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -579,7 +579,7 @@ static void test_large_kv(int bsize, int ksize, int vsize) {
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_open_brt(fname, 0, 1, &t, bsize, ct, null_txn, toku_default_compare_fun, null_db);
|
r = toku_open_brt(fname, 0, 1, &t, bsize, ct, null_txn, toku_default_compare_fun, null_db);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
|
||||||
|
@ -625,7 +625,7 @@ static void test_brt_delete_empty() {
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_open_brt(fname, 0, 1, &t, 4096, ct, null_txn, toku_default_compare_fun, null_db);
|
r = toku_open_brt(fname, 0, 1, &t, 4096, ct, null_txn, toku_default_compare_fun, null_db);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
|
||||||
|
@ -653,7 +653,7 @@ static void test_brt_delete_present(int n) {
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_open_brt(fname, 0, 1, &t, 4096, ct, null_txn, toku_default_compare_fun, null_db);
|
r = toku_open_brt(fname, 0, 1, &t, 4096, ct, null_txn, toku_default_compare_fun, null_db);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
|
||||||
|
@ -714,7 +714,7 @@ static void test_brt_delete_not_present(int n) {
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_open_brt(fname, 0, 1, &t, 4096, ct, null_txn, toku_default_compare_fun, null_db);
|
r = toku_open_brt(fname, 0, 1, &t, 4096, ct, null_txn, toku_default_compare_fun, null_db);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
|
||||||
|
@ -760,7 +760,7 @@ static void test_brt_delete_cursor_first(int n) {
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_open_brt(fname, 0, 1, &t, 4096, ct, null_txn, toku_default_compare_fun, null_db);
|
r = toku_open_brt(fname, 0, 1, &t, 4096, ct, null_txn, toku_default_compare_fun, null_db);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
|
||||||
|
@ -851,7 +851,7 @@ static void test_insert_delete_lookup(int n) {
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_open_brt(fname, 0, 1, &t, 4096, ct, null_txn, toku_default_compare_fun, null_db);
|
r = toku_open_brt(fname, 0, 1, &t, 4096, ct, null_txn, toku_default_compare_fun, null_db);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
|
||||||
|
@ -897,7 +897,7 @@ static void test_brt_delete_both(int n) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_brt_create(&t); assert(r == 0);
|
r = toku_brt_create(&t); assert(r == 0);
|
||||||
r = toku_brt_set_flags(t, TOKU_DB_DUP + TOKU_DB_DUPSORT); assert(r == 0);
|
r = toku_brt_set_flags(t, TOKU_DB_DUP + TOKU_DB_DUPSORT); assert(r == 0);
|
||||||
r = toku_brt_set_nodesize(t, 4096); assert(r == 0);
|
r = toku_brt_set_nodesize(t, 4096); assert(r == 0);
|
||||||
|
@ -1002,7 +1002,7 @@ static void test_new_brt_cursor_first(int n, int dup_mode) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_brt_create(&t); assert(r == 0);
|
r = toku_brt_create(&t); assert(r == 0);
|
||||||
r = toku_brt_set_flags(t, dup_mode); assert(r == 0);
|
r = toku_brt_set_flags(t, dup_mode); assert(r == 0);
|
||||||
r = toku_brt_set_nodesize(t, 4096); assert(r == 0);
|
r = toku_brt_set_nodesize(t, 4096); assert(r == 0);
|
||||||
|
@ -1056,7 +1056,7 @@ static void test_new_brt_cursor_last(int n, int dup_mode) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_brt_create(&t); assert(r == 0);
|
r = toku_brt_create(&t); assert(r == 0);
|
||||||
r = toku_brt_set_flags(t, dup_mode); assert(r == 0);
|
r = toku_brt_set_flags(t, dup_mode); assert(r == 0);
|
||||||
r = toku_brt_set_nodesize(t, 4096); assert(r == 0);
|
r = toku_brt_set_nodesize(t, 4096); assert(r == 0);
|
||||||
|
@ -1111,7 +1111,7 @@ static void test_new_brt_cursor_next(int n, int dup_mode) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_brt_create(&t); assert(r == 0);
|
r = toku_brt_create(&t); assert(r == 0);
|
||||||
r = toku_brt_set_flags(t, dup_mode); assert(r == 0);
|
r = toku_brt_set_flags(t, dup_mode); assert(r == 0);
|
||||||
r = toku_brt_set_nodesize(t, 4096); assert(r == 0);
|
r = toku_brt_set_nodesize(t, 4096); assert(r == 0);
|
||||||
|
@ -1163,7 +1163,7 @@ static void test_new_brt_cursor_prev(int n, int dup_mode) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_brt_create(&t); assert(r == 0);
|
r = toku_brt_create(&t); assert(r == 0);
|
||||||
r = toku_brt_set_flags(t, dup_mode); assert(r == 0);
|
r = toku_brt_set_flags(t, dup_mode); assert(r == 0);
|
||||||
r = toku_brt_set_nodesize(t, 4096); assert(r == 0);
|
r = toku_brt_set_nodesize(t, 4096); assert(r == 0);
|
||||||
|
@ -1215,7 +1215,7 @@ static void test_new_brt_cursor_current(int n, int dup_mode) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_brt_create(&t); assert(r == 0);
|
r = toku_brt_create(&t); assert(r == 0);
|
||||||
r = toku_brt_set_flags(t, dup_mode); assert(r == 0);
|
r = toku_brt_set_flags(t, dup_mode); assert(r == 0);
|
||||||
r = toku_brt_set_nodesize(t, 4096); assert(r == 0);
|
r = toku_brt_set_nodesize(t, 4096); assert(r == 0);
|
||||||
|
@ -1295,7 +1295,7 @@ static void test_new_brt_cursor_set_range(int n, int dup_mode) {
|
||||||
BRT_CURSOR cursor=0;
|
BRT_CURSOR cursor=0;
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_brt_create(&brt); assert(r == 0);
|
r = toku_brt_create(&brt); assert(r == 0);
|
||||||
r = toku_brt_set_flags(brt, dup_mode); assert(r == 0);
|
r = toku_brt_set_flags(brt, dup_mode); assert(r == 0);
|
||||||
r = toku_brt_set_nodesize(brt, 4096); assert(r == 0);
|
r = toku_brt_set_nodesize(brt, 4096); assert(r == 0);
|
||||||
|
@ -1352,7 +1352,7 @@ static void test_new_brt_cursor_set(int n, int cursor_op, DB *db) {
|
||||||
BRT brt;
|
BRT brt;
|
||||||
BRT_CURSOR cursor=0;
|
BRT_CURSOR cursor=0;
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ static void test0 (void) {
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
if (verbose) printf("%s:%d test0\n", __FILE__, __LINE__);
|
if (verbose) printf("%s:%d test0\n", __FILE__, __LINE__);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_open_brt(fname, 0, 1, &t, 1024, ct, null_txn, toku_default_compare_fun, null_db);
|
r = toku_open_brt(fname, 0, 1, &t, 1024, ct, null_txn, toku_default_compare_fun, null_db);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
//printf("%s:%d test0\n", __FILE__, __LINE__);
|
//printf("%s:%d test0\n", __FILE__, __LINE__);
|
||||||
|
|
|
@ -17,7 +17,7 @@ static void test1 (void) {
|
||||||
toku_memory_check_all_free();
|
toku_memory_check_all_free();
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_open_brt(fname, 0, 1, &t, 1024, ct, null_txn, toku_default_compare_fun, null_db);
|
r = toku_open_brt(fname, 0, 1, &t, 1024, ct, null_txn, toku_default_compare_fun, null_db);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
toku_brt_insert(t, toku_fill_dbt(&k, "hello", 6), toku_fill_dbt(&v, "there", 6), null_txn);
|
toku_brt_insert(t, toku_fill_dbt(&k, "hello", 6), toku_fill_dbt(&v, "there", 6), null_txn);
|
||||||
|
|
|
@ -17,7 +17,7 @@ static void test2 (int memcheck, int limit) {
|
||||||
if (verbose) printf("%s:%d checking\n", __FILE__, __LINE__);
|
if (verbose) printf("%s:%d checking\n", __FILE__, __LINE__);
|
||||||
toku_memory_check_all_free();
|
toku_memory_check_all_free();
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_open_brt(fname, 0, 1, &t, 1024, ct, null_txn, toku_default_compare_fun, null_db);
|
r = toku_open_brt(fname, 0, 1, &t, 1024, ct, null_txn, toku_default_compare_fun, null_db);
|
||||||
if (verbose) printf("%s:%d did setup\n", __FILE__, __LINE__);
|
if (verbose) printf("%s:%d did setup\n", __FILE__, __LINE__);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
|
|
@ -19,7 +19,7 @@ static void test3 (int nodesize, int count, int memcheck) {
|
||||||
toku_memory_check_all_free();
|
toku_memory_check_all_free();
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
gettimeofday(&t0, 0);
|
gettimeofday(&t0, 0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_open_brt(fname, 0, 1, &t, nodesize, ct, null_txn, toku_default_compare_fun, null_db);
|
r = toku_open_brt(fname, 0, 1, &t, nodesize, ct, null_txn, toku_default_compare_fun, null_db);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
for (i=0; i<count; i++) {
|
for (i=0; i<count; i++) {
|
||||||
|
|
|
@ -16,7 +16,7 @@ static void test4 (int nodesize, int count, int memcheck) {
|
||||||
int i;
|
int i;
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
gettimeofday(&t0, 0);
|
gettimeofday(&t0, 0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
toku_memory_check=memcheck;
|
toku_memory_check=memcheck;
|
||||||
toku_memory_check_all_free();
|
toku_memory_check_all_free();
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
|
|
|
@ -18,7 +18,7 @@ static void test5 (void) {
|
||||||
toku_memory_check_all_free();
|
toku_memory_check_all_free();
|
||||||
MALLOC_N(limit,values);
|
MALLOC_N(limit,values);
|
||||||
for (i=0; i<limit; i++) values[i]=-1;
|
for (i=0; i<limit; i++) values[i]=-1;
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
r = toku_open_brt(fname, 0, 1, &t, 1<<12, ct, null_txn, toku_default_compare_fun, null_db); assert(r==0);
|
r = toku_open_brt(fname, 0, 1, &t, 1<<12, ct, null_txn, toku_default_compare_fun, null_db); assert(r==0);
|
||||||
for (i=0; i<limit/2; i++) {
|
for (i=0; i<limit/2; i++) {
|
||||||
|
|
|
@ -37,7 +37,7 @@ static void cachetable_checkpoint_test(int n, enum cachetable_dirty dirty) {
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
r = toku_create_cachetable(&ct, test_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
r = toku_create_cachetable(&ct, test_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
||||||
char fname1[] = __FILE__ "test1.dat";
|
char fname1[] = __FILE__ "test1.dat";
|
||||||
unlink(fname1);
|
unlink_file_and_bit(fname1);
|
||||||
CACHEFILE f1;
|
CACHEFILE f1;
|
||||||
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ cachetable_count_pinned_test (int n) {
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
r = toku_create_cachetable(&ct, test_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
r = toku_create_cachetable(&ct, test_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
||||||
char fname1[] = __FILE__ "test1.dat";
|
char fname1[] = __FILE__ "test1.dat";
|
||||||
unlink(fname1);
|
unlink_file_and_bit(fname1);
|
||||||
CACHEFILE f1;
|
CACHEFILE f1;
|
||||||
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ cachetable_debug_test (int n) {
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
r = toku_create_cachetable(&ct, test_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
r = toku_create_cachetable(&ct, test_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
||||||
char fname1[] = __FILE__ "test1.dat";
|
char fname1[] = __FILE__ "test1.dat";
|
||||||
unlink(fname1);
|
unlink_file_and_bit(fname1);
|
||||||
CACHEFILE f1;
|
CACHEFILE f1;
|
||||||
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ cachetable_fd_test (void) {
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
r = toku_create_cachetable(&ct, test_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
r = toku_create_cachetable(&ct, test_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
||||||
char fname1[] = __FILE__ "test1.dat";
|
char fname1[] = __FILE__ "test1.dat";
|
||||||
unlink(fname1);
|
unlink_file_and_bit(fname1);
|
||||||
CACHEFILE cf;
|
CACHEFILE cf;
|
||||||
r = toku_cachetable_openf(&cf, ct, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
r = toku_cachetable_openf(&cf, ct, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ cachetable_fd_test (void) {
|
||||||
|
|
||||||
// test set to good fd succeeds
|
// test set to good fd succeeds
|
||||||
char fname2[] = __FILE__ "test2.data";
|
char fname2[] = __FILE__ "test2.data";
|
||||||
unlink(fname2);
|
unlink_file_and_bit(fname2);
|
||||||
int fd2 = open(fname2, O_RDWR | O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(fd2 >= 0 && fd1 != fd2);
|
int fd2 = open(fname2, O_RDWR | O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(fd2 >= 0 && fd1 != fd2);
|
||||||
r = toku_cachefile_set_fd(cf, fd2, fname2); assert(r == 0);
|
r = toku_cachefile_set_fd(cf, fd2, fname2); assert(r == 0);
|
||||||
assert(toku_cachefile_fd(cf) == fd2);
|
assert(toku_cachefile_fd(cf) == fd2);
|
||||||
|
|
|
@ -34,12 +34,12 @@ test_cachetable_flush (int n) {
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
r = toku_create_cachetable(&ct, test_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
r = toku_create_cachetable(&ct, test_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
||||||
char fname1[] = __FILE__ "test1.dat";
|
char fname1[] = __FILE__ "test1.dat";
|
||||||
unlink(fname1);
|
unlink_file_and_bit(fname1);
|
||||||
CACHEFILE f1;
|
CACHEFILE f1;
|
||||||
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
||||||
|
|
||||||
char fname2[] = __FILE__ "test2.dat";
|
char fname2[] = __FILE__ "test2.dat";
|
||||||
unlink(fname2);
|
unlink_file_and_bit(fname2);
|
||||||
CACHEFILE f2;
|
CACHEFILE f2;
|
||||||
r = toku_cachetable_openf(&f2, ct, fname2, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
r = toku_cachetable_openf(&f2, ct, fname2, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ cachetable_getandpin_test (int n) {
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
r = toku_create_cachetable(&ct, test_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
r = toku_create_cachetable(&ct, test_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
||||||
char fname1[] = __FILE__ "test_getandpin.dat";
|
char fname1[] = __FILE__ "test_getandpin.dat";
|
||||||
unlink(fname1);
|
unlink_file_and_bit(fname1);
|
||||||
CACHEFILE f1;
|
CACHEFILE f1;
|
||||||
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ cachetable_put_test (int n) {
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
r = toku_create_cachetable(&ct, test_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
r = toku_create_cachetable(&ct, test_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
||||||
char fname1[] = __FILE__ "test1.dat";
|
char fname1[] = __FILE__ "test1.dat";
|
||||||
unlink(fname1);
|
unlink_file_and_bit(fname1);
|
||||||
CACHEFILE f1;
|
CACHEFILE f1;
|
||||||
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,7 @@ static void test_rename (void) {
|
||||||
test_mutex_init();
|
test_mutex_init();
|
||||||
const char fname[] = __FILE__ "rename.dat";
|
const char fname[] = __FILE__ "rename.dat";
|
||||||
r=toku_create_cachetable(&t, KEYLIMIT, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r=toku_create_cachetable(&t, KEYLIMIT, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_cachetable_openf(&f, t, fname, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO);
|
r = toku_cachetable_openf(&f, t, fname, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
for (i=0; i<TRIALLIMIT; i++) {
|
for (i=0; i<TRIALLIMIT; i++) {
|
||||||
|
|
|
@ -167,7 +167,7 @@ static void test0 (void) {
|
||||||
|
|
||||||
r=toku_create_cachetable(&t, 5, ZERO_LSN, NULL_LOGGER);
|
r=toku_create_cachetable(&t, 5, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_cachetable_openf(&f, t, fname, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO);
|
r = toku_cachetable_openf(&f, t, fname, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
|
|
||||||
|
@ -321,7 +321,7 @@ static void test_nested_pin (void) {
|
||||||
char fname[] = __FILE__ "test_ct.dat";
|
char fname[] = __FILE__ "test_ct.dat";
|
||||||
r = toku_create_cachetable(&t, 1, ZERO_LSN, NULL_LOGGER);
|
r = toku_create_cachetable(&t, 1, ZERO_LSN, NULL_LOGGER);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_cachetable_openf(&f, t, fname, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO);
|
r = toku_cachetable_openf(&f, t, fname, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
expect_f = f;
|
expect_f = f;
|
||||||
|
@ -391,8 +391,8 @@ static void test_multi_filehandles (void) {
|
||||||
char fname3[]= __FILE__ "test3_ct.dat";
|
char fname3[]= __FILE__ "test3_ct.dat";
|
||||||
int r;
|
int r;
|
||||||
void *v;
|
void *v;
|
||||||
unlink(fname1);
|
unlink_file_and_bit(fname1);
|
||||||
unlink(fname2);
|
unlink_file_and_bit(fname2);
|
||||||
|
|
||||||
r = toku_create_cachetable(&t, 4, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_create_cachetable(&t, 4, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
r = toku_cachetable_openf(&f1, t, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r==0);
|
r = toku_cachetable_openf(&f1, t, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r==0);
|
||||||
|
@ -462,7 +462,7 @@ static void test_dirty() {
|
||||||
assert(r == 0);
|
assert(r == 0);
|
||||||
|
|
||||||
char *fname = __FILE__ "test.dat";
|
char *fname = __FILE__ "test.dat";
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_cachetable_openf(&f, t, fname, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO);
|
r = toku_cachetable_openf(&f, t, fname, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO);
|
||||||
assert(r == 0);
|
assert(r == 0);
|
||||||
|
|
||||||
|
@ -586,7 +586,7 @@ static void test_size_resize() {
|
||||||
assert(r == 0);
|
assert(r == 0);
|
||||||
|
|
||||||
char *fname = __FILE__ "test.dat";
|
char *fname = __FILE__ "test.dat";
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_cachetable_openf(&f, t, fname, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO);
|
r = toku_cachetable_openf(&f, t, fname, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO);
|
||||||
assert(r == 0);
|
assert(r == 0);
|
||||||
|
|
||||||
|
@ -641,7 +641,7 @@ static void test_size_flush() {
|
||||||
assert(r == 0);
|
assert(r == 0);
|
||||||
|
|
||||||
char *fname = __FILE__ "test.dat";
|
char *fname = __FILE__ "test.dat";
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_cachetable_openf(&f, t, fname, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO);
|
r = toku_cachetable_openf(&f, t, fname, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO);
|
||||||
assert(r == 0);
|
assert(r == 0);
|
||||||
|
|
||||||
|
|
|
@ -150,7 +150,7 @@ static void test_chaining (void) {
|
||||||
for (i=0; i<N_FILES; i++) {
|
for (i=0; i<N_FILES; i++) {
|
||||||
r = snprintf(fname[i], FILENAME_LEN, __FILE__ ".%ld.dat", i);
|
r = snprintf(fname[i], FILENAME_LEN, __FILE__ ".%ld.dat", i);
|
||||||
assert(r>0 && r<FILENAME_LEN);
|
assert(r>0 && r<FILENAME_LEN);
|
||||||
unlink(fname[i]);
|
unlink_file_and_bit(fname[i]);
|
||||||
r = toku_cachetable_openf(&f[i], ct, fname[i], O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r==0);
|
r = toku_cachetable_openf(&f[i], ct, fname[i], O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r==0);
|
||||||
}
|
}
|
||||||
for (i=0; i<N_PRESENT_LIMIT; i++) {
|
for (i=0; i<N_PRESENT_LIMIT; i++) {
|
||||||
|
|
|
@ -38,7 +38,7 @@ cachetable_unpin_and_remove_test (int n) {
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
r = toku_create_cachetable(&ct, table_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
r = toku_create_cachetable(&ct, table_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
||||||
char fname1[] = __FILE__ "test1.dat";
|
char fname1[] = __FILE__ "test1.dat";
|
||||||
unlink(fname1);
|
unlink_file_and_bit(fname1);
|
||||||
CACHEFILE f1;
|
CACHEFILE f1;
|
||||||
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, 0777); assert(r == 0);
|
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, 0777); assert(r == 0);
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ cachetable_put_evict_remove_test (int n) {
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
r = toku_create_cachetable(&ct, table_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
r = toku_create_cachetable(&ct, table_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
||||||
char fname1[] = __FILE__ "test1.dat";
|
char fname1[] = __FILE__ "test1.dat";
|
||||||
unlink(fname1);
|
unlink_file_and_bit(fname1);
|
||||||
CACHEFILE f1;
|
CACHEFILE f1;
|
||||||
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, 0777); assert(r == 0);
|
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, 0777); assert(r == 0);
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ cachetable_unpin_test (int n) {
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
r = toku_create_cachetable(&ct, test_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
r = toku_create_cachetable(&ct, test_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0);
|
||||||
char fname1[] = __FILE__ "test1.dat";
|
char fname1[] = __FILE__ "test1.dat";
|
||||||
unlink(fname1);
|
unlink_file_and_bit(fname1);
|
||||||
CACHEFILE f1;
|
CACHEFILE f1;
|
||||||
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert(r == 0);
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ static DB * const null_db = 0;
|
||||||
static void test_delete_all (void) {
|
static void test_delete_all (void) {
|
||||||
char fname[]= __FILE__ ".brt";
|
char fname[]= __FILE__ ".brt";
|
||||||
u_int32_t limit =200;
|
u_int32_t limit =200;
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
int r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
int r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
BRT t;
|
BRT t;
|
||||||
|
|
|
@ -13,7 +13,7 @@ static void test_flat (void) {
|
||||||
char fname[]= __FILE__ ".brt";
|
char fname[]= __FILE__ ".brt";
|
||||||
u_int64_t limit=100;
|
u_int64_t limit=100;
|
||||||
u_int64_t ilimit=100;
|
u_int64_t ilimit=100;
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
// set the cachetable to size 1 so that things won't fit.
|
// set the cachetable to size 1 so that things won't fit.
|
||||||
int r = toku_brt_create_cachetable(&ct, 1, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
int r = toku_brt_create_cachetable(&ct, 1, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
|
|
|
@ -13,7 +13,7 @@ static void test_flat (void) {
|
||||||
char fname[]= __FILE__ ".brt";
|
char fname[]= __FILE__ ".brt";
|
||||||
u_int64_t limit=100;
|
u_int64_t limit=100;
|
||||||
u_int64_t ilimit=100;
|
u_int64_t ilimit=100;
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
int r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
int r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
BRT t;
|
BRT t;
|
||||||
|
|
|
@ -13,7 +13,7 @@ static void test_flat (void) {
|
||||||
char fname[]= __FILE__ ".brt";
|
char fname[]= __FILE__ ".brt";
|
||||||
const u_int64_t limit=10000;
|
const u_int64_t limit=10000;
|
||||||
u_int64_t permute[limit];
|
u_int64_t permute[limit];
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
// set the cachetable to size 1 so that things won't fit.
|
// set the cachetable to size 1 so that things won't fit.
|
||||||
int r = toku_brt_create_cachetable(&ct, 1, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
int r = toku_brt_create_cachetable(&ct, 1, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
|
|
|
@ -12,7 +12,7 @@ static DB * const null_db = 0;
|
||||||
static void test_flat (void) {
|
static void test_flat (void) {
|
||||||
char fname[]= __FILE__ ".brt";
|
char fname[]= __FILE__ ".brt";
|
||||||
u_int64_t limit=30000;
|
u_int64_t limit=30000;
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
int r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
int r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
BRT t;
|
BRT t;
|
||||||
|
|
|
@ -19,7 +19,7 @@ test_main (int argc __attribute__((__unused__)), const char *argv[] __attribute
|
||||||
DB *db = &a_db;
|
DB *db = &a_db;
|
||||||
DBT key,val;
|
DBT key,val;
|
||||||
|
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
|
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
r = toku_open_brt(fname, 0, 1, &brt, 1<<12, ct, null_txn, test_brt_cursor_keycompare, db); assert(r==0);
|
r = toku_open_brt(fname, 0, 1, &brt, 1<<12, ct, null_txn, test_brt_cursor_keycompare, db); assert(r==0);
|
||||||
|
|
|
@ -19,7 +19,7 @@ doit (void) {
|
||||||
DBT k,v;
|
DBT k,v;
|
||||||
if (verbose) printf("%s\n", __FUNCTION__);
|
if (verbose) printf("%s\n", __FUNCTION__);
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_brt_create(&t); assert(r==0);
|
r = toku_brt_create(&t); assert(r==0);
|
||||||
r = toku_brt_open(t, fname, fname, 0, 1, 1, ct, null_txn, (DB*)0); assert(r==0);
|
r = toku_brt_open(t, fname, fname, 0, 1, 1, ct, null_txn, (DB*)0); assert(r==0);
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ test_overflow (void) {
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
u_int32_t nodesize = 1<<20;
|
u_int32_t nodesize = 1<<20;
|
||||||
int r;
|
int r;
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
r = toku_open_brt(fname, 0, 1, &t, nodesize, ct, null_txn, toku_default_compare_fun, null_db); assert(r==0);
|
r = toku_open_brt(fname, 0, 1, &t, nodesize, ct, null_txn, toku_default_compare_fun, null_db); assert(r==0);
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ doit (void) {
|
||||||
|
|
||||||
snprintf(fname, fnamelen, "%s.brt", __FILE__);
|
snprintf(fname, fnamelen, "%s.brt", __FILE__);
|
||||||
r = toku_brt_create_cachetable(&ct, 16*1024, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 16*1024, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_open_brt(fname, 0, 1, &t, NODESIZE, ct, null_txn, toku_default_compare_fun, null_db);
|
r = toku_open_brt(fname, 0, 1, &t, NODESIZE, ct, null_txn, toku_default_compare_fun, null_db);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
toku_free(fname);
|
toku_free(fname);
|
||||||
|
|
|
@ -13,7 +13,7 @@ test_main (int argc __attribute__((__unused__)), char *argv[] __attribute__((__u
|
||||||
BRT t;
|
BRT t;
|
||||||
CACHETABLE ct;
|
CACHETABLE ct;
|
||||||
FILE *f = fopen("test-dump-brt.out", "w");
|
FILE *f = fopen("test-dump-brt.out", "w");
|
||||||
unlink(n);
|
unlink_file_and_bit(n);
|
||||||
assert(f);
|
assert(f);
|
||||||
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 0, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
r = toku_open_brt(n, 0, 1, &t, 1<<12, ct, null_txn, toku_default_compare_fun, null_db); assert(r==0);
|
r = toku_open_brt(n, 0, 1, &t, 1<<12, ct, null_txn, toku_default_compare_fun, null_db); assert(r==0);
|
||||||
|
|
|
@ -56,7 +56,7 @@ doit (int ksize __attribute__((__unused__))) {
|
||||||
|
|
||||||
snprintf(fname, fnamelen, "%s.brt", __FILE__);
|
snprintf(fname, fnamelen, "%s.brt", __FILE__);
|
||||||
r = toku_brt_create_cachetable(&ct, 16*1024, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
r = toku_brt_create_cachetable(&ct, 16*1024, ZERO_LSN, NULL_LOGGER); assert(r==0);
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
r = toku_open_brt(fname, 0, 1, &t, NODESIZE, ct, null_txn, toku_default_compare_fun, null_db);
|
r = toku_open_brt(fname, 0, 1, &t, NODESIZE, ct, null_txn, toku_default_compare_fun, null_db);
|
||||||
assert(r==0);
|
assert(r==0);
|
||||||
toku_free(fname);
|
toku_free(fname);
|
||||||
|
|
|
@ -7,6 +7,17 @@
|
||||||
|
|
||||||
int verbose=0;
|
int verbose=0;
|
||||||
|
|
||||||
|
void
|
||||||
|
unlink_file_and_bit(const char *name) {
|
||||||
|
char dirty[strlen(name) + sizeof(".dirty")];
|
||||||
|
char clean[strlen(name) + sizeof(".clean")];
|
||||||
|
sprintf(dirty, "%s.dirty", name);
|
||||||
|
sprintf(clean, "%s.clean", name);
|
||||||
|
unlink(name);
|
||||||
|
unlink(dirty);
|
||||||
|
unlink(clean);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
default_parse_args (int argc, const char *argv[]) {
|
default_parse_args (int argc, const char *argv[]) {
|
||||||
const char *progname=argv[0];
|
const char *progname=argv[0];
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test (u_int64_t fsize) {
|
test (u_int64_t fsize) {
|
||||||
unlink(FNAME);
|
unlink_file_and_bit(FNAME);
|
||||||
// Create a file of size fsize. Fill it with 8-byte values which are integers, in order)
|
// Create a file of size fsize. Fill it with 8-byte values which are integers, in order)
|
||||||
assert(fsize%(N_BIGINTS*sizeof(u_int64_t)) == 0); // Make sure the fsize is a multiple of the buffer size.
|
assert(fsize%(N_BIGINTS*sizeof(u_int64_t)) == 0); // Make sure the fsize is a multiple of the buffer size.
|
||||||
u_int64_t i = 0;
|
u_int64_t i = 0;
|
||||||
|
@ -95,7 +95,7 @@ assert(sizeof(buf) == N_BIGINTS * BIGINT_SIZE);
|
||||||
}
|
}
|
||||||
//printf("Did %" PRIu64 "\n", fsize);
|
//printf("Did %" PRIu64 "\n", fsize);
|
||||||
//system("ls -l " FNAME);
|
//system("ls -l " FNAME);
|
||||||
unlink(FNAME);
|
unlink_file_and_bit(FNAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
int
|
int
|
||||||
test_main (int argc __attribute__((__unused__)), const char *argv[] __attribute__((__unused__)))
|
test_main (int argc __attribute__((__unused__)), const char *argv[] __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
unlink(FNAME);
|
unlink_file_and_bit(FNAME);
|
||||||
|
|
||||||
int fd;
|
int fd;
|
||||||
{
|
{
|
||||||
|
@ -45,6 +45,6 @@ test_main (int argc __attribute__((__unused__)), const char *argv[] __attribute_
|
||||||
assert(file_size==file_size2);
|
assert(file_size==file_size2);
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
unlink(FNAME);
|
unlink_file_and_bit(FNAME);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
int
|
int
|
||||||
test_main (int argc __attribute__((__unused__)), const char *argv[] __attribute__((__unused__))) {
|
test_main (int argc __attribute__((__unused__)), const char *argv[] __attribute__((__unused__))) {
|
||||||
unlink(fname);
|
unlink_file_and_bit(fname);
|
||||||
int fd0 = open (fname, O_RDWR|O_CREAT|O_EXCL, S_IRWXU|S_IRWXG|S_IRWXO);
|
int fd0 = open (fname, O_RDWR|O_CREAT|O_EXCL, S_IRWXU|S_IRWXG|S_IRWXO);
|
||||||
assert(fd0>=0);
|
assert(fd0>=0);
|
||||||
int fd1 = open (fname, O_RDWR|O_CREAT|O_EXCL, S_IRWXU|S_IRWXG|S_IRWXO);
|
int fd1 = open (fname, O_RDWR|O_CREAT|O_EXCL, S_IRWXU|S_IRWXG|S_IRWXO);
|
||||||
|
|
|
@ -21,6 +21,7 @@ test_db_open_aborts (void) {
|
||||||
DB *db;
|
DB *db;
|
||||||
|
|
||||||
int r;
|
int r;
|
||||||
|
struct stat buf;
|
||||||
system("rm -rf " ENVDIR);
|
system("rm -rf " ENVDIR);
|
||||||
r=toku_os_mkdir(ENVDIR, S_IRWXU+S_IRWXG+S_IRWXO); assert(r==0);
|
r=toku_os_mkdir(ENVDIR, S_IRWXU+S_IRWXG+S_IRWXO); assert(r==0);
|
||||||
r=db_env_create(&env, 0); assert(r==0);
|
r=db_env_create(&env, 0); assert(r==0);
|
||||||
|
@ -58,13 +59,24 @@ test_db_open_aborts (void) {
|
||||||
r=tid->abort(tid); assert(r==0);
|
r=tid->abort(tid); assert(r==0);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
struct stat buf;
|
|
||||||
r=stat(ENVDIR "/foo.db", &buf);
|
r=stat(ENVDIR "/foo.db", &buf);
|
||||||
assert(r!=0);
|
assert(r!=0);
|
||||||
assert(errno==ENOENT);
|
assert(errno==ENOENT);
|
||||||
|
r=stat(ENVDIR "/foo.db.clean", &buf);
|
||||||
|
assert(r!=0);
|
||||||
|
assert(errno==ENOENT);
|
||||||
|
r=stat(ENVDIR "/foo.db.dirty", &buf);
|
||||||
|
assert(r!=0);
|
||||||
|
assert(errno==ENOENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
r=db->close(db, 0); assert(r==0);
|
r=db->close(db, 0); assert(r==0);
|
||||||
|
r=stat(ENVDIR "/foo.db.clean", &buf);
|
||||||
|
assert(r!=0);
|
||||||
|
assert(errno==ENOENT);
|
||||||
|
r=stat(ENVDIR "/foo.db.dirty", &buf);
|
||||||
|
assert(r!=0);
|
||||||
|
assert(errno==ENOENT);
|
||||||
r=env->close(env, 0); assert(r==0);
|
r=env->close(env, 0); assert(r==0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3204,6 +3204,7 @@ static int toku_db_remove(DB * db, const char *fname, const char *dbname, u_int3
|
||||||
need_close = FALSE;
|
need_close = FALSE;
|
||||||
if (r!=0) { goto cleanup; }
|
if (r!=0) { goto cleanup; }
|
||||||
if (unlink(full_name) != 0) { r = errno; goto cleanup; }
|
if (unlink(full_name) != 0) { r = errno; goto cleanup; }
|
||||||
|
if (toku_graceful_delete(full_name) !=0) { r = errno; goto cleanup; }
|
||||||
} else {
|
} else {
|
||||||
r = toku_db_close(db, 0);
|
r = toku_db_close(db, 0);
|
||||||
need_close = FALSE;
|
need_close = FALSE;
|
||||||
|
|
|
@ -283,7 +283,7 @@ TAGS: $(TOKUROOT)*/*.[ch] $(TOKUROOT)*/*/*.[ch] $(TOKUROOT)*/*/*/*.[ch]
|
||||||
etags $(TOKUROOT)*/*.[ch] $(TOKUROOT)*/*/*.[ch] $(TOKUROOT)*/*/*/*.[ch]
|
etags $(TOKUROOT)*/*.[ch] $(TOKUROOT)*/*/*.[ch] $(TOKUROOT)*/*/*/*.[ch]
|
||||||
|
|
||||||
cscope.files: $(TOKUROOT)*/*.[ch] $(TOKUROOT)*/*/*.[ch] $(TOKUROOT)*/*/*/*.[ch]
|
cscope.files: $(TOKUROOT)*/*.[ch] $(TOKUROOT)*/*/*.[ch] $(TOKUROOT)*/*/*/*.[ch]
|
||||||
(echo $(TOKUROOT)*/*.[ch] $(TOKUROOT)*/*/*.[ch] $(TOKUROOT)*/*/*/*.[ch] | tr " " "\n") > $@ # Very long command line quieted.
|
(echo $(TOKUROOT)*/*.[ch] $(TOKUROOT)*/*/*.[ch] $(TOKUROOT)*/*/*/*.[ch] | tr " " "\n") > $@
|
||||||
|
|
||||||
cscope.out: cscope.files $(TOKUROOT)*/*.[ch] $(TOKUROOT)*/*/*.[ch] $(TOKUROOT)*/*/*/*.[ch]
|
cscope.out: cscope.files $(TOKUROOT)*/*.[ch] $(TOKUROOT)*/*/*.[ch] $(TOKUROOT)*/*/*/*.[ch]
|
||||||
$(CSCOPE) -qb
|
$(CSCOPE) -qb
|
||||||
|
|
Loading…
Add table
Reference in a new issue