0.000049  2026-06-09 17:14:55-07:00 America/Los_Angeles

    - Added Driver::destroy_quietly(): fast-destroy teardown for disposable clones (cleanup => 1) that kills, reaps, and removes the data dir immediately instead of a graceful shutdown that can block 2*QDB_STOP_GRACE+2 seconds.
    - Added an opt-in fast_destroy attribute: DESTROY uses destroy_quietly() when cleanup => 1, falls through to the graceful path when cleanup => 0, and is inherited by clones via clone_data().
    - Added per-driver fast_stop_sig() for fast/forced teardown: default SIGKILL, PostgreSQL overrides to SIGQUIT so the postmaster releases its SysV semaphores instead of leaking them; watcher escalates to SIGKILL if it does not stop promptly.
    - Added a watcher fast-eliminate request (SIGUSR1) that kills with fast_stop_sig, reaps, and deletes the data dir; blocked (not ignored) across the startup exec so a request racing startup stays pending instead of being dropped.
    - The graceful teardown path (stop()/eliminate()) now escalates a stuck shutdown through fast_stop_sig before SIGKILL, so it releases SysV semaphores instead of leaking them.
    - get_db() and the pool tests skip_all instead of failing when a host is out of System V semaphores/shared memory; added skipall_on_resource_error(), also covering the DBIx::QuickDB->import path (t/QuickDB) and mid-run pool clone builds (t/Pool).
    - On a start timeout, start() now reports the server's launch log and whether its process is still alive, instead of only the often-empty error log.
    - Added t/fast_destroy.t, t/watcher_fast_kill.t, and t/resource_skip.t.

0.000048  2026-06-06 10:53:27-07:00 America/Los_Angeles

    - Fixed a pid-reuse race that could shut down the wrong database server. After a server was stopped, its watcher exited and the OS could recycle the watcher's pid; a later teardown signal (e.g. eliminate() from the watcher object's DESTROY, which Driver::stop triggers as its lexical goes out of scope) would then land on whatever now held that pid -- often a sibling cloned database's postmaster, smart-shutting-down a live server out from under its owner. The watcher now refuses to signal its pid once a stop/eliminate has been initiated, and forgets the pid once the watcher has exited. This was the intermittent FreeBSD/PostgreSQL-9.3 t/Pool/postgresql.t failure where a freshly cloned db was already shut down by the time the test connected to it
    - Removed two redundant pid-signalling paths that carried the same pid-reuse hazard: the post-wait() server-pid poll in Driver::stop() (the watcher already reaps the server before it exits, so stop() now just trusts wait()) and the direct server-pid TERM/KILL fallback in Driver::DESTROY()
    - Added t/clone_sequence.t, an explicit PostgreSQL regression asserting a clone of a stopped source continues its SERIAL sequence with the exact next id (no SEQ_LOG_VALS +32 jump); the broad Pool test only checks id ordering

0.000047  2026-06-05 22:35:47-07:00 America/Los_Angeles

0.000046  2026-06-03 14:58:27-07:00 America/Los_Angeles

    - Made the server start timeout tunable via the QDB_START_TIMEOUT environment variable, keeping the previous 10s default. Slow hosts (e.g. CPAN smoke boxes) could need longer to bring a server up -- especially a clone doing crash recovery -- and were timing out with "Timed out waiting for server to start"
    - Restored the watcher's graceful-shutdown window to its original 4s default (0.000045 had raised it to 15s); it remains tunable via QDB_STOP_GRACE. Normal consumers keep the original timeouts; only callers that opt in via the environment get longer ones
    - Coordinated the shutdown timeouts so they cannot fight each other: the watcher escalates to SIGKILL at QDB_STOP_GRACE and gives up at twice that, and the driver-side waits (for the watcher to exit, and for the server pid to die) now outlast that give-up. Previously they were hardcoded to 10s, so raising QDB_STOP_GRACE above ~8s let the watcher be SIGKILLed mid-shutdown, leaving a half-stopped, orphaned server
    - The Pool tests now request generous start/stop timeouts (via QDB_START_TIMEOUT and QDB_STOP_GRACE) so their build/clone/start/stop cycles do not spuriously fail on slow smoke hosts; this affects only the tests, not the library defaults

