Skip to content

v1.4.0

Compare
Choose a tag to compare
@byo byo released this 12 Oct 15:01
· 1081 commits to master since this release

Release notes

We're pleased to introduce version 1.4 of immudb, which comes with two major features: FIPS-Compliant Builds and Synchronous Replication. And, of course, we’ve fixed bugs and made other improvements.

FIPS-Compliant Builds

Starting with v1.4.0, immudb can be compiled using the go-boringcrypto fork of the Go compiler, which uses the FIPS 140-2 compliant boringssl library. We now also officially provide FIPS-compliant binaries and Docker images.

What is it? The FIPS 140-2 standard prescribes the design and security requirements for cryptographic modules that may be approved for use by the United States government. FIPS-140 is a collection of computer security standards set by the National Institute of Standards and Technology (NIST) for the United States government. FIPS 140–2 defines the critical security parameters vendors must use for encryption implementations sold to the U.S government.

A detailed information about FIPS-compliant immudb build can be found in immudb's source code repository.

Synchronous Replication

Synchronous replication improves the reliability of data replicated across the immudb nodes in a cluster. When an immudb cluster uses synchronous replication, the primary node waits for sufficient transaction confirmations from replicas before it considers the transaction fully committed and durably stored by multiple nodes. This feature increases data durability by allowing any single node in an immudb cluster—including the primary node—to be lost without causing the database state tracked by the nodes and clients to diverge.

Prior to version 1.4, immudb only supports asynchronous replication. When a cluster is configured to use asynchronous replication, replica nodes can lag behind the primary node, and any given transaction committed on the primary node isn’t guaranteed to be replicated to other nodes within a reasonable time period. Thus, transactions committed to a primary node that have not been replicated can be lost if the primary node is irrecoverably lost. When this occurs, the state of the surviving nodes may diverge from the state computed by the immudb client, because the new primary node elected from the remaining replicas could be missing the most recent commits tracked by the clients.

To get more information about synchronous replication please refer to the documentation on docs.immudb.io.

Replication performance

Due to additional synchronization between nodes, commit throughput with synchronous replication will naturally be slower compared to a single-node cluster. The performance difference will depend on various factors such as the speed of disks, network latency, and the number of followers.

In this release we also worked on improvements to the replication mechanism itself, achieving 17 to 20 times larger TX/s replication throughput than what was available in 1.3.2 release.

SDK Updates

This release also comes with significant updates to immudb SDKs. We've brought brand new .Net SDK; added inline documentation to Go SDK; added inline documentation and increased functionality of Python SDK and Java SDK; and made significant updates to the node.js SDK 1.

Changelog

[v1.4.0] - 2022-10-12

Bug Fixes

  • build: Do not publish official non-dev images on RC tags
  • pkg/client: replace keepAlive context from the original one to the background, avoiding parent expiration
  • build: Use correct binary download links
  • embedded/store: edge-case calculation of precommitted tx
  • embedded/watchers: Fix invariant breakage in watchers
  • embedded/watchers: Fix invariant breakage in watchers
  • pkg/database: any follower can do progress due to its prefech buffer
  • pkg/replication: Do not crash on invalid tx metadata
  • pkg/replication: handle replication already closed case
  • pkg/replication: discard precommitted txs and continue from latest committed one
  • pkg/replication: solve issues when follower diverged from master
  • wmbedded/watchers: Correctly fix the original implementation
  • Makefile: add fips build flag to test/fips
  • Makefile: remove interactive flag from dist/fips command
  • ci: fix regex pattern for fips binaries
  • cmd/immuadmin: set correct data-type for replication-sync-followers flag
  • embedded/store: fix size calculation of precommitted txs
  • embedded/store: Fix checking for closed store when syncing TXs
  • embedded/store: avoid attempts to commit in wrong order
  • embedded/store: expose durable precommitted state
  • embedded/store: include allowPrecommitted into tx reader construction
  • embedded/store: ensure tx is released upon error
  • embedded/store: aht up to precommited tx
  • github: Update github actions after migration of Dockerfile's
  • pkg/database: return master commit state if failing to read follower precommitted one
  • pkg/database: Fix mutex lock in ExportTx
  • pkg/database: set follower states holder when changing replication status
  • pkg/server: add logs when replicator does not start

