Skip to content

v1.2.3

Compare
Choose a tag to compare
@jeroiraz jeroiraz released this 14 Apr 17:59
· 1664 commits to master since this release
3d945f7

immudb 1.2.3

immudb v1.2.3

  • Introduction of instrumentation panel via Prometheus for enhanced monitoring
  • Tons of optimizations and simplified long-run maintenance functionality (self-compacting index)
  • Run-time database loading/unloading
  • Physical database deletion

Fixes:

  • improved error handling when webconsole can't be started
  • fix sorted set scans in descending order
  • fix displayed name of signing key environment variable
  • fixes for session handling

Improvements:

  • much improved prometheus metrics related to internal btree
    • immudb_btree_cache_size, immudb_btree_cache_hit, immudb_btree_cache_miss, immudb_btree_cache_evict - for monitoring btree node cache usage
    • immudb_btree_depth, immudb_btree_inner_node_entries, immudb_btree_leaf_node_entries for monitoring btree depth and internal data distribution
    • immudb_btree_flushed_nodes_last_cycle, immudb_btree_flushed_nodes_total, immudb_btree_flushed_entries_last_cycle, immudb_btree_flushed_entries_total, immudb_btree_compacted_nodes_last_cycle, immudb_btree_compacted_nodes_total, immudb_btree_compacted_entries_last_cycle, immudb_btree_compacted_entries_total - for monitoring flush and compaction progress
    • immudb_btree_nodes_data_begin, immudb_btree_nodes_data_end for monitoring new online compaction
  • SQL syntax improvements (support for <> as an alternative to !=)
  • Many btree improvements:
    • faster btree insertions:
      • reduction of insertion time by 22% in our test setup
    • much better protection against unclean shutdowns (minimize the risk of full index rebuild)
    • smaller IO pressure by reducing the number of sync operations
    • more balanced distribution of entries in btree nodes
    • reduced node sizes
      • reduction of disk space occupied by index by 22% in our test setup
    • online index compaction - https://docs.immudb.io/1.2.3/develop/management.html#index-cleaning
  • Non-indexable entries
  • More tests and log messages
  • Many database options are now configurable through the GRPC api, list of options: https://docs.immudb.io/master/develop/management.html#configuration-options
  • Improved database health check endpoint
  • Compatibility mode with 1.1 proofs - https://docs.immudb.io/1.2.3/operations/backwards-compatibility.html
  • Conditional KV writes - https://docs.immudb.io/1.2.3/develop/reading.html#conditional-writes
  • On-demand database load / unload and deletion - https://docs.immudb.io/1.2.3/develop/management.html#database-loading-unloading

Important Notes:

Updating to this version will cause regeneration of the btree index. For large databases this may take some time.

Changelog

[v1.2.3] - 2022-04-14

Bug Fixes

  • cmd/immuadmin: simplify logging when flushing and compacting current db
  • pkg/database: return key not found when resolving a deleted entry
  • pkg/database: Return correct error for verifiedGet on deleted entries
  • CI/CD: Golang compiler is not needed for building docker images
  • CI/CD: Use CAS for notarization
  • embedded/store: Ensure up-to-date index on constrained writes
  • embedded/store: Fix early precondition checks
  • embedded/tbtree: copy-on-write when increasing root ts
  • immudb: Fix the name of signing key env var
  • pkg: Fix tests after recent changes in API
  • pkg/api: Remove unused Sync field from IndexOptions
  • pkg/api: typo in kv metadata message
  • pkg/api/schema: Use correct id for preconditions in SetRequest
  • pkg/auth: Avoid unguarded read from user tokens map
  • pkg/client: Adopt to EncodeReference changes
  • pkg/client: Prevent updates with incorrect database settings
  • pkg/client: Use correct response for UpdateDatabaseV2
  • pkg/client/errors: Ensure FromErrors works with ImmuError instance
  • pkg/client/errors: Update the list of error codes
  • pkg/database: Better handling of invalid constraints
  • pkg/database: Improve test coverage for KV constraints
  • pkg/database: automatically set max score if not specified in desc order
  • pkg/errors: Correct GRPC error mapping for precondition failure
  • pkg/server: Use buffered channel for catching OS signals
  • pkg/server: adjust time to millis convertion
  • pkg/server: ensure sessions locks get released
  • pkg/server: override default settings with existent values
  • pkg/server: typo in log message
  • tools/monitoring: Update grafana dashboards

