Releases: FerretDB/FerretDB
v1.24.0
What's Changed
Embeddable package
As communicated in the previous release, this version renames the SLogger
field to Logger
,
finishing the migration from zap
to slog
.
Fixed Bugs 🐛
- Ignore Stable API fields by @Evengard in #4067
- Fix Docker's
HEALTHCHECK
in production image by @dasjoe in #4547 - Remove duplicate response field on
OP_QUERY
hello
by @chilagrow in #4549 - Fix
OP_QUERY
saslStart
andsaslContinue
for C# driver by @chilagrow in #4550 - Fix
saslContinue
completing handshake too early by @chilagrow in #4552
Documentation 📄
- Fix Terser plugin build error by @nalgeon in #4506
- Enable zoom on images by @Fashander in #4508
- Add blog post on building a RESTful API with Deno by @Fashander in #4517
- Update missing image by @Fashander in #4522
- Fix broken links by @Fashander in #4525
- Fix critical typo in telemetry documentation by @AlekSi in #4536
- Bump Docusaurus by @AlekSi in #4544
- Added Elestio as one-click deploy option by @kaiwalyakoparkar in #4546
- Add docs for new authentication by @Fashander in #4557
Other Changes 🤖
- Implement our own changelog generator by @vigneshsankariyer1234567890 in #4219
- Add open issues check in
checkdocs
by @kropidlowsky in #4258 - Prototype OTel context propagation by @rumyantseva in #4483
- Cleanup logging by @chilagrow in #4489
- Use
wire
andwirebson
packages by @chilagrow in #4490 - Alignment and Bugfixes for SAP HANA backend by @yonarw in #4491
- Port small things from v2 by @AlekSi in #4495
- Bump deps by @AlekSi in #4496
- Remove
zap
remnants by @AlekSi in #4497 - Update
listDatabases
integration test filter input by @chilagrow in #4499 - Update duplicate field handling by @chilagrow in #4500
- Convert BSON values of
wirebson
totypes
by @chilagrow in #4501 - Use
wireclient
package by @chilagrow in #4502 - Fix log message by @chilagrow in #4503
- Fix
checkdocs
Github cache on CI by @noisersup in #4509 - Document logging changes by @AlekSi in #4510
- Fix CI for documentation preview by @AlekSi in #4518
- Add
Taskfile
target topngcrush
all new images by @AlekSi in #4519 - Remove fuzzing by @chilagrow in #4520
- Use Go 1.22.6 by @AlekSi in #4523
- Minor cleanup by @AlekSi in #4535
- Use
wireclient
login function in integration test by @chilagrow in #4538 - Remove
wireconn
tests for now by @AlekSi in #4548 - Pass
GITHUB_TOKEN
to tools tests by @AlekSi in #4558
New Contributors
- @nalgeon made their first contribution in #4506
- @Evengard made their first contribution in #4067
- @dasjoe made their first contribution in #4547
- @kaiwalyakoparkar made their first contribution in #4546
- @vigneshsankariyer1234567890 made their first contribution in #4219
v1.23.1
Fixed Bugs 🐛
v1.23.0
What's Changed
Embeddable package
This release switches from the zap
logging package to the standard slog
.
If the logger was configured by Go programs that import github.com/FerretDB/FerretDB/ferretdb
package, they should configure the SLogger
field instead.
Setting the old Logger
field will make the program panic and make the issue immediately noticeable.
The next release will completely remove zap
and rename SLogger
to just Logger
.
Initial OpenTelemetry tracing support
This release adds initial support for sending OpenTelemetry traces to the OTLP endpoint.
The set of spans and their attributes is not stable yet and will change over time.
All improvements in observability in this release (OpenTelemetry traces, Kubernetes probes, debug archive)
are documented there.
Experimental Systemd configuration in .deb
and .rpm
packages
This release adds initial unit files for systemd
that auto-start FerretDB.
They are likely to change in the future in incompatible ways; for example, we may switch to using a non-root user.
New Features 🎉
- Add Kubernetes liveness probe by @noisersup in #4378
- Add Kubernetes readiness probe by @noisersup in #4426
- Implement Docker healthcheck by @noisersup in #4364
- Add OpenTelemetry traces and spans by @AlekSi in #4477
- Send OpenTelemetry traces and spans to OTLP endpoint by @AlekSi in #4484
- Implement
/debug/archive
handler by @sachinpuranik in #3895 - Provide systemd unit file in
.deb
and.rpm
packages by @noisersup in #4478
Enhancements 🛠
Documentation 📄
- Document Kubernetes probes by @AlekSi in #4424
- Refactor and document
/debug/archive
handler by @AlekSi in #4485 - Document logging by @AlekSi in #4436
- Add release blog post for FerretDB v.1.22.0 by @Fashander in #4401
- Add blog post on running FerretDB and CloudNativePG on Kubernetes by @Fashander in #4377
- Add blogpost on "monitoring FerretDB performance using Coroot" by @Fashander in #4279
- Crush
.png
images by @AlekSi in #4441 - Remove broken links by @AlekSi in #4433
Other Changes 🤖
- Replace deprecated syntax in Dockerfiles by @AlekSi in #4397
- Update comments about interfaces by @AlekSi in #4405
- Check database name for authentication by @chilagrow in #4402
- Refactor runnables by @AlekSi in #4404
- Add tests for
ctxutil.Sigterm
by @AlekSi in #4406 - Setup OpenTelemetry exporter for FerretDB by @rumyantseva in #4380
- Extract
types
andzap
code into separate files by @AlekSi in #4408 - Bump Go and deps by @AlekSi in #4416
- Implement Kubernetes startup probe by @noisersup in #4399
- Disable OTEL in tests where collection name might have non-UTF-8 symbols by @rumyantseva in #4423
- Stop Otel exporter gracefully in
envtool
by @AlekSi in #4425 - Include
OpReply
error handling by @chilagrow in #4420 - Test
authSource
by @chilagrow in #4407 - Return
connectionStatus
commanddb
field by @chilagrow in #4419 - Implement checkswitch to handle regular switches by @PaveenV in #4381
- Cleanup
checkswitch
handling by @chilagrow in #4434 - Bump deps by @AlekSi in #4446
- Ignore
$readPreferences
forinsert
by @AlekSi in #4440 - Readiness probe cleanup by @noisersup in #4447
- Update linters configuration by @AlekSi in #4451
- Add support for named
slog
loggers by @chilagrow in #4435 - Increase setup timeout in tests by @AlekSi in #4454
- Port pgx logger by @AlekSi in #4450
- Handle
authSource
in low level driver by @chilagrow in #4449 - Use single definition of order for
checkswitch
by @chilagrow in #4452 - Clarify the meaning of the passed context by @AlekSi in #4455
- Remove
FuncCall
by @AlekSi in #4476 - Use
slog
inclientconn
package by @chilagrow in #4457 - Use
slog
inpostgresql
backend by @chilagrow in #4466 - Use
slog
insqlite
backend by @chilagrow in #4467 - Use
slog
inmysql
andhana
backends by @chilagrow in #4463 - Use
slog
inoplog
andcursor
packages by @chilagrow in #4471 - Use
slog
inotel
by @chilagrow in #4474 - Use
slog
indebug
package by @chilagrow in #4473 - Use
slog
in integration tests by @chilagrow in #4481 - Use
slog
inmain.go
and embeddedferretdb
package by @chilagrow in #4462 - Use
slog
infsql
by @chilagrow in #4464 - Use
slog
in handler by @chilagrow in #4470 - Use
slog
in envtool by @chilagrow in #4480 - Implement
slog.LogValuer
interface fortypes
package by @chilagrow in #4479 - Drop old dependency by @AlekSi in #4486
- Cleanup logging by @chilagrow in #4489
New Contributors
v1.22.0
What's Changed
Docker images changes
Production Docker images now use a non-root user with UID 1000 and GID 1000.
New Features 🎉
- Make maximum document size configurable by @chilagrow in #4294
- Enable initial user setup for new authentication by @AlekSi in #4310
Fixed Bugs 🐛
- Fix TCP port for debug handler in Docker images by @AlekSi in #4218
- Fix embedded package panic by @noisersup in #4278
Enhancements 🛠
- Use non-privileged
scratch
for production Docker images by @rumyantseva in #4211 - Improve error message for
state.json
by @AlekSi in #4251 - Sort new fields in lexicographic order during update by @wazir-ahmed in #4223
Documentation 📄
- Add blog post for FerretDB v1.21 release by @Fashander in #4202
- Add blog post for Openziti by @Fashander in #4194
- Fix broken code blocks in documentation by @AlekSi in #4239
- Add KubeDB blogpost on deploying FerretDB on Kubernetes by @Fashander in #4253
- Add blog post about deploying FerretDB on Taikun CloudWorks by @Fashander in #4297
- Update example in documentation by @nullniverse in #4305
- Add blog post on Adding MongoDB compatibility to Aiven for PostgreSQL by @Fashander in #4349
- Add
restart: on-failure
to all containers by @pravi in #4309
Other Changes 🤖
- Bump deps by @AlekSi in #4201
- Make our own low-level driver for testing by @noisersup in #4193
- Bump deps by @AlekSi in #4238
- Fix some comments by @deferdeter in #4237
- Add dummy setup flags by @b1ron in #4247
- Fix some comments by @dockercui in #4257
- Remove old BSON implementation by @AlekSi in #4262
- Port BSON changes by @AlekSi in #4263
- Move tools cache directory by @AlekSi in #4265
- Use more shards on CI by @AlekSi in #4266
- Bump Go to 1.22.3 and deps by @AlekSi in #4272
- Update linters configuration by @AlekSi in #4277
- Fix
env-data
by @chilagrow in #4289 - Bump deps by @AlekSi in #4302
- Port some changes from v2 by @AlekSi in #4307
- Extract user creation and move to
backends
package by @AlekSi in #4311 - Populate
env-data
for runningFerretDB
by @chilagrow in #4319 - Fix
task docker-local
command by @AlekSi in #4363 - Add stub for the Docker healthcheck by @noisersup in #4355
- Bump deps by @AlekSi in #4375
- Remove
PLAIN
mechanism from new authentication by @chilagrow in #4373 - Fix codecov CLI version by @AlekSi in #4379
- Add
TestMain
to each integration test package by @AlekSi in #4366 - Handle supported mechanisms in
hello
andgetParameters
commands by @chilagrow in #4368 - Remove ambiguous comment by @chilagrow in #4382
- Revert codecov version fix by @AlekSi in #4383
- Fix typo in migration guide by @AlekSi in #4384
- Port
wire
package changes by @AlekSi in #4386 - Port
password
changes by @AlekSi in #4388 - Include
SpeculativeAuthenticate
changes by @chilagrow in #4390 - Fix
saslContinue
prematurely returningdone
by @chilagrow in #4391
New Contributors
- @deferdeter made their first contribution in #4237
- @dockercui made their first contribution in #4257
- @nullniverse made their first contribution in #4305
- @pravi made their first contribution in #4309
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