Changes

  • Rename sync-followers to sync-acks
  • cmd/immuclient: include precommit state when quering status
  • pkg/server: Better error message when validating replication options
  • embedded/watchers: Simplify and document cancellation path
  • embedded/watchers: Simplify mutex locking code
  • embedded/watchers: single-point for init and cleanup
  • pkg/database: wait for tx when a non-existent or non-ready transaction is requested
  • pkg/database: add TODO comment on replication passive waiting
  • pkg/database: simplify follower's wait
  • pkg/replication: Add TX gap metrics
  • pkg/replication: Add basic replication metrics
  • pkg/replication: improve replication logging
  • add dependabot config
  • Add empty line between license header and package
  • Dockerfile.fips: add fips build changes
  • cmd/immuadmin: add new replication flags
  • cmd/immuadmin: revert default replication-master-port
  • cmd/immuadmin: use default immudb port as default value for replication-master-port flag
  • cmd/immuclient: flag replication-sync-enabled to enable sync replication
  • cmd/immudb: deprecate replication-enabled towards replication-is-replica
  • docker: Move main Dockerfile's to build folder
  • docker: Simplify the main Dockerfile
  • embedded/store: resolve pre-committed using clogbuf
  • embedded/store: wip reduce allocations in exportTx
  • embedded/store: mutexless export-tx
  • embedded/store: enhanced tx discarding logic
  • embedded/store: wip load precommitted txs
  • embedded/store: method to dynamically switch to external allowance
  • embedded/store: wip wait for precommitted txs
  • embedded/store: explicit allowPrecommitted and restricted access to precommitted txs
  • embedded/store: minor code simplification
  • embedded/store: possibility to read tx header of precommitted txs
  • embedded/store: support for concurrent replicated precommits
  • embedded/store: tx parsing with sanity checks
  • embedded/store: handle commit case when there is nothing new to commit
  • embedded/store: tolerate partial data or inconsistencies when loading pre-committed txs
  • embedded/store: explanatory comments added
  • embedded/store: waits for durable precommitted txs
  • embedded/store: minor renaming and comment additions
  • embedded/store: add integrity checks when reading precommitted txs
  • pkg/api: currentState endpoint includes precommitted info
  • pkg/api: explicit sync replication setting
  • pkg/api/schema: reformat schema.proto file
  • pkg/database: minor typo in comment
  • pkg/database: sync exportTx
  • pkg/database: improve error comparison
  • pkg/database: follower commit progress without additional waits
  • pkg/database: handle special case related to sql initialization
  • pkg/database: disable automatic sql init on older databases
  • pkg/integration: add synchronous replication integration tests
  • pkg/replication: allowPreCommitted only with sync replication enabled
  • pkg/replication: speed up follower reconnection
  • pkg/replication: use session-based authentication
  • pkg/replication: handling a particular case in an optimized manner
  • pkg/replication: backward compatible replication
  • pkg/replication: check committedTxID from master
  • pkg/replication: wip optimize concurrency in replicators
  • pkg/replication: handle case when follower precommit state is up-to-date but commit state is lies behind
  • pkg/replication: sync replication using follower state
  • pkg/replication: configurable prefetchTxBufferSize and replicationCommitConcurrency
  • pkg/replication: improve error comparison
  • pkg/replication: graceful closing
  • pkg/replication: further progress in sync replication
  • pkg/replication: replicator with backward compatibility mode
  • pkg/replicator: wip precommitted tx discarding when follower diverged from master
  • pkg/server: explicit sync replication
  • pkg/server: handle admin user creation with sync replication enabled
  • pkg/server: support for systemdb with session-based auth
  • pkg/server: display all replication settings
  • pkg/server: include sync replication settings in options
  • pkg/server: use replication settings

Features

  • cmd/immuadmin: flag to set the number of sync followers
  • cmd/immudb: flag to set the number of sync followers for systemdb and defaultdb
  • embedded/store: functionality to discard precommitted txs
  • embedded/store: core support for sync replication
  • pkg/api: api extensions to support sync replication
  • pkg/database: wip sync replication logic
  • pkg/replication: mode to allow tx discarding on followers
  • pkg/replication: wip replicator with support for sync replication
  • pkg/server: sync replication logic
  • pkg/server: Add ability to inject custom database management object

Downloads

Docker image
https://hub.docker.com/r/codenotary/immudb

immudb Binaries

