-
Notifications
You must be signed in to change notification settings - Fork 39
/
CHANGES.txt
536 lines (403 loc) · 23.2 KB
/
CHANGES.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
Version 5.0.0
- Update to the new generation:
- Java 17
- Jakarta EE 9
- Spring 6
- Vaadin 24
- Use globally unique URNs to identify field encodings
- Many other changes and refactorings
Version 4.2.0 Released April 4, 2023
- Added ApplicationClassLoader to support running on JDK 9+
- Support build on JDK 11+ while still targeting JDK 8
- Fixed Raft assertion failure when > 20 unapplied log entries
- Removed default validator dependency on glassfish javax.el
Version 4.1.9 Released April 18, 2022
- Fixed NPE bug in XMLObjectSerializer when parsing implicit storage ID
- Applied various fixes and cleanups prompted from LGTM.com analysis
- Updated lmdbjava to version 0.8.2
- Updated log4j to version 2.17.1
- Updated MVStore to version 2.0.212
Version 4.1.8 Released July 17, 2021
- Fixed Raft bug where timestamp scrub timer was not being restarted
- Fixed Raft bug where log entries were being discared too soon
- Fixed expression parsing bug with casts to type char
- Fixed bugs parsing certain char and String literals
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 (*)
See https://github.com/permazen/permazen/wiki/MigrationToPermazen
- 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. "foo.bar.*"
- 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