0.000045  2026-06-02 11:34:03-07:00 America/Los_Angeles

    - Switched PostgreSQL shutdown back to SIGTERM (smart shutdown) for a proper, clean shutdown when possible. The earlier hang risk is now covered: stop() disconnects our own lingering handles first, forces a CHECKPOINT, and the watcher's SIGKILL grace period is generous and tunable
    - Driver stop() now forces a CHECKPOINT (PostgreSQL) before shutting the server down. If the shutdown is slow enough to be SIGKILLed, the data dir is already consistent, so cloning it no longer triggers crash recovery that jumps SERIAL sequences forward by SEQ_LOG_VALS (32) -- the FreeBSD smoke failure where a cloned row got id 34 instead of 2
    - Increased the watcher's graceful-shutdown window before escalating to SIGKILL (4s -> 15s) and made it configurable via the QDB_STOP_GRACE environment variable, so slow hosts can finish a clean shutdown
    - Made the Pool tests tolerant of non-deterministic SERIAL ids (verify row values and that ids are strictly increasing, rather than exact id values)
    - Fixed t/stop_socket_cleanup.t failing on platforms without DBI/IO::Socket::UNIX (e.g. Windows, smoke hosts lacking DBI): it now skips cleanly instead of dying

0.000044  2026-06-01 14:23:16-07:00 America/Los_Angeles

    - Driver stop() now confirms the server is gone by its pid instead of waiting for the unix socket file to disappear, and removes a stale socket left behind by a SIGKILLed server. Fixes FreeBSD smoke failures where a slow shutdown was SIGKILLed and stop() then timed out waiting for the leaked socket

0.000043  2026-05-29 13:09:21-07:00 America/Los_Angeles

    - Stop PostgreSQL with SIGINT (fast shutdown) instead of SIGTERM (smart shutdown) to avoid hangs/SIGKILL and leaked sockets on slow hosts

