mirror of
https://github.com/isar/libmdbx.git
synced 2025-10-07 01:22:20 +08:00
mdbx: rename MDBX_MAP_RESIZED to MDBX_UNABLE_EXTEND_MAPSIZE.
Change-Id: I22fbdb4f08fd7a6ae37da42e6827677ae8a8337b
This commit is contained in:
@@ -3184,12 +3184,12 @@ static const char *__mdbx_strerr(int errnum) {
|
||||
"MDBX_READERS_FULL: Too many readers (maxreaders reached)",
|
||||
NULL /* MDBX_TLS_FULL (-30789): unused in MDBX */,
|
||||
"MDBX_TXN_FULL: Transaction has too many dirty pages,"
|
||||
" i.e transaction too big",
|
||||
" i.e transaction is too big",
|
||||
"MDBX_CURSOR_FULL: Internal error - Cursor stack limit reached",
|
||||
"MDBX_PAGE_FULL: Internal error - Page has no more space",
|
||||
"MDBX_MAP_RESIZED: Database contents grew beyond environment mapsize"
|
||||
" and engine was unable to extend mapping,"
|
||||
" e.g. since address space is unavailable or busy",
|
||||
"MDBX_UNABLE_EXTEND_MAPSIZE: Database engine was unable to extend"
|
||||
" mapping, e.g. since address space is unavailable or busy,"
|
||||
" or Operation system not supported such operations"
|
||||
"MDBX_INCOMPATIBLE: Environment or database is not compatible"
|
||||
" with the requested operation or the specified flags",
|
||||
"MDBX_BAD_RSLOT: Invalid reuse of reader locktable slot,"
|
||||
@@ -4762,7 +4762,7 @@ bailout:
|
||||
}
|
||||
#endif /* MDBX_USE_VALGRIND */
|
||||
} else {
|
||||
if (rc != MDBX_RESULT_TRUE) {
|
||||
if (rc != MDBX_UNABLE_EXTEND_MAPSIZE) {
|
||||
mdbx_error("failed resize datafile/mapping: "
|
||||
"present %" PRIuPTR " -> %" PRIuPTR ", "
|
||||
"limit %" PRIuPTR " -> %" PRIuPTR ", errcode %d",
|
||||
@@ -5250,7 +5250,7 @@ skip_cache:
|
||||
rc = MDBX_NOTFOUND;
|
||||
if (flags & MDBX_ALLOC_NEW) {
|
||||
rc = MDBX_MAP_FULL;
|
||||
if (next <= txn->mt_geo.upper) {
|
||||
if (next <= txn->mt_geo.upper && txn->mt_geo.grow) {
|
||||
mdbx_assert(env, next > txn->mt_end_pgno);
|
||||
pgno_t aligned = pgno_align2os_pgno(
|
||||
env, pgno_add(next, txn->mt_geo.grow - next % txn->mt_geo.grow));
|
||||
@@ -5271,7 +5271,6 @@ skip_cache:
|
||||
mdbx_error("unable growth datafile to %" PRIaPGNO " pages (+%" PRIaPGNO
|
||||
"), errcode %d",
|
||||
aligned, aligned - txn->mt_end_pgno, rc);
|
||||
rc = (rc == MDBX_RESULT_TRUE) ? MDBX_MAP_FULL : rc;
|
||||
} else {
|
||||
mdbx_debug("gc-alloc: next %u > upper %u", next, txn->mt_geo.upper);
|
||||
}
|
||||
@@ -6051,16 +6050,13 @@ static int mdbx_txn_renew0(MDBX_txn *txn, unsigned flags) {
|
||||
if (txn->mt_geo.upper > MAX_PAGENO ||
|
||||
bytes2pgno(env, pgno2bytes(env, txn->mt_geo.upper)) !=
|
||||
txn->mt_geo.upper) {
|
||||
rc = MDBX_MAP_RESIZED;
|
||||
rc = MDBX_UNABLE_EXTEND_MAPSIZE;
|
||||
goto bailout;
|
||||
}
|
||||
rc = mdbx_mapresize(env, txn->mt_next_pgno, txn->mt_end_pgno,
|
||||
txn->mt_geo.upper);
|
||||
if (rc != MDBX_SUCCESS) {
|
||||
if (rc == MDBX_RESULT_TRUE)
|
||||
rc = MDBX_MAP_RESIZED;
|
||||
if (rc != MDBX_SUCCESS)
|
||||
goto bailout;
|
||||
}
|
||||
}
|
||||
if (txn->mt_flags & MDBX_RDONLY) {
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
|
@@ -1404,7 +1404,7 @@ MDBX_INTERNAL_FUNC int mdbx_mresize(int flags, mdbx_mmap_t *map, size_t size,
|
||||
if (!(flags & MDBX_RDONLY) && limit == map->limit && size > map->current) {
|
||||
/* growth rw-section */
|
||||
if (!mdbx_NtExtendSection)
|
||||
return ERROR_CALL_NOT_IMPLEMENTED /* workaround for Wine */;
|
||||
return MDBX_UNABLE_EXTEND_MAPSIZE /* workaround for Wine */;
|
||||
SectionSize.QuadPart = size;
|
||||
status = mdbx_NtExtendSection(map->section, &SectionSize);
|
||||
if (!NT_SUCCESS(status))
|
||||
@@ -1422,7 +1422,7 @@ MDBX_INTERNAL_FUNC int mdbx_mresize(int flags, mdbx_mmap_t *map, size_t size,
|
||||
status = NtAllocateVirtualMemory(GetCurrentProcess(), &BaseAddress, 0,
|
||||
&RegionSize, MEM_RESERVE, PAGE_NOACCESS);
|
||||
if (status == /* STATUS_CONFLICTING_ADDRESSES */ 0xC0000018)
|
||||
return MDBX_RESULT_TRUE;
|
||||
return MDBX_UNABLE_EXTEND_MAPSIZE;
|
||||
if (!NT_SUCCESS(status))
|
||||
return ntstatus2errcode(status);
|
||||
|
||||
@@ -1540,8 +1540,8 @@ retry_mapview:;
|
||||
|
||||
if (map->address && (size != map->current || limit != map->limit)) {
|
||||
/* try remap with previously size and limit,
|
||||
* but will return MDBX_RESULT_TRUE on success */
|
||||
rc = MDBX_RESULT_TRUE;
|
||||
* but will return MDBX_UNABLE_EXTEND_MAPSIZE on success */
|
||||
rc = MDBX_UNABLE_EXTEND_MAPSIZE;
|
||||
size = map->current;
|
||||
limit = map->limit;
|
||||
goto retry_file_and_section;
|
||||
@@ -1564,7 +1564,7 @@ retry_mapview:;
|
||||
if (flags & MDBX_RDONLY) {
|
||||
map->current = (filesize > limit) ? limit : (size_t)filesize;
|
||||
if (map->current != size)
|
||||
rc = MDBX_RESULT_TRUE;
|
||||
rc = MDBX_UNABLE_EXTEND_MAPSIZE;
|
||||
} else if (filesize != size) {
|
||||
rc = mdbx_ftruncate(map->fd, size);
|
||||
if (rc != MDBX_SUCCESS)
|
||||
@@ -1581,7 +1581,7 @@ retry_mapview:;
|
||||
case EAGAIN:
|
||||
case ENOMEM:
|
||||
case EFAULT /* MADV_DODUMP / MADV_DONTDUMP are mixed for mmap-range */:
|
||||
rc = MDBX_RESULT_TRUE;
|
||||
rc = MDBX_UNABLE_EXTEND_MAPSIZE;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
@@ -1600,7 +1600,7 @@ retry_mapview:;
|
||||
#else /* MREMAP_MAYMOVE */
|
||||
/* TODO: Perhaps here it is worth to implement suspend/resume threads
|
||||
* and perform unmap/map as like for Windows. */
|
||||
rc = MDBX_RESULT_TRUE;
|
||||
rc = MDBX_UNABLE_EXTEND_MAPSIZE;
|
||||
#endif /* !MREMAP_MAYMOVE */
|
||||
}
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user