Alain wrote:
I encountered a problem trying to change the mapsize of an existing store.
It turned out to be that the newsize argument to mdb_env_map wasn't set correctly when coming from mdb_env_open2.
So I had to change the call to be: rc = mdb_env_map(env, meta.mm_address, newenv || env->me_mapsize != meta.mm_mapsize);
Please use diff -u when discussing changes. Or git diff. And tell what revision you're diffing against.
(adding the || != test)
Also I had some issues with large files (4GB) and I made some small changes which better match documentation and reported issues, but not sure if the original code was flawed or not. It is in mdb_env_map when we set the file pointer and EOF:
if (newsize) { if ((SetFilePointer(env->me_fd, sizelo, &sizehi, 0) ==
INVALID_SET_FILE_POINTER && GetLastError() != ERROR_SUCCESS) || !SetEndOfFile(env->me_fd) || (SetFilePointer(env->me_fd, 0, NULL, 0) == INVALID_SET_FILE_POINTER && GetLastError() != ERROR_SUCCESS)) return ErrCode(); }
Again, I made those changes according to what I noticed and this might not be the perfect final solution.
Cheers, Alain