Skip to content

v1.3.2

Compare
Choose a tag to compare
@jeroiraz jeroiraz released this 25 Aug 18:09
· 1254 commits to master since this release
80fa08f

Release notes

Performance was the main focus of this immudb release. The way durability guarantees were implemented until now i.e. fsync was called synchronously as the final commit step, resulted in a lot of overhead for each transaction.

A significant improvement in write performance (up to x10 faster compared to previous immudb release v1.3.1) was achieved by grouping transactions in the last step of the commit process. The gains are greatest when there are fewer key-value entries per transaction and multiple writers are simultaneously working. The cost of the sync operation pays for itself as the number of key-value pairs in each transaction increases, although some noticeable speed can still be achieved (up to x2 compared to previous immudb release v1.3.1).

Read performance was also significantly improved due to the introduction of reusable pools of objects, which reduced allocations needed during query resolution. The gains are quite significant in both single and multi-get operations.

Benchmarking

Stay tuned, benchmarks done using stresser2 tool (https://github.com/codenotary/immudb-tools) will be available soon, we're still collecting some results.

JSON Logging

Logs can also be generated in json format for easier ingestion by logging platforms.
It's quite simple to enable this useful feature, just run immudb with the logformat flag set to json e.g. ./immudb --logformat=json

Go 1.18

immudb binaries and Docker images are now built with Go 1.18.

Changelog

[v1.3.2] - 2022-08-25

Bug Fixes

  • access tls value in global scope within ingress annotations
  • company name in webconsole and other files
  • build: Fix go-acc and goveralls invocations
  • build: update go version to 1.18 in Dockerfiles
  • build/RELEASING.md: Add note about updating playground
  • embedded: use tmp folder for unit test cases
  • embedded/sql: Support single BEGIN statement.
  • embedded/store: Check precommitted state when replicating
  • embedded/store: Optionally preallocate Tx pools
  • embedded/store: Ensure ordering of transaction timestamps
  • embedded/store: Assign blTxID within locked tx state
  • embedded/store: ensure tx is released upon error
  • embedded/store: Improved check for replicated transaction
  • embedded/store: Return correct error on key length exceeded
  • embedded/store: Protect against simultaneous replicators
  • embedded/store: Reduce the amount of allocations for tx object
  • embedded/tools/stress_tool: Fix compilation after recent update to tx holder pool
  • getRandomTable: increase RNG range for table generation
  • github: Remove unnecessary /test/ path when uploading perf results to s3
  • github: Do not use yaml anchors in github workflows
  • pkg/client: Invalid client state after connection refused
  • pkg/client/clienttest: enforce mock client to interface
  • pkg/database: Fix calculation of proof for VerifiableTxByID
  • pkg/database: Correct revision for Scan requirests
  • server: Show info text with a logger
  • servertest: Allow accessing Server object before starting the server
  • stdlib/rows: add colums to row response
  • test/performance: Cleanup test directory

Changes

  • pin google.golang.org/protobuf to v1.27.1 (currently used version for generated code).
  • Introduce separate TxHolder pools
  • update github.com/spf13/viper to v1.12.0.
  • makefile formatting.
  • update build constraint to new & future-proof syntax.
  • format tools.go.
  • deprecate ImmuClient.HealthCheck in favour of ServerInfo.
  • reimplement ImmuClient.HealthCheck using rpc ServerInfo instead of (deprecated) Health.
  • refactor TestServerInfo.
  • Update main go versin to 1.18
  • generate gRPC stubs.
  • ignore schema_grpc.pb.go in coveralls.
  • use go.mod version of github.com/grpc-ecosystem/grpc-gateway when building codegen.
  • regenerate with correct version of protoc-gen-go.
  • ignore schema_grpc.pb.go in code coverage.
  • pin github.com/pseudomuto/protoc-gen-doc to 1.4.1 (currently used version for generated code).
  • Makefile: Update webconsole to 1.0.16
  • build: Update RELEASING.md doc
  • build: Improve generation of build checksums
  • cmd/immuadmin: Add support for max-commit-concurrency option
  • cmd/immuadmin: Add support for read-tx-pool-size option
  • cmd/immudb: Add support for max-sessions command line option
  • database/sql: Delay txholder allocation on VerifiableSQLGet
  • embedded/ahtree: threshold-based sync
  • embedded/ahtree: use bigger default write buffer size
  • embedded/ahtree: improve error handling
  • embedded/ahtree: flushless append
  • embedded/ahtree: improve validations and error handling
  • embedded/ahtree: support newst appendable implementation
  • embedded/ahtree: improve error message consistency
  • embedded/ahtree: minor error message change
  • embedded/appendable: autosync when write buffer is full
  • embedded/appendable: autosync support in multi-appendable
  • embedded/appendable: flush when no more writes are done in appendable
  • embedded/appendable: improve explanatory comment inside sync method
  • embedded/appendable: improve singleapp validation and error handling
  • embedded/appendable: error tolerant seek
  • embedded/appendable: improve validations and error handling
  • embedded/appendable: inmem buffer offset
  • embedded/appendable: wip remoteapp validation
  • embedded/appendable: return io.EOF when offset is out of range
  • embedded/appendable: upgrade mocked and remote appendable based on new flushing assumptions
  • embedded/appendable: auto-sync options
  • embedded/appendable: multi-appendable shared write buffer
  • embedded/htree: improve error handling
  • embedded/sql: Remove unnecessary tx holder buffer from SQLTx
  • embedded/store: Better errors returned during replication error
  • embedded/store: aht options
  • embedded/store: Use dedicated error for replication conflicts
  • embedded/store: sync AHT before tx commit log
  • embedded/store: in-mem clog buffer written when synced
  • embedded/store: wrap internal already closed errors
  • embedded/store: handle appendable already close error
  • embedded/store: Optimize ReadTxHeader method
  • embedded/store: Do not write values if concurrency limit is reached
  • embedded/store: Add dedicated error for tx pool exhaustion
  • embedded/store: add TODO comment
  • embedded/store: parametrize write buffer size
  • embedded/store: wip retryable sync
  • embedded/store: flush-less precommit
  • embedded/store: multi-tx syncs
  • embedded/store: use smaller default buffer size
  • embedded/store: Add txDataReader to process transaction data
  • embedded/store: avoid sync waiting if there are no new transactions
  • embedded/store: improve error comparison with errors.Is(...)
  • embedded/store: wip error declaration
  • embedded/store: Add explicit ReadTxEntry method
  • embedded/store: Add explicit ReadTxHeader
  • embedded/store: Optimize ReadTxEntry method
  • embedded/store: Add txPoolOptions to setup pool parameters upon creation
  • embedded/store: set new default write buffer values
  • embedded/store/txpool: Allocate pool entries separately
  • embedded/store/txpool: Make txPoolOptions members private
  • embedded/tbtree: improve error handling
  • embedded/tbtree: use non-retryable sync
  • embedded/tbtree: define using generic errors towards errors.Is(...) usage
  • embedded/watchers: improve error handling
  • github: Update ACTIONS_SECRETS.md file
  • github: Allow selection of runner to run perf test
  • github: Run perf test suite on pull requests
  • github: Run performance test suite on push to master
  • github: Add simple documentation of PERF_TEST_xxx secrets
  • github: Install qemu using docker/setup-qemu-action
  • github: Allow using multiple runners for perf test suite
  • github: Upload perf results to AWS s3
  • pkg/api: Add tx pool size to GRPC and stored db options
  • pkg/api: milliseconds message type
  • pkg/api: expose aht settings
  • pkg/api: export syncFrequency database parameter
  • pkg/api: deprecate rpc Health in favour of ServerInfo.
  • pkg/database: Add tx pool size to db options
  • pkg/database: Remove txHolder from get operation
  • pkg/database: Do not allocate txholder for history scans
  • pkg/database: allocate tx buffer before doing verified writes
  • pkg/logger: Add memory logger
  • pkg/logger: add json logger
  • pkg/server: simplify ImmuServer.Health.
  • pkg/server: Add pprof option
  • test/performance: Add basic flags to the benchmark process
  • test/performance: Add separate Write KV/s test.
  • test/performance: Split benchmark list and run code
  • test/performance: Move test seed out of configuration
  • test/performance: Move random generator and key tracker to common coode
  • test/performance: Add CPU time / memory stats gathering
  • test/performance: Allow customized name for the benchmark
  • test/performance: Add basic IO stats
  • test/performance: Improve live IO display
  • test/performance: Better logging and output
  • test/performance: Correctly close random data generator

Features

  • revert usages of ServerInfo that would break backwards compatibility.
  • add test for HealthCheck.
  • cmd/immuadmin: expose syncFrequency and WriteBufferSize db parameters
  • cmd/immuclient: add info command to immuclient.
  • pkg/api: expose write buffer parameter
  • pkg/api: improve documentation of ServerInfo.
  • pkg/api: remove ServerInfoResponse.status field.
  • pkg/api: add ServerInfo rpc to deprecate Health.
  • pkg/client: revert WaitForHealthCheck change to maintain backwards-compatibility.
  • pkg/client: implement ImmuClient.ServerInfo.
  • pkg/server: implement ImmuServer.ServerInfo.

Downloads

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

immudb Binaries

File SHA256
immudb-v1.3.2-darwin-amd64 b4efc5fb979db7dd32ad244c9fd27b1b5c4443d243cde13360f47c3d731d74fa
immudb-v1.3.2-darwin-arm64 1d7655ccf78edea69620c09afcadeb22ab8cf666f56f833fd62ce44d0357bac6
immudb-v1.3.2-freebsd-amd64 4306df4189a55aba4c37913dfc78223e791a9acdf59b3a75cac490683499e2e7
immudb-v1.3.2-linux-amd64 6833dc4cdba2da6d438c45ecaa244ea10e2ce0175af61428a43e4117645cdf52
immudb-v1.3.2-linux-amd64-static 4093bd435c1006c16b62f6dadc0d1178a111c267c9432e709503d8e8cca061ad
immudb-v1.3.2-linux-arm64 e9badad821af93ccacaff68d4c949c26f76a9ba60616b45ffba6a1fa04dbb1fe
immudb-v1.3.2-linux-s390x 58798b1bbec98c81a84b328a8bfec62ce7b65ff6dd0a148a94a15acac32c0c33
immudb-v1.3.2-windows-amd64.exe 20a61136c566ba712927cf9779058b2ecf9845dc5901f16471d2017188396000

immuclient Binaries

File SHA256
immuclient-v1.3.2-darwin-amd64 537fe5282b95f7a48f1030a2020203b6c0376bee0a56e0e22d67ed409d77520d
immuclient-v1.3.2-darwin-arm64 c84efdf222f09e31b1c839696fc12c9c0c04a772fd9bc9f3383747ee56ec55df
immuclient-v1.3.2-freebsd-amd64 a73130dacff5897abc0e3f08c27897d373f7b8e03cdd93ca73072e3f558d1978
immuclient-v1.3.2-linux-amd64 081d52d7105a58cd37302a16d90132f96c025f0e374ec18573d5ea2f8fe50cf9
immuclient-v1.3.2-linux-amd64-static c1b68ba71e363fdb33f8eb15288cc910a520c0ddc54af711bee9a35dfb54ca14
immuclient-v1.3.2-linux-arm64 20912c92a6268829c19077c2c750a7d1d7a247e4529ce979a515f2d1c924cdb0
immuclient-v1.3.2-linux-s390x f9a480bd242143f8bae1ea9ea565dee0f51e09768ca539d6c950323031702c34
immuclient-v1.3.2-windows-amd64.exe 10e4c27efee6b558332dba1768fba3cb053215e4e9ae1a463571ec32a9fc9636

immuadmin Binaries

File SHA256
immuadmin-v1.3.2-darwin-amd64 a801d2ce7bdc1565698c9596dc4e75682dc672568669c77958ace47586030761
immuadmin-v1.3.2-darwin-arm64 2178cef636784914ba5b182cbab75d24e2472ab232a301bf438549f3ad639e21
immuadmin-v1.3.2-freebsd-amd64 d5de0d391537c4ca555838306d8c3cf8b112f1b69712e643999f91e23b552685
immuadmin-v1.3.2-linux-amd64 ed82417aa2a96ff6da76a2c262bfd46f9cc356acbfebce437591e5c9acd83d95
immuadmin-v1.3.2-linux-amd64-static 50bdc5d1b58d2c4114ef2e5e538db32183a85a7c9e88ee33bf8acede5026c4e7
immuadmin-v1.3.2-linux-arm64 eac45e448ee6661eb262d365297ba94ec6e1a94d91a5f986536504f5cc132b38
immuadmin-v1.3.2-linux-s390x d37ec84157ec3130292e9d84bdb8080edaf74a13c44d585ddc0e2fd4f50a83f0
immuadmin-v1.3.2-windows-amd64.exe 8678122e3708691937ee3b28e1edda251ee6a3eb10f79e8dccedc5868e1485ff