Changes

  • Fix typo in a comment
  • Rename Constraints to Preconditions
  • cleanup percentage as float value
  • Update copyright to 2022
  • Dockerfile: Improve dockerfile builds
  • build: improve release instructions (#1100)
  • cmd/immuadmin: add safety flag in delete database command
  • cmd/immuclient: health command description
  • embedded/ahtree: fix error message
  • embedded/appendable: appendable checksum calculation
  • embedded/appendable: return io.EOF if there are not enough data for checksum calculation
  • embedded/appendable: discard capability
  • embedded/appendable: fix typo in error message
  • embedded/store: syncThld at store options
  • embedded/store: Add missing Copyright header
  • embedded/store: declare constants for all the options
  • embedded/store: parametrized index write buffer size
  • embedded/store: add synced setting in index options
  • embedded/store: sync aht when syncing the store
  • embedded/store: verbose data corruption error
  • embedded/store: index one tx per iteration
  • embedded/store: use store layer for constraint validations
  • embedded/store: constraint validations with deletion and expiration support
  • embedded/store: do not skip expired entries when indexing
  • embedded/store: verbose logging during compaction
  • embedded/store: skip expired entries during indexing
  • embedded/store: improve compaction logging
  • embedded/store/options: Simplify validation tests
  • embedded/tbree: only insert nodes in cache when they were mutated
  • embedded/tbree: use shared writeOpts
  • embedded/tbree: remove obsolete property
  • embedded/tbree: bump index version
  • embedded/tbtree: minOffset only for non-mutated nodes
  • embedded/tbtree: Add metrics for index data size
  • embedded/tbtree: reduce allocations when flushing
  • embedded/tbtree: use double for min offset calculation
  • embedded/tbtree: data discarding with opened and older snapshots
  • embedded/tbtree: improve snapshot loading and discarding
  • embedded/tbtree: synced flush if cleanup percentage is greater than zero
  • embedded/tbtree: Add more internal metrics
  • embedded/tbtree: reduce allocs during flush
  • embedded/tbtree: ensure current snapshot is synced for compaction
  • embedded/tbtree: validate input kv pairs before sorting
  • embedded/tbtree: Use KV entries count for sync threshold
  • embedded/tbtree: no cache update during compaction reads
  • embedded/tbtree: discard unreferenced data when flushing index
  • embedded/tbtree: discard unreferenced data
  • embedded/tbtree: middle node split
  • embedded/tbtree: min offset handling
  • embedded/tbtree: validate compaction target path
  • embedded/tbtree: positive compaction threshold
  • embedded/tbtree: discard unreferenced data after sync
  • embedded/tbtree: ensure sync on gracefully closing
  • embedded/tbtree: checksum-based snapshot consistency validation
  • embedded/tbtree: self-healing index
  • embedded/tbtree: set initial offsets during initialization
  • embedded/tbtree: validate data-format version
  • embedded/tbtree: Extend buckets for child node count histogram
  • embedded/tbtree: reduce fixed records length
  • embedded/tbtree: open-ranged nodes
  • embedded/tbtree: wip reduce node size
  • embedded/tbtree: use binary search during key lookups
  • embedded/tbtree: fully replace sync with syncThld
  • embedded/tbtree: rebase non-indexed on kv syncthreshold
  • embedded/tbtree: explicit error validation before loading
  • embedded/tbtree: sort kv pairs in bulkInsert
  • makefile: fix cas sign instructions
  • metrics: Add better flush / compaction metrics for btree
  • pkg/api: prepare flushindex endpoint for future extensions
  • pkg/api: use entries spec in verified and scan tx endpoints
  • pkg/api: parametrized index cleanup percentage
  • pkg/api: non-indexable entries
  • pkg/api: use nullable prefix in db settings message
  • pkg/api: add synced param to flushindex endpoint
  • pkg/api: change proto schema toward db loading/unloading
  • pkg/api: uniform v2 endpoints
  • pkg/api: db loading and unloading
  • pkg/client: optional client connection
  • pkg/client: synced flushing to enable physical data deletion
  • pkg/client: use txRequest in TxByIDWithSpec method
  • pkg/database: tx entries excluded by default if non-null spec is provided
  • pkg/database: optional tx value resolution
  • pkg/database: remove db name from options
  • pkg/database: use shared tx holder when resolving tx entries
  • pkg/database: parameters to resolve references at tx
  • pkg/integration: integrate non-indexed into grpc apis
  • pkg/server: Dump used db options when loading databases
  • pkg/server: replication options for systemdb and defaultdb
  • pkg/server: use syncThreshold
  • pkg/server: use previous store default values
  • pkg/server: endpoint to retrieve settings of selected database
  • pkg/server: log web-console error on boot
  • pkg/server: start/stop replicator when loading/unloading db
  • pkg/server: expose max opened files for btree indexing
  • pkg/server: minor changes
  • pkg/server: synced db runtime operations
  • pkg/server: expose flush index endpoint
  • pkg/server: increase default max number of active snapshots
  • pkg/server: tolerate failed user-created db loading
  • pkg/server: convert time to milliseconds
  • pkg/serverr: validate request in deprecated database creation endpoint
  • stats: Add btree cache prometheus stats

Features

  • Entries-independent constraints in GRPC api
  • Improved API for database creation and update
  • Move KV write constraints to OngoingTX member
  • Improved validation of kv constraints
  • KV: Add constrained KV writes for ExecAll operation
  • KV: Do not create unnecessary snapshots when checking KV constraints
  • KV: Move constraints validation to OngoingTx
  • KV: Add constrained KV writes for Set operation
  • KV: Add constrained KV writes for Reference operation
  • embedded/cache: dynamic cache resizing
  • embedded/store: Fail to write metadata if proof version does not support it
  • embedded/store: Add max header version used during writes
  • embedded/store: non-indexable entries
  • embedded/store: Add tests for generation of entries with metadata
  • embedded/store: Allow changing tx header value using GRPC api.
  • embedded/tbtree: decouple flush and sync by introducing syncThreshold attribute
  • immuadmin: Allow changing proof compatibility from immuadmin
  • kv: Update grpc protocol with KV set constraints
  • pkg/api: delete database endpoint
  • pkg/api: tx api with entry filtering capabilities
  • pkg/client: new method to fetch tx entries in a single call
  • pkg/database: Updated GRPC protocol for constrained writes
  • pkg/database: Update code for new constrained write protocol
  • pkg/database: add noWait attribute in get request
  • pkg/server: database health endpoint
  • pkg/server: support database loading/unloading
  • pkg/server: new endpoint databaseSettings
  • pkg/server: expose all database settings
  • tools/monitoring: Add immudb Grafana dashboard
  • tools/monitoring: added datasource selection, added instance selection, labels include instance, fixed calculations

Downloads

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

Immudb Binaries

File SHA256
immudb-v1.2.3-darwin-amd64 b03c106daca266bf0345206c3cb194f65392c2115c66c9d5c4d8bae2143bb2fc
immudb-v1.2.3-darwin-arm64 3745fd81a81f03fce432e2ac8c05aeca8d24cbbba2d308ac557a70fff1b5dda2
immudb-v1.2.3-freebsd-amd64 76c1613cbbbed07b5ed5a336e4beb778a6f9bd430433789e6248c369b586f1b4
immudb-v1.2.3-linux-amd64 5fc041ec54292e344415a2db171986685da7880690c7758822fb30bca1189f2a
immudb-v1.2.3-linux-amd64-static ae71135cc0c4a32f84543ea75945c706ab7122f2d6a3172821aa70329cc85536
immudb-v1.2.3-linux-arm64 bd89c884907802397e6ea70741e90eee023dea8830089b4e34daf0d4e3ded6a0
immudb-v1.2.3-linux-s390x 5b09d162dfa59624f941275f6d45f4fd4928dde466a7486cba41a4aa7f5e3329
immudb-v1.2.3-windows-amd64.exe 2218ce7450da509c0bd66429d1b0fb21f2f0949685ba93f71076c27d098d75c0

Immuclient Binaries

File SHA256
immuclient-v1.2.3-darwin-amd64 9a15647180557662f8f7ddcf9362729e43f66bc91e729992829be8bdbaafc1f5
immuclient-v1.2.3-darwin-arm64 0c7f315b7055bb2061c464375c703eccd132a76a50e227b74d86dc83fa5b1c57
immuclient-v1.2.3-freebsd-amd64 14ff94b79576feabd20f29e8eb6793176e9eb0740c34839ff49dabd2f16d729e
immuclient-v1.2.3-linux-amd64 d3a8f10ed09ef5a6fc4a1991175e4f2ddd14592de79a984a07bcab38c8708be9
immuclient-v1.2.3-linux-amd64-static 537089659f460cc2fb4537f3567ae84a252d7787504b9edab3a0a8177841f67e
immuclient-v1.2.3-linux-arm64 75dda0fb40459685dc4457b7522447bea45f3a46bf3e39c9e89a6169014fa36b
immuclient-v1.2.3-linux-s390x b9ff4e6c1350662b4376c35d0768f1276bd942a984e4a6decbd3024a48794a0a
immuclient-v1.2.3-windows-amd64.exe 6ddb1dc0c1985fb13c92cf6605de1c6c814271209cf789b35df44bb2cef85540

Immuadmin Binaries

File SHA256
immuadmin-v1.2.3-darwin-amd64 054a7d7d5d4725926606defdf86dcf1701132b76f30dd29091f2a10cd6311cea
immuadmin-v1.2.3-darwin-arm64 c21f81b1b443a846472b8df8d7092844f58ba112063ee7f35efe9509f5093863
immuadmin-v1.2.3-freebsd-amd64 7197ce5804a41ba6a51aa72684b381be37a0091ffb01efb2189cec335f2094b9
immuadmin-v1.2.3-linux-amd64 b267a200992612c46b979421ec77374c261507a23a750030a1f46996090f132e
immuadmin-v1.2.3-linux-amd64-static ba4ef373a0fb9f440d087528f9af40836e800846b77848a3a6084964b4320f8b
immuadmin-v1.2.3-linux-arm64 0234b5d0c48c850f6e577ade0ef75d2674781560a634cf2b757835a0c9435ac8
immuadmin-v1.2.3-linux-s390x 7a9be9a67f4cd6ea9cbbf24bafdccbe8468bf12fce2a415aa39266cb7b228769
immuadmin-v1.2.3-windows-amd64.exe 7c929698668891008f7fbc641ada790915de99df71719bcd5be1584c79bbdf5c