This file consolidates the historical notes that were previously split
between ChangeLog and NEWS, and extends them with the work done after
the 0.4.3 release notes up to the current 1.0.0 line.
-
Corrected local package versioning for FreeBSD builds:
- the FreeBSD package builder now derives the package version from the checked-out source tree before falling back to git tags
- local
.pkgbuilds no longer reuse stale tag versions when a newer release has not yet been fetched to the build host
-
Refreshed release metadata across the project:
- aligned the runtime mysqlfs version banner and
--versionoutput with the 1.0.4 release - updated
mysqlfs_setupto report the current release number - updated the Debian package changelog to 1.0.4
- aligned the runtime mysqlfs version banner and
-
Added first local packaging support for current Linux and FreeBSD systems:
- introduced an initial Debian packaging layout under
debian/ - added a minimal Debian post-install message pointing users at the installed documentation
- introduced a local FreeBSD package builder under
pkg/freebsd/ - verified local
.deband.pkgcreation and installation flows on Debian 13 and FreeBSD 15
- introduced an initial Debian packaging layout under
-
Refreshed release metadata across the project:
- aligned the runtime mysqlfs version banner and
--versionoutput with the 1.0.3 release - updated
mysqlfs_setupto report the current release number - documented the release tagging checklist in
AGENTS.md
- aligned the runtime mysqlfs version banner and
-
Improved the cross-platform build helpers:
- introduced a shared
build.shflow for Linux and BSD systems - refactored
build-macos.shinto a thinner macOS-specific wrapper - fixed library discovery for current FreeBSD and Debian layouts
- introduced a shared
-
Improved local test portability across supported systems:
- simplified
run-tests.shso it no longer manages MySQL users or grants directly - made the regression harness work cleanly on macOS, FreeBSD 15, and Debian 13
- normalized mount readiness checks across Linux, BSD, and macOS
- simplified
-
Refreshed the main documentation for current users:
- reorganized the README around setup, usage, and upgrade tasks
- documented the currently validated operating systems and database versions
- clarified the current
libfuse 2.xcompatibility baseline
-
Validated the current 1.0 line on FreeBSD 15:
- fixed a duplicate global definition of the shared table-name pointer that newer linkers reject
- confirmed build and test execution on FreeBSD with FUSE user mounts enabled
- verified manual mount, remount, and persistence behavior on FreeBSD
-
Corrected logical file size handling for sparse writes:
query_write()now preserves the logical EOF instead of recomputing inode size from the sum of allocated block lengths- sparse-file regression coverage now matches the intended filesystem semantics across platforms
-
Improved test and setup portability:
run-tests.shnow finds the expected build output on non-macOS systems more reliably- documented the extra privilege requirement for trigger creation when
mysqlfs_setupruns against a server with binary logging enabled
-
Hardened several correctness-critical filesystem paths:
- rename target replacement is now handled transactionally inside
query_rename() - write and truncate now hold an inode-level transactional lock
- size updates are kept inside the same write transaction
- path lookup SQL building in
query_inode_full()is guarded against oversized paths instead of overflowing internal buffers readdir()now propagates SQL failures back to FUSE instead of silently reporting successgetattr()reports block counts correctly for non-512-aligned sizes and loads file size directly from inode metadata- unlink no longer leaks pooled connections on multi-link paths
- rename target replacement is now handled transactionally inside
-
Improved startup and mount behavior:
- the bootstrap root directory is created with the mounting user's ownership
- unknown native FUSE options are forwarded correctly to libfuse, restoring support for debug, foreground, and single-threaded runs
-
Modernized portability and build tooling:
- added Debian 9 build notes and library path guidance
- added a dedicated macOS build helper script
- cleaned up CMake support for current toolchains and platform library discovery
- fixed modern compiler warnings in the C sources
- documented permission-enforcement expectations more clearly
-
Added a repeatable local test harness:
run-tests.shnow recreates and initializes a clean test databasemysqlfs_setupcan be used non-interactively for local testing- added shell-based end-to-end regression tests covering: root bootstrap, write/read round-trips, rename, truncate, mkdir plus move, unlink, in-place overwrite, rename over an existing target, directory listings, symbolic links, and a 16 MiB checksum test
-
Improved database setup and migrations:
- fixed several SQL update issues
- fixed MySQL "commands out of sync" failures
- improved fsck-related fixes and follow-up SQL maintenance
- fixed SQL update handling for modern MySQL
- added migration
00000009.sqlto enable InnoDB compressed row format oninodesanddata_blocks
-
Improved query behavior and performance:
- optimized path and sequence lookup queries
- simplified joins where climbing through parents did not require a
LEFT JOIN
-
Clarified supported filesystem semantics:
- symbolic links are supported and covered by regression tests
- hard links are now explicitly reported as unsupported instead of failing later with schema-driven I/O errors
-
Switched the project from autotools to CMake.
-
Improved build and packaging support:
- fixed CMake scripts
- improved
mysqlfs_update - made SQL update files easier to install and locate from shared paths
- resolved LibM lookup issues in the build system
-
Improved portability and documentation:
- refreshed build and usage documentation
- cleaned up older FreeBSD-specific warnings once
big_writesbehavior was confirmed
-
Fixed directory emptiness handling:
- added the missing empty-folder checks
- fixed the "directory not empty" validation logic
-
Fixed CHOWN compatibility with FreeBSD.
-
Added table prefix support across the project:
- C code
- PHP API
- documentation
-
Improved the PHP API, including path handling fixes.
-
Fixed issues in the SQL update flow.
-
General cleanup and packaging updates for the 0.4.3 release.
-
Made inode size updates replication-safe by computing the value through an intermediate variable.
-
Added the first database upgrade scripting support.
-
Cached
data_blockssizes in a dedicated column to speed up inode updates. Thanks to Armin Wied for the idea. -
Added an index to the
treetable to speed up file lookups. Thanks to Armin Wied for this idea too. -
Included the first rough PHP API to browse and fetch data directly from mysqlfs-backed tables.
-
Improved transaction safety, including transaction-safe truncate.
-
Switched the database engine from MyISAM to InnoDB.
-
Added basic transaction support with rollback handling.
-
Upgraded to the FUSE 2.6 API and implemented the newer
create()operation. -
Added support for
big_writes. -
Added FreeBSD support.
-
Added filesystem statistics reporting, including inode usage and pseudo-realistic space reporting.
-
Made the filesystem report file sizes in a way that is compatible with
du. -
Fixed command-line parsing issues.
-
Added support for
allow_otheranddefault_permissions.
-
Reworked file storage to use 4 KiB blocks instead of one huge record per file. This greatly improved update performance and storage efficiency.
-
Added sparse file support as a consequence of block-based storage.
-
This release changed the database schema.
- Added the missing
schema.sqlfile to the distribution tarball.
-
Reworked the database schema to separate:
- directory tree
- inodes
- file data
-
This new layout made delayed unlink and hard-link-aware inode accounting possible.
-
Rewrote connection pooling to avoid exhausting database connections and to reuse idle connections efficiently.
-
open()began caching the inode number infi->fhso subsequent operations no longer needed to resolve the pathname each time. -
Implemented or completed a substantial part of the core filesystem API:
- better write behavior
- truncate
- symlink
- readlink
- link
- chown
- limited rename support for regular files
-
Added better logging infrastructure based on
log_printf(). -
Added automatic root directory creation on startup.
-
Changed inode timestamp storage to Unix-style integer fields.
-
Added support for reading MySQL defaults from
my.cnf. -
Added MySQL version checks and reconnect handling.
-
Requires MySQL 5.0 or newer.
-
Improved performance through MySQL connection pooling.
-
Added
atimeandmtimeupdates. -
Added
chmod(). -
Improved error handling.
- Initial release.