Compare commits

...

5 Commits

Author SHA1 Message Date
Leo Yuriev
ecbc0b9c12 mdbx: update links after move the repo.
Change-Id: Ib9d0bbc02f628ee5df673f419cd6152785e19573
2017-08-12 10:48:50 +03:00
Howard Chu
a783325a6d mdbx: backport - ITS#8699 more for cursor_del ITS#8622.
Set C_DEL flag on reinit'd subcursor

Change-Id: I8ad1c10afd481f61b8e521d02c4d2de3be5089d7
2017-08-02 15:31:31 +03:00
Leo Yuriev
f55c30f286 mdbx: backport - don't madvise(MADV_REMOVE).
Avoid lost changes and corruption in case a collision
between mdbx_env_open() in one process and write-txn with
next-pgno updates in an another process.

Change-Id: I890db9251edbd77ac0ace10bed10a24517d709ec
2017-07-26 13:14:23 +03:00
Leo Yuriev
4874852b79 mdbx: backport - fix mdbx_set_attr().
Change-Id: I6628a0629a17f99f39098b8ccb76259cd65dd353
2017-07-26 13:10:47 +03:00
Leo Yuriev
6760ca87ae mdbx: update links to stable/0.0 branch.
Change-Id: I1387108236b20b173a703194b006acd60eaae94e
2017-07-21 16:03:43 +03:00
5 changed files with 15 additions and 19 deletions

View File

@@ -1,5 +1,5 @@
# GNU Makefile for libmdbx (reliable lightning memory-mapped DB library for Linux).
# https://github.com/ReOpen/libmdbx
# https://github.com/leo-yuriev/libmdbx
########################################################################
# Configuration. The compiler options must enable threaded compilation.

View File

@@ -3,9 +3,9 @@ libmdbx
Extended LMDB, aka "Расширенная LMDB".
*The Future will Positive. Всё будет хорошо.*
[![Build Status](https://travis-ci.org/ReOpen/libmdbx.svg?branch=master)](https://travis-ci.org/ReOpen/libmdbx)
[![Build Status](https://travis-ci.org/leo-yuriev/libmdbx.svg?branch=stable%2F0.0)](https://travis-ci.org/leo-yuriev/libmdbx)
English version by Google [is here](https://translate.googleusercontent.com/translate_c?act=url&ie=UTF8&sl=ru&tl=en&u=https://github.com/ReOpen/libmdbx/tree/master).
English version by Google [is here](https://translate.googleusercontent.com/translate_c?act=url&ie=UTF8&sl=ru&tl=en&u=https://github.com/leo-yuriev/libmdbx/tree/stable%2F0.0).
## Кратко
@@ -28,7 +28,7 @@ _libmdbx_ является потомком "Lightning Memory-Mapped Database",
известной под аббревиатурой
[LMDB](https://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Database).
Изначально доработка производилась в составе проекта
[ReOpenLDAP](https://github.com/ReOpen/ReOpenLDAP). Примерно за год
[ReOpenLDAP](https://github.com/leo-yuriev/ReOpenLDAP). Примерно за год
работы внесенные изменения приобрели самостоятельную ценность. Осенью
2015 доработанный движок был выделен в отдельный проект, который был
[представлен на конференции Highload++

2
lmdb.h
View File

@@ -212,7 +212,7 @@ typedef int mdb_filehandle_t;
#define MDB_VERSION_DATE "2017-02-17"
/** A stringifier for the version info */
#define MDB_VERSTR(a,b,c,d) "MDBX " #a "." #b "." #c ": (" d ", https://github.com/ReOpen/libmdbx)"
#define MDB_VERSTR(a,b,c,d) "MDBX " #a "." #b "." #c ": (" d ", https://github.com/leo-yuriev/libmdbx)"
/** A helper for the stringifier macro */
#define MDB_VERFOO(a,b,c,d) MDB_VERSTR(a,b,c,d)

21
mdb.c
View File

@@ -1048,7 +1048,7 @@ typedef struct MDB_pgstate {
} MDB_pgstate;
/** Context for deferred cleanup of reader's threads.
* to avoid https://github.com/ReOpen/ReOpenLDAP/issues/48 */
* to avoid https://github.com/leo-yuriev/ReOpenLDAP/issues/48 */
typedef struct MDBX_rthc {
struct MDBX_rthc *rc_next;
pthread_t rc_thread;
@@ -4341,7 +4341,7 @@ mdb_env_create(MDB_env **env)
}
static int __cold
mdb_env_map(MDB_env *env, void *addr, size_t usedsize)
mdb_env_map(MDB_env *env, void *addr)
{
unsigned flags = env->me_flags;
@@ -4381,12 +4381,6 @@ mdb_env_map(MDB_env *env, void *addr, size_t usedsize)
}
#endif
#ifdef MADV_REMOVE
if (flags & MDB_WRITEMAP) {
(void) madvise(env->me_map + usedsize, env->me_mapsize - usedsize, MADV_REMOVE);
}
#endif
/* Turn on/off readahead. It's harmful when the DB is larger than RAM. */
if (madvise(env->me_map, env->me_mapsize, (flags & MDB_NORDAHEAD) ? MADV_RANDOM : MADV_WILLNEED))
return errno;
@@ -4439,7 +4433,7 @@ mdb_env_set_mapsize(MDB_env *env, size_t size)
#endif
env->me_mapsize = size;
old = (env->me_flags & MDB_FIXEDMAP) ? env->me_map : NULL;
rc = mdb_env_map(env, old, usedsize);
rc = mdb_env_map(env, old);
if (rc)
return rc;
}
@@ -4557,8 +4551,7 @@ mdb_env_open2(MDB_env *env, MDB_meta *meta)
newenv = 0;
}
const size_t usedsize = (meta->mm_last_pg + 1) * env->me_psize;
rc = mdb_env_map(env, (flags & MDB_FIXEDMAP) ? meta->mm_address : NULL, usedsize);
rc = mdb_env_map(env, (flags & MDB_FIXEDMAP) ? meta->mm_address : NULL);
if (rc)
return rc;
@@ -4631,7 +4624,7 @@ void mdbx_rthc_dtor(void)
* TSD-деструкторах и поэтому может выгрузить lib.so до того как
* отработали все деструкторы.
* - Исходное проявление проблемы было зафиксировано
* в https://github.com/ReOpen/ReOpenLDAP/issues/48
* в https://github.com/leo-yuriev/ReOpenLDAP/issues/48
*
* Предыдущее решение посредством выделяемого динамически MDB_rthc
* было не удачным, так как порождало либо утечку памяти,
@@ -8812,8 +8805,10 @@ mdb_cursor_del0(MDB_cursor *mc)
if (m3->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED) {
if (!(node->mn_flags & F_SUBDATA))
m3->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(node);
} else
} else {
mdb_xcursor_init1(m3, node);
m3->mc_xcursor->mx_cursor.mc_flags |= C_DEL;
}
}
}
}

3
mdbx.c
View File

@@ -864,13 +864,14 @@ int mdbx_set_attr(MDB_txn *txn, MDB_dbi dbi,
return rc;
}
old_attr = 0;
rc = mdbx_attr_peek(&old_data, &old_attr);
if (unlikely(rc != MDB_SUCCESS))
return rc;
if (old_attr == attr && (!data ||
(data->mv_size == old_data.mv_size
&& memcpy(data->mv_data, old_data.mv_data, old_data.mv_size) == 0)))
&& memcmp(data->mv_data, old_data.mv_data, old_data.mv_size) == 0)))
return MDB_SUCCESS;
mc.mc_next = txn->mt_cursors[dbi];