mirror of
https://github.com/isar/libmdbx.git
synced 2024-10-30 11:29:19 +08:00
mdbx: mdbx: avoid log a warning about empty header during DB creation.
Resolve https://github.com/erthink/libmdbx/issues/205.
This commit is contained in:
parent
68a164da2b
commit
b8e621cb2f
25
src/core.c
25
src/core.c
@ -3624,7 +3624,8 @@ static int __must_check_result mdbx_page_split(MDBX_cursor *mc,
|
||||
|
||||
static int __must_check_result mdbx_read_header(MDBX_env *env, MDBX_meta *meta,
|
||||
uint64_t *filesize,
|
||||
const int lck_exclusive);
|
||||
const int lck_exclusive,
|
||||
const mdbx_mode_t mode_bits);
|
||||
static int __must_check_result mdbx_sync_locked(MDBX_env *env, unsigned flags,
|
||||
MDBX_meta *const pending);
|
||||
static int mdbx_env_close0(MDBX_env *env);
|
||||
@ -10293,8 +10294,8 @@ mdbx_validate_meta(MDBX_env *env, MDBX_meta *const meta, uint64_t *filesize,
|
||||
/* Read the environment parameters of a DB environment
|
||||
* before mapping it into memory. */
|
||||
static __cold int mdbx_read_header(MDBX_env *env, MDBX_meta *dest,
|
||||
uint64_t *filesize,
|
||||
const int lck_exclusive) {
|
||||
uint64_t *filesize, const int lck_exclusive,
|
||||
const mdbx_mode_t mode_bits) {
|
||||
int rc = mdbx_filesize(env->me_lazy_fd, filesize);
|
||||
if (unlikely(rc != MDBX_SUCCESS))
|
||||
return rc;
|
||||
@ -10324,8 +10325,8 @@ static __cold int mdbx_read_header(MDBX_env *env, MDBX_meta *dest,
|
||||
int err = mdbx_pread(env->me_lazy_fd, buffer, MIN_PAGESIZE, offset);
|
||||
if (err != MDBX_SUCCESS) {
|
||||
if (err == MDBX_ENODATA && offset == 0 && loop_count == 0 &&
|
||||
*filesize == 0 && (env->me_flags & MDBX_RDONLY) == 0)
|
||||
mdbx_warning("read meta: empty file (%d, %s)", err,
|
||||
*filesize == 0 && mode_bits /* non-zero for DB creation */ != 0)
|
||||
mdbx_notice("read meta: empty file (%d, %s)", err,
|
||||
mdbx_strerror(err));
|
||||
else
|
||||
mdbx_error("read meta[%u,%u]: %i, %s", offset, MIN_PAGESIZE, err,
|
||||
@ -11369,11 +11370,12 @@ __cold int mdbx_env_get_maxreaders(const MDBX_env *env, unsigned *readers) {
|
||||
#endif /* LIBMDBX_NO_EXPORTS_LEGACY_API */
|
||||
|
||||
/* Further setup required for opening an MDBX environment */
|
||||
static __cold int mdbx_setup_dxb(MDBX_env *env, const int lck_rc) {
|
||||
static __cold int mdbx_setup_dxb(MDBX_env *env, const int lck_rc,
|
||||
const mdbx_mode_t mode_bits) {
|
||||
uint64_t filesize_before;
|
||||
MDBX_meta meta;
|
||||
int rc = MDBX_RESULT_FALSE;
|
||||
int err = mdbx_read_header(env, &meta, &filesize_before, lck_rc);
|
||||
int err = mdbx_read_header(env, &meta, &filesize_before, lck_rc, mode_bits);
|
||||
if (unlikely(err != MDBX_SUCCESS)) {
|
||||
if (lck_rc != /* lck exclusive */ MDBX_RESULT_TRUE || err != MDBX_ENODATA ||
|
||||
(env->me_flags & MDBX_RDONLY) != 0 ||
|
||||
@ -11405,7 +11407,7 @@ static __cold int mdbx_setup_dxb(MDBX_env *env, const int lck_rc) {
|
||||
return err;
|
||||
|
||||
#ifndef NDEBUG /* just for checking */
|
||||
err = mdbx_read_header(env, &meta, &filesize_before, lck_rc);
|
||||
err = mdbx_read_header(env, &meta, &filesize_before, lck_rc, mode_bits);
|
||||
if (unlikely(err != MDBX_SUCCESS))
|
||||
return err;
|
||||
#endif
|
||||
@ -12360,9 +12362,12 @@ __cold int mdbx_env_open(MDBX_env *env, const char *pathname,
|
||||
if (unlikely(rc != MDBX_SUCCESS))
|
||||
return rc;
|
||||
|
||||
if (flags & ~ENV_USABLE_FLAGS)
|
||||
if (unlikely(flags & ~ENV_USABLE_FLAGS))
|
||||
return MDBX_EINVAL;
|
||||
|
||||
if (flags & MDBX_RDONLY)
|
||||
mode = 0;
|
||||
|
||||
if (env->me_lazy_fd != INVALID_HANDLE_VALUE ||
|
||||
(env->me_flags & MDBX_ENV_ACTIVE) != 0 || env->me_map)
|
||||
return MDBX_EPERM;
|
||||
@ -12510,7 +12515,7 @@ __cold int mdbx_env_open(MDBX_env *env, const char *pathname,
|
||||
}
|
||||
}
|
||||
|
||||
const int dxb_rc = mdbx_setup_dxb(env, lck_rc);
|
||||
const int dxb_rc = mdbx_setup_dxb(env, lck_rc, mode);
|
||||
if (MDBX_IS_ERROR(dxb_rc)) {
|
||||
rc = dxb_rc;
|
||||
goto bailout;
|
||||
|
Loading…
Reference in New Issue
Block a user