{"id":13466829,"url":"https://github.com/yahoo/mdbm","last_synced_at":"2026-01-11T03:41:31.099Z","repository":{"id":17935293,"uuid":"20910247","full_name":"yahoo/mdbm","owner":"yahoo","description":"MDBM a very fast memory-mapped key/value store.","archived":false,"fork":true,"pushed_at":"2024-04-23T04:01:59.000Z","size":1651,"stargazers_count":989,"open_issues_count":16,"forks_count":111,"subscribers_count":73,"default_branch":"master","last_synced_at":"2024-12-31T07:28:15.116Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"timrc-git/mdbm","license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yahoo.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-06-17T04:29:09.000Z","updated_at":"2024-12-31T01:13:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/yahoo/mdbm","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yahoo%2Fmdbm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yahoo%2Fmdbm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yahoo%2Fmdbm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yahoo%2Fmdbm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yahoo","download_url":"https://codeload.github.com/yahoo/mdbm/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245566098,"owners_count":20636390,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T15:00:50.491Z","updated_at":"2026-01-11T03:41:31.055Z","avatar_url":"https://github.com/yahoo.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"#!/usr/bin/perl\n\nprint \u003c\u003cEOF\nMDBM is a fast dbm clone originally based on Ozan Yigit's sdbm.\n\nEOF\n;\n\n### Whenever you update a Version entry, remember to update the\n### date on the version line.  Also, add your user-id to the change.\n###\n### The input of this file should be treated as reStructuredText (reST):\n###   - Avoid using asterisks (\"*\") because they are used for reST\n###     italics/bold rendering.  If a warning is generated during\n###     document generation, prepend a double backslash (\"\\\\\") before\n###     the offending asterisk.\n###   - When making sublists (2nd level bulleted items), the 2nd level\n###     indentation must be 4 space from the 1st level bullet.\n###       - Example -- this is an indented 2nd level bullet.\n###         Because the 1st level bullet line is multiple lines,\n###         this will produce a benign error:\n###         ex., release_notes.txt:107: ERROR: Unexpected indentation.\n###\n### This README file resides in gendoc/README because the\n### reStructuredText publishing method (a PHP plugin) requires\n### that the checkout directory and build directory be the same.\n### The top-level README is symlink'd to this file for convenient\n### access.\n\nprint \u003c\u003cEOF\nMDBM Version 4 is a significant improvement to version 3 by optionally using\npthreads instead of ylock.  Additionally, all y* package dependencies are gone.\n\nVersion 4.12.4 (06/12/2018, crowdert)\n  - Fix off-by-one in mash.\n  - Fix variable usage, () vs {}, in mdbm_reset_all_locks.\n\nVersion 4.12.3 (01/12/2016, crowdert)\n  - Use realpath unconditionally in mdbm_delete_lockfiles\n\nVersion 4.12.2 (11/19/2015, carney)\n  - Fix mdbm_create documentation.\n\nVersion 4.12.1 (09/10/2015, crowdert)\n  - Use realpath() to resolve mdbm path in mdbm_lock tool.\n\nVersion 4.12.0 (09/08/2015, crowdert)\n  - Accept build number (BUILD_NUMBER) for RPM generation.\n  - Expose shared and smart locking functions from perl\n  - Added OSX build support (eam, areese)\n\nVersion 4.11.2 (03/10/2015, crowdert)\n  - Support MDBM_CACHEMODE_EVICT_CLEAN_FIRST when printing cachemode.\n\nVersion 4.11.1 (09/19/2014, crowdert)\n  - Extend and unify locking flags in utilities.\n\nVersion 4.11.0 (09/17/2014, crowdert)\n  - [BUG 7129362] Add function and stat/mash output for memory-resident page count.\n  - [BUG 7128096] Handle delayed signals with SIG_IGN handler.\n\nVersion 4.10.0 (07/15/2014, crowdert)\n  - [BUG 5486732] Only allow mdbm_setspillsize() if LARGE_OBJECTS are enabled.\n\nVersion 4.3.0 (04/11/2014, carney)\n  - [BUG 6866014] Add mdbm_test_build.pl to mdbm_tools\n  - [BUG 6885383] Add frequency distribution analysis scripts\n\nVersion 4.2.5 (04/07/2014, crowdert)\n  - [BUG 6878887] Ignore deleted entries in mdbm_preload. Add mpreload to mash commands.\n\nVersion 4.2.4 (04/01/2014, carney)\n  - [BUG 6866485] Extend mdbm_export to emit records size information without data.\n\nVersion 4.2.3 (08/14/2013, crowdert)\n  - [BUG 6524877] Added mdbm_reset_all_locks command to reset lockfiles after a power failure.\n\nVersion 4.2.2 (08/14/2013, crowdert)\n  - [BUG 6463775] Make signal defer flag use atomic inc/dec.\n  - [BUG 6479189] Enforce max page size limitation of 16MB-64bytes(16777152) - kislikm.\n  - [BUG 5273139] Enforce limits on pre-split size.\n  - [BUG 5280242] Enforce limits on spill-size.\n  - [BUG 6526912] Remove mdbm_compress command-line util -kislikm\n\nVersion 4.2.1 (08/01/2013)\n  - [BUG 6347269] mdbm_delete_lockfiles should remove stale ylock arena entries.\n  - [BUG 6425222] add mdbm_internal to function names that caused or might cause\n                  name collisions.\n\nVersion 4.2.0 (06/14/2013)\n  - Separate out functions needed by plugins so that the use of RTLD_LOCAL\n    (e.g. Java JNI) won't break the ylock-plugin.\n\nVersion 4.1.6 (03/20/2013)\n  - Delay ylock plugin loading to prevent registration failure in apache.\n\nVersion 4.1.5 (02/08/2013)\n  - [BUG 6089389] Take out exclusive lock instead of write lock in mdbm_dup_handle.\n\nVersion 4.1.4 (01/15/2013, crowdert)\n  - Fixed truncate_db() use of an (invalid) remapped header variable.\n  - Merged trunk changes (up to revision 22225) into V4.\n  - Excised vestigial V2 conversion code.\n  - [BUG 6061776] 64 bit mdbm_replace command line util core dumps with large MDBMs\n    (2GB or more) because it is mapped HEADER_ONLY but the directory is copied. (kislikm)\n\nVersion 4.1.3 (01/15/2013, crowdert)\n  - Merged trunk changes (up to revision 22055) into V4.\n\nVersion 4.1.2 (11/26/2012, kislikm)\n  - [BUG 5969052] implement mdbm_count_pages() and mdbm_count_records().\n\nVersion 4.1.1 (11/26/2012, crowdert)\n  - [BUG 5956125] Fixed plugin leak on close.\n\nVersion 4.1.0 (11/12/2012, crowdert)\n  - [BUG 5943497] Fixed permissions issues with ylock plugin.\n  - Added MDBM_SINGLE_ARCH flag for users to indicate they don't need mixed-arch\n    access, and get the faster pthreads-based locking.\n  - Added \"fat\" 32/64-bit support.\n  - Added plugable locking (i.e. mdmb_ylock_plugin).\n    pthreads is included by default, but doesn't allow for mixed 32/64-bit access\n    to the same file (due to pthreads limitations).\n\nVersion 4.0.6 (08/07/2012, crowdert)\n  - NOTE: Yroots/images older than 6.2-20120514 DO NOT properly support robust\n    locks. However yinst/yicf don't allow the granularity needed to specify this.\n  - Moved lockfiles to /tmp/.mlock-named/\u003cmdbm-path\u003e._int_ for compatibility where\n    the location of the mdbm file is not writable.\n\nVersion 4.0.5 (06/27/2012, crowdert)\n  - Set minimum OS version to 6.2. Earlier versions of pthreads have issues with\n    robust mutexes not recovering from abnormal exits (abort, crash, etc.)\n\nVersion 4.0.4 (06/27/2012, crowdert)\n  - no longer \"replaces\" older mdbm packages.\n\nVersion 4.0.3 (01/19/2012, crowdert)\n  - added \"NO_AUTO_REQUIRES=yes\" to yicf to prevent system openssl dependency.\n\nVersion 4.0.2 (01/19/2012, crowdert)\n  - Fixed an erroneous return value from mdbm_open().\n\nVersion 4.0.1 (01/19/2012, crowdert)\n  - Removed dependence on openssl_tps package.\n  - Added stubs for legacy limit_size functions to ease migration.\n  - Added \"yinst replaces mdbm-3.9999.9999\" to ease migration.\n  - Added MDBM_API_VERSION define (=4) to help users know what\n    they are compiling against.\n  - Removed MDBM_CREATE_V2.\n  - Disabled 32-bit builds for RHEL6.\n\nVersion 4.0.0 (01/19/2012, crowdert)\n  - Initial version.\n  - Added MDBM_LOCK_ANY flag to open with whatever locking mode exists.\n    Shared and partition mode flags can be given as a suggested default.\n  - Added mdbm_get_lockmode() to query the current locking mode.\nEOF\n;\n\nprint \u003c\u003cEOF\n\nMDBM Version 3 is a complete rewrite borrowing on the concepts from\nthe original MDBM.\n\nVersion 3.37.0 (04/17/2013)\n  - [BUG 6099293] Print version of yinst in mdbm_environment.sh\n  - [BUG 6258025] Add RHEL package environment information to mdbm_environment.sh\n\nVersion 3.36.2 (04/15/2013)\n  - [BUG 6222973] Unable to upgrade existing mdbm from 3.26 to 3.36.\n    Make mdbm_create call mdbm_fsync to ensure that the file is sync'd\n    to disk.  This avoids waiting for a hugetlbfs delayed system sync.\n    When creating an hugetlbfs mdbm, force an fsync of the header.\n    Use mmap instead of pread to get the magic number for files in\n    hugetlbfs.  hugetlbfs reads are known not to work in kernel version\n    2.6.11.  hugetlbfs doesn't fully support read-write access\n    until kernel 2.6.25.  For interim kernel versions (ex., 2.6.18,\n    assume that reads do not work, so mmap must be used).\n\nVersion 3.36.1 (02/08/2013)\n  - [BUG 6089389] Take out exclusive lock instead of write lock in mdbm_dup_handle.\n\nVersion 3.36.0 (02/08/2013)\n  - [BUG 5916060] Disable the temporary LEGO_ROLLBACK feature\n    introduced in 3.35.0. (carney)\n  - [BUG 6061776] 64 bit mdbm_replace command line util core dumps with large MDBMs\n    (2GB or more) because it is mapped HEADER_ONLY but the directory is copied. (kislikm)\n\n\nVersion 3.35.1 (01/07/2013)\n  - [BUG 5688486] Refactor mdbm headers to sync up public headers\n    (mdbm_dev and documentation) with actual development headers. (carney)\n    This change does not introduce any real differences, but it did\n    affect many files after renaming fundamental files.  The v3 headers\n    instead of the v2 headers match the public files names.\n    The component build now runs unit tests.\n    The new/include/mdbm/ directory was removed.\n    Renamed mdbm/include files:\n\n      * mdbm.h -\u003e old_mdbm.h, mdbm.c -\u003e old_mdbm.c\n      * new_mdbm.h -\u003e mdbm.h, new_mdbm.c -\u003e mdbm.c\n\n  - [BUG 5999799] Cannot store large objects into a dynamic-growth mdbm. (carney)\n    Add dynamic-growth mdbm large object unit tests.\n    Does not reproduce Lego's failure case.\n    Move large object documentation from Tips twiki to concepts.rst.\n  - [BUG 6014455] Add mdbm_delete_lockfiles command line util whose\n    purpose is to delete all of an MDBM's lock files.               (kislikm)\n\nVersion 3.35.0 (11/05/2012)\n  - [BUG 5953069] Allow lockmode to be specified in mdbm_export.\n  - [BUG 5916060] As a Lego SE, I want to be able to rollback during\n    MDBM v2 to v3 migration to provide uninterrupted service.\n    Added temporary environment variables for Lego rollback. (carney)\n  - [BUG 5583214] Implement smart locking API that uses mdbm_open flags to determine\n    locking type: mdbm_lock_smart,mdbm_unlock_smart,mdbm_trylock_smart. (kislikm)\n\nVersion 3.34.1 (11/05/2012)\n  - [BUG 5902509] Remove tps_openssl_dev-0.9.8k_11 from mdbm binary package\n    dependedencies.  Remove tps_openssl-0.9.8k_11 from mdbm_dev package\n    dependedencies. (carney)\n\nVersion 3.34.0 (11/01/2012)\n  - [BUG 5817902] Added new API mdbm_preload() for reading every 4K bytes\n    to force all pages into memory (sbaby)\n  - [BUG 5833868] Added new API mdbm_lock_pages() and mdbm_unlock_pages\n    to lock some or all of MDBM's pages into RAM memory using mlock(). (kislikm)\n  - [BUG 5902509] Lower tps_openssl minimum version for Broadband\n    partner Verizon compatibility.  The minimum version has been lowered\n    from tps_openssl-0.9.8o_2 to tps_openssl-0.9.8k_11. (carney)\n\nVersion 3.33.2 (08/22/2012, carney)\n  - [BUG 5688486] Move API documentation into new_mdbm.h and create API groups (carney)\n\nVersion 3.33.1 (06/27/2012, mlakes)\n  - [BUG 5648770] Windowed mode is disabled on RHEL6 (and 4-on-6) due to changes in\n    remap_file_pages() (kislikm)\n  - [BUG 5648334] Support v2-\u003ev3 file format upgrade in mdbm_replace (crowdert)\n\nVersion 3.33.0 (06/01/2012, mlakes)\n  - [BUG 5617110] Added mdbm_get_config and mdbm_convert_v2_to_v3.pl to convert v2 to v3 DB.\n  - Added mdbm_compare to output differences between 2 mdbms.\n  - Added new public API mdbm_get_hash_value and new internal API mdbm_get_partition_number\n  - [BUG 5555987] Add mdbm package conflicts clause to avoid ysys robust mmutex packages (carney)\n  - [BUG 5283034] Correctly handle mdbm_get_magic_number() calls for V2 MDBMs (kislikm)\n  - [BUG 5550568] new API: mdbm_get_hash_value\n  - [BUG 5545200] new internal API: mdbm_get_partition_number\n\nVersion 3.32.1 (04/23/2012, carney)\n  - [BUG 5539120] Backout r18803 on new_mdbm.c\n\nVersion 3.32.0 (04/17/2012, crowdert)\n  - Added delete option to mdbm_import for zero-length values.\n  - [BUG 5530788] Lower ysys dependency from ysys-2.28 to ysys-2.26 (carney)\n  - [BUG 5530815] Change default creation file format from v2 to v3 (carney)\n\nVersion 3.31.2 (03/15/2012, carney)\n  - [BUG 5267466] Add check to enforce that mdbm_open() of a V3 MDBM with\n    MDBM_O_CREAT also requires MDBM_O_RDWR.  Allow mdbm_open opened with\n    MDBM_O_RDONLY|MDBM_O_CREAT to create an MDBM (if one is not present),\n    and open it in read-only mode. (kislikm)\n\nVersion 3.31.1 (02/09/2012, carney)\n  - [BUG 5354707] ynet_dbutil -3 cannot be run twice without rm -rf /tmp/.ylock-\\\\*.\n    Change open_locks for the mode of a named mutex file.  If an\n    mdbm's permission has read access, the corresponding `ugo' permission\n    on the mutex file will also have write access.\n\nVersion 3.31.0 (02/03/2012, crowdert)\n  - [BUG 5332961] Forced stats header fields to be fixed size, independent\n    of platform. They were introduced in 3.28.1.\n    NOTE: Any V3 MDBMs created by 32-bit MDBM libraries 3.28 to 3.30\n    will be incompatible with new libraries and pre-3.28 libraries.\n    They should be recreated from scratch, or by using mdbm_export (V3.28)\n    and a newer version of mdbm_import.\n\nVersion 3.30.0 (01/20/2012, crowdert)\n  - [BUG 5318830] Removed Windowed-Min mode. It was not being used by any users,\n    and is fundamentally broken on RHEL6 due to it's inability to coalesce and\n    re-fragment mmaped chunks in remap_file_pages().\n\nVersion 3.33.1 (06/27/2012, mlakes)\n  - [BUG 5648770] Windowed mode is disabled on RHEL6 (and 4-on-6) due to changes in\n    remap_file_pages() (kislikm)\n  - [BUG 5648334] Support v2-\u003ev3 file format upgrade in mdbm_replace (crowdert)\n\nVersion 3.33.0 (06/01/2012, mlakes)\n  - [BUG 5617110] Added mdbm_get_config and mdbm_convert_v2_to_v3.pl to convert v2 to v3 DB.\n  - Added mdbm_compare to output differences between 2 mdbms.\n  - Added new public API mdbm_get_hash_value and new internal API mdbm_get_partition_number\n  - [BUG 5555987] Add mdbm package conflicts clause to avoid ysys robust mmutex packages (carney)\n  - [BUG 5283034] Correctly handle mdbm_get_magic_number() calls for V2 MDBMs (kislikm)\n  - [BUG 5550568] new API: mdbm_get_hash_value\n  - [BUG 5545200] new internal API: mdbm_get_partition_number\n\nVersion 3.32.1 (04/23/2012, carney)\n  - [BUG 5539120] Backout r18803 on new_mdbm.c\n\nVersion 3.32.0 (04/17/2012, crowdert)\n  - Added delete option to mdbm_import for zero-length values.\n  - [BUG 5530788] Lower ysys dependency from ysys-2.28 to ysys-2.26 (carney)\n  - [BUG 5530815] Change default creation file format from v2 to v3 (carney)\n\nVersion 3.31.2 (03/15/2012, carney)\n  - [BUG 5267466] Add check to enforce that mdbm_open() of a V3 MDBM with\n    MDBM_O_CREAT also requires MDBM_O_RDWR.  Allow mdbm_open opened with\n    MDBM_O_RDONLY|MDBM_O_CREAT to create an MDBM (if one is not present),\n    and open it in read-only mode. (kislikm)\n\nVersion 3.31.1 (02/09/2012, carney)\n  - [BUG 5354707] ynet_dbutil -3 cannot be run twice without rm -rf /tmp/.ylock-\\\\*.\n    Change open_locks for the mode of a named mutex file.  If an\n    mdbm's permission has read access, the corresponding ugo permission\n    on the mutex file will also have write access.\n\nVersion 3.31.0 (02/03/2012, crowdert)\n  - [BUG 5332961] Forced stats header fields to be fixed size, independent\n    of platform. They were introduced in 3.28.1.\n    NOTE: Any V3 MDBMs created by 32-bit MDBM libraries 3.28 to 3.30\n    will be incompatible with new libraries and pre-3.28 libraries.\n    They should be recreated from scratch, or by using mdbm_export (V3.28)\n    and a newer version of mdbm_import.\n\nVersion 3.30.0 (01/20/2012, crowdert)\n  - [BUG 5318830] Removed Windowed-Min mode. It was not being used by any users,\n    and is fundamentally broken on RHEL6 due to it's inability to coalesce and\n    re-fragment mmaped chunks in remap_file_pages().\n\nVersion 3.29.1 (01/12/2012, carney)\n  - [BUG 5270055] Consecutive calls to mdbm_import does not update\n    values to the existing key when the data is in cdb format.\n    A `-S' option was added to mdbm_import to specify a numeric\n    storage flag for mdbm_store (insert, replace, insert_dup, modify).\n\nVersion 3.29.0 (12/21/2011, carney)\n  - [BUG 5033658] mdbm_open performance improvement.\n    Refactor out significant functionality of mdbm_open into\n    check_hugetlbfs and get_magic_number for profiling purposes.\n    mdbm_get_magic_number added to public API, which is intended for testing purposes.\n  - Fix new_mdbm.h typo, change extern mdbm_get_stat to mdbm_get_stats.\n  - [BUG 4784613] yphp_mdbm segmentation faults with mdbm-3.26.4.55.\n    regtests/test-4784613.cc added to reproduce the crash in split_page.\n  - [BUG 5250025] mdbm_import does not accept k/m as suffix for page size.\n    For mdbm_import, the units for the default db size is now in MB\n    instead of bytes.\n  - [BUG 5264717] Requirements for the .protect symbolic link used by mdbm_open()\n    to determine whether to enable protection or not have been relaxed: the\n    symlink no longer needs to be owned by root.  The previous code did not enforce\n    the requirement that the file must be a symlink, but now it does that. (kislikm)\n  - [BUG 5212828] Segfault in mdbm_store (carney)\n    regtests/test-512828.cc added to reproduce the crash in split_page.\n\nVersion 3.28.1 (11/03/2011, carney)\n  - [BUG 4919056] Track mdbm last read, write, and delete time.\n    Remove bogus assert(sizeof(time_t) = 8).\n  - [BUG 4784613] yphp_mdbm segmentation faults with mdbm-3.26.4.55\n    Add regression test test-4784613.cc\n\nVersion 3.28.0 (10/25/2011, carney)\n  - [BUG 4739922] mdbm_stat should display an cache type (LRU, LFU, GDSF)\n  - [BUG 4585940] mdbm_stat prints Hash func = 5/FNV while mdbm is\n    created with mdbm_create -h 0/CRC-32.\n  - [BUG 4844568] Help option (-h) mdbm_compress is not available\n  - [BUG 4919056] Track mdbm last read, write, and delete time.\n    See new functions: mdbm_get_stat_counter, mdbm_get_stat_time, and\n    mdbm_reset_stat_operations.\n\nVersion 3.27.1 (10/14/2011, carney)\n  - Move mdbm_environment from top directory to the bin directory.\n  - [BUG 4883332] mdbm_import fails with the option to limit large object size.\n    The program's -y option was documented incorrectly.\n  - [BUG 4888620] mdbm should expose the get_version function\n  - [BUG 4887617] mdbm_check should allow the version of an mdbm to be specified\n  - [BUG 4846762] Maple object cache cannot allocate storage frequently\n    on FEs, causing MDBM errors and perf degrdation due to Maple configure.\n    This fix displays warnings when using mdbm_limit_size_new for v3 format\n    mdbms.  mdbm v3 files should use mdbm_limit_size_v3, and not\n    mdbm_limit_size_new.  However, to provide a better v2 to v3\n    migration experience, mdbm_limit_size_new has been modified:\n\n      * Display a warning messsage\n      * If the page size is not over 64KB, use the v2 shake data format\n      * If the page size is over 64KB, use the v3 shake data format\n\nVersion 3.27.0 (10/02/2011, carney)\n  - [BUG 4704915] mdbm_open uses clashing O_FSYNC and MDBM_OPEN_WINDOWED flags.\n    When packages are ported to RHEL6, users must scan for mdbm_open calls and\n    change from open flags O_XXX to MDBM_O_XXX.  This will avoid a collision\n    between O_FSYNC and MDBM_OPEN_WINDOWED. (2011-07-27, arnej)\n  - mdbm_environment.sh added for gathering information for bug reporting.\n  - For mdbm_dev, add dependencies on ysys_dev and ylock_dev to ensure that\n    they stay in sync with their installed corresponding binary packages.\n  - Update doxygen configuration from 1.2.15 to 1.5.8.\n  - Release Notes are now MDBM_BUILD dependent.\n  - [BUG 4821002] Help documentation of mdbm_replace has incorrect sequnce of command line options\n  - [BUG 4821618] Fix array overrun and corruption from v3 stats function.\n  - [BUG 4838668] mdbm_sync gives an error \"invalid option\" for -L\n  - [BUG 4840488] Compilation was failed because of\n    \"/usr/bin/ld: warning: libcrypto.so.4, needed by /home/y/lib64/libmdbm.so,\n    may conflict with libcrypto.so.108\" on rhel.5.4.\n    Starting with mdbm-3.27.0.65, libmdbm.so is linked with tps_openssl\n    instead of the system's openssl.\n  - [BUG 4846762] Maple object cache cannot allocate storage frequently\n    on FEs, causing MDBM errors and perf degrdation due to Maple\n    configure.\n    The root cause is that mdbmv3 apps with page size over 64KB are using\n    mdbm_limit_size_new instead of mdbm_limit_size_v3.  This results in\n    the shake function being called with mdbm_shake_data (16-bit sizes)\n    instead of mdbm_shake_data_v3.  The shake fails to find space, and\n    that object cannot be inserted.\n  - [BUG 4867680] 400M fixed size mdbm using 2G of address space\n    Add options -D and -S to mdbm_trunc to establish a size limits on the mdbm.\n    There is no option to preserve large objects attribute.\n    Log an error if the new limit size is smaller than the existing size.\n  - [BUG 4637883] Named mutexes must be opened using same \"mode\" as underlying mdbm\n  - [BUG 4723272] Support environment variable to turn on mdbm protection globally.\n    Environment variable MDBM_PROTECT_PATH_REGEX may be used to define a\n    POSIX Extended Regular Expression that is matched against the mdbm's realpath.\n    If there is a match, the mdbm protect feature is enabled.  Setting\n    MDBM_PROTECT_PATH_REGEX=. enables the protect feature for any mdbm.\n\nVersion 3.26.4 (07/22/2011, carney)\n  - [FIX BUG 4511494] Corrections and fixes to File_MDBM.pm's pod\n  - [FIX BUG 4597969] MDBM V3 causes mdbm_popen to return old value after mdbm_replace\n\nVersion 3.26.3 (05/20/2011, rr)\n  - [FIX BUG 4558462] Add missing mdbm3_config.h header to dev package.\n\nVersion 3.26.2 (05/19/2011, rr)\n  - [BUG 4550018] Fix default mdbm_check level (-d 3) for v3 dbs; fix mdbm_check exit code\n\nVersion 3.26.1 (05/03/2011, rr)\n  - [FIX BUG 4511240] Add lock upgrade during page-split (w/ deadlock avoidance) for correctness.\n  - Retry failed store to backing-store in case of possible page-split partition conflict.\n\nVersion 3.26.0 (04/28/2011, rr)\n  - [BUG 4504900] Use full db locking function when protecting handle/db.\n\t\t  Track locked partition (instead of page) and improve conflict logging.\n\t\t  Return success when backing-store fetch succeeds even if cache refill fails.\n  - Add mdbm_digest utility.\n  - Add windowing support to utilities.\n  - [FIX BUG 4503448] Fix v3 mdbm_fetch return val when fetch fails.\n  - Add mdbm_lock_reset() to reset db lock and allow return from part/rw locks to db locks.\n\nVersion 3.25.3 (04/26/2011, rr)\n  - Fix for overzealous mprotect when mapped in header-only mode.\n\nVersion 3.25.2 (04/18/2011, rr)\n  - Fix SEGV in del_entry when deleting large-object in windowed-mode.\n  - Fix incomplete value mapping of large-object in windowed-mode.\n\nVersion 3.25.1 (04/18/2011, rr)\n  - [FIX BUG 4480191] Disallow sethash/set_alignment/set_cachemode when db not empty.\n  - [FIX BUG 4480023] Handle deleted entries properly in mdbm_iterate.\n  - Fix windowed and windowed-min mode page iteration in a bunch of places.\n  - Fix db check code which was iterating the entries on each page incorrectly.\n  - Include page number in mdbm_dump output for lob chunks.\n  - Make v2 compact calls conditional.\n\nVersion 3.25.0 (03/16/2011, rr)\n  - Log the lock state when a locking error is detected.\n  - Bump the ysys dependency to support threaded locking correctly.\n\nVersion 3.24.1 (03/14/2011, rr)\n  - [FIX BUG 4397460] Fix corruption caused by update of large object.\n  - [FIX BUG 4397471] Fix mmap error due to bad dir size calculation in windowed mode.\n  - More locking cleanup (partition conflicts when using plocks for backing store).\n  - Add missing mdbm_bench backing-store config options.\n  - mdbm_bench main proc/thread waits for all child procs/threads to finish before exiting.\n\nVersion 3.24.0 (03/10/2011, rr)\n  - [FIX BUG 4391578] [BUG 4388269]\n      Overhaul backing-store lock management to streamline and avoid lock-ordering\n      issues.  Backing-store locks are now always taken alongside the tier-1 locks.\n      This improves the consistency guarantees as well as avoiding unintentional\n      deadlocks.\n  - [FIX BUG 4380791] Add mdbm_create -s option to specify main db size.\n\nVersion 3.23.6 (02/23/2011, rr)\n  - [FIX BUG 4353743] Fix locking error during mdbm_dup_handle().\n  - Fix partitioned/rw locking modes to make exclusive locks work with threads.\n\nVersion 3.23.5 (02/15/2011, rr)\n  - [FIX BUG 4331169] Fix some mdbm_stat -u metrics; add many new ones.\n  - Fix internal directory handling during db growth.\n  - Fix extraneous unlock error when calling mdbm_fetch_dup_r with no lock held.\n  - Add missing locking to mdbm_fetch utility.\n\nVersion 3.23.4 (01/19/11, rr)\n  - Fix hang in window allocator (when window is too small).\n\nVersion 3.23.3 (01/10/11, rr)\n  - [FIX BUG 4248986] Ignore cache refill errors due to large objects fetched from backing.\n\nVersion 3.23.2 (01/10/11, rr)\n  - [FIX BUG 4248297] Fix mdbm_first/next with windowed mode and large objects.\n  - Add -v (verbose) and -w (windowed) options to mdbm_fetch.\n\nVersion 3.23.1 (12/15/10, rr)\n  - [FIX BUG 4213782] Use db-level lock to protect attribute-setting functions\n  - Rewrite internal lock to used second named lock (instead of ylock arena mutex hack).\n\nVersion 3.23.0 (12/13/10, rr)\n  - [FIX BUG 4195889] Support mdbm_replace when used with dup'ed handles.\n  - Switch to named mutex to improve robustness of mdbm_replace operation.\n\nVersion 3.22.0 (12/02/10, rr)\n  - [FIX BUG 4134447] Add mdbm_dup_handle() for sharing of mappings across threads.\n  - Add mdbm_get_cachemode().\n  - [FIX BUG 4143244] Add cache-store rstats to track actual stores to cache db.\n\nVersion 3.21.6 (11/11/10, rr)\n  - [FIX BUG 681782] Make mdbm_set_alignment more explicit.\n  - [FIX BUG 1100780] Clarify doc on mdbm_store_r datum pointers.\n  - [FIX BUG 2476296] Point to twiki doc from package.\n  - [FIX BUG 3981675] Make mdbm_close no-op if passed NULL (matches v2 behavior)\n  - [FIX BUG 4017582] abort() on window allocation failures (fail fast)\n  - [FIX BUG 4116544] Fix mdbm_import to accept dbsize \u003e= 2G\n  - Fix bug in windowed mode which could fail to fetch a record which existed in the db\n\nVersion 3.21.5 (11/01/10, rr)\n  - [BUG 4106371] Revert v2 locking to 2.32.0 to support multi-threaded access via mdbm_lock.\n  - Fix v3 check errno when db problem is detected (was EBADF, not EFAULT).\n  - Fix v3 mdbm_check return code.\n\nVersion 3.21.4 (09/30/10)\n  - Add window size and max window used stats to get_window_stats.\n  - [BUG 4013936] Fix window metadata initialization.\n\nVersion 3.21.3 (09/29/10)\n  - [BUG 4013936] Simplify window allocator to avoid fragmentation issues.\n\nVersion 3.21.2 (09/21/10)\n  - [FIX BUG 4003422] Grab db lock for top-level db functions to ensure proper protect behavior.\n  - [FIX BUG 3885569] Ensure that db passed to mdbm_init_rstats is a v3 db.\n\nVersion 3.21.0 (08/11/10)\n  - Attempt lock upgrade if necessary for defrag chunk allocation (large obj, oversized page, etc.)\n  - Revise Makefiles (coverage/docs)\n\nVersion 3.20.6 (08/07/10, rr)\n  - Stats bugs:  Add missing overhead bytes to page stats.\n\nVersion 3.20.5 (08/02/10, rr)\n  - Windowing bug:  Fix missing page map call in find_defrag_free_chunk().\n  - Windowing bug:  Fix window page leak when dealing with oversized pages.\n\nVersion 3.20.4 (07/26/10, rr)\n  - [BUG 3729155] Fix misplaced get_window_page assertion().\n\nVersion 3.20.3 (07/22/10, rr)\n  - [BUG 3729155] Rework window page allocation to track in-use pages\n\nVersion 3.20.2 (06/10/10, rr)\n  - [FIX BUG 3729346] Add window size checks that take into account large object requirements.\n\nVersion 3.20.1 (06/10/10, rr)\n  - [BUG 3724876] Bypass some per-entry checking for deleted entries.\n  - [BUG 3724876] Fix mdbm_stat crash when db size is \u003e= 1TB.\n  - [FIX BUG 3727737] Fix crash in store when using MDBM_CACHE_MODIFY.\n  - [FIX BUG 3716553] Force a minimum of 2 pages in window to prevent split_page crash.\n  - Fix mdbm_bench threaded (-t) mode.\n\nVersion 3.20.0 (05/24/10, rr)\n  - Add -u (utilization) option to mdbm_stat for v3 databases.\n  - Revise random key generation in mdbm_bench.\n  - Add 4th level to check_db which verifies key hash in page directory.\n  - Add missing mdbm_copy utility to package.\n\nVersion 3.19.0 (04/21/10, rr)\n  - Add MDBM_CACHE_MODIFY flag to mdbm_store() to enable cache-pollution avoidance.\n\nVersion 3.18.3 (04/19/10, rr)\n  - Minor code tweaks to silence compiler warnings.\n  - Use MDBM_REPLACE to insert keys in mdbm_bench in sequential-key mode.\n\nVersion 3.18.2 (04/14/10, rr)\n  - [FIX BUG 3552158] Fix directory protection broken in 3.18.0.\n  - Tweak get_window_page length processing to avoid incorrect page mappings.\n\nVersion 3.18.1 (03/26/10, rr)\n  - Bypass auto-check-on-lock-owner-death if running windowed.\n  - Bypass internal lock if opened without locking.\n  - Disable unnecessary first-page memory protection.\n\nVersion 3.18.0 (03/24/10, rr)\n  - Add windowed-min mode (MDBM_OPEN_WINDOWED_MIN) for minimum footprint windowing.\n  - Fix memory leak in window management code.\n  - Add missing mdbm_stats.h to mdbm_dev.\n\nVersion 3.17.5 (03/10/10, rr)\n  - [FIX BUG 3437353] Fix corner case in freeing large objects during purge.\n\nVersion 3.17.4 (03/10/10, rr)\n  - [FIX BUG 3465383] Fix locking around db integrity check triggered by lock-owner death.\n  - [FIX BUG 3465414] Fix protect mode when windowing enabled.\n  - [FIX BUG 3465421] Fix auto-switch from db locking mode to partitioned locks.\n  - [FIX BUG 3465425] Fix detection of lock-owner death when using shared lock.\n  - Add support for size suffixes in mdbm_bench (e.g., -p 128k).\n\nVersion 3.17.3 (03/08/10, rr)\n  - [FIX BUG 3437353] Fix mdbm_purge to free all large-objects during purge.\n  - [FIX BUG 3457932] Fix page stats when page includes large-objects.\n  - [FIX BUG 3458802] Fix error/crash issues with large-objects and windowed-mode.\n\nVersion 3.17.2 (02/24/10, rr)\n  - [FIX BUG 3415090] Fix mprotect error/SEGV when opening header-only (i.e., mdbm_replace).\n\nVersion 3.17.1 (02/11/10, rr)\n  - Add column headers to mdbm_bench output.\n  - Fix -M/-W checking in mdbm_bench.\n  - Rework non-rstats benchmark output.\n  - Update mdbm_rstats usage message.\n  - Set a long default for mdbm_rstats -s option.\n  - [FIX BUG 3380591] Separate internal lock from db lock to avoid lock ordering issues.\n\nVersion 3.16.2 (02/10/10, rr)\n  - Fix RHEL build.\n\nVersion 3.16.1 (02/09/10, rr)\n  - [FIX BUG 3353497] mdbm_bench checks that -W option is given if -M option is given.\n  - [FIX BUG 3358194] Move file stat in mdbm_replace_db to fix replacement of v2 dbs.\n  - [FIX BUG 3338296] Emit warning from mdbm_limit_size* if \u003c5% space allocated for large-obj.\n  - [FIX BUG 3334756] Use realpath for opening mmutex file.\n  - Add MDBM_NO_DIRTY open flag to disable dirty-bit management.\n  - Rework write testing in mdbm_bench.\n\nVersion 3.16.0 (02/03/10, rr)\n - Add time histogram support to realtime stats.\n - Add diskstats (-D) to mdbm_bench for RHEL.\n - Add mlockall (-0) option to mdbm_bench.\n - Add support for hugetlbfs-backed mdbm's on RHEL.\n - Add support for cache-eviction of large objects.\n\nVersion 3.15.0 (01/20/10, rr)\n - Drop i386-freebsd6-gcc3 x86_64-freebsd6-gcc3 support\n\nVersion 3.14.0 (01/13/10, rr)\n - [FIX BUG 3199041] Add no-lock options (usu. -L) to all utilities.\n - Redo locking recursion change to support threaded locking via db-lock (not partitioned/rw).\n - [FIX BUG 3312015] Fix v2 stat crash when no-lock option used.\n - Rework cache eviction to properly handle clean-func refusals/failures.\n - Use atomic ops to update realtime stats.\n - Fix RHEL5 compile issues.\n - Fix window sizes \u003e=4GB.\n - Use non-blocking (no prefault) remap when windowing an entire db page (store optimization).\n - Add cache eviction to realtime stats.\n\nVersion 3.13.0 (01/05/10, rr)\n - Add windowing support for accessing larger-than-address-space/larger-than-RAM db's.\n - Add mdbm-based backing store support.\n - Add locking stats to runtime stats.\n - [FIX BUG 3199041] Add MDBM_OPEN_NOLOCK support to v3 to bypass all locking.\n - Add support to mdbm_bench for configuring backing store\n - Generate mdbm_bench keys dynamically in sequential-key-mode to reduce bloat.\n - Add -b (windowed), -P (read-only), -V (check values) options to mdbm_bench.\n\nVersion 3.12.0 (12/11/09, rr)\n - [BUG 3199041] Add MDBM_OPEN_NOLOCK support to v2 to bypass all locking.\n - [FIX BUG 3236690] Fix missing unlock in v2 mdbm_sethash function.\n - Revise rstats interface so monitors don't need to open db.\n - Rework mdbm_bench rate and timing calculations.\n - Fix mdbm_stat overflow in number of pages.\n - Add missing locking in some mdbm_set* functions.\n - Fix -L (nolock) option for mdbm_stat.\n - Fix O_DIRECT alignment handling for write.\n\nVersion 3.11.2 (12/03/09, rr)\n - Fix corruption when 0-sized large object is moved during defrag.\n - Avoid storing small sized values as large objects.\n - Fix no-lock option of mdbm_check\n - Add more tests to mdbm_regtest and additional rework.\n\nVersion 3.11.1 (12/01/09, rr)\n - Fix locking recursion problem (introduced in 3.11.0).\n - Shrink oversized pages when they become empty.\n - Lots of regtest fixes.\n - Fix error in val.dsize returned by mdbm_store_r when alignment \u003e 0.\n\nVersion 3.11.0 (11/25/09, rr)\n - [FIX BUG 3208259] Add MDBM_DEMAND_PAGING flag to v3 header to support v2 feature.\n - [FIX BUG 2383183] Update doc link.\n - Add mdbm_protect() to add/remove memory protection.\n - Add automatic protection-follows-locking (checks existence of /path/to/dbfilename.protect)\n - Add mdbm_set_backingstore() and file-based implementation for cachemode backing store.\n - Add mdbm_init_rstats() and mdbm_rstats util for runtime stats collection/monitoring.\n - Change db-level locking recursion to better detect misbehaving locks.\n\nVersion 3.10.3 (10/19/09, rr)\n - Cleanup v3 internal locking.\n - Enhance mdbm_bench for better timing.\n - Fix a few 64-bit compile warnings.\n - Fix header handling for v3 replace.\n - Increase verbosity for post-crash integrity check.\n - Fix mdbm_create initial db size handling.\n - Improve mdbm_check usage.\n - [FIX BUG 3100302] Fix v3 mdbm_sync.\n - [FIX BUG 3033284] Fix doc for shake data.\n - [BUG 3056394] Add another page-level sanity check.\n\nVersion 3.10.2 (10/19/09, rr)\n - Fix v2 shake(v2) large object processing.\n\nVersion 3.10.1 (09/28/09, rr)\n - Fix v2 shake processing: was failing to free large objects.\n\nVersion 3.10.0 (08/04/09, rr)\n - Add mdbm_fcopy function for copying live v3 db's.\n - Add mdbm_copy utility.\n - Add mdbm_digest utility for generating db digests.\n - Fix mdbm_dev replaces rule to properly replace mdbm_dev v2.\n - Add -S (step) option to mdbm_bench.\n - Support up to 512 procs in mdbm_bench.\n - Fix source compatibility issue between v2 datum \u0026 kvpair and v3.\n\nVersion 3.9.1 (06/18/09, rr)\n - Rewrite v2/v3 header-only mapping to address various crashes.\n - Fix mdbm_bench large db support.\n - Add logfile support to mdbm_bench.\n - Fix compilation against recent yahoo_cfg_dev.\n\nVersion 3.9.0 (05/29/09, rr)\n - Remove spurious log message during open\n - Add -o option to mdbm_bench for logging results.\n\nVersion 3.8.3 (05/15/09, rr)\n - [FIX BUG 2758516] Fix SEGV when evicting dirty cache entry.\n - [FIX BUG 2758557] Fix errors in handling cache mode.\n\nVersion 3.8.2 (05/14/09, rr)\n - Tweak page 0 guard size.\n\nVersion 3.8.1 (05/13/09, rr)\n - Fix size calculation on page 0 guard.\n\nVersion 3.8.0 (05/05/09, rr)\n - mprotect the slack space in page 0 to electric-fence the directories.\n - Fix two errors in free_chunk() code.\n - Run full db check on v3 db's when previous lock-owner died.\n\nVersion 3.7.0 (04/28/09, rr)\n - [FIX BUG 2715933] Support MDBM_CLEAN flag to mdbm_store which marks cache entry clean.\n - [FIX BUG 2715880] Correct value ptr/size in mdbm_clean callback.\n\nVersion 3.6.1 (04/27/09, rr)\n - [FIX BUG 2709019] Skip over deleted page entries in mdbm_clean.\n - [FIX BUG 2660531] Fix set_cachemode arg checking to allow MDBM_CACHEMODE_EVICT_CLEAN_FIRST\n\nVersion 3.6.0 (03/30/09, rr)\n - Add mdbm_fetch_info function to return cache metadata along with value.\n\nVersion 3.5.3 (03/19/09, rr)\n - Fix mdbm_lock() when db is opened read-only (introduced in 3.5.0).\n\nVersion 3.5.2 (03/12/09, rr)\n - [FIX BUG 2593601] Fix header check on newly-created dbs.\n - Fix size value formatting in v3 mdbm_stat.\n\nVersion 3.5.1 (02/26/09, rr)\n - [FIX BUG 2562157] Add replaces rule to mdbm_dev to make v3 compatible with v2 prereqs.\n\nVersion 3.5.0 (02/26/09, rr)\n - Add support for write-back caching.\n - Fix mdbm_bench multi-proc accounting.\n - Fix mdbm_dump (v3) error reporting.\n\nVersion 3.4.4 (12/04/08, rr)\n - Fix iterate over deleted large objects.\n\nVersion 3.4.3 (12/04/08, rr)\n - Fix db header check in remap (correct broken fix in 3.4.2).\n\nVersion 3.4.2 (12/03/08, rr)\n - Fix db header check during mdbm_open.\n\nVersion 3.4.1 (12/02/08, rr)\n - [FIX BUG 2395961] Fix double-free of large-object chunk during store(REPLACE).\n - Add missing support for HEADER_ONLY\n - The following are from 2.32.1:\n - [FIX BUG 2280031] Reset bogus replace indicator if db file hasn't changed.\n - [FIX BUG 2289521] Suppress db checks in mdbm_open if opening with HEADER_ONLY.\n - [FIX BUG 725835] Act correctly on db check failure.\n - [FIX BUG 1432655] Doc clarifications.\n - [FIX BUG 1118707] mdbm_set_alignment value clarification.\n\nVersion 3.4.0 (10/07/08, rr)\n - [FIX BUG 2255972] (from 2.32.0) Add MDBM_DEMAND_PAGING open flag to suppress madvise(WILLNEED).\n - Improved db consistency checking support.\n\nVersion 3.3.3 (09/04/08, rr)\n - Enable v3 sanity-checking via MDBM_SANITY_CHECK env var.\n\nVersion 3.3.2 (08/04/08, rr)\n - [FIX BUG 2105548] Fix v2 large-obj arena corruption with LARGE object.\n\nVersion 3.3.1 (05/19/08, rr)\n - Fix \u003e2G support in v3.\n - Update usage in mdbm_bench.\n\nVersion 3.3.0 (05/15/08, rr)\n - [FIX BUG 1802587] Add mdbm_purge utility\n - Add mdbm_create utility.\n - [FIX BUG 1795900] Update mdbm_trunc messaging when open fails.\n\nVersion 3.2.1 (05/13/08, rr)\n - Rework v3 locking to avoid upgrade/downgrade accounting problems.\n\nVersion 3.2.0 (03/27/08, rr)\n - Add mdbm_create utility.\n - Revise mdbm_stat v3 output.\n - Add mdbm_get_errno function.\n - Define MDBM_VERSION macro.\n - Restore missing headers and MDBM_HASH_* defines from v2.\n - Remove 32-bit dbsize restriction from 64-bit lib.\n\nVersion 3.1.1 (02/21/08, rr)\n - Fix dynamic db expansion.\n\nVersion 3.1.0 (02/13/08, rr)\n - Add v3 support to mdbm_import (-2, -3, and -Z options).\n\nVersion 3.0.1 (02/05/08, rr)\n - Add replaces for mdbm version 2 (fully-compatible).\n\nVersion 3.0.0 (02/05/08, rr)\n - Version 3 is a complete mdbm rewrite.  It uses a different db format than V1/V2;\n   however, it fully supports the older db format and by default will create only\n   old-format db's.  You must include the MDBM_CREATE_V3 flag on the mdbm_open call\n   to create a new-format db and run the new code.\n\nEOF\n;\n\nif ($ENV{MDBM_BUILD} eq '2') {\nprint \u003c\u003cEOF\nVersion 2.34.1 (when, rr)\n - Redo locking recursion change to support threaded locking via db-lock (not partitioned).\n\nVersion 2.34.0 (12/10/09, rr)\n - [BUG 3199041] Add MDBM_OPEN_NOLOCK support to v2 to bypass all locking.\n\nVersion 2.33.3 (12/10/09, rr)\n - Fix missing unlock recursion changes.\n\nVersion 2.33.2 (12/10/09, rr)\n - [FIX BUG 3236690] Fix missing unlock in v2 mdbm_sethash function.\n - Change db-level locking recursion to better detect misbehaving locks.\n\nVersion 2.33.1 (11/19/09, rr)\n - Add mdbm_protect() function to add/remove memory protection.\n - Add automatic protection-follows-locking (checks existence of /path/to/dbfilename.protect)\n\nVersion 2.32.1 (10/23/08, rr)\n - [FIX BUG 2280031] Reset bogus replace indicator if db file hasn't changed.\n - [FIX BUG 2289521] Suppress db checks in mdbm_open if opening with HEADER_ONLY.\n - [FIX BUG 725835] Act correctly on db check failure.\n - [FIX BUG 1432655] Doc clarifications.\n - [FIX BUG 1118707] mdbm_set_alignment value clarification.\n\nVersion 2.32.0 (10/02/08, rr)\n - Same as 2.31.1 but bump version to properly reflect added capability.\n\nVersion 2.31.1 (10/02/08, rr)\n - [FIX BUG 2255972] Add MDBM_DEMAND_PAGING open flag to suppress madvise(WILLNEED).\n\nVersion 2.31.0 (09/11/08, rr)\n - Add mdbm_create utility.\n - Add mdbm_get_errno function.\n - [FIX BUG 1802587] Add mdbm_purge utility\n - [FIX BUG 1795900] Update mdbm_trunc messaging when open fails.\n - Update usage in mdbm_bench.\n - [FIX BUG 2105548] Fix v2 large-obj arena corruption with LARGE object.\n\nVersion 2.30.5 (12/21/07, rr)\n - [FIX BUG 1626374] Revise 2.30.4 fix to handle RHEL munmap oddity.\n\nVersion 2.30.4 (12/20/07, rr)\n - [FIX BUG 1626374] Revise 2.30.2 fix to avoid clobbering the db-to-be-replaced mapping.\n\nVersion 2.30.3 (12/17/07, rr)\n - Update cached db size so remap unmaps full db (mdbm_restore fix).\n\nVersion 2.30.2 (12/06/07, rr)\n - [FIX BUG 1626374] Use special header-only open mode to allow 32-bit mdbm_replace of 2G mdbm.\n\nVersion 2.30.1 (11/26/07, rr)\n - [FIX BUG 1583468] Add missing large-object size-change checks to avoid fetch/iterate crashes.\n\nVersion 2.30.0 (11/13/07, rr)\n - Add 64-bit RHEL4 (x86_64-rhel4-gcc3) support.\n\nVersion 2.29.9 (04/03/07, rr)\n - [FIX BUG 1127355] Remove broken tree-walk avoidance code in getpage()\n\nVersion 2.29.8 (03/19/07, rtroll)\n - [Bug 1096344] Large object arena initialization fix\n\nVersion 2.29.7 (03/09/07, rtroll)\n - [Bug 1089426] Added mdbm_get_value_loc\n - [Bug 1077290] mdbm_stat and XM bug fixes\n - [Bug 1077407] mdbm_dump displays XM offsets correctly\n\nVersion 2.29.6 (12/21/06, rtroll)\n - [FIX BUG 889881] Don't count page holes in mdbm_stat histograms\n - mdbm_restore now emits warnings if the save file is missing; or\n   if the destination mdbm exists.  This will help stop users from\n   corrupting the save file if they call mdbm_restore with the\n   arguments reversed.\n\nVersion 2.29.5 (12/06/06, rr)\n - Rework db-level locking to improve concurrency support.\n\nVersion 2.29.4 (11/13/06, rtroll)\n - Probable fix for bug bug causing failure of XM pages after mdbm_truncate\n\nVersion 2.29.3 (10/19/06, rr)\n - Clean up (and don't strand) the partitioned lock when open fails.\n\nVersion 2.29.2 (09/21/06, rr)\n - [FIX BUG 818421] Fix shake when partitioned locks are enabled.\n\nVersion 2.29.1 (07/18/06, rr)\n - [FIX BUG 740098] Don't truncate db file in mdbm_open until exclusive lock is held.\n\nVersion 2.29.0 (07/10/06, rr)\n - Allow splits in partitioned locking mode as long as exclusive lock is held.\n - Implicitly switch to partitioned locks if they're being used by another process.\n - Remove hideous ifdef/typedef for ysys_mmutex_t which causes header ordering problems.\n\nVersion 2.28.9 (06/29/06, rtroll)\n - mdbm_stat now counts INOs in utilization statistics\n - mdbm_stat now provides post-compress free bytes per page as well\n\nVersion 2.28.8 (06/29/06, rtroll)\n - mdbm_dev requires ycore_dev, needed for compilation of mdbm code\n - [702160] - mdbm_import supports same page sizes as mdbm\n - [710333] - mdbm_check now returns non-0 upon check failure\n\nVersion 2.28.7 (05/25/06, rr)\n - Don't prematurely close db file during replace.\n - Add jenkins hash.\n - Minor no-op change to xm_remap.\n\nVersion 2.28.6 (05/01/06, rr)\n - Fix crash when shake page makes multiple iterations.\n\nVersion 2.28.5 (04/21/06, rr)\n - Remove openssl dependency.\n\nVersion 2.28.4 (04/03/06, rr)\n - Fix version confusion.\n - Build using yahoo_cfg_dev-2.8.1 compiler options.\n - Revise page-checking and debug output.\n\nVersion 2.28.3 (03/16/06, rr)\n - [FIX BUG 600542] Use memmove in putpair (may overlap during page gc).\n\nVersion 2.28.2 (03/14/06, rr)\n - [FIX BUG 598595] Fix intermittent wrong-page store with large-objects enabled.\n - [FIX BUG 598611] Fix val.dsize returned from store with large-objects enabled.\n - Allow NULL shake func to limit db size without having to shake full pages.\n - Limit db size in mdbm_bench.\n - Fail mdbm_open (EINVAL) if partitioned locks and large objects combined.\n - Disable page splits if partitioned locks enabled.\n - Add -L (large objects) option to mdbm_bench (default no large objects).\n - Add mdbm_get_page and mdbm_dump_page funcs for debugging.\n - Add -p option to mdbm_dump to dump a single page.\n\nVersion 2.28.1 (03/13/06, rr)\n - Fix mdbm_bench which leads to supposedly missing keys.\n\nVersion 2.28.0 (03/09/06, rr)\n - Add mdbm_bench to package.\n - Add mdbm_get_{size,limit_size,page_size,hash,alignment} functions.\n\nVersion 2.27.0 (03/03/06, rtroll)\n - Added missing \"mdbm_fetch_dup_r()\" to header\n - Fixed maxsplit functionality - now tracked per process, not per db.\n - mdbm_delete_r patch\n\nVersion 2.26.0 (02/01/06, rr)\n - Don't allow new page-lock if a page is already locked.\n - Add mdbm_tryplock().\n - Reimplement mdbm_delete_r to avoid using getnext() (conflict with plocks).\n - Fix mdbm_unlock return value (was returning 0 instead of 1 on success).\n\nVersion 2.25.0 (1/08/06, rtroll)\n - Added XM safety feature, ensuring existing XM data will not\n   be stomped on by 64-bit machines\n - 64-bit Version\n - [Bug 506348] mdbm_stat no longer counts page holes\n - [Bug 519936] Add partitioned locking [rr]\n - [Bug 421562] mdbm_dev now requires ycore_dev\n - [Bug 413155] mdbm_shake doc update: number of passes\n - [Bug 415720] mdbm_shake doc update: urgency type\n - [Bug 415957] mdbm_shake doc update: use of new_shake_fn\n\nVersion 2.24.9 (07/29/05, rtroll)\n - [Bug 407838] mdbm_replace no longer closes mdbm\n - Fixed mdbm_replace bug that may have caused mdbm_replace'd\n   mdbm's to remain locked.\n\nVersion 2.24.8 (06/08/05, rtroll)\n - [Bug 363580] mdbm_save/mdbm_restore now handles files with large\n   obects enabled\n\nVersion 2.24.7 (04/22/05, rtroll)\n - Use \u003cinttypes.h\u003e in an attempt to get around problems compiling\n   mdbm + boost.\n - Added '-s' (sync) flag to mdbm_trunc\n\nVersion 2.24.6 (04/21/05, rtroll)\n - Moved mdbm command docs to mdbm package (instead of mdbm_dev)\n - Actually included mdbm_fetch, mdbm_trunc, mdbm_sync\n - Added ability to presize db to mdbm_trunc cmd\n\nVersion 2.24.5 (03/28/05, rtroll)\n - Added documentation for mdbm utilities\n   - [Bug 302583] mdbm_save/mdbm_restore\n   - [Bug 302588] mdbm_export/mdbm_import\n - [Bug 334751] Added mdbm_fetch, mdbm_trunc, mdbm_sync\n\nVersion 2.24.4 (03/22/05, rtroll)\n - [rr] Remove unneeded pthread_self() reference.\n - [Bug 310076] stat_page() no longer counts deleted records.\n\nVersion 2.24.3 (02/09/05, rtroll)\n - Fix ssl linking for rhel\n - rhel package no longer contains lib32/ entries\n\nVersion 2.24.2 (02/08/05, rtroll)\n - mdbm_fetch_dup_r() now set's errno if no records are found\n - Initial linux port\n\nVersion 2.24.1 (01/31/05, rtroll)\n - Patch to mdbm_fetch_dup_r()\n\nVersion 2.24.0 (01/31/05, rtroll)\n - Added mdbm_fetch_dup_r()\n - [Bug 294350]: .yicf's now have bug-product present.\n - Updated FAQ with information about NFS.\n\nVersion 2.23.2 (01/10/05, rtroll)\n - [Bug 57394]: Full pages (in a full db with large object support)\n   now spill largest object over to XM, in additionion to current\n   object.  It's now possible to turn a page into nothing but XM\n   pointers.\n\nVersion 2.23.1 (12/28/04, rtroll)\n - Now extracts version number from changelog\n - Massive documentation update\n\nVersion 2.23.0 (11/09/04, rr)\n - Add mdbm_fsync (locked, synchronous file sync)\n\nVersion 2.22.2 (11/01/04, rtroll)\n - Fixed mdbm_restore bug\n\nVersion 2.22.1 (10/27/04, rr)\n - Enable gcc3\n\nVersion 2.22.0 (10/25/04, rr)\n - Fix error in truncate which screws up page hashing.\n - Trunc db file to 0 if initial presplit fails.\n - Don't strand db mapping if open fails.\n - Use madvise to keep pages around.\n - Don't set shake function in limit_size_new if db is already too big.\n - gcc3 compatibility and fat package support.\n\nVersion 2.21.6 (10/01/04, rr)\n - Cleanup error messaging.\n\nVersion 2.21.5 (09/22/04, rr)\n - Add missing unlocks in error cases (limit_size, set_alignment, lock/trylock).\n - Return error if unlock called when not locked.\n - Check for db replacement in trylock.\n\nVersion 2.21.4 (09/16/04, rtroll)\n - [Bug 218353] Fixed bug triggered when collapsing deleted items on a\n   non-header page when the first key size was the same as the # of\n   ino's on the page; and it was examined for reclaimation.\n\nVersion 2.21.3 (09/15/04, rtroll)\n - Fixed bug surrounding recycling in db's with large-object support enabled\n\n2.21.2 (09/09/04, rr) Check for replacement in mdbm_lock.\n2.21.1 (09/08/04, rr) Explicitly unlock db's in replace; enhance dump output\n2.21.0 (rr) Add mdbm_trylock\n\t    Revise dump_pages output\n\t    Don't lock db during open unless initializing it.\n-- (rtroll) Initial AMD64 Port\n            Now correctly returns an error when page is entirely full\n\t    of XM_OBJ_PTR's, and can't be split.\n\t    Now correctly returns an error when page is full and can't\n\t    be split.\n\t    Handles ftruncate() failure.\n\t    No longer able to attempt to allocate more XM pages than\n\t    can be tracked. (XM_MAX_PAGES)\n            xm_alloc() no longer corrupts pagelist when reallocating\n\t    pages if there were no pages available.\n2.20.1 (rr) Handle EINTR on ylock wait.\n2.20.0 (rr) Add MDBM_MODIFY flag to mdbm_store.\n2.19.1 (rr) Fix purge to preserve header in first page.\n2.19.0 (rr) Add mdbm_purge to clear all pages.\n2.18.3 (rr) Free lock if open fails.\n2.18.2 (rr) Fix mdbm_delete_r off-by-one.\n2.18.1 (rr) Fixes to unrolling and new-shake.\n2.18.0 (rr)\n  Add mdbm_limit_size_new (new shake interface).\n  [BUG 149335] Fix FMR in mdbm_stat_all_page.\n  chk_page needs to ignore 0-length keys (new quick-delete method).\n  Unroll the page iteration routines.\n  Fix large-object pointer size miscalc (possible page corruption).\n  Better error handling in save.\n  Add quick path for reusing deleted entries.\n\n2.17.1 (rr) save/restore initial fixes.\n2.17.0 (rr from krt) Add mdbm_save/restore.\n\n2.16.1 (rr) Fix handle delete of first and last items on page.\n\n2.16.0 (rr) Change delete to do delayed garbage collection.\n\n2.15.3 (rr) Fix bogus xm_alloc during a small-object replace\n\n2.15.2 (rr) Resize the mmap in mdbm_truncate to avoid address space leak.\n\n2.15.1 (rr) Fix store(replace) bugs with large objects (bad replace, leak)\n\n2.15.0 (rr) Add mdbm_prune()\n\n2.14.11 (rr)\n  Fix free-list termination error when expanding large-object heap.\n  Fix large-object and entry count stats.\n\n2.14.10 (rr)\n  Fix missing xm_remap when large object heap is grown in another proc.\n  Fix large object free list when growing heap.\n  Fix replace filename when absolute path.\n\n2.14.9 (rr)\n  [BUG 111421] Fix store-replace fencepost error in large object mode.\n\n2.14.8 (rr)\n  [BUG 109281] Fix large-object coalescing.\n\n2.14.7 (rr)\n  [BUG 109103] Fix SEGV when db split fails in large-object mode\n  [BUG 109093] Fix same-sized small-object MDBM_REPLACE in large-object mode\n  \t       Make ylock_mutex_create self-configuring based on\n2.14.6 (rr) Create mutex with -1 offset to use flock (support for linuxthreads)\n2.14.5 (rr) Close mutex inside mdbm_close (to allow ylock cleanup)\n2.14.4 (rr) Fix header initialization in mdbm_truncate.\n\n2.14.3 (rr)\n  [BUG 102879] Fix nasty locking error (N procs could think they have the lock)\n\n2.14.2 (rr) Fix mdbm_stats output\n\n2.14.1 (rr) Fix store with MDBM_RESERVE\n\n2.12.0 (rr) Add mdbm_replace\n\t    Add MdbmBase::dbopen() and ::mdbm.\n\n2.11.2 (rr) Fix locking error with pre-split during open\n2.11.1 (rr) Fix pre-split during open\n\n2.10.1\n  [BUG 54003] Fix large-object value translation for first/next funcs.\n\n2.9.0\n  Add page overflow support for large-object dbs\n\n2.8.0\n  [BUG 56517] Fix ENOMEM failure during split (left db unmapped)\n  [BUG 54903] Add mdbm_get_stats()\n\n2.7.1\n  [BUG 53188] Fix mdbm_open race condition.\n  [BUG 53189] Fix ylocking after db split.\n  Fix broken storing of large-objects.\n  Some improvement in logging of error conditions.\n\n2.7.0\n  Add large-object support.\n  Add MDBM_RESERVE flag for zero-copy store.\n  Fix mmap resize leakage.\n\n2.6.1\n  mdbm_cxx.h: Make MdbmKey/Value char* specializations inline\n  mdbm_dump: Fix buffer overrun.\n\nModified by Larry McVoy at SGI to use mmap for much faster file\naccess, further enhanced by John Schimmel, Andrew Chang, Ariel Faigon\nand others.\n\nModified by Ariel Faigon at Yahoo! - add FNV hash and make it the default\nhash used added better test program.\n\nModified by Rick Reed at Yahoo! to use ylock mutexes (from ycore\npackage) with other optimizations/enhancements.\n\nEOF\n;\n}\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyahoo%2Fmdbm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyahoo%2Fmdbm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyahoo%2Fmdbm/lists"}