0.000042  2026-05-25 17:30:00-07:00 America/Los_Angeles

    - Add DuckDB driver (optional DBD::DuckDB + duckdb CLI; tests skip if absent)

    - Add [PruneCruft] to dist.ini so build artifacts (blib/,
      pm_to_blib, MYMETA.*) no longer leak into release tarballs.

    - Fix provider_info running mariadb-install-db with no args, which created a
      143MB 'data' dir in CWD (GH #11)
    - Exclude 'data/' from dist tarball via GatherDir as a safeguard
    - Fix DB-QUICK-CLONE temp dirs and server processes leaking after tests (GH #10)
      - Set SIGTERM/SIGINT to SIG_IGN before watcher exec to prevent race
        condition where watcher is killed before signal handlers are installed
      - Add fallback in Driver::DESTROY to kill server directly and clean up
        dir if watcher fails to do so

0.000041  2026-04-07 17:13:03-07:00 America/Los_Angeles

    - Fix clone_dir cp fallback copying source dir into dest instead of contents
    - Add unit tests for all clone_dir implementations
    - Fix Windows warnings and test failures:
      - SQLite version_string no longer warns when sqlite3 binary is missing
      - Pool no longer warns about undefined $ENV{USER} on Windows
      - Pool clear_old_cache closes file handle before remove_tree (Windows file locking)
      - Test files no longer warn about undefined $ENV{HOME} on Windows
      - Pool instance_dir test uses canonical paths for cross-platform comparison
    - Fix PostgreSQL initdb failure when system locale is non-UTF8

0.000040  2026-04-05 14:03:55-07:00 America/Los_Angeles

    - Make MySQL less noisy
    - Remove other noise
    - Fix Mariadb binary detection
    - Fix a few minor bugs (AI assisted)

0.000039  2026-01-23 12:04:49-08:00 America/Los_Angeles

    - Add $db->resync method

0.000038  2025-03-29 00:35:02-07:00 America/Los_Angeles

    - Remove rogue Carp::Always from test
    - MAke it easier to runt he tests on my machine

0.000037  2025-03-26 23:10:00-07:00 America/Los_Angeles

    - Fix typo that caused the MySQL driver to break

0.000036  2025-03-26 22:56:11-07:00 America/Los_Angeles

    - Support MySQL community server (MySQLCom)
    - Default to DBD::MariaDB for all mysql variants

0.000035  2024-07-10 08:25:37-07:00 America/Los_Angeles

    - Documentation Updates

0.000034  2024-06-12 17:11:24-07:00 America/Los_Angeles

    - MAke watcher use exec

0.000033  2024-05-13 11:13:04-07:00 America/Los_Angeles

    - Remove Carp::Always from MariaDB test

0.000032  2024-05-07 09:12:13-07:00 America/Los_Angeles

    - Docs fixes

0.000031  2024-05-06 15:53:42-07:00 America/Los_Angeles

    - Fix silencing of watchers

0.000030  2024-05-06 14:58:26-07:00 America/Los_Angeles

    - Cleanup the db-watcher code
    - Split MySQL into Percona and MariaDB

0.000029  2024-04-28 09:58:52+01:00 Europe/Lisbon

    - Add QDB_TMPDIR env var

0.000028  2024-04-25 13:00:04+01:00 Europe/Lisbon

    - Fix mariadb warning

0.000027  2024-04-25 12:24:25+01:00 Europe/Lisbon

    - Fix doc issue

0.000026  2024-04-16 15:04:26-07:00 America/Los_Angeles

    - Use MariaDB binaries when available
    - Silence mariadb complaints about using mysql binaries

0.000025  2024-04-16 14:34:21-07:00 America/Los_Angeles

    - Fix test error when DBD::mysql is not installed

0.000024  2024-02-07 17:19:03-08:00 America/Los_Angeles

    - Add QDB_MYSQL_SSL_FIPS env var

0.000023  2022-08-23 14:02:40-07:00 America/Los_Angeles

    - Allow an instance dir for pools

0.000022  2022-07-08 15:44:44-07:00 America/Los_Angeles

    - Better support for percona 5.7
    - Do not modify config reference that is passed in, make a copy

0.000021  2021-01-19 14:55:27-08:00 America/Los_Angeles

    - For pools, make sure cache db is stopped before marking it as ready
    - Move ready file outside the directory so it is not copied with the dir (ooops)
    - Add ability to show pool diag without showing all sql-server output

0.000020  2020-12-01 15:35:36-08:00 America/Los_Angeles

    - Watcher should use POSIX::_exit() since it is exec-like
    - Minimum mysqld version 5.6.0

0.000019  2020-11-30 15:40:36-08:00 America/Los_Angeles

    - Add watcher process to make sure cleanup happens

0.000018  2020-11-20 08:46:39-08:00 America/Los_Angeles

    - Fix bug where driver could be forgotten in pool during reclaim

0.000017  2020-11-16 08:26:03-08:00 America/Los_Angeles

    - Support for older percona mysqld's that need mysql_install_db run

0.000016  2020-11-13 11:28:35-08:00 America/Los_Angeles

    - Support older version of percona
    - Minor test fixes

0.000015  2020-08-14 20:45:04-07:00 America/Los_Angeles

    - Make it possible to clear old cache
    - Do not leave garbage in /tmp from tests

0.000014  2020-07-30 22:36:47-07:00 America/Los_Angeles

    - Fix some Postgres 'starting up' issues
    - Support for percona in MySQL
    - Support for either DBD::MariaDB or DBD::mysql

0.000013  2020-07-28 21:17:30-07:00 America/Los_Angeles

    - Add module to deps

0.000012  2020-07-28 15:33:51-07:00 America/Los_Angeles

    - Add ability to clone without cp or rsync
    - Fix minimum perl version

0.000011  2020-07-27 23:07:33-07:00 America/Los_Angeles

    - Add ability to clone databases
    - Add Database pools
    - Make databases better at stopping (close connections)
    - Fix some test timeout issues under yath due to ^
    - Update copyright date

0.000010  2019-06-08 13:03:48-07:00 America/Los_Angeles

    - More work for issue #1

0.000009  2019-05-29 21:49:45-07:00 America/Los_Angeles

    - Work for issue #1

0.000008  2019-04-28 08:41:10-07:00 America/Los_Angeles

    - Make PostgresQL use UTF8

0.000007  2018-01-29 14:23:53-08:00 America/Los_Angeles

    - Make SQLite work without the sqlite3 binary

0.000006  2018-01-29 12:59:54-08:00 America/Los_Angeles

    - Fix for postgres with alternate hardcoded port numbers

0.000005  2018-01-29 09:00:44-08:00 America/Los_Angeles

    - ENV var safety

0.000004  2018-01-28 20:29:12-08:00 America/Los_Angeles

    - More complete docs
    - More complete testing
    - Significant MySQL speed improvements
    - Better diagnostics from all drivers

0.000003  2018-01-28 12:50:32-08:00 America/Los_Angeles

    - Add sqlite driver

0.000002  2018-01-28 09:08:30-08:00 America/Los_Angeles

    - Minor bug fixes
    - Add diagnostics for tests

0.000001  2018-01-28 00:09:47-08:00 America/Los_Angeles

    - Initial Release
