[email protected] wrote: > Another problem: > > With an MDB_RDONLY environment on Windows, env->me_mapsize > does not seem to affect the actual map size or vice versa. > mdb_env_map() does > /* Don't set explicit map size, use whatever exists */ > > If the user sets a mapsize bigger than the current file,
That is impossible on Windows. The OS will not allow a mapsize bigger than the filesize. > and another process resizes the map and grows the DB into > the new size, then the RDONLY process will not discover > in mdb_txn_renew0() that its map is too small. > > If there is a technical reason for the current behavior, That change was made to accomodate opening of an mdb_copy'd DB file in read-only mode. Since mdb_copy only copies the used pages, the resulting file will be smaller than the configured mapsize. If you attempt to map this file as-is with the configured mapsize, it will fail. You would have to resize the file, but since the env is opened read-only, you should not make any such change to the file. We could alternatively change mdb_copy to explicitly set the filesize to match the mapsize at the end of the copy, and then this particular hack wouldn't be needed. > maybe it could create the full map (for the address space) > but record the smaller mapped size in MDB_env, and then > mdb_txn_renew0 could do some mutex-protected magic to > map in the new file segment if the file grew. That > should avoid surprising the user. -- -- Howard Chu CTO, Symas Corp. http://www.symas.com Director, Highland Sun http://highlandsun.com/hyc/ Chief Architect, OpenLDAP http://www.openldap.org/project/
