Releases: FerretDB/FerretDB
v1.21.0
New Features π
Fixed Bugs π
- Reorganize and fix
update
/upsert
logic by @wazir-ahmed in #4069
Enhancements π
- Improve capped collection cleanup by @wazir-ahmed in #4118
- Make batch sizes configurable by @kropidlowsky in #4149
Documentation π
- Fix Codapi file error by @Fashander in #4077
- Add Tembo QA blog post by @Fashander in #4081
- Update correct image link by @Fashander in #4116
- Add Pulumi blog post by @Fashander in #4102
- Add Tembo to README by @AlekSi in #4168
- Remove some closed issues from documentation by @AlekSi in #4172
Other Changes π€
- Use Go 1.22 and bump deps by @AlekSi in #4094
- Add more fields to requests and responses by @rumyantseva in #4096
- Revert SQLite version bump by @AlekSi in #4106
- Refactor
bson2
package by @AlekSi in #4105 - Use
bson2
package for wire queries and replies by @AlekSi in #4108 - Make logger configurable in the embedded
ferretdb
package by @fadyat in #4028 - Fix
envtool run test
-run
and-skip
flags by @henvic in #4101 - Add MySQL backend collection by @adetunjii in #4083
- Ignore
maxTimeMS
argument incount
,insert
,update
,delete
by @farit2000 in #4121 - Use correct salt length by @AlekSi in #4126
- Skip stuck tailable cursor test by @chilagrow in #4131
- Enforce new authentication by @chilagrow in #4075
- Replace
bson
withbson2
inwire
by @AlekSi in #4110 - Improve
OP_MSG
validity checks by @AlekSi in #4135 - Support speculative authenticate by @chilagrow in #4111
- Add MySQL backend by @adetunjii in #4137
- Fix
saslContinue
crashing due to not found authentication conversation by @henvic in #4129 - Cleanup TODO for speculative authenticate by @chilagrow in #4143
- Fix MySQL collection stats by @adetunjii in #4145
- Use Go 1.22.1 by @AlekSi in #4155
- Advertise SCRAM / SASL support in addition to PLAIN by @henvic in #4113
- Add linter to check truncate tag in blog posts by @sbshah97 in #4139
- Fix PLAIN mechanism authentication incorrectly working by @chilagrow in #4163
- Improve
bson2
andwire
logging by @AlekSi in #4148 - Fix logging of deeply nested documents by @AlekSi in #4167
- Support localhost exception by @chilagrow in #4156
- Do not use the flow style in the diff output by @AlekSi in #4170
- Do not use
fjson
by @AlekSi in #4175 - Remove
fjson
package by @AlekSi in #4176 - Fix
speculativeAuthenticate
panic on empty database by @chilagrow in #4178 - Move old
bson
package by @AlekSi in #4177 - Rename
bson2
tobson
by @AlekSi in #4179 - Move Docker build files by @AlekSi in #4180
- Bump protobuf dependency to make CI happy by @AlekSi in #4187
- Use authentication enabled docker for integration test by @chilagrow in #4160
- Bump
pgx
by @AlekSi in #4190
New Contributors
- @farit2000 made their first contribution in #4121
- @sbshah97 made their first contribution in #4139
v1.20.1
What's Changed
Docker images changes
Production Docker images now use a non-root user with UID 1000 and GID 1000.
That change was made in v1.20.0, reverted in v1.20.1, and will be re-introduced in a future release.
Documentation π
- Add blog post on Ubicloud managed postgres by @Fashander in #4010
- Add release blog post for v1.19.0 by @Fashander in #4020
- Truncate release blog post by @Fashander in #4047
- Add blog post on Disaster Recovery for FerretDB with Elotl Nova by @Fashander in #4038
- Update Codapi by @Fashander in #4039
- Add blogpost on FerretDB stack on Tembo by @Fashander in #4037
Other Changes π€
- Add tests for new SCRAM-SHA-256 authentication support by @henvic in #4012
- Add
TODO
comments for logging by @AlekSi in #4015 - Add
bson2
helpers for conversions and logging by @AlekSi in #4019 - Setup MySQL backend by @adetunjii in #4003
- Expose new authentication enabling flag by @AlekSi in #4029
- Bump deps and speed-up
checkcomments
by @AlekSi in #4030 - Display
envtool run test
progress with run and/or skip flags by @fadyat in #3999 - Use Ubicloud for CI runners by @AlekSi in #4027
- Implement
database.Stats
for MySQL backend by @adetunjii in #4034 - Minor cleanups by @AlekSi in #4046
- Add experimental pushdown for dot notation by @noisersup in #4049
- Bump Go to 1.21.7 by @AlekSi in #4059
- Add utility for hashing SCRAM-SHA-256 password by @henvic in #4031
- Use rootless
scratch
containers for production Docker images by @ahmethakanbesel in #4004 - Prepare query statements for MySQL by @adetunjii in #4064
- Implement
bson2.RawDocument
checking by @AlekSi in #4076 - Add helper for decoding document sequences by @AlekSi in #4080
- Add SCRAM-SHA-256 authentication support by @henvic in #3989
- Remove SCRAM-SHA-256 implementation TODO links by @henvic in #4086
- Update telemetry host by @AlekSi in #4085
New Contributors
- @ahmethakanbesel made their first contribution in #4004
v1.20.0
v1.19.0
New Features π
Fixed Bugs π
- Fix
maxTimeMS
forgetMore
command by @noisersup in #3919 - Fix
upsert
with$setOnInsert
operator by @wazir-ahmed in #3931 - Fix validation process for creating duplicate
_id
index by @kropidlowsky in #3990
Documentation π
- Bump deps by @AlekSi in #3955
- Add documentation for oplog by @Fashander in #3960
- Fix search queries by @Fashander in #3976
Other Changes π€
- Fix Taskfile.yml indentation by @AlekSi in #3964
- Speed-up Docker builds by @AlekSi in #3965
- Run more
maxTimeMS
tests by @noisersup in #3940 - Store passwords for PLAIN authentication mechanism by @henvic in #3928
- Use PBKDF2 for storing
PLAIN
passwords by @AlekSi in #3970 - Shard extra CI configurations by @AlekSi in #3946
- Small fixes and tweaks by @AlekSi in #3971
- Implement
updateUser
command by @henvic in #3973 - Small assorted tweaks by @AlekSi in #3979
- Add MySQL backend Registry by @adetunjii in #3967
- Add new BSON decoding package by @AlekSi in #3905
- Refactor
bson2
encoding/decoding by @AlekSi in #3987 - Use
usersInfo
forcreateUser
anddropUser
integration tests by @henvic in #3980 - Improve
bson2
fuzzing by @AlekSi in #3988 - Update contributing documentation by @AlekSi in #3994
- Use
ListCollection
with a filter by @sachinpuranik in #3995 - Add tests for MySQL registry by @adetunjii in #3993
- Prepare CI to having multiple main branches by @AlekSi in #4002
- Ignore
$readPreference
field by @b1ron in #3996 - Hide
*types.Document
fromwire
struct fields by @AlekSi in #4000 - Add deep
bson2
decoding by @AlekSi in #3997 - Expose raw documents in the
wire
package by @AlekSi in #4011
New Contributors
v1.18.0
What's Changed
Capped collections
This release adds support for capped collections. They can be created as usual using create
command. Both max
(maximum number of documents) and size
(maximum collection size in bytes) parameters are supported.
Tailable cursors
This release adds support for tailable cursors. Both tailable
and awaitData
parameters are supported.
OpLog tailing
This release adds support for the basic OpLog functionality. The main supported use case is Meteor's OpLog tailing. Replication is not supported yet.
OpLog collection does not exist by default. To enable OpLog functionality, create a capped collection oplog.rs
in the local
database. Setting replica set name using --repl-set-name
flag / FERRETDB_REPL_SET_NAME
environment variable might also be needed.
New Features π
- Add support for tailable cursors by @AlekSi in #3799
- Implement
awaitData
tailable cursors by @noisersup in #3900 - Implement and test OpLog for update operations by @rumyantseva in #3899
- Enable OpLog and tailable cursors by @AlekSi in #3887
- Implement
createUser
command by @henvic in #3848 - Implement
dropUser
command by @henvic in #3866 - Implement
dropAllUsersFromDatabase
command by @henvic in #3867 - Implement
usersInfo
command by @henvic in #3897
Enhancements π
- Don't cleanup capped collections if there is nothing to cleanup by @rumyantseva in #3909
- Disallow
maxTimeMS
for non-awaitData cursors ingetMore
command by @noisersup in #3917 - Add the necessary for replica set fields to
ismaster
response by @rumyantseva in #3925
Other Changes π€
- Add CI configuration for Citus by @AlekSi in #3865
- Bump deps by @AlekSi in #3880
- Fix tests by @AlekSi in #3871
- Add MySQL backend registry by @adetunjii in #3850
- Fix local MySQL setup by @AlekSi in #3886
- Fix clean-up on
aggregate
errors by @AlekSi in #3892 - Use
dropAllUsersFromDatabase
in tests by @henvic in #3891 - Add
awaitData
tests by @noisersup in #3872 - Add utilities for working with passwords by @AlekSi in #3890
- Add support for
--skip
inenvtool tests run
by @KrishnaSindhur in #3805 - Small clean-ups by @AlekSi in #3896
- Add basic SAP HANA backend by @yonarw in #3719
- Add integration tests for OpLog entries of insert and delete operations by @rumyantseva in #3862
- Add more cursor tests by @noisersup in #3893
- Refactor
ConnInfo
in preparation for new auth by @AlekSi in #3901 - Add some small improvements to the linter that checks open issues by @rumyantseva in #3756
- Forbid
bson.E/D/M/A
, except integration tests by @AlekSi in #3908 - Bump deps by @AlekSi in #3912
- Make
AssertEqual
helper handle duplicate keys by @AlekSi in #3911 - Drop test users on cleanup by @AlekSi in #3914
- Cleanup
awaitData
tailable cursor by @noisersup in #3915 - Cleanup a closed issue by @rumyantseva in #3924
- Ignore
sparse
index parameter for now by @AlekSi in #3934 - Allow filtering by name in
ListDatabases
andListCollections
by @sachinpuranik in #3851 - Disallow native passwords for MySQL by @adetunjii in #3937
- Fix
awaitData
cursor panic by @noisersup in #3935 - Use
usersInfo
indropAllUsersFromDatabase
tests by @henvic in #3932 - Allow Native Passwords for testcase by @adetunjii in #3941
New Contributors
- @yonarw made their first contribution in #3719
- @sachinpuranik made their first contribution in #3851
v1.17.0
New Features π
- Allow building without PostgreSQL or SQLite backend by @anunayasri in #3803
- Allow sorting by
$natural
by @noisersup in #3822 - Disallow
$natural
in compound sort by @noisersup in #3832 - Generate collection UUIDs by @wazir-ahmed in #3791
- Support capped collection cleanup by @rumyantseva in #3831
Fixed Bugs π
Enhancements π
- Improve
validate
diagnostic command by @b1ron in #3804 - Add fields to
listCollections.cursor
response by @henvic in #3809
Documentation π
- Add new release FerretDB v1.16.0 blog post by @Fashander in #3808
- Change release blogpost image by @Fashander in #3825
- Enable versioning on documentation by @Fashander in #3821
- Add documentation for older versions by @AlekSi in #3834
Other Changes π€
- Support subdirectories for integration tests by @AlekSi in #3810
- Move tests for tailbable cursors by @AlekSi in #3811
- Bump deps by @AlekSi in #3817
- Refactor cursor creation by @AlekSi in #3820
- Use single flag to disable all pushdowns by @noisersup in #3793
- Add tracing to
envtool tests run
by @hungaikev in #3695 - Extract
find
helper functions by @AlekSi in #3826 - Fix tests for MongoDB with enabled replica set by @rumyantseva in #3807
- Ignore
$clusterTime
by @AlekSi in #3830 - Add MySQL backend metadata by @adetunjii in #3828
- Clean-up tests a bit by @AlekSi in #3835
- Allow bypassing authentication by @AlekSi in #3840
- Add tests for tailable cursors by @noisersup in #3833
- Add missing logging parameter by @AlekSi in #3847
- Test cross-session cursors by @noisersup in #3849
- Use MongoDB 7 by @henvic in #3824
- Simplify tailable cursor tests by @AlekSi in #3854
- Add
upsert
tests by @wazir-ahmed in #3864 - Add cursor tests by @noisersup in #3859
New Contributors
- @wazir-ahmed made their first contribution in #3791
- @henvic made their first contribution in #3788
- @anunayasri made their first contribution in #3803
- @hungaikev made their first contribution in #3695
v1.16.0
Documentation π
- Clarify MongoDB version by @AlekSi in #3653
- Add blogpost for release v.1.15 by @Fashander in #3728
- Update domain name in docs by @AlekSi in #3757
- Update Docusaurus to v3 by @Fashander in #3772
- Update domain name in more places by @AlekSi in #3802
Other Changes π€
- Cleanup pushdown terminology by @noisersup in #3691
- Make RecordID a signed value by @AlekSi in #3740
- Bump deps by @AlekSi in #3747
- Add MySQL into the build system by @adetunjii in #3736
- Add MySQL backend to CI by @AlekSi in #3751
- Remove common
handlers.Interface
by @AlekSi in #3753 - Remove unsafe pushdown by @noisersup in #3752
- Support
DeleteAll
for capped collections by @rumyantseva in #3718 - Add startup warning for debug builds by @AlekSi in #3735
- Move
sqlite/*.go
tointernal/handler
by @rumyantseva in #3755 - Add TODOs about pushdowns by @AlekSi in #3762
- Clean-up old code for multiple handlers by @AlekSi in #3763
- Add TODOs by @AlekSi in #3764
- Move some commands from
common
to the handler by @AlekSi in #3766 - Add TODOs by @AlekSi in #3771
- Allow
system.
prefix for collections for now by @AlekSi in #3775 - Setup MySQL integration tests by @adetunjii in #3758
- Rename
commonerrors
andcommonparams
by @noisersup in #3779 - Add TLS support to proxy mode by @AlekSi in #3783
- Provide sort to backend as the document by @noisersup in #3754
- Add stubs for authentication commands by @AlekSi in #3776
- Move
getParameter
out ofcommon
package by @noisersup in #3789 - Remove
commoncommands
package by @noisersup in #3780 - Remove done TODOs by @AlekSi in #3795
- Ignore
go-consistent
failures by @AlekSi in #3794 - Log batches for
find
,aggregate
,getMore
by @AlekSi in #3800 - Set
GOARM
explicitly by @AlekSi in #3796
v1.15.0
What's Changed
Artifacts naming scheme
Our release binaries and packages now include linux
as a part of their file names.
That's a preparation for providing artifacts for other OSes.
New Features π
- Support
showRecordId
infind
by @chilagrow in #3637 - Add JSON format for logging by @AlekSi in #3689
- Add option to disable
--debug-addr
by @cosmastech in #3698
Enhancements π
- Allow usage without state dir by @AlekSi in #3703
- Allow the usage of existing PostgreSQL schema by @AlekSi in #3717
- Generate SQL queries with comments for find operations by @chumaumenze in #3697
Documentation π
- Mention proxy flag in docs by @Fashander in #3673
- Update README.md to include Vultr by @mrusme in #3675
- Add blog post on FastNetMon by @Fashander in #3676
- Fix content error by @Fashander in #3694
- Add blogpost for "How to Package and Deploy FerretDB with Acorn" by @Fashander in #3679
- Enable interactivity on blogpost by @Fashander in #3659
- Fix Codapi error on blog post by @Fashander in #3721
- Add migration blog post by @Fashander in #3709
Other Changes π€
- Make tests stable on CI by @AlekSi in #3678
- Bump deps by @AlekSi in #3690
- Use separate PostgreSQL databases in tests by @AlekSi in #3622
- Add test for tailable cursor with non-capped collection by @noisersup in #3677
- Use
-
in addition to the empty string by @AlekSi in #3704 - Use the standard
*mongo.WriteError
type by @AlekSi in #3705 - Fix tests for MongoDB with enabled replica set by @rumyantseva in #3604
- Handle panicking tests by @AlekSi in #3711
- Make handler accept constructed backend by @rumyantseva in #3710
- Add issue tracking to checkcomments analyzer by @raeidish in #3632
- Add TODOs and fix URLs by @AlekSi in #3723
- Move diff tests from dance to integration tests by @ksankeerth in #3525
- Small assorted tweaks by @AlekSi in #3724
New Contributors
- @mrusme made their first contribution in #3675
- @cosmastech made their first contribution in #3698
- @chumaumenze made their first contribution in #3697
- @ksankeerth made their first contribution in #3525
v1.14.0
What's Changed
Old PostgreSQL backend
As mentioned in the previous release changes, the old PostgreSQL backend code is completely removed.
PostgreSQL remains our main backend, just with a new code base.
New Features π
- Implement
compact
command by @adetunjii in #3559
Enhancements π
- Optimize detection of duplicate fields by @AlekSi in #3645
- Optimize
insert
performance by batching by @princejha95 in #3621
Documentation π
- Fix incorrect schema by @AlekSi in #3635
- Add blogpost for FerretDB v1.13.0 by @Fashander in #3639
- Add Vultr blog post by @Fashander in #3646
- Update blog post on Ubuntu by @Fashander in #3658
- Add blog post on MongoDB sorting for scalar values by @chilagrow in #3200
Other Changes π€
- Disallow capped collection creation when disabled by @AlekSi in #3636
- Run backend tests for SAP HANA by @AlekSi in #3657
- Update
golangci-lint
by @AlekSi in #3651 - Remove
pgdb
fromenvtool
by @ShatilKhan in #3586 - Remove old
pg
handler by @AlekSi in #3661 - Add test for capped collection in
aggregate
$collStats
by @chilagrow in #3643 - Enable
GOMAXPROCS
autotuning by @AlekSi in #3105 - Add integration tests progress reporting by @rubiagatra in #3471
- Add timing information to
envtool
output by @AlekSi in #3664 - Remove old SAP HANA handler by @AlekSi in #3674
- Rename main_postgeresql to main_postgresql by @gen1us2k in #3668
- (WIP) Support
create
for capped collections by @rumyantseva in #3614 - (WIP) Support
InsertAll
andFindAll
for capped collections by @chilagrow in #3610
New Contributors
- @ShatilKhan made their first contribution in #3586
- @rubiagatra made their first contribution in #3471
- @gen1us2k made their first contribution in #3668
v1.13.0
What's Changed
New PostgreSQL backend
The new PostgreSQL backend is now enabled by default. You can still enable the old backend with --postgresql-old
flag or FERRETDB_POSTGRESQL_OLD=true
environment variable, but it will be removed in the next release.
Default SQLite directory for Docker images
Our Docker images (but not binaries and .deb
/ .rpm
packages) now use /state
directory for the SQLite backend.
That directory is also a Docker volume, so data will be preserved after the container restart by default.
arm/v7
packages
We now provide linux/arm/v7
binaries, Docker images, and .deb
/ .rpm
packages.
New Features π
- Implement pushdown for
aggregate
for PostgreSQL by @noisersup in #3607 - Implement sort pushdown for PostgreSQL by @noisersup in #3504
- Implement limit pushdown for PostgreSQL by @noisersup in #3580
- Implement
indexSizes
forcollStats
by @chilagrow in #3575 - Implement free storage in
collStats
,dbStats
andaggregate
$collStats
by @chilagrow in #3594 - Add capped collection counts in
serverStatus
by @chilagrow in #3566 - Integrate Statsviz by @codenoid in #3591
Fixed Bugs π
- Fix invalid validation for
_id
field by @slavabobik in #3523 - Fix
explain
panic for non-existent collection on PostgreSQL by @noisersup in #3541
Enhancements π
- Add basic logging for PostgreSQL backend by @AlekSi in #3560
- Report actual backend name by @AlekSi in #3570
- Improve
/debug
page by @codenoid in #3592 - Add filter pushdown for
_id: <string>
for SQLite by @AlekSi in #3599
Documentation π
- Add release blog post for FerretDB v1.12 by @Fashander in #3555
- Crush images by @AlekSi in #3561
- Change SQLite directory for Docker images by @AlekSi in #3571
- Enable Mermaid diagrams in Docusaurus by @sid-js in #3532
- Enable linters to accept exclamation marks in headers by @chanon-mike in #3578
- Add SQLite info to glossary list by @pvinoda in #3593
- Add blog post on using Illa Cloud with FerretDB by @Fashander in #3516
- Add SQLite set up docs by @Fashander in #3568
- Add "How to Install FerretDB on Ubuntu" blog post by @Fashander in #2802
- Update ILLA blog post by @Fashander in #3620
- Add links to blog by @Fashander in #3623
Other Changes π€
- Improve embedded package documentation by @princejha95 in #3537
- Use separate PostgreSQL databases in tests by @AlekSi in #3553
- Make
collStats
calculate collection size accurately forPostgreSQL
statistics by @chilagrow in #3513 - Implement
Collection.Compact
for SQLite by @Akhil-2001 in #3536 - Use self-hosted runner for packages building by @AlekSi in #3569
- Do not create databases during local setup by @AlekSi in #3572
- Build
arm/v7
binaries by @AlekSi in #3577 - Add more tests and fixes for
$collStats
aggregation stage by @chilagrow in #3565 - Build
arm/v7
.deb
and.rpm
packages and binaries by @AlekSi in #3576 - Add tests for insertion of documents with invalid
_id
fields by @slavabobik in #3579 - Add more data to output of
collStats
anddbStats
by @chilagrow in #3538 - Update
dataSize
anddbStats
integration tests by @chilagrow in #3585 - Do not return stats in
Backend.ListDatabases
by @AlekSi in #3588 - Remove old TODOs by @AlekSi in #3595
- Use stdlib's
slices
package by @AlekSi in #3590 - Remove done TODO by @chilagrow in #3596
- Check that linked issues are open by @KrishnaSindhur in #3277
- Make it easier to run old PG handler by @AlekSi in #3598
- Implement
Collection.Compact
for PostgreSQL by @rumyantseva in #3603 - Do not skip invalid TODOs by @AlekSi in #3597
- Unskip filter pushdown integration tests by @noisersup in #3605
- Call
ANALYZE
less often by @Aditya1404Sal in #3563 - Keep envtool's version always up-to-date by @AlekSi in #3609
- Fix some tests for SQLite backend by @AlekSi in #3617
- Do not create OpLog database/collection on a fly by @AlekSi in #3625
- Make
listIndexes
return a sorted list by @codenoid in #3602
New Contributors
- @Akhil-2001 made their first contribution in #3536
- @sid-js made their first contribution in #3532
- @codenoid made their first contribution in #3591
- @chanon-mike made their first contribution in #3578
- @pvinoda made their first contribution in #3593