File SHA256
immudb-v1.4.0-darwin-amd64 0d0fd6700ac3f6686bd941f3c4a942ae8420ed3db926631165b844119ed6507f
immudb-v1.4.0-darwin-arm64 d144db7dd9a230f81c69ce5a6efeda8d47ea5adce3e29275e4a2ebc3929c1f09
immudb-v1.4.0-freebsd-amd64 49968893102c1e92caf668c403f43d47a268101c83ccde33bf0703606146b557
immudb-v1.4.0-linux-amd64 6bfdbdd5a50bbd2d1d1ad576293a2b6d028091e2e56ba2ae078f1b6182a2320e
immudb-v1.4.0-linux-amd64-fips f15b43896db970a1204e28e5ce7425993f822cd0d19bf9bde46d7486a0c72c77
immudb-v1.4.0-linux-amd64-static 883c735d94cd634dd4df026ac986688007ab8aa980ba49ebd75b3689019d8f72
immudb-v1.4.0-linux-arm64 2991fcae7d6dcbe8ce95c9fdc675b7cdeb635c52e8887a84ef03b5ad8c180115
immudb-v1.4.0-linux-s390x 1fcafe7e3b14b9419ad1b6690bdae69a142d82e4c7fed135e98968377fab08e3
immudb-v1.4.0-windows-amd64.exe 9b65cf58d12a1f572cf0df60f27f8bd96c2e2aae2124187da24edab545517528

immuclient Binaries

File SHA256
immuclient-v1.4.0-darwin-amd64 f9d70ea80a9319aa85524eff93116f016ff429ec1806e316822156bc279c13eb
immuclient-v1.4.0-darwin-arm64 f0bdbcef165c0faec34ee2affd820592d5a391c06c4058f5902d9a3c323896e4
immuclient-v1.4.0-freebsd-amd64 a9e10cf38226b7ada81e75528b066418ca0f0ccad80efce1a380d132b6f41021
immuclient-v1.4.0-linux-amd64 ed2b9e8dda6b7b46610a3cb1499cba6206ee291ee11ea283451a4b8d6a5e23b6
immuclient-v1.4.0-linux-amd64-fips 2f6995ae635ef4716c2d803352435723c4bb6a62fd0166a4d647e6660fc54a58
immuclient-v1.4.0-linux-amd64-static aef8a3dc6f40b0df4b2af5c95aa6759f38719dc38fe9fb3f29f7aa669f33a4cc
immuclient-v1.4.0-linux-arm64 f908ecf7aca6fa68f6242220141d4198d4ab499ef5cadf3cd029e42e0b49ea2e
immuclient-v1.4.0-linux-s390x e810e11543e5464e0378343cbbdfbe7eaab3b02ceb79ba1938705eca0b7b0ddd
immuclient-v1.4.0-windows-amd64.exe 204563c884a99fc33d073e3cf9182833177d0966048145d11bef793e619dc376

immuadmin Binaries

File SHA256
immuadmin-v1.4.0-darwin-amd64 644b1ef42cafed6a7d63aedc9496c6bc31be5abee06c7b44df40f4fe4a4d1cd1
immuadmin-v1.4.0-darwin-arm64 55ec64fa781f5aa7b1c1731cee3c2ad6a11059a9a11aabe9eec72c19f09084eb
immuadmin-v1.4.0-freebsd-amd64 d4f6222e500cfdf304b19be6671bfdedb93889c1fc951acce12c755370a39ca6
immuadmin-v1.4.0-linux-amd64 8433ca56e8d631410cd54e6d832f509d1f27376d7d6c9685c4f57791f6d15959
immuadmin-v1.4.0-linux-amd64-fips e2522ffbf3b83dcbc134e35af06b2ba73baf2db4196c00566d2bd328ba1ef70c
immuadmin-v1.4.0-linux-amd64-static c9a5323c6ad1a0ad2e246b936388143ee901283634547969b525cec7c7b861e9
immuadmin-v1.4.0-linux-arm64 1a85623bf4fb675393ed1de1d474f9ed96cc6bc9869602e2de4d735de38853ce
immuadmin-v1.4.0-linux-s390x 69c05e5598fbcbad447e447770f8870a4da0a7493f1f8f4236ac134ba7192a02
immuadmin-v1.4.0-windows-amd64.exe f192278e46b8cb99a813ff651cbed16ecf03f9cbc4e8a3af8e5af1db4b86af01
  1. Some SDKs updates will be released a few days after the immudb release.