Skip to content
Go to file
Cannot retrieve contributors at this time
504 lines (379 sloc) 22.1 KB
Version 4.1.7 Released November 12, 2020
- Added ReadTracking interface and JTransaction.weakConsistency()
Version 4.1.6 Released April 14, 2020
- SnapshotJTransaction and SnapshotTransaction now implement Closeable
- Added new key/value implementation based on MVStore (issue #34)
- Added method NavigableSetPager.getPageNumber()
- Added convenience method NavigableSetPager.reverseViewOrdering()
- Added method MutableView.setReadTrackingPaused()
- Map ValidationException to Spring DataIntegrityViolationException
- Allow @OnVersionChange methods that completely ignore schema versions
- Updated FoundationDB to fix build of permazen-kv-fdb
- Fixed a few minor Java expression parsing bugs
- Updated many dependency versions
Version 4.1.5 Released May 21, 2019
- Fixed bug where snapshot tx could leak if commit() threw an error
- Added missing support for object properties having Enum array type
- Added utility method AbstractXMLStreaming.newInvalidAttributeException()
- Fixed bug where ArrayType.getDimensions() was sometimes incorrect
- Added NullSafeType.getInnerType()
Version 4.1.4 Released February 5, 2019
- Added method SnapshotKVTransaction.getCommitVersion()
- Create exception type that captures MVCC conflict info
- Minor Raft improvements
Version 4.1.3 Released January 22, 2019
- Fixed Raft bug where leaders were canceling snapshots too soon
- Fixed infinite loop when parsing certain invalid cast expressions
- Allow @OnVersionChange methods without version number parameters
- Fixed CLI bug where "raft-add" failed in fallback standalone mode
Version 4.1.2 Released October 26, 2018
- Improved Raft performance under heavy load and/or with slow followers
- Minor performance improvement in calculating inverse cacades
Version 4.1.1 Released June 5, 2018
- Fixed timeout bug in Raft commit when leader has zero followers
- Closed race window in MutableView when recording read ranges
- Added the ability to configure Raft service thread priority
- Added support for Raft high priority transactions
- Added LMDB key/value database
- Added "decode-key" CLI command
Version 4.1.0 Released April 19, 2018
- Added console support for configuring a required password
- Brought FoundationDB key/value database back to life
- Added Xodus key/value database
- Updated a bunch of dependencies
Version 4.0.3 Released January 20, 2018
- Removed CLI functions obsoleted by Java 8: apply(), filter(), foreach(), transform()
- Fixed bug where queryIndex() did not verify the field was actually indexed
- Fixed potential deadlock due to lock order reversal in KeyWatchTracker
- Added support for sorting on database fields in JObjectContainer
Version 4.0.2 Released December 28, 2017
- Fixed performance bug in RaftKVDatabase when under many simultaneous transactions
- Added Spring support for legacy application/x-jsimpledb-transaction MIME type
- Attempt to recover from write errors in AtomicArrayKVStore by reopening mods file
- Added JField.getDeclaringAnnotation() to support additional introspection
Version 4.0.1 Released October 23, 2017
- Added support for import/export of POJO's (issue #24)
- Fixed bug with generic type getter bridge methods in subtypes
- Fixed bug in CachingKVStore triggered by reverse iterations
- Added KVStore.apply() to allow optimizing batch updates
- Added parse support for casting any supported field type to String
- Fixed bug where @JField was not inherited from super-super-interfaces
Version 4.0.0 Released September 14, 2017
- Rebranded project: JSimpleDB -> Permazen (*)
- Added ability to set bounds on index value(s) and target
- Fixed bugs in views of indexes having type/value restrictions
(*) Backwards-incompatible change
Version 3.6.1 Released September 5, 2017
- Made XMLObjectSerializer ignore XML tags in other namespaces
- Changed <jsimpledb:jsimpledb> default schema version to -1
- Added default toString() implementation if not already overridden (issue #26)
- Added index query primitive type compatibility for Kotlin (issue #27)
Version 3.6.0 Released August 19, 2017
- Allow JSimpleDB annotations to be configured as Spring "meta-annotations"
- Fixed bug where untyped references were sometimes incorrectly cleared on upgrade
- Fixed bug where inverted references paths might not filter to target type
- Added sub-project jsimpledb-kv-caching supporting caching for key/value stores
- Fixed bug in Spanner key/value database where some exceptions were not retryable
- Replaced @JField.uniqueExcludeNull() with @JField.uniqueExclude = JField.NULL (*)
- Allow repeating @JCompositeIndex on any type instead of nested within @JSimpleClass (*)
- Fixed Raft issue with message encoding of timestamps failing after 24 days
- Changed JSimpleDBFactory default schema version to -1
- Added support for uniqueness constraints on composite indexes
- Added @FollowPath annotation
(*) Backwards-incompatible change
Version 3.5.3 Released August 1, 2017
- Fixed bug in previous bug fix for inherited setters with generic types
Version 3.5.2 Released July 29, 2017
- Fixed several bugs in jsck; added `-kv' flag
- Added methods JObject.getModelClass() and JObject.getJClass()
- Added parse support for casting a String to any supported field type
- Fixed bug in cascadeCopyTo() when a null cascade name is given
- Fixed bug where inherited setters in generic types were not found
- Fixed bug omitting validation after a copy with suppressed notifications
- Fixed deadlock in SnapshotKVDatabase when trace logging enabled
- Added field type for javax.mail.internet.InternetAddress
- Added field types for Inet4Address, Inet6Address, and InetAddress
- Added field types for BitSet, BigInteger, and BigDecimal
Version 3.5.1 Released July 6, 2017
- Added `jsck' utility for verifying/repairing key/value databases
- Allow queryIndex() to specify any super-type of indexed value type
- Added recursion limit parameter to cascadeCopyTo() and cascadeFindAll()
- Fixed Raft bug with eventually consistent tx's on isolated leaders
- Added default method JObject.findReferring()
Version 3.5.0 Released June 15, 2017
- Allow Java interfaces to be model classes
- Added support for copy cascades defined by new @JField annotation properties
- Improvements to the KVStore interface; getRange() now returns CloseableIterator
- Corrected excessive logging (should be trace, not debug) from ReferencePath
- Formalized layout definitions and allocated a user-defined meta-data area
- Verify model class constructors earlier, and allow (JTransaction, ObjId) params
- Allow multiple FieldTypes with the same name if different encoding signatures
- Fixed bug where Raft leaders did not respect their own required lease timeouts
- Improved Raft read-only transaction performance by capturing commit index early
- Generalize how object copies are made to allow arbitrary object ID remapping (*)
- Use names for Java cached value fields instead of storage ID's
- Added new mode "generate-and-verify" to <jsimpledb:schema> Ant task
- Added Microsoft SQL Server key/value database adapter
- Added new @JField annotation property typeSignature()
- Moved core API field type classes into sub-package
- Updated some dependencies
(*) Backwards-incompatible change
Version 3.4.0 Released March 26, 2017
- Add support for inverse traversal in reference path steps
- Removed "invert" CLI function (redundant with JTransaction API)
- Fixed bug where clone()s of Writes and MutableView were not mutable
- Fixed bugs in `raft-add' and `raft-remove' CLI commands
Version 3.3.0 Released March 6, 2017
- Added Google Cloud Spanner key/value database
- Added BatchingKVStore key/value read-ahead and caching layer
- Added limit parameters to KVStore.getAtLeast() and KVStore.getAtMost()
- Fixed upgrade conversion exception if field did not previously exist
- Added upgrade conversion between counter fields and numeric primitives
- Set the default UpgradeConversionPolicy to ATTEMPT (*)
(*) Backwards-incompatible change
Version 3.2.0 Released February 13, 2017
- Fixed bug where certain k/v read-only transactions could return stale data
- Added explicit setReadOnly() method to key/value transaction API
Version 3.1.0 Released February 3, 2017
- Added FieldType.convert() for converting values between two FieldType's
- Fixed bug where new counter fields were not initialized on upgrade
- Allow more flexibility for fields to change types across schema versions
- Added @JField.upgradeConversion to configure upgrade field conversion
- Performance improvements
Version 3.0.1 Released January 5, 2017
- Fix Raft bug where temporary files were sometimes never deleted
Version 3.0.0 Released January 3, 2017
- Upgraded minimum supported Java version to Java 8 (*)
- Removed several deprecated methods (*)
- Always use EnumValue objects for @OnVersionChange old Enum field values (*)
- Added support for auto-generating a version number for a schema model
(*) Backwards-incompatible change
Version 2.4.7 Released December 13, 2016
- Added method SnapshotKVDatabase.getCurrentVersion()
- Fixed array k/v bugs that were causing too-frequent compactions
Version 2.4.6 Released December 8, 2016
- Performance improvements in Raft and MVCC key/value databases
- Fixed bug where index queries failed on certain type hierarchies
- Fixed bug where @OnChange parameter type checking was not strict enough
Version 2.4.5 Released November 23, 2016
- Make Raft rethrow the same failure exception until commit/rollback
- Allow invocation of non-public methods in parse expressions
- Bump SQLite to version 3.15.1.
Version 2.4.4 Released November 15, 2016
- Added the `-w' flag to the `eval' CLI command
- Fixed Raft bug where leaders could get into a snapshot install loop
Version 2.4.3 Released November 9, 2016
- Fixed bug where stale values could be read from @OnChange methods
- Fixed Raft bug relating to read-only transactions and role change
- Raft improvements to reduce the likelihood of retry exceptions
- Simplified how Raft handles rebasing transactions
- Unwrap key/value exceptions thrown during JSR 303 validation
Version 2.4.2 Released October 22, 2016
- Minor improvments to Raft transaction handling to avoid retries
- Added Session.RetryableAction and support for automatic retries
- Added Session.HasTranasactionOptions and support for tx options
- Let `compare-schemas' accept version zero meaning the configured schema
- Added `-w' flag to the `save' and `kvsave' commands
- Made the the maximum number of unapplied Raft log entries configurable
Version 2.4.1 Released October 13, 2016
- Fixed incorrect exception type thrown on an unsafe Raft config change
- Miscellaneous other minor fixes and improvements to Raft
- Perform an availability check at startup in FallbackKVDatabase
- Added @OnVersionChange.alwaysUseEnumValue()
Version 2.4.0 Released October 4, 2016
- Fixed corner case bug in Raft when transactions span terms
- Rebase transactions in MVCC-based key/value stores (including Raft)
Version 2.3.2 Released September 27, 2016
- Performance improvements in MVCC-based key/value stores
Version 2.3.1 Released September 21, 2016
- Fixed bug with @OnChange methods having a non-generic change parameter
- Optimize the registration of listeners in JTransaction constructor
Version 2.3.0 Released September 15, 2016
- Fixed bug where XMLObjectSerializer.load() failed on forward references
- Improved speed of Transaction.copy() when notifications are disabled
- Cache simple field values for better efficiency in repeated reads
- Fixed race condition bug in AtomicArrayKVStore.snapshot()
- Fixed bug in SQL key/value stores ordering getAtMost() queries
- Fixed performance issue with Raft and key watches
- Rewrote KeyRanges to address poor performance
Version 2.2.1 Released September 7, 2016
- Fixed bug where beforeCommit() callbacks could not access transaction
- Fixed race conditions in some toString() methods of Raft classes
- Fixed Raft bug where pings to an unconfigured node failed an assertion
- Treat a single out-of-date follower as unavailable in Raft fallback
- Added subclass method JSimpleDBTransactionManager.createTransaction()
- Added subclass method FallbackKVDatabase.isMigrationAllowed()
- Added option for suppressing notifications when copying objects
Version 2.2.0 Released August 30, 2016
- Added detection of assignment of references to deleted objects:
- Added JField.allowDeleted() and JField.allowDeletedSnapshot()
- NOTE: JField.allowDeleted() is enabled by default; for old behavior:
- Set autogenAllowDeleted() = false on all @JSimpleClass's
- Set allowDeleted() = false on all reference field @JField's
- Allow Raft fallback MergeStrategy to perform the commit()'s itself
- Corrected the behavior of JTransaction.getAll(UntypedJObject.class)
- Added @OnChange support for explicit wildcards, e.g. "*"
- Added CLI commands set-history-file, show-imports, show-variables
- Added CLI function session()
- Fixed MVCC resource leak bug added in release 2.1.6
- Added `--history-file' CLI command line flag
Version 2.1.7 Released August 25, 2016
- Notify key watches on a separate thread to avoid reentrancy issues
- Changed JSimpleDBTransactionManager.validateBeforeCommit default to false
- Fixed NullPointerException in FallbackTarget.getLastActiveTime()
Version 2.1.6 Released August 24, 2016
- Updated to rocksdbjni version 4.9.0
- Fixed Raft fallback bug: rollback inner tx on migration retry exception
- Fixed Raft bug where leader removed from cluster would not immediately step down
- Enhanced several classes to implement Serializable
- Improved performance of read-only MVCC transactions
- Fixed bug parsing lambda bodies
Version 2.1.5 Released August 7, 2016
- Fixed bug where unique constraints were sometimes applied too widely
- Fixed bug where annotations were not inherited if method overridden
- Allow direct introspection of private fields via CLI console
- Fixed incompatible type error from certain index queries
- Added new core API utility class ObjDumper
- Added isSnapshot() method to JTransaction and Transaction
Version 2.1.4 Released July 17, 2016
- Fixed expression parsing bug with varargs methods given zero parameters
- Fixed bug in previous Raft follower probe bug fix when only one node
- Fixed possible deadlock in Raft fallback key watch listener notification
Version 2.1.3 Released July 12, 2016
- Fixes for Windows:
- Don't try to sync directories on Windows (issue #7)
- Avoid use of AtomicUpdateFileOutputStream on Windows (issue #8)
- Make the CLI console work (mostly) when running under Cygwin
- Fixed bug in the Raft follower algorithm when probing is enabled
- Added new CLI command `raft-fallback-force-standalone'
Version 2.1.2 Released July 8, 2016
- Fixed NPE in RaftKVDatabase when null transaction options given
- Fixed bug in NavigableSets union/intersection with empty sets
- Added new method FallbackKVDatabase.setInitialTargetIndex()
- Added new method AbstractFunction.parseNextParameter()
- Fixed bug with `import' CLI command when used without wildcard
- Handle key watches across target changes in Raft FallbackKVDatabase
- Added `--file' and `--batch' CLI command line flags
- Added capacity and lifetime limits to key watch tracker
Version 2.1.1 Released June 30, 2016
- Fixed bug in MutableView leading to excessive MVCC conflicts
- More reliable detection of retry exceptions in CockroachDB
Version 2.1.0 Released June 25, 2016
- Discover key/value implementations by scanning the classpath
- Discover parse function implementations from classpath
- Discover CLI command implementations from classpath
- Handle fields declared in multiple incomparable supertypes
- Pass @Transaction.isolation() property through to SQL k/v stores
- Fixed bug in JSimpleDBTransactionManager when using Propagation.SUPPORTS
- Fixed parsing bug handling method references like `Object::hashCode'
- Incompatible API changes:
- Deprecated JTransaction.getJObject() methods have been removed
- @Command and @Function annotations converted to interfaces
- registerStandardFunctions() replaced by loadFunctionsFromClasspath()
- registerStandardCommands() replaced by loadCommandsFromClasspath()
Version 2.0.1 Released May 28, 2016
- Split out new modules kv-mysql and kv-sqlite from kv-sql
- Fix bugs in the Maven plugin
Version 2.0.0 Released May 10, 2016
- Converted build to Maven with more modular artifacts
- Added KV wrapper for CockroachDB
- Added parsing support for Java 8 expression syntax
- Added key/value database wrapper for SQLite
- Added XMLObjectSerializer.setFieldTruncationLength()
- Added @JSimpleClass.autogenNonAbstract() and @JTransient
- Added NavigableSetPager.setFilter()
- Don't require JSR 303 validation classes unless used (issue #5)
- Improvements to expression parser tab-completion
- Fixed parser bug: handle class names like `int.class'
- Fixed parser bug handling multiple assignment
- Added parsing workaround for Tomcat bug #59282
- Auto-create KV table in MySQLKVDatabase
- Removed deprecated annotation @Validate
Version 1.3.5 Released February 17, 2016
- Renamed @Validate -> @OnValidate and deprecated @Validate
- Use base 64 for some primitive array string representations
- Refactored JObjectContainer and Vaadin view application classes
- Fixed bug parsing shift operators with large shifts
- Fixed bug parsing binary, octal, and hex integer literals
- Fixed bug with indexes on integral primitive array types
- Allow @OnChange methods that take zero parameters
- Added support for "classes" and <oldschemas> to the ant task
- Added Base64ArrayType.toString(T, boolean)
- Added NavigableSetPager utility class
Version 1.3.4 Released November 19, 2015
- Eliminated the CLI test transaction on startup
- Require all rollback() methods to not throw StaleTransactionException
- Fixed possibly corrupting race condition in SimpleKVDatabase
- Improved and better documented Raft tx consistency levels
- Added support for Raft consistency levels in Spring TX manager
- Fixed timestamp roll-over bug after 24 days of isolation in Raft
- Allow mutations within read-only transactions
- Bug fixes and improvements relating to Raft fallback support
Version 1.3.3 Released October 29, 2015
- Fixed a couple of expression parser bugs
- Fixed bugs in JObjectHttpMessageConverter
- Improved CLI behavior when errors occur
Version 1.3.2 Released October 3, 2015
- Added FallbackKVDatabase in raft pacakge
- Added Spring JObjectHttpMessageConverter and friends
- Added "hot copy" backup operation to AtomicArrayKVStore
- Added `set-session-mode' CLI command
- Added `-n' flag to kvget, `-a' flag to help
- Added ability to configure custom ValidatorFactory
Version 1.3.1 Released August 24, 2015
- Added read optimized, array-based key/value database
- Fixed performance bug with index info cache
Version 1.3.0 Released August 14, 2015
- Give each transaction its own pool of JObjects
- Add optimizations to improve performance of field access
Version 1.2.2 Released July 16, 2015
- Detect leftover abstract methods during schema generation
- Fix bug where protected setter methods were not auto-detected
- Implement fix for Raft config change corner case
Version 1.2.1 Released July 9, 2015
- Added KVTransaction.mutableSnapshot() and KVStore-based
snapshot transactions in JSimpleDB and core layers
- Changed JObjectContainer to use mutableSnapshot()
- Added RocksDBKVDatabase based on RocksDB JNI adapter
- Added support for KVDatabase key watches
- Improved performance of List field iterators
- Fixed bugs and O(n^2) behavior in MutableView
Version 1.2.0 Released June 9, 2015
- Added RaftKVDatabase based on Raft consensus algorithm
- Added LevelDBKVDatabase based on LevelDB Java port
- Added AtomicKVStore, MutableView, mvcc sub-package
- Added various KVStore utility classes
- Added key/value store session mode
- Move project to GitHub
Version 1.1.838 Released March 7, 2015
- Fixed bug in copyTo() not following reference path(s)
- Allow revalidate() to be invoked during validation
- Increase to four the max number of composite index fields
- Move ObjIdSet to util package; add ObjIdMap and ObjIdBiMultiMap
- Compress schema information before storing
- Add schema difference calculator and CLI command
- Improvements to CLI and GUI command line utilities
- Added schema differences calculator plus CLI command
- Added support for embedded CLI telnet consoles
Version 1.1.748 Released January 28, 2015
- Added Vaadin GUI auto-generator
- Added support for XML object import/export
- Added support for composite indexes
- Added uniqueness constraint validation
- Added index for object schema versions
- Added ant task to generate/verify schema
- Eliminated the need for storage ID's
- CLI rewrite with many improvements
- Fixed several type safety corner cases
- Build a distribution ZIP file with demo
- Many bug fixes and improvements
Version 1.0.161 Released May 6, 2014
- Added command line interface
- Added snapshot capability
- Added additional built-in field types
- Added out-of-band change detection to XMLKVDatabase
- Allow specifying multiple (or zero) paths in @OnChange
- Bug fixes and improvements
Version 1.0.86 Released April 18, 2014
- Initial release
You can’t perform that action at this time.