forked from brettwooldridge/HikariCP
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGES
1068 lines (673 loc) · 38.6 KB
/
CHANGES
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
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
HikariCP Changes
Changes in 5.0.0
* rewrote connection elide/add code to fix an unconfirmed but occassionally reported
race condition that results in the pool draining to 0 and not refilling.
Changes in 4.0.3
* fixed #1735 added system property to permit override of lower limit of connectionTimeout
and validation timeout
Changes in 4.0.2
* fixed regression caused by #1605 affecting block-until-filled semantic
Changes in 4.0.1
* fixed #1725 pom file change to be more gradle-friendly
* fixed #1726 regression in micrometrics caused by lack of a strong reference to an
object
Changes in 4.0.0
* merged #1669 #1582 mark optional dependencies as 'require static' in module-info
* merged #1700 remove micrometer metrics upon close
* merged #1661 mark generated proxy classes final
* merged #1681 allow alternate, more standard, JMX ObjectName, enabled by setting system
property 'hikaricp.jmx.register2.0=true'
* merged #1605 fixes Java 11 issue where setMaximumPoolSize needs to be called before
setCorePoolSize in ThreadPoolExecutor
* merged #1581 handle setting java 'short' property values from property files
* merged #1699 add new configuration property 'keepaliveTime'
* merged #1692 fix prometheus histogram metric tracker for multiple pools
Changes in 3.4.5
* fixed 1578 build change to ensure that proxies are generated using Java 8, otherwise we end
up with class references to Java 11 classes, which fail to load on Java 8.
Changes in 3.4.4
* Build HikariCP as a JEP 238 Multi-Release jar for increased compatability with Java 11 and
future modularized Java versions.
Changes in 3.4.3
* fixed 1534 check resultSet.getStatement() for null in ProxyDatabaseMetaData.
* add additional debug logging around connection add.
* add ThreadLocal removal attempt when bag item is removed.
Changes in 3.4.2
* fixed 1528 regression caused by pull request 1159 whereby fail-fast logic would exit upon all
errors even if it was configured to continue trying.
Changes in 3.4.1
* fix regression caused by 1337, which broke the ability to pass the isolation level by integer
value (string) instead of isolation level name.
Changes in 3.4.0
* merged 1265 alternative Prometheus metrics Histogram instead of locking Summary (which is
purportedly quite lock-heavy.
* merged 1337 support accepting TRANSACTION_SQL_SERVER_SNAPSHOT_ISOLATION_LEVEL string for
isolation level.
* merged 1331 user contribution: major refactor of metrics handling, hopefully without any
breakage.
* add proxy class for DatabaseMetaData to intercept DatabaseMetaData.getConnection() call which was
leaking the raw database Connection object.
Changes in 3.3.1
* fixed 1287 set core pool size before max pool size
* fixed 1308 treat a SQLTimeoutException as an evictable offense
* do not default maxPoolSize to minIdle when only minIdle is specified
* do not log warning about idleTimeout unless minimumIdle is less than maxPoolSize (because otherwise
it does not apply)
Changes in 3.3.0
* Revert change where Connection.isClosed() was called outside of setNetworkTimeout() block, opening
vulnerability to unacknowledged TCP traffic.
* fixed 1186 limit number of items in the ConcurrentBag's ThreadLocal list to avoid OOM errors in some
borrow/requite patterns.
* Merged changed to log uncaught (Throwable) exceptions during connection acquisition.
* fixed 1161 fix logging formatting anchor.
* fixed 1181, 1182 allow passing a Prometheus CollectorRegistry rather than always using the default
registry.
* merged 1210 use orElseGet() to delay call until necessary with respect to the housekeeper thread
factory.
* fixed 1074 capability to instantiate an object based on the String class name, usefull when you want
to set the MetricsTackerFactory from a property.
* merged 1250 fix proxy classes generation reproducibility using a sorted LinkedHashSet
* various clean-ups pointed out by sonarcloud.io
* merged 1290 Class.newInstance() is deprecated as of Java 9. Usage should be replaced by calling
Class.getDeclaredConstructor().newInstance().
* fixed #1305 ensure that ConcurrentBag.add() does not spin under high load, when waiting threads may never
reach 0.
* fixes #1287 when system property blockUntilFilled is set, use multiple threads to fill the pool.
Changes in 3.2.0
* check connection closed condition before attempting to set network timeout to avoid spurios exceptions
in the log.
* updated validation failure message to include recommendation to check maxLifetime value.
* fixed 1141 do not throw SQLException when calling isClosed() or close() on a already closed unwrapped
Connection, as per JDBC specification.
* fixed 1137 support changing user/password at runtime for DriverDataSource-wrapped driver connections.
* fixed 1136 log loaded driver when using jdbcUrl.
* pull 1135 extract sealed pool check into independent method.
* fixed 1126 correct error in JavaDoc for HikariConfig.setInitializationFailTimeout().
* fixed 1114 removed unreachable code.
Changes in 3.1.0
* Add get/setCatalog() to HikariConfigMXBean, allowing the catalog to be changed at runtime.
The catalog should only be changed while the pool is suspended, and after evicting existing
connections via HikariPoolMXBean.softEvictConnections().
Changes in 3.0.0
* Removed previously deprecated methods;
HikariConfig.copyState()
HikariConfig.getScheduledExecutorService()
HikariConfig.setScheduledExecutorService()
HikariConfig.isInitializationFailFast()
HikariConfig.setInitializationFailFast()
HikariConfig.isJdbc4ConnectionTest()
HikariConfig.setJdbc4ConnectionTest()
HikariDataSource.copyState()
HikariDataSource.getScheduledExecutorService()
HikariDataSource.setScheduledExecutorService()
HikariDataSource.suspendPool()
HikariDataSource.resumePool()
HikariDataSource.shutdown()
HikariDataSource.isInitializationFailFast()
HikariDataSource.setInitializationFailFast()
HikariDataSource.isJdbc4ConnectionTest()
HikariDataSource.setJdbc4ConnectionTest()
* pull 1110 add currently configured maxConnections and minConnections to pool metrics.
* pull 1100 remove hard-coded percentiles for Micrometer metrics.
* pull 1108 maintain a strong reference to PoolStats for Micrometer gauges to prevent premature
garbage collection.
* pull 1098 update to Micrometer 1.0.0.
Changes in 2.7.8
* fixed 1095 fix breakage caused by sealed configuration with respect to special handling for the
metricsRegistry and metricsTrackerFactory properties, which are allowed to be altered *once*
after the pool has started (even after the configuration is sealed).
* pull 1089 allowing anonymous subclasses of MetricRegistry. Changed checks for metrics libraries
from a class name check to the assignableFrom() API.
Changes in 2.7.7
* fixed issue whereby configuration through the HikariConfigMXBean could not be altered due
to the sealed configuration change introduced in 2.7.5.
Changes in 2.7.6
* issue 1064 fixed regression where HikariConfig.copyStateTo() propagated the "sealed" status
of the source configuration to the target configuration -- preventing further changes.
Changes in 2.7.5
* issue 1061/pull 1062 fixed compatibility issue with requery.io caused by HikariCP's
proxied Statement class returning a driver-native ResultSet instance from getGeneratedKeys()
instead of returning a HikariCP proxied ResultSet.
* pull 1058 enable quantiles on Prometheus metrics.
* pull 1055 fixed incorrect JavaDoc for HikariConfigMXBean.getMinimumIdle() method.
* issue 1045/pull 1047 added Automatic-Module-Name to jar manifest to ensure that the Java 8
library plays well with the Java 9 module system.
* introduced the concept of a "sealed" configuration. Once a pool is started, attempts to
alter its configuration outside of the HikariConfigMXBean will result in an IllegalStateException.
Changes in 2.7.4
* pull 1026 added support for SQL Server's specific isolation level (SNAPSHOT).
* issue 926/pull 1022 HikariJNDIFactory should not throw a NamingException or else
cascading to other object factories cannot occur.
Changes in 2.7.3
* issue 1003 added PostgreSQL SQL State 0A000 to list of unrecoverable states calling
for eviction.
* pull 1002 updated micrometer support due to API changes in their release candidate.
Changes in 2.7.2
* issue 983 fix logic that determines how many idle connections can be removed, without
violating the minimumIdle contract.
* pull 987 add thread name to leak detection messages.
* issue 982 fix classloader order, try the ThreadContext classloader before other
classloaders.
* pull 977 log better messages when connection is evicted.
* fallback to four digit random pool suffix when SecurityManager prevents writing
to system properties for the purpose of JVM-wide unique pool identifiers.
Changes in 2.7.1
* issue 968 Wrong label order in MicrometerMetricsTracker for the connection usage
metric.
* issue 967 incorrect bitwise operator value in ConcurrentBag.requite method
intended to cause parkNanos() to be called every 256 iterations. Thanks to @ztkmkoo
for finding this.
Changes in 2.4.13
* backport more efficient contention handling in ConcurrentBag.requite from 2.6.x
branch.
* issue 955 fix possible race condition when Statements are closed on different
threads from which they were created.
Changes in 2.7.0
* added support for micrometer metrics (currently Alpha-level support).
* issue 905 mask JDBC password in URLs
* issue 940 fix Prometheus metric collector for multiple data config
* issue 941 add support for setting a default schema
* issue 955 fix possible race condition when Statements are closed on different
threads from which they were created.
Changes in 2.6.3
* issue 878 load driver class from ThreadContext classloader if it is not found
via the regular classloader.
Changes in 2.6.2
* issue 890 add support for Prometheus metrics and multiple HikariCP pools.
* issue 880 fix race condition caused by sorting collection while the condition of
sort can change.
* issue 876 add support for using a Prometheus CollectorRegistry other than the
default one.
* issue 867 support network timeout even for Connection.isValid().
* issue 866 mark commit state dirty when Connection.getMetaData() is called.
Changes in 2.6.1
* issue 821 if a disconnection class exception is thrown during initial connection
setup, do not set the flag that indicates that checkDriverSupport() is complete.
* issue 835 fix increased CPU consumption under heavy load caused by excessive
spinning in the ConcurrentBag.requite() method.
* issue 817 updated behavior of new initializationFailTimeout, please see the
official documentation for details.
* issue 742 add direct MXBean accessor methods to HikariDataSource for users who do
not want run run JMX.
Changes in 2.6.0
* Redesign of the contention code path resulting in doubling contended throughput; now
contended pool access retains 98% of the uncontended throughput.
* issue 793 add new HikariConfig method, setScheduledExecutor(ScheduledExecutorService),
and deprecate method setScheduledExecutorService(ScheduledThreadPoolExecutor). It is
unfortunate that the deprecated method has the more accurate name, but its signature
cannot be changed without breaking binary compatibility.
* issue 770 add a new property initializationFailTimeout, and deprecate configuration
property initializationFailFast.
* issue 774 significantly improve spike load handling.
* issues 518/769 add new metric for tracking how long physical connection acquisition is
taking. DropWizard histogram name "ConnectionCreation", and Prometheus summary name
"hikaricp_connection_creation_millis".
* issue 741 cancel HouseKeeper task on pool shutdown. If the ScheduledExecutor being used
did not belong to HikariCP, this task would remain scheduled after shutdown, causing a
memory leak.
* issue 781 more technically accurate wording of pool startup and shutdown log messages.
Changes in 2.5.1
* issue 719 only reset lastConnectionFailure after a successful dataSource.getConnection()
call.
* issue 716 do not scan deeper than 10 nested SQLExceptions, it's typically a trap ...
a chain that never terminates.
* issue 714 fix possible issue with cross-thread visibility. Change pool entry state from
AtomicInteger w/lazySet() to a volatile int with use of AtomicIntegerFieldUpdater.
Changes in 2.5.0
* Release 2.5.0 marks the start of a Java 8 HikariCP artifact. The Java 7 artifact is
now called "HikariCP-java7".
* HikariCP 2.5.0 and HikariCP-java7 2.4.8 have identical functionality.
Changes in 2.4.12
* issue 878 search for driverClass in both HikariCP class classloader and Thread Context
ClassLoader
Changes in 2.4.11
* issue 793 add new HikariConfig method, setScheduledExecutor(ScheduledExecutorService),
and deprecate method setScheduledExecutorService(ScheduledThreadPoolExecutor). It is
unfortunate that the deprecated method has the more accurate name, but its signature
cannot be changed without breaking binary compatibility.
* issue 600 ignore Java 8 default methods when generating proxy classes for Java 7.
Changes in 2.4.10
* Redesign of the contention code path resulting in doubling contended throughput; now
contended pool access retains 98% of the uncontended throughput.
* issue 770 add a new property initializationFailTimeout, and deprecate configuration
property initializationFailFast.
* issue 774 significantly improve spike load handling.
* issue 741 cancel HouseKeeper task on pool shutdown. If the ScheduledExecutor being used
did not belong to HikariCP, this task would remain scheduled after shutdown, causing a
memory leak.
Changes in 2.4.9
* issue 719 only reset lastConnectionFailure after a successful dataSource.getConnection()
call.
* issue 716 do not scan deeper than 10 nested SQLExceptions, it's typically a trap ...
a chain that never terminates.
* issue 714 fix possible issue with cross-thread visibility. Change pool entry state from
AtomicInteger w/lazySet() to a volatile int with use of AtomicIntegerFieldUpdater.
Changes in 2.4.8
* Release 2.4.8 marks the start of a Java 7 HikariCP artifact, HikariCP-java7, representing
support for Java 7 entering maintenance mode.
* Added Connection.commit() call to the fail-fast initialization for databases that
automatically start a new Connection in a transaction and throw an exception on close
if it is not committed.
* feature 694: report if a previously reported leaked connection is returned to the pool
* issue 689: log a warning if default transaction isolation level cannot be detected.
This can occur with pseudo-database drivers such as the one for JSonar
* issue 674: fix regression caused by pull request #450 (overzealous optimisation)
Changes in 2.4.7
* Miscellaneous stability improvements.
* Removed Oracle SQL state 61000, added specific error code (2399) to evict connections
when it is encountered.
* issue 664: do not recycle PoolEntry objects that have closed their held connection.
* issue 641, 643: reflection used method String.toUpperCase() without a Locale, which causes
problems in some locales such as Turkish.
* pull 632: added support for Prometheus metrics tracker.
* issue 650: detect Amazon Redshift connection refused error codes.
Changes in 2.4.6
* Added Oracle SQL error code 61000 (exceeded maximum connect time) to evict connections
when it is encountered.
* issue 621: fix NPE in shutdown if invoked during initialization.
* issue 606, 610: housekeeper thread was running before all class members were
initialized, causing an unrecoverable exception and disabling idle connection
retirement (maximumLifetime still applied).
Changes in 2.4.5
* issue 596: fix bug that occurs when minimumIdle is set to 0, but maximumPoolSize is
not explicitly set.
* issue 594: fix incompatibility with various libraries caused by storing a non-String
object in System properties.
* issue 593: improve logging when network timeout is not supported by the driver
* issue 591: improve thread-safety of Statement proxies
Changes in 2.4.4
* Generate unique sequential pool names, even across container classloaders to avoid
JMX name collisions when registering pools.
* Improve pool stability when running on computers using power-saving or sleep modes
where wake-up previously caused pool to grow to maximum size.
* Improve pool stability under severe thread-starvation conditions. Previous code
could interpret prolonged starvation (exceeding one minute) as non-contiguous clock
advancement, and reacted by soft-evicting connections (unnecessarily).
* Added connection timeout rate to Dropwizard metrics (ConnectionTimeoutRate).
* issue 563: Do not start the house-keeping thread until after pool initialisation
has succeeded.
* issue 559: Ensure the pool refill after house-keeping does not enqueue more add
connection requests if there are already minimumIdle requests pending.
* issue 555: include support for Java 8 interface 'default' methods during proxy
generation.
* issue 547: decreased allowable minimum connectionTimeout and validationTimeout to
250ms.
* issue 495: implemented iterator() method on custom FastList to support Tomcat
memory leak detection.
Changes in 2.3.13
* issue 512: reduce the number of calls made to Connection.getAutoCommit().
Changes in 2.4.3
* Improve pool shutdown behavior. Stop active connection acquisition once the
shutdown sequence has initiated.
* Improved detection and reporting of ambiguous pool configuration, when both the
connection URL and DataSource class names are specified.
Changes in 2.4.2
* Improve accuracy of timeouts for getConnection() calls by accounting for possibly
long delay aliveness tests.
* Improve adherence to minimumIdle goal by closing idle connections starting from
longest idle time to shortest. Additionally, stop when minimumIdle is reached even
if connections exceeding idleTimeout remain (but are still within maxLifetime).
* Introduce larger variance into maxLifetime to avoid mass connection closing and
subsequent new connection creation load on the database. Connections now have a
maximum lifetime between 97.5-100% of configured maxLifetime. In the case of the
default 30 minute lifetime, this generates actual lifetimes with a maximum deviation
of 45 seconds. Currently, no attempt is made to further avoid clustering that may
occur due to randomness.
* Ongoing com.zaxxer.hikari.metrics refactors. This is not considered public API until
such time as we announce it. Caveat lector.
* Performance improvements in the getConnection()/close() hot path.
* issue 452: fixed race condition when creating an rapidly ramping connections in the
pool.
* issue 415: removed use of java.beans classes to allow use of HikariCP with the
Zulu JRE compact3 profile.
* issue 406: execute validation query during connection setup to make sure it is
valid SQL.
Changes in 2.3.12
* Fixed issue with proxy generation whereby the generated classes contain the
major version number for Java 8, which makes them incompatible with the Java 7
runtime.
Changes in 2.4.1
* issue 380: housekeeper was not being scheduled in the case of a user specified
ScheduledExecutorService instance.
* issue 340: rollback change that elides setting the readonly property if the user
never explicitly configured it. See discussion in the Github issue tracker. Also
fixes binary ABI breakage between 2.3.9 and 2.4.0.
* issue 379: stop closing idle connections, to keep minimumIdle connections in pool
* issue 375: fixed InvalidPathException in HikariConfig
* issue 362: fixed NullPointerException in closing connection (closing statements)
* issue 357: allow altering the username & password through JMX at runtime
* issue 349: handle integer Transaction isolation level
* Throw SQLTransientConnectionException instead of SQLTimeoutException
* for validating connection, if network time out is set, do not set query timeout too
* ResultSet.getStatement() should return StatementProxy
Changes in 2.4.0
* Consolidated distribution into single JVM target (Java 7/8). Java 6 support has
entered maintenance mode, bug fixes will continue on the 2.3.x branch.
* Removed runtime dependency on Javassist by pre-generating proxy classes at build-time.
* Significantly reduced overhead, and increased reliability, of ConcurrentBag.
* Reduced garbage generation by 2-3x.
* Add connection soft-eviction and replacement if backward system clock motion or
significant forward jumps (greater than 1 minute) are detected.
* Pool configuration properties and DataSource methods previously marked as
@Deprecated have been removed.
* Deprecated HikariDataSource.shutdown() in favor of close().
* Improve shutdown performance.
* Allow user specified ScheduledThreadPoolExecutor for housekeeping timer. Useful
in applications with dozens or hundreds of pools in the same JVM.
* Reduce overhead and accuracy of Dropwizard gauges.
Changes in 2.3.7
* Try harder at resolving the driver by various means when both driverClassName and jdbcUrl
have been specified.
* Allow a specifically set DataSource instance to override other settings such as jdbcUrl,
dataSourceClassName, or driverClassName.
* Fixed issue where, in the case of a driver-based configuration (jdbcUrl), we were not
initialising the network timeout Executor.
* Fixed race condition uncovered during load-testing in which the connections in the pool
can spike to the maximum pool size when many connections reach their maxLifetime at the
same time.
Changes in 2.3.6
* Allow explicit definition of driverClassName to override DriverManager.getDriver(url)
located driver.
* Fixed a rare issue where a Connection that is held out of the pool, and never used by
the holding thread, upon returning to the pool might be given to another thread without
an aliveness test.
Changes in 2.3.5
* Fixed regression caused by enhancement #279 that imposed a runtime dependency on
Dropwizard metrics.
Changes in 2.3.4
* Fixed class cast exception when setting the HealthCheckRegistry via JNDI lookup.
* Allow Dropwizard MetricRegistry/HealthCheckRegistry to be set after pool startup --
one time only.
* Make logger in BaseHikariPool non-static and use getClass() to log messages as the
implementation class rather than as BaseHikariPool.
* Removed deprecation from connectionInitSql, it will be allowed.
* Made suspect/resume lock non-static (should be be shared across pools).
* Improved unwrap() behavior in the Hibernate HikariConnectionProvider.
* Improved leak detection log
Changes in 2.3.3
* Fixed bad interaction with PostgeSQL JDBC driver whereby a SQLException thrown by
PostgreSQL where the getNextException() call returns the original exception and causes
an infinite loop in HikariCP (and eventual stack overflow).
* Throw a typed Exception rather than a simple RuntimeException when pool initialization
fails.
* Allow Dropwizard Metrics and HealthChecks to be configured by a JNDI lookup.
Changes in 2.3.2
* Add support for Dropwizard HealthChecks through the introduction of two initial health
checks: ConnectivityCheck and Connection99Percent. See the Github project wiki for
documentation.
* Allow a lower maxLifetime setting of 30 seconds (compared to previous 120 second limit)
* Improve the message displayed when a connection leak is detected.
* Fixed a bug where Connection.setNetworkTimeout() was called on an already closed connection
resulting in a warning log from the AS400 JDBC driver.
Changes in 2.3.1
* Work around a bug in the MySQL Connector/J implementation of Connection.setNetworkTimeout()
that results in non-deterministic asynchronous application of the timeout, resulting in an
NPE from the MySQL driver when setNetworkTimeout() is followed immediately by close().
* Introduced a separate validationTimeout property, distict from connectionTimeout, to allow
greater control for some deployments that desire a long (or infinite) connectionTimeout
but expect the aliveness check to succeed for fail within a different (shorter) amount of
time.
Changes in 2.3.0
* Support pool suspend/resume to support certain failover scenarios.
* Fix theoretical race in JDBC 4.0 detection support.
* Improve shutdown() semantics to avoid exceptions as connections are forcefully
aborted.
* Unregister Codahale metrics at shutdown, if metrics are enabled.
* Major internal project layout restructuring to allow shared use of common code
between the Java 6/7 and Java 8 versions.
* Fixed bug where two pools in the same VM (and ClassLoading domain), using drivers
with differing JDBC support levels, would fail unless both pools were using
connectionTestQuery.
* Improved timeliness of maxLifetime evictions, while increasing performance of
getConnection() slightly as a side-effect.
* Fixed bug in HikariDataSource unwrap() semantics.
* Allow a lower leakDetectionThreshold of 2 seconds.
* Fixed bug when using the HikariJNDIFactory that required the presence of
Codahale metrics.
* Support initializationFailFast even when minimumIdle = 0
* Log internal pool inconsistencies rather than throwing exceptions that might
disrupt internal executors.
* Guard against poor or unreliable System.nanoTime() implementations.
Changes in 2.2.5
* Fixes for Java 6 compatibility.
* Implement full transaction state tracking. This allows HikariCP to bypass
the automatic rollback when connections are returned to the pool if the
transaction state is "clean".
* Rename MBean closeIdleConnections() to softEvictConnections() and implement
"evict on return" semantics.
* Fixed bug in code that sets HikariConfig values from a Properties instance
that prevented defaults from being read properly.
* Fixed an obscure bug in connection creation with a driver that throws an
exception when setTransactionIsolation() is called with the value returned
by getTransactionIsolation(). We now bypass setTransactionIsolation() if
the user has not configured an isolation level (using the default).
* Fix a bug where DataSource.loginTimeout() was always being set to 1 second.
* Fix bug where some drivers return 0 from Connection.getNetworkTimeout(),
and yet throw SQLFeatureNotSupportedException when setNetworkTimeout() is
called. This broke they way that HikariCP had implemented JDBC 4.1 support
detection.
Changes in 2.2.4
* Generate proxy classes into the same protection domain as the HikariCP
loaded classes. This solves issues with signed jars.
* Improve accuracy of pool statistics available to JMX and logged at debug
level (at a slight performance cost).
* Fixed issue where after a database down condition, and when minimumIdle is
set to 0, when the database connectivity is restored the connections could
ramp up to the maximum pool size. Eventually, idleTimeout and maxLifetime
would restore normal pool conditions, but it was still undesirable behavior.
* Improved connection timeout handling by using Connection.setNetworkTimeout()
if available (JDBC 4.1).
* driverClassName is no longer a required property when jdbcUrl is specified.
Omitting this property only works for compliant drivers.
* Add auto-detection of support for Statement.setQueryTimeout() used in the
alive check. Fixes failures with test queries on the PostgreSQL driver
when not using JDBC4 isValid() alive checks.
* The pool now defaults to fail-fast initialization. If you need to start
your application without/before the database, you will need to explicitly
set initializationFailFast to false.
* Dropwizard/Codahale metrics are now supported via the setMetricRegistry()
method in HikariConfig and in HikariDataSource.
* Fixed issue with pool initialization of MySQL after default value of
initializationFailFast property was changed to false.
* Further shadow runtime dependency on Codahale metrics from reflection
performed by Spring and other IoC containers.
* Fix issue where network timeout was not properly restored to its default
value after modifying it for the duration of the addConnection() method.
Changes in 2.1.0
* Significant internal refactor supporting creation of new proxy instances
(throwaway) around Connections for each call to getConnection(). This
can avoid issues where a thread continues to try to use a connection
after it is closed [returned to the pool].
* Allow HikariConfig(String propertyFileName) to load properties file from
classloader as a stream, with fall-back to the file-system.
* Allow loading of properties file specified by -Dhikaricp.configurationFile
system property when using the default HikariConfig() or HikariDataSource()
constructors.
* Fixed accounting issue with totalConnections when aborting connections
during shutdown, causing a warning message to be logged.
* Fixed regression in Java 8 codeline that would prevent minimumIdle from
being set before maxPoolSize.
* Fixed regression with Tomcat carping about ThreadLocal variables held after
web application restart
* Change to make HikariConfig.getTransactionIsolation()/setTransactionIsolation()
follow proper bean semantics.
* Fixed issue where connections created in the pool would skip the alive check
the first time they were used.
Changes in 2.0.1
* Split project into Java 6/7 and Java 8 components.
* Fixed issue in JNDI object factory which would not allow JNDI-defined
DataSource properties to pass-thru to the pool.
* Fixed issue where under certain conditions getConnection() could
timeout prematurely.
* Fixed issue where user-defined pool name would be overridden by the
automatically generated name.
* Fixed NPE when one of either username and password is defined, and the
other is null.
* Fixed issue tracking the statements when there are mixed statement
types (Statement, PreparedStatement, etc.) open on the connection and
the number of unclosed statements exceeds 32.
* Fixed issue where housekeeping threads would add idle connections
even when minimumIdle was 0.
* Fixed issue where Wrapper.isWrapperFor() and Wrapper.unwrap() calls
did not recurse as per specification.
* HikariDataSource now implements the Closable interface.
* Integrated change to allow specifying a ThreadGroup for thread
creation is certain restricted environments.
Changes in 1.4.0
*) Fix bug that did not allow minIdle property to be set.
Changes in 1.3.9
*) Added pool name to housekeeping thread name to make thread dumps
more meaningful in containers with multiple pools.
*) Improved shutdown semantics; make a concerted effort to close
idle connections and abort or close active connections.
*) Performance enhancements.
Changes in 1.3.8
*) Fixed incorrect logic when using JDBC4 isValid() test for alive
status of connection.
Changes in 1.3.7
*) Added JNDI object factory (com.zaxxer.hikari.HikariJNDIFactory)
for Tomcat and other containers that prefer JNDI-registered DataSource
factories.
*) Fix NPE that can occur when connections cannot be created and
callers to getConnection() timeout.
*) Various bug fixes and minor enhancements.
Changes in 1.3.6
*) Include connection failure cause in calls to getConnection() that
timeout (due to connection failure). Removed chatty logging.
*) Java8 Compatibility fixes.
*) Include pool name in logging messages. Thanks for the contribution
@jaredstehler.
Changes in 1.3.5
*) Fixed a regression in the Javassist code generation.
*) Various bug fixes and minor enhancements.
Changes in 1.3.4
*) Added new property isolateInternalQueries used to control whether
internal pool queries such as connection alive tests are isolated
in their own transaction.
*) Added properties for DriverManager (driverClassName) and JDBC URL-based
(jdbcUrl) configuration. 1999 called and wants its JDBC driver back.
*) Added new username and password properties to allow default authentication
for connections.
*) Added support for the getConnection(username, password) method signature
to HikariDataSource.
*) Added new property readOnly to control the default read-only status
of connections in the pool.
*) Deprecated acquireIncrement property.
*) Deprecated acquireRetries property.
*) Deprecated acquireRetryDelay property.
*) Deprecated minimumPoolSize property.
*) Added new property minimumIdle used to control the minimum number of
idle connections the pool should try to maintain on a running basis.
*) Added evictConnection(Connection) method to HikariDataSource to allow
special cases where users wish to forcibly eject a connection from
the pool. To use used cautiously, read the JavaDoc before using.
*) Various bug fixes and minor enhancements.
Changes in 1.3.3
*) Removed shared state contention that was causing excessive CPU cache-line
flushing. Nearly 4x improvement in Connection acquisition/release
performance.
*) Fixed issue with Tomcat carping about ThreadLocal variables held after
web application restart.
*) Fixed issue where the maximum configured connections could be overrun
during large burst requests for connections.
Changes in 1.3.2
*) Java 6 compatibility.
*) HikariDataSource now extends HikariConfig, so pool properties can be
set directly on a HikariDataSource without need to create a HikariConfig.
The cost of doing so is a small runtime cost due to the fact that an
"is initialized" check must be performed on every invocation of
getConnection() due to lazy initialization of the pool.
*) Added Sybase-specific disconnect error codes to SQLException snooping.
*) Added HikariConfig.setCatalog() method to set DataSource catalog.
*) Add DataSource.close() method that is synonymous with shutdown().
*) More performance improvements (never ending).
*) Moved benchmarks to https://github.com/brettwooldridge/HikariCP-benchmark
Changes in 1.3.0
*) Pool is now backed by a custom lock-less ConcurrentBag that
provides superior performance to LinkedBlockingQueue and
LinkedTransferQueue for usage patterns of connection pools.
*) Fixed bugs reported against the 1.2.9 release.
*) Added more detailed logging for broken connections and failures
during new connection creation.
Changes in 1.2.9
*) Added a fail-fast option for pool initialization. If enabled, a
RuntimeException will be thrown if there are errors during pool
initialization.
*) Made the registration of the HikariCP MBeans optional. They now
default to not being registered. Registering them causes a minor
performance hit due to additional pool data collection in
HikariDataSource.getConnection().
*) Added the SQLException message to the log entry when an exception
occurs during physical connection acquisition.
*) Implemented an orderly shutdown of the pool via the shutdown() method
on HikariDataSource.
*) Listened to "Adele - Live At The Royal Albert Hall" on endless loop.
Changes in 1.2.8
*) Fixed a critical bug introduced in 1.2.7 occurring when the number of
concurrently open statements exceeds sixteen.
Changes in 1.2.7
*) Finally achieved performance parity between the generated delegates
and the former method of instrumenting driver classes directly.
*) Improved generated delegate code. Removed unnecessary casts, moved
to a static proxy factory rather than a singleton (performance win).
*) Improved performance of FastStatementList (primary source of speed-up
to reach parity with former instrumentation code).
*) Removed aliveness check on connection creation.
*) Track connection isolation level and only reset if the state has
become "dirty". Avoids unnecessary round trip to the DB during the
aliveness check.
*) Added interface IConnectionCustomizer and related HikariConfig
property 'connectionCustomizerClassName' to allow users to specify
a connection customization implementation.
Changes in 1.2.6
*) Fixed regression that caused IndexOutOfBounds when multiple unclosed
Statements existed at the time of Connection.close().
*) Fixed incorrect pom.xml dependency on Hibernate.
Changes in 1.2.5
*) Instrumentation mode (agent) removed due to narrowing gap between
delegation mode and instrumentation (and to simplify the code base).