Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

perf: improve performance of PreparedStatement.setBlob, BlobInputStream, and BlobOutputStream with dynamic buffer sizing #3044

Merged
merged 13 commits into from
Dec 4, 2023

Conversation

vlsi
Copy link
Member

@vlsi vlsi commented Nov 29, 2023

This reverts commit 3af3b32 (see to #2376, #2422)

There are several extra fixes:

  1. The buffer is created lazily, and it is created only in case the number of requested bytes is less than the buffer size
  2. "small" read(byte[], int, int) can be buffered as well (e.g. if the buffer size exceeds the requested len)
  3. Added locks to read calls for consistency with the locking in mark/reset

Note: this PR does not address "default blob buffer size" issue.

See #2376

I arranged commits as follows:

  • Build script-like changes that do not affect performance
  • Add benchmarks
  • Performance fixes for BlobInputStream
  • Performance fixes for BlobOuputStream

Relevant issues:

@vlsi vlsi added this to the 42.7.1 milestone Nov 29, 2023
@@ -210,12 +216,10 @@ public byte[] read(int len) throws SQLException {
*/
public int read(byte[] buf, int off, int len) throws SQLException {
byte[] b = read(len);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same comment about buf naming, dest is better and makes more sense later in the code.

@davecramer
Copy link
Member

minor nits, other than that LGTM

@vlsi vlsi changed the title Reapply "perf: add read(b,o,l) to BlobInputStream (#2376)" (#2422) perf: improve performance of BlobInputStream.read(b, off, len) with buffering reads Nov 29, 2023
@vlsi vlsi force-pushed the blob_perf branch 6 times, most recently from 33aa5b8 to 76b36b5 Compare November 29, 2023 18:38
@@ -55,22 +59,37 @@ public BlobOutputStream(LargeObject lo) {
*/
public BlobOutputStream(LargeObject lo, int bufferSize) {
this.lo = lo;
this.bufferSize = bufferSize;
// Avoid "0" buffer size, and ensure the bufferSize will always be a power of two
this.bufferSize = Integer.highestOneBit(Math.max(bufferSize, 1));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool, didn't know this function existed

@vlsi
Copy link
Member Author

vlsi commented Dec 1, 2023

with fix (ssl=on)

java 17.0.7, -Xmx1g, Apple M1

Benchmark        (bufferSize)  (readSize)     (size)  Mode  Cnt     Score      Error  Units
readArray              131072       65536  104857600  avgt    3  2612,057 ±  532,073  ms/op
readArray              131072      131072  104857600  avgt    3  2701,488 ±  740,033  ms/op
readArray              262144       65536  104857600  avgt    3  2299,744 ±  220,876  ms/op
readArray              262144      131072  104857600  avgt    3  2292,834 ±  371,013  ms/op
readArray              524288       65536  104857600  avgt    3  2142,774 ±  281,031  ms/op
readArray              524288      131072  104857600  avgt    3  2130,650 ±  304,826  ms/op
readArray              524288      524288  104857600  avgt    3  2123,672 ±  169,076  ms/op
readArrayRandom        131072       65536  104857600  avgt    3  2693,018 ±  683,909  ms/op
readArrayRandom        131072      131072  104857600  avgt    3  2736,947 ± 1867,688  ms/op
readArrayRandom        262144       65536  104857600  avgt    3  2296,865 ±  692,942  ms/op
readArrayRandom        262144      131072  104857600  avgt    3  2298,103 ± 1207,288  ms/op
readArrayRandom        524288       65536  104857600  avgt    3  2168,311 ±  563,236  ms/op
readArrayRandom        524288      131072  104857600  avgt    3  2178,537 ±  650,530  ms/op
readArrayRandom        524288      524288  104857600  avgt    3  2119,763 ±  358,512  ms/op
java 17.0.7, -Xmx256m, Apple M1

Benchmark        (bufferSize)  (readSize)    (size)  Mode  Cnt    Score     Error  Units
readArray              131072       65536  10485760  avgt    3  242,565 ±  33,217  ms/op
readArray              131072      131072  10485760  avgt    3  247,398 ±  65,393  ms/op
readArray              262144       65536  10485760  avgt    3  216,742 ±  69,122  ms/op
readArray              262144      131072  10485760  avgt    3  216,215 ±  50,428  ms/op
readArray              524288       65536  10485760  avgt    3  203,406 ±  30,419  ms/op
readArray              524288      131072  10485760  avgt    3  203,603 ±  53,533  ms/op
readArray              524288      524288  10485760  avgt    3  210,421 ± 107,382  ms/op
readArrayRandom        131072       65536  10485760  avgt    3  250,675 ±  67,252  ms/op
readArrayRandom        131072      131072  10485760  avgt    3  246,594 ±  44,621  ms/op
readArrayRandom        262144       65536  10485760  avgt    3  216,981 ±  75,521  ms/op
readArrayRandom        262144      131072  10485760  avgt    3  216,747 ±  47,019  ms/op
readArrayRandom        524288       65536  10485760  avgt    3  201,962 ±  49,681  ms/op
readArrayRandom        524288      131072  10485760  avgt    3  207,149 ± 201,073  ms/op
readArrayRandom        524288      524288  10485760  avgt    3  200,748 ±  10,300  ms/op
java 17.0.7, -Xmx256m, Apple M1
Benchmark        (bufferSize)  (readSize)   (size)  Mode  Cnt    Score     Error  Units
readArray                4096           1      100  avgt    3    0,423 ±   0,572  ms/op
readArray                4096           1     1024  avgt    3    0,446 ±   0,254  ms/op
readArray                4096           1   102400  avgt    3   14,340 ±   1,413  ms/op
readArray                4096           1  1048576  avgt    3  145,125 ±  45,594  ms/op
readArray                4096          10      100  avgt    3    0,395 ±   0,102  ms/op
readArray                4096          10     1024  avgt    3    0,422 ±   0,408  ms/op
readArray                4096          10   102400  avgt    3   12,890 ±   5,373  ms/op
readArray                4096          10  1048576  avgt    3  132,470 ±  62,526  ms/op
readArray                4096         100      100  avgt    3    0,402 ±   0,131  ms/op
readArray                4096         100     1024  avgt    3    0,412 ±   0,108  ms/op
readArray                4096         100   102400  avgt    3   12,566 ±   3,081  ms/op
readArray                4096         100  1048576  avgt    3  134,764 ±  65,968  ms/op
readArray                4096        1024     1024  avgt    3    0,413 ±   0,363  ms/op
readArray                4096        1024   102400  avgt    3   12,665 ±   3,668  ms/op
readArray                4096        1024  1048576  avgt    3  128,273 ±  20,562  ms/op
readArray                4096       10240   102400  avgt    3    6,512 ±   2,015  ms/op
readArray                4096       10240  1048576  avgt    3   68,848 ±  28,928  ms/op
readArray                4096       65536   102400  avgt    3    3,161 ±   0,971  ms/op
readArray                4096       65536  1048576  avgt    3   30,701 ±   6,700  ms/op
readArray                4096      131072  1048576  avgt    3   26,659 ±  20,594  ms/op
readArray                4096      524288  1048576  avgt    3   20,628 ±   5,077  ms/op
readArray                8192           1      100  avgt    3    0,947 ±  16,339  ms/op
readArray                8192           1     1024  avgt    3    0,455 ±   0,473  ms/op
readArray                8192           1   102400  avgt    3   10,332 ±  29,398  ms/op
readArray                8192           1  1048576  avgt    3   96,077 ±  25,719  ms/op
readArray                8192          10      100  avgt    3    0,413 ±   0,099  ms/op
readArray                8192          10     1024  avgt    3    0,481 ±   0,343  ms/op
readArray                8192          10   102400  avgt    3    8,792 ±   6,308  ms/op
readArray                8192          10  1048576  avgt    3   81,213 ±  20,323  ms/op
readArray                8192         100      100  avgt    3    0,433 ±   0,145  ms/op
readArray                8192         100     1024  avgt    3    0,497 ±   1,197  ms/op
readArray                8192         100   102400  avgt    3    8,203 ±   1,248  ms/op
readArray                8192         100  1048576  avgt    3   82,933 ±  48,143  ms/op
readArray                8192        1024     1024  avgt    3    0,437 ±   0,144  ms/op
readArray                8192        1024   102400  avgt    3    8,021 ±   3,399  ms/op
readArray                8192        1024  1048576  avgt    3   78,948 ±  43,795  ms/op
readArray               65536           1      100  avgt    3    0,424 ±   0,188  ms/op
readArray               65536           1     1024  avgt    3    0,442 ±   0,101  ms/op
readArray               65536           1   102400  avgt    3    5,522 ±  11,918  ms/op
readArray               65536           1  1048576  avgt    3   59,480 ±  43,147  ms/op
readArray               65536          10      100  avgt    3    0,464 ±   1,134  ms/op
readArray               65536          10     1024  avgt    3    0,430 ±   0,141  ms/op
readArray               65536          10   102400  avgt    3    3,428 ±   1,159  ms/op
readArray               65536          10  1048576  avgt    3   31,994 ±  11,375  ms/op
readArray               65536         100      100  avgt    3    0,397 ±   0,141  ms/op
readArray               65536         100     1024  avgt    3    0,430 ±   0,203  ms/op
readArray               65536         100   102400  avgt    3    3,248 ±   0,808  ms/op
readArray               65536         100  1048576  avgt    3   31,250 ±  20,935  ms/op
readArray               65536        1024     1024  avgt    3    0,462 ±   0,454  ms/op
readArray               65536        1024   102400  avgt    3    3,350 ±   1,773  ms/op
readArray               65536        1024  1048576  avgt    3   31,819 ±  11,687  ms/op
readArray               65536       10240   102400  avgt    3    3,402 ±   2,165  ms/op
readArray               65536       10240  1048576  avgt    3   30,709 ±   4,576  ms/op
readArray               65536       65536   102400  avgt    3    3,368 ±   3,431  ms/op
readArray               65536       65536  1048576  avgt    3   31,289 ±   9,536  ms/op
readArray              131072           1      100  avgt    3    0,403 ±   0,105  ms/op
readArray              131072           1     1024  avgt    3    0,428 ±   0,108  ms/op
readArray              131072           1   102400  avgt    3    3,847 ±   0,166  ms/op
readArray              131072           1  1048576  avgt    3   40,638 ±   6,620  ms/op
readArray              131072          10      100  avgt    3    0,444 ±   0,110  ms/op
readArray              131072          10     1024  avgt    3    0,466 ±   0,432  ms/op
readArray              131072          10   102400  avgt    3    3,486 ±  27,109  ms/op
readArray              131072          10  1048576  avgt    3   26,194 ±   6,041  ms/op
readArray              131072         100      100  avgt    3    0,403 ±   0,071  ms/op
readArray              131072         100     1024  avgt    3    0,433 ±   0,109  ms/op
readArray              131072         100   102400  avgt    3    2,510 ±   0,077  ms/op
readArray              131072         100  1048576  avgt    3   25,328 ±   9,075  ms/op
readArray              131072        1024     1024  avgt    3    0,449 ±   0,301  ms/op
readArray              131072        1024   102400  avgt    3    2,576 ±   0,884  ms/op
readArray              131072        1024  1048576  avgt    3   28,505 ±  78,335  ms/op
readArray              131072       10240   102400  avgt    3    2,563 ±   0,158  ms/op
readArray              131072       10240  1048576  avgt    3   25,243 ±   6,801  ms/op
readArray              131072       65536   102400  avgt    3    2,496 ±   0,186  ms/op
readArray              131072       65536  1048576  avgt    3   24,712 ±   4,630  ms/op
readArray              131072      131072  1048576  avgt    3   24,704 ±   5,953  ms/op
readArrayRandom          4096           1      100  avgt    3    0,404 ±   0,100  ms/op
readArrayRandom          4096           1     1024  avgt    3    0,543 ±   0,772  ms/op
readArrayRandom          4096           1   102400  avgt    3   22,745 ±   5,031  ms/op
readArrayRandom          4096           1  1048576  avgt    3  233,109 ±  37,117  ms/op
readArrayRandom          4096          10      100  avgt    3    0,397 ±   0,139  ms/op
readArrayRandom          4096          10     1024  avgt    3    0,418 ±   0,145  ms/op
readArrayRandom          4096          10   102400  avgt    3   13,606 ±   2,366  ms/op
readArrayRandom          4096          10  1048576  avgt    3  154,113 ± 154,377  ms/op
readArrayRandom          4096         100      100  avgt    3    0,411 ±   0,448  ms/op
readArrayRandom          4096         100     1024  avgt    3    0,434 ±   0,122  ms/op
readArrayRandom          4096         100   102400  avgt    3   13,635 ±   8,758  ms/op
readArrayRandom          4096         100  1048576  avgt    3  152,548 ± 357,130  ms/op
readArrayRandom          4096        1024     1024  avgt    3    0,471 ±   0,402  ms/op
readArrayRandom          4096        1024   102400  avgt    3   13,283 ±  14,442  ms/op
readArrayRandom          4096        1024  1048576  avgt    3  132,055 ±  43,991  ms/op
readArrayRandom          4096       10240   102400  avgt    3   10,688 ±   9,011  ms/op
readArrayRandom          4096       10240  1048576  avgt    3  107,033 ±  44,937  ms/op
readArrayRandom          4096       65536   102400  avgt    3    5,259 ±   1,576  ms/op
readArrayRandom          4096       65536  1048576  avgt    3   42,337 ±  19,377  ms/op
readArrayRandom          4096      131072  1048576  avgt    3   35,213 ±   5,993  ms/op
readArrayRandom          4096      524288  1048576  avgt    3   31,224 ±  80,357  ms/op
readArrayRandom          8192           1      100  avgt    3    0,438 ±   0,310  ms/op
readArrayRandom          8192           1     1024  avgt    3    0,547 ±   0,199  ms/op
readArrayRandom          8192           1   102400  avgt    3   18,082 ±   7,083  ms/op
readArrayRandom          8192           1  1048576  avgt    3  191,293 ±  64,624  ms/op
readArrayRandom          8192          10      100  avgt    3    0,419 ±   0,137  ms/op
readArrayRandom          8192          10     1024  avgt    3    0,434 ±   0,118  ms/op
readArrayRandom          8192          10   102400  avgt    3    9,516 ±   8,778  ms/op
readArrayRandom          8192          10  1048576  avgt    3   91,182 ±  55,948  ms/op
readArrayRandom          8192         100      100  avgt    3    0,435 ±   0,138  ms/op
readArrayRandom          8192         100     1024  avgt    3    0,598 ±   4,718  ms/op
readArrayRandom          8192         100   102400  avgt    3    9,259 ±   9,457  ms/op
readArrayRandom          8192         100  1048576  avgt    3   92,530 ±  93,122  ms/op
readArrayRandom          8192        1024     1024  avgt    3    0,475 ±   0,809  ms/op
readArrayRandom          8192        1024   102400  avgt    3    7,817 ±   1,036  ms/op
readArrayRandom          8192        1024  1048576  avgt    3   89,230 ± 142,636  ms/op
readArrayRandom         65536           1      100  avgt    3    0,432 ±   0,231  ms/op
readArrayRandom         65536           1     1024  avgt    3    0,584 ±   2,045  ms/op
readArrayRandom         65536           1   102400  avgt    3   12,879 ±   2,921  ms/op
readArrayRandom         65536           1  1048576  avgt    3  129,801 ±  25,642  ms/op
readArrayRandom         65536          10      100  avgt    3    0,477 ±   0,369  ms/op
readArrayRandom         65536          10     1024  avgt    3    0,469 ±   0,558  ms/op
readArrayRandom         65536          10   102400  avgt    3    4,110 ±   0,202  ms/op
readArrayRandom         65536          10  1048576  avgt    3   39,844 ±   2,779  ms/op
readArrayRandom         65536         100      100  avgt    3    0,518 ±   2,141  ms/op
readArrayRandom         65536         100     1024  avgt    3    0,421 ±   0,194  ms/op
readArrayRandom         65536         100   102400  avgt    3    3,352 ±   1,570  ms/op
readArrayRandom         65536         100  1048576  avgt    3   33,486 ±  28,457  ms/op
readArrayRandom         65536        1024     1024  avgt    3    0,517 ±   1,261  ms/op
readArrayRandom         65536        1024   102400  avgt    3    3,341 ±   2,051  ms/op
readArrayRandom         65536        1024  1048576  avgt    3   31,767 ±  20,218  ms/op
readArrayRandom         65536       10240   102400  avgt    3    3,383 ±   1,548  ms/op
readArrayRandom         65536       10240  1048576  avgt    3   30,749 ±   8,004  ms/op
readArrayRandom         65536       65536   102400  avgt    3    3,223 ±   0,040  ms/op
readArrayRandom         65536       65536  1048576  avgt    3   30,623 ±   5,045  ms/op
readArrayRandom        131072           1      100  avgt    3    0,394 ±   0,092  ms/op
readArrayRandom        131072           1     1024  avgt    3    0,509 ±   0,109  ms/op
readArrayRandom        131072           1   102400  avgt    3   11,791 ±   0,234  ms/op
readArrayRandom        131072           1  1048576  avgt    3  121,710 ±  11,969  ms/op
readArrayRandom        131072          10      100  avgt    3    0,388 ±   0,201  ms/op
readArrayRandom        131072          10     1024  avgt    3    0,418 ±   0,059  ms/op
readArrayRandom        131072          10   102400  avgt    3    3,287 ±   0,466  ms/op
readArrayRandom        131072          10  1048576  avgt    3   35,536 ±  37,736  ms/op
readArrayRandom        131072         100      100  avgt    3    0,415 ±   0,447  ms/op
readArrayRandom        131072         100     1024  avgt    3    0,479 ±   1,352  ms/op
readArrayRandom        131072         100   102400  avgt    3    2,599 ±   0,290  ms/op
readArrayRandom        131072         100  1048576  avgt    3   27,365 ±   5,724  ms/op
readArrayRandom        131072        1024     1024  avgt    3    0,424 ±   0,191  ms/op
readArrayRandom        131072        1024   102400  avgt    3    2,472 ±   0,641  ms/op
readArrayRandom        131072        1024  1048576  avgt    3   25,246 ±  15,033  ms/op
readArrayRandom        131072       10240   102400  avgt    3    2,543 ±   0,222  ms/op
readArrayRandom        131072       10240  1048576  avgt    3   24,610 ±   6,424  ms/op
readArrayRandom        131072       65536   102400  avgt    3    2,488 ±   0,428  ms/op
readArrayRandom        131072       65536  1048576  avgt    3   24,822 ±   6,981  ms/op
readArrayRandom        131072      131072  1048576  avgt    3   24,840 ±   7,371  ms/op
readByte                 4096           1      100  avgt    3    0,390 ±   0,156  ms/op
readByte                 4096           1     1024  avgt    3    0,422 ±   0,107  ms/op
readByte                 4096           1   102400  avgt    3   14,115 ±   3,842  ms/op
readByte                 4096           1  1048576  avgt    3  142,037 ±  70,279  ms/op
readByte                 8192           1      100  avgt    3    0,386 ±   0,083  ms/op
readByte                 8192           1     1024  avgt    3    0,427 ±   0,070  ms/op
readByte                 8192           1   102400  avgt    3   10,677 ±  14,612  ms/op
readByte                 8192           1  1048576  avgt    3   97,635 ±  67,902  ms/op
readByte                65536           1      100  avgt    3    0,395 ±   0,058  ms/op
readByte                65536           1     1024  avgt    3    0,445 ±   0,048  ms/op
readByte                65536           1   102400  avgt    3    4,818 ±   5,297  ms/op
readByte                65536           1  1048576  avgt    3   46,538 ±   7,323  ms/op
readByte               131072           1      100  avgt    3    0,425 ±   0,081  ms/op
readByte               131072           1     1024  avgt    3    0,469 ±   0,432  ms/op
readByte               131072           1   102400  avgt    3    4,017 ±   1,278  ms/op
readByte               131072           1  1048576  avgt    3   40,260 ±  18,467  ms/op

@vlsi
Copy link
Member Author

vlsi commented Dec 1, 2023

@bokken , @sehrope , I'm more-or-less happy with the changes, I will post more measurements, and it would be great to hear comments from you as well

@vlsi
Copy link
Member Author

vlsi commented Dec 1, 2023

Measuring writes is not trivial: ERROR: could not extend file "base/16385/2995": No space left on device

Here's what I have so far:

Java 17, with fix (the buffer size is the default 4096, so all writes exceeding 4096 skip the buffer):

Benchmark           (size)  (writeSize)  Mode  Cnt     Score      Error  Units
writeArray             100            1  avgt   15     0,547 ±    0,078  ms/op
writeArray            1024            1  avgt   15     0,601 ±    0,048  ms/op
writeArray            1024         1000  avgt   15     0,633 ±    0,034  ms/op
writeArray          102400            1  avgt   15    27,103 ±    7,153  ms/op
writeArray          102400         1000  avgt   15    18,125 ±    1,294  ms/op
writeArray          102400        10240  avgt   15    11,124 ±    1,535  ms/op
writeArray          102400        65536  avgt   15     4,457 ±    0,458  ms/op
writeArray         1048576            1  avgt   15   248,525 ±   78,202  ms/op
writeArray         1048576         1000  avgt   15   190,362 ±   14,992  ms/op
writeArray         1048576        10240  avgt   15    99,337 ±   10,410  ms/op
writeArray         1048576        65536  avgt   15    39,155 ±    2,623  ms/op
writeArray         1048576       131072  avgt   15    30,789 ±    1,730  ms/op
writeArray         1048576       524288  avgt   15    25,904 ±    0,426  ms/op
writeArray        10485760            1  avgt   15  3483,400 ± 1219,914  ms/op
writeArray        10485760         1000  avgt   15  2097,403 ±  343,091  ms/op
writeArray        10485760        10240  avgt   15  1174,638 ±  135,971  ms/op
writeArray        10485760        65536  avgt   15   375,045 ±    4,404  ms/op
writeArray        10485760       131072  avgt   15   312,606 ±    4,956  ms/op
writeArray        10485760       524288  avgt   15   260,203 ±    4,634  ms/op
writeArrayRandom       100            1  avgt   15     0,544 ±    0,051  ms/op
writeArrayRandom      1024            1  avgt   15     0,659 ±    0,039  ms/op
writeArrayRandom      1024         1000  avgt   15     0,558 ±    0,043  ms/op
writeArrayRandom    102400            1  avgt   15    32,211 ±    4,468  ms/op
writeArrayRandom    102400         1000  avgt   15    18,811 ±    1,551  ms/op
writeArrayRandom    102400        10240  avgt   15    14,412 ±    0,497  ms/op
writeArrayRandom    102400        65536  avgt   15     7,841 ±    0,778  ms/op
writeArrayRandom   1048576            1  avgt   15   566,594 ±  115,647  ms/op
writeArrayRandom   1048576         1000  avgt   15   205,777 ±   18,717  ms/op
writeArrayRandom   1048576        10240  avgt   15   164,506 ±   10,794  ms/op
writeArrayRandom   1048576        65536  avgt   15    72,674 ±    9,555  ms/op
writeArrayRandom   1048576       131072  avgt   15    52,077 ±    3,433  ms/op
writeArrayRandom   1048576       524288  avgt   15    32,059 ±    0,728  ms/op
writeArrayRandom  10485760            1  avgt   15  7131,848 ±  682,081  ms/op
writeArrayRandom  10485760         1000  avgt   15  2962,996 ±  529,110  ms/op
writeArrayRandom  10485760        10240  avgt   15  2152,527 ±  216,468  ms/op
writeArrayRandom  10485760        65536  avgt   15   997,330 ±  150,519  ms/op
writeArrayRandom  10485760       131072  avgt   15   676,197 ±   46,427  ms/op
writeArrayRandom  10485760       524288  avgt   15   327,190 ±   16,124  ms/op
writeByte              100            1  avgt   15     0,563 ±    0,065  ms/op
writeByte             1024            1  avgt   15     0,606 ±    0,038  ms/op
writeByte           102400            1  avgt   15    30,698 ±    7,283  ms/op
writeByte          1048576            1  avgt   15   374,051 ±   94,008  ms/op
writeByte         10485760            1  avgt   15  3885,431 ±  462,703  ms/op

Extra benchmarks for 10M and 100M objects:

Benchmark            (size)  (writeSize)  Mode  Cnt     Score    Error  Units
writeArray         10485760       262144  avgt   15   279,261 ±  4,612  ms/op
writeArray         10485760       524288  avgt   15   260,036 ±  1,847  ms/op
writeArray         10485760      1048576  avgt   15   253,352 ±  2,214  ms/op
writeArray         10485760      2097152  avgt   15   245,531 ±  0,942  ms/op
writeArray        104857600       262144  avgt   15  2786,183 ± 18,532  ms/op
writeArray        104857600       524288  avgt   15  2614,849 ± 18,063  ms/op
writeArray        104857600      1048576  avgt   15  2514,936 ± 10,540  ms/op
writeArray        104857600      2097152  avgt   15  2479,028 ±  9,808  ms/op
writeArrayRandom   10485760       262144  avgt   15   371,154 ±  4,084  ms/op
writeArrayRandom   10485760       524288  avgt   15   323,224 ±  3,892  ms/op
writeArrayRandom   10485760      1048576  avgt   15   288,717 ±  4,192  ms/op
writeArrayRandom   10485760      2097152  avgt   15   269,490 ±  3,292  ms/op
writeArrayRandom  104857600       262144  avgt   15  3736,244 ± 51,320  ms/op
writeArrayRandom  104857600       524288  avgt   15  3204,924 ± 39,514  ms/op
writeArrayRandom  104857600      1048576  avgt   15  2852,680 ± 21,795  ms/op
writeArrayRandom  104857600      2097152  avgt   15  2659,954 ± 24,693  ms/op

@vlsi
Copy link
Member Author

vlsi commented Dec 2, 2023

The results for 10M blobs read as if we can go 10x faster if we use 512K writes instead of 4K writes

@bokken
Copy link
Member

bokken commented Dec 2, 2023

4kb seems too small, but 512kb seems too large. 64kb might be nice balance of throughput and contiguous memory allocations.

@vlsi
Copy link
Member Author

vlsi commented Dec 2, 2023

I wonder if it is good to select buffer size based on the known blob size and/or extend it as it goes

@vlsi vlsi force-pushed the blob_perf branch 2 times, most recently from d33f9d0 to 0e74ae0 Compare December 3, 2023 11:25
// Refill the buffer and copy from it
buffer = lo.read(bufferSize);
// Note that actual number of bytes read may be less than requested
bytesRead = Math.min(len, buffer.length);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn’t this be comparing buffersize?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No - it is just the bytesRead naming which has me a bit confused

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any suggestions for the name?

@vlsi
Copy link
Member Author

vlsi commented Dec 4, 2023

I've added PgPreparedStatement.setBlob benchmark. It creates a blob from ByteArrayInputStream.

Before

Java 17, ARM64, ssl=on, PgPreparedStatement.createBlob uses 4096 buffer

Benchmark                                     (size)  Mode  Cnt        Score       Error   Units
BlobWrite.fromByteArray                         1024  avgt    3        3,102 ±     6,648   ms/op
BlobWrite.fromByteArray:gc.alloc.rate.norm      1024  avgt    3    32081,486 ±   154,631    B/op
BlobWrite.fromByteArray                        10240  avgt    3        4,221 ±     2,175   ms/op
BlobWrite.fromByteArray:gc.alloc.rate.norm     10240  avgt    3    37822,788 ±   536,854    B/op
BlobWrite.fromByteArray                       102400  avgt    3       22,230 ±    31,183   ms/op
BlobWrite.fromByteArray:gc.alloc.rate.norm    102400  avgt    3    99061,033 ±   954,955    B/op
BlobWrite.fromByteArray                      1048576  avgt    3      282,162 ±   598,196   ms/op
BlobWrite.fromByteArray:gc.alloc.rate.norm   1048576  avgt    3   748192,000 ±  7225,620    B/op
BlobWrite.fromByteArray                     10485760  avgt    3     2728,593 ±  1512,529   ms/op
BlobWrite.fromByteArray:gc.alloc.rate.norm  10485760  avgt    3  7218333,333 ± 10105,727    B/op

After with min(length, 8192) in createBlob

This is the selected implementation. It seems to be minimal changes to the existing createBlob, and it yields reasonable performance. createBlob could be optimized later, however, I would like to release the changes rather than polish createBlob with diminishing gains.

-byte[] buf = new byte[4096];
+byte[] buf = new byte[(int) Math.min(length, 8192)];

Java 17, ARM64, ssl=on

Benchmark                                     (size)  Mode  Cnt        Score      Error   Units
BlobWrite.fromByteArray                         1024  avgt    3        2,569 ±    0,798   ms/op
BlobWrite.fromByteArray:gc.alloc.rate.norm      1024  avgt    3    27005,674 ±   39,830    B/op
BlobWrite.fromByteArray                        10240  avgt    3        3,135 ±    1,245   ms/op
BlobWrite.fromByteArray:gc.alloc.rate.norm     10240  avgt    3    51002,100 ±  451,376    B/op
BlobWrite.fromByteArray                       102400  avgt    3        5,875 ±    3,729   ms/op
BlobWrite.fromByteArray:gc.alloc.rate.norm    102400  avgt    3   287300,221 ±  433,371    B/op
BlobWrite.fromByteArray                      1048576  avgt    3       28,251 ±    0,808   ms/op
BlobWrite.fromByteArray:gc.alloc.rate.norm   1048576  avgt    3  1146210,263 ± 7165,006    B/op
BlobWrite.fromByteArray                     10485760  avgt    3      263,814 ±   66,389   ms/op
BlobWrite.fromByteArray:gc.alloc.rate.norm  10485760  avgt    3  1906706,667 ±   84,264    B/op

After

Java 17, ARM64, ssl=on, PgPreparedStatement.createBlob uses 4096 buffer

Benchmark                                     (size)  Mode  Cnt        Score      Error   Units
BlobWrite.fromByteArray                         1024  avgt    3        2,471 ±    1,833   ms/op
BlobWrite.fromByteArray:gc.alloc.rate.norm      1024  avgt    3    30080,913 ±  103,388    B/op
BlobWrite.fromByteArray                      1048576  avgt    3       28,254 ±    5,625   ms/op
BlobWrite.fromByteArray:gc.alloc.rate.norm   1048576  avgt    3  1147907,717 ± 7180,327    B/op
BlobWrite.fromByteArray                     10485760  avgt    3      258,289 ±   29,823   ms/op
BlobWrite.fromByteArray:gc.alloc.rate.norm  10485760  avgt    3  1886762,667 ± 3117,773    B/op

The improvement comes from automatic buffer sizing in BlobOutputStream.

After with createBlob fix

-byte[] buf = new byte[4096];
+byte[] buf = new byte[(int) Math.min(length, 512*1024)];
Benchmark                                     (size)  Mode  Cnt        Score      Error   Units
BlobWrite.fromByteArray                         1024  avgt    3        2,518 ±    1,898   ms/op
BlobWrite.fromByteArray:gc.alloc.rate.norm      1024  avgt    3    27008,910 ±  123,280    B/op
BlobWrite.fromByteArray                      1048576  avgt    3       28,197 ±    4,224   ms/op
BlobWrite.fromByteArray:gc.alloc.rate.norm   1048576  avgt    3   629700,283 ± 7205,863    B/op
BlobWrite.fromByteArray                     10485760  avgt    3      260,591 ±   17,094   ms/op
BlobWrite.fromByteArray:gc.alloc.rate.norm  10485760  avgt    3  1387320,000 ±    0,001    B/op

@vlsi vlsi changed the title perf: improve performance of BlobInputStream.read(b, off, len) with buffering reads perf: improve performance of PreparedStatement.setBlob, BlobInputStream, and BlobOutputStream with dynamic buffer sizing Dec 4, 2023
@vlsi vlsi force-pushed the blob_perf branch 2 times, most recently from f721b5d to 7be618d Compare December 4, 2023 10:44
@vlsi vlsi force-pushed the blob_perf branch 2 times, most recently from f34bee5 to 4c3caec Compare December 4, 2023 11:33
…uffering reads

This reverts commit 3af3b32.

Co-authored-by: Dave Cramer <davecramer@gmail.com>
Co-authored-by: Brett Okken <brett.okken.os@gmail.com>

There are several fixes on top of 3af3b32:

1) The buffer is created lazily, and it is created only in case the number of requested bytes
is less than the buffer size
2) "small" read(byte[], int, int) can be buffered as well (e.g. if the buffer size exceeds the requested len)
3) Added locks to read calls for consistency with the locking in mark/reset
4) read(byte[], int, int) should return 0 when len=0
5) refilling the bufer should read "bufferSize" amount rather than "the remaining length"
We start with 65K buffer, and increase it as the user requests more reads.
It reaches reasonable performance for "full stream readouts", and it avoids
loading large amount of data when the user needs first bytes only.
…arget)

Previously, the implementation always created a Channel with Channels.newChannel(outputStream),
however, OpenJDK (e.g. 22) still allocates arrays.

The improvement is to access the arrays in case ByteBuffer allows so.
DirectByteBuffer and read-only ByteBuffers forbid array access.
…rites, and allocating the buffer lazily

Previously, each each blobOutput.write(byte[], ..) resulted in database call
even in the case the write size is small. It could impact cases when users
write in small chunks.
At the same time, if they already write with big chunks, we should not create
a buffer in BlobOutputStream, so now we create the buffer lazily.
It enables to cover variety of incoming write requests, and it does not
incur much overhead as the buffer grows lazily.
@vlsi
Copy link
Member Author

vlsi commented Dec 4, 2023

I'm okay with this, and I will let the dust settle.

We suggest using Blob APIs as they are standard.
@vlsi
Copy link
Member Author

vlsi commented Dec 4, 2023

I noticed the documentation suggested 2048 buffers, so I reworded it in e0277f1 so it suggest using Blob APIs instead.

@vlsi vlsi merged commit e0277f1 into pgjdbc:master Dec 4, 2023
12 checks passed
benkard pushed a commit to benkard/mulkcms2 that referenced this pull request Dec 23, 2023
This MR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [flow-bin](https://github.com/flowtype/flow-bin) ([changelog](https://github.com/facebook/flow/blob/master/Changelog.md)) | devDependencies | minor | [`^0.223.0` -> `^0.224.0`](https://renovatebot.com/diffs/npm/flow-bin/0.223.0/0.224.0) |
| [org.postgresql:postgresql](https://jdbc.postgresql.org) ([source](https://github.com/pgjdbc/pgjdbc)) | build | patch | `42.7.0` -> `42.7.1` |
| [net.java.dev.jna:jna](https://github.com/java-native-access/jna) | compile | minor | `5.13.0` -> `5.14.0` |
| [org.hibernate.orm:hibernate-envers](https://hibernate.org/orm) ([source](https://github.com/hibernate/hibernate-orm)) | build | patch | `6.4.0.Final` -> `6.4.1.Final` |
| [org.hibernate.orm:hibernate-core](https://hibernate.org/orm) ([source](https://github.com/hibernate/hibernate-orm)) | build | patch | `6.4.0.Final` -> `6.4.1.Final` |
| [com.diffplug.spotless:spotless-maven-plugin](https://github.com/diffplug/spotless) | build | patch | `2.41.0` -> `2.41.1` |
| [io.quarkus:quarkus-maven-plugin](https://github.com/quarkusio/quarkus) | build | patch | `3.6.0` -> `3.6.3` |
| [io.quarkus:quarkus-universe-bom](https://github.com/quarkusio/quarkus-platform) | import | patch | `3.6.0` -> `3.6.3` |

---

### Release Notes

<details>
<summary>flowtype/flow-bin</summary>

### [`v0.224.0`](flow/flow-bin@e730887...e6104a1)

[Compare Source](flow/flow-bin@e730887...e6104a1)

### [`v0.223.3`](flow/flow-bin@6e1e3f7...e730887)

[Compare Source](flow/flow-bin@6e1e3f7...e730887)

### [`v0.223.2`](flow/flow-bin@5bb7bcf...6e1e3f7)

[Compare Source](flow/flow-bin@5bb7bcf...6e1e3f7)

</details>

<details>
<summary>pgjdbc/pgjdbc</summary>

### [`v42.7.1`](https://github.com/pgjdbc/pgjdbc/blob/HEAD/CHANGELOG.md#&#8203;4271-2023-12-06-083400--0500)

##### Changed

-   perf: improve performance of PreparedStatement.setBlob, BlobInputStream, and BlobOutputStream with dynamic buffer sizing [MR #&#8203;3044](pgjdbc/pgjdbc#3044)

##### Fixed

-   fix: Apply connectTimeout before SSLSocket.startHandshake to avoid infinite wait in case the connection is broken [MR #&#8203;3040](pgjdbc/pgjdbc#3040)
-   fix: support waffle-jna 2.x and 3.x by using reflective approach for ManagedSecBufferDesc [MR #&#8203;2720](pgjdbc/pgjdbc#2720) Fixes [Issue #&#8203;2690](pgjdbc/pgjdbc#2720).
-   fix: NoSuchMethodError on ByteBuffer#position When Running on Java 8  when accessing arrays, fixes [Issue #&#8203;3014](pgjdbc/pgjdbc#3014)
-   Revert "[MR #&#8203;2925](pgjdbc/pgjdbc#2925) Use canonical DateStyle name" [MR #&#8203;3035](pgjdbc/pgjdbc#3035)
    Fixes  [Issue #&#8203;3008](pgjdbc/pgjdbc#3008)
-   Revert "[MR ##&#8203;2973](pgjdbc/pgjdbc#2973) feat: support SET statements combining with other queries with semicolon in PreparedStatement" [MR #&#8203;3010](pgjdbc/pgjdbc#3010)
    Fixes [Issue #&#8203;3007](pgjdbc/pgjdbc#3007)
-   fix: avoid timezone conversions when sending LocalDateTime to the database [#&#8203;2852](pgjdbc/pgjdbc#3010)  Fixes [Issue #&#8203;1390](pgjdbc/pgjdbc#1390)
    ,[Issue #&#8203;2850](pgjdbc/pgjdbc#2850)
    Closes \[Issue [#&#8203;1391](pgjdbc/pgjdbc#1391)

</details>

<details>
<summary>java-native-access/jna</summary>

### [`v5.14.0`](https://github.com/java-native-access/jna/blob/HEAD/CHANGES.md#Release-5140)

[Compare Source](java-native-access/jna@5.13.0...5.14.0)

\==============

## Features

-   [#&#8203;1556](java-native-access/jna#1556): Add `SetJob`, `SetPrinter` to `c.s.j.p.w.Winspool` - [@&#8203;tresf](https://github.com/tresf).
-   [#&#8203;1534](java-native-access/jna#1534): Add `GetMethod`, `Put`, `SpawnInstance` to `c.s.j.p.win32.COM.WbemCli#IWbemClassObject` and `ExecMethod` to `c.s.j.p.win32.COM.WbemCli#IWbemServices` - [@&#8203;faddom](https://github.com/faddom).
-   [#&#8203;1544](java-native-access/jna#1544): Add `GetPriorityClass`, `SetPriorityClass`, `GetThreadPriority`, `SetThreadPriority` and associated constants to `c.s.j.p.win32.Kernel32` - [@&#8203;dEajL3kA](https://github.com/dEajL3kA).
-   [#&#8203;1548](java-native-access/jna#1548): Make interface `c.s.j.p.mac.XAttr public` - [@&#8203;matthiasblaesing](https://github.com/matthiasblaesing).
-   [#&#8203;1551](java-native-access/jna#1551): Add `c.s.j.p.bsd.ExtAttr` and `c.s.j.p.bsd.ExtAttrUtil` to wrap BSD [\<sys/extattr.h>](https://man.freebsd.org/cgi/man.cgi?query=extattr\&sektion=2) system calls. [@&#8203;rednoah](https://github.com/rednoah).
-   [#&#8203;1517](java-native-access/jna#1517): Add missing `O_*` (e.g. `O_APPEND`, `O_SYNC`, `O_DIRECT`, ...) to `c.s.j.p.linux.Fcntl` - [@&#8203;matthiasblaesing](https://github.com/matthiasblaesing).
-   [#&#8203;1521](java-native-access/jna#1521): Shutdown CleanerThread once the last cleanable is removed - [@&#8203;matthiasblaesing](https://github.com/matthiasblaesing).
-   [#&#8203;1557](java-native-access/jna#1557): Build linux-riscv64 on Ubuntu focal to improve compatibility with older glibc versions - [@&#8203;matthiasblaesing](https://github.com/matthiasblaesing).

## Bug Fixes

-   [#&#8203;1501](java-native-access/jna#1501): `Library.OPTION_STRING_ENCODING` is ignore for string arguments function calls - [@&#8203;matthiasblaesing](https://github.com/matthiasblaesing).
-   [#&#8203;1504](java-native-access/jna#1504): Increase maximum supported fixed args on varargs calls from 3 to 255 - [@&#8203;andrew-nowak](https://github.com/andrew-nowak).
-   [#&#8203;1545](java-native-access/jna#1545): Fix Java 6 incompatibility in `c.s.j.p.win32.Kerne32Util` and `c.s.j.p.win32.DBT` - [@&#8203;matthiasblaesing](https://github.com/matthiasblaesing).

## Important Changes

-   The interfaces between Java and native code have changed, so `libjnidispatch`
    must be rebuilt to be compatible with this release.
-   Release drops support for JDKs 6 + 7, so you'll need at least JDK 8 to
    update to use this version.

</details>

<details>
<summary>hibernate/hibernate-orm</summary>

### [`v6.4.1.Final`](https://github.com/hibernate/hibernate-orm/blob/HEAD/changelog.txt#Changes-in-641Final-December-15-2023)

[Compare Source](hibernate/hibernate-orm@6.4.0...6.4.1)

https://hibernate.atlassian.net/projects/HHH/versions/32216

\*\* Bug
\* \[HHH-17570] - Wrong name provided when checking Oracle autonomous JSON database
\* \[HHH-17561] - NullPointerException at OracleServerConfiguration class
\* \[HHH-17555] - equals hashcode combined with naturalId
\* \[HHH-17553] - java.util.ConcurrentModificationException: null when loading an entity
\* \[HHH-17551] - Gradle Enterprise improvements
\* \[HHH-17528] - Explicit selection of an [@&#8203;Embeddable](https://github.com/Embeddable) property containing associated collections doesn't work
\* \[HHH-17525] - StackOverflowError when using [@&#8203;ManyToMany](https://github.com/ManyToMany) with composite id
\* \[HHH-17520] - Schema creation fails with interval second data type on PostgreSQL
\* \[HHH-17519] - Initializing a lazy association with a non aggregate id causes a NPE
\* \[HHH-17515] - DynamicInstantiationResult wrong java type constructor selected
\* \[HHH-17499] - SemanticException when querying embedded id entity with positional parameter
\* \[HHH-17494] - Metamodel generator produces an uncompilable class when an EntityGraph name contains a comma
\* \[HHH-17491] - UnknownEntityTypeException thrown when multiple subclasses define an attribute with the same name and one is a MappedSuperclass
\* \[HHH-17489] - ConcurrentModificationException after upgrading to 6.4.0
\* \[HHH-17466] - Exception on query: Could not convert 'java.util.Locale' to 'java.util.Locale' using 'org.hibernate.type.descriptor.java.LocaleJavaType' to wrap
\* \[HHH-17464] - 6.4.0 regression: NullPointerException in DefaultEvictEventListener#onEvict
\* \[HHH-17456] - java.util.UnknownFormatConversionException thrown why logging set to TRACE
\* \[HHH-17445] - Subquery correlated path expressions do not work with nullness predicates
\* \[HHH-17418] - Bytecode enchanced read accessor for a final field uses "missing" writer method
\* \[HHH-17416] - Using tuples in WHERE clause throws SemanticException
\* \[HHH-17413] - Invalid SQL with TYPE() function and CASE expression in SELECT clause
\* \[HHH-17408] - Unproxying leads to uninitialized one-to-one associations in some cases involving polymorphism
\* \[HHH-17407] - AssertionError when using JpaEntityJoin with correlated subqery if criteria copy tree is enabled
\* \[HHH-17405] - Cannot resolve path of generic mapped-superclass association path
\* \[HHH-17402] - UnknownEntityTypeException: Unable to locate persister - when comparing generic interface ToOne attribute to parameter
\* \[HHH-17397] - Count with right join returns count on the left entity although requested by the right one
\* \[HHH-17395] - Refresh with PESSIMISTIC_WRITE ignored for lazy loaded entity
\* \[HHH-17393] - Incorrect return type for List attribute, wrap in additional list
\* \[HHH-17392] - UnsupportedOperationException when using row_number() window function without top level GROUP BY
\* \[HHH-17391] - AssertionError when using row_number() window function with ORDER BY
\* \[HHH-17387] - Can't use EAGER ManyToOne on parent abstract class of joined table entity
\* \[HHH-17379] - Right join does not return records from the right table if there is condition on ID field and there's no matching record in the from clause
\* \[HHH-17359] - Query Cache contains null values for entity associations when entity was already loaded
\* \[HHH-17334] - Duplicated columns when updating indexed [@&#8203;ElementCollection](https://github.com/ElementCollection) with non updatable fields
\* \[HHH-17293] - Schema validation fails on postgres interval seconds type
\* \[HHH-17280] - UnknownTableReferenceException in subquery selecting embeddable foreign key
\* \[HHH-16967] - Missing join on inheritance parent table to validate [@&#8203;Where](https://github.com/Where) condition
\* \[HHH-16756] - orphanRemoval does not work when bytecode enhancement is enabled
\* \[HHH-16306] - CountExpressionTest.testCountDistinctTuple fails on Sybase
\* \[HHH-16100] - Dynamic-map entity mode does not register a column for one-to-one associations
\* \[HHH-1645] - refresh with LockMode on an unitialized proxy does not work

\*\* Improvement
\* \[HHH-17554] - No join on the table of the parent class with JOINED inheritance strategy when the select not contains a column used in [@&#8203;Where](https://github.com/Where) or [@&#8203;SQLRestriction](https://github.com/SQLRestriction)
\* \[HHH-16809] - Add JavaType#createArray

\*\* Task
\* \[HHH-17565] - Add testing for JDK 22-ea
\* \[HHH-17546] - Update Cockroach CI testing to 23.1.12
\* \[HHH-17545] - Update SAP HANA JDBC driver to 2.19.11
\* \[HHH-17544] - Update SAP HANA CI testing to 2.00.072.00.20231123.1
\* \[HHH-17543] - Update DB2 CI testing to 11.5.9.0
\* \[HHH-17542] - Update DB2 JDBC driver to 11.5.9.0
\* \[HHH-17541] - Update SQL Server JDBC driver to 12.4.2

</details>

<details>
<summary>quarkusio/quarkus</summary>

### [`v3.6.3`](https://github.com/quarkusio/quarkus/releases/tag/3.6.3)

[Compare Source](quarkusio/quarkus@3.6.2...3.6.3)

##### Complete changelog

-   [#&#8203;37690](quarkusio/quarkus#37690) - Regression in 3.6.2: ConfigDiagnostic `NullPointerException: Cannot invoke "java.lang.CharSequence.toString()" because "s" is null`
-   [#&#8203;37688](quarkusio/quarkus#37688) - Do not use build cache when releasing
-   [#&#8203;37669](quarkusio/quarkus#37669) - OIDC: Fix DEV UI startup when OIDC or Keycloak Dev Services is disabled
-   [#&#8203;37667](quarkusio/quarkus#37667) - Disabling of Dev Services for Keycloak leads to startup error
-   [#&#8203;37651](quarkusio/quarkus#37651) - Fix GraalVM version checker in order to accept other implementations
-   [#&#8203;37563](quarkusio/quarkus#37563) - Consistent file URI for folders and jars
-   [#&#8203;37559](quarkusio/quarkus#37559) - Quarkus throws NPE when trying to match unknown config files

### [`v3.6.2`](https://github.com/quarkusio/quarkus/releases/tag/3.6.2)

[Compare Source](quarkusio/quarkus@3.6.1...3.6.2)

##### Complete changelog

-   [#&#8203;37686](quarkusio/quarkus#37686) - Use standard URL when updating the website
-   [#&#8203;37653](quarkusio/quarkus#37653) - Improve error message in REST Client when no matching readers found
-   [#&#8203;37640](quarkusio/quarkus#37640) - Handle expireAfterWrite properly in the redis-cache config
-   [#&#8203;37639](quarkusio/quarkus#37639) - Logging docs include build time config reference
-   [#&#8203;37638](quarkusio/quarkus#37638) - Add scope tag to all injected MP Metrics
-   [#&#8203;37623](quarkusio/quarkus#37623) - Add quarkus-funqy-amazon-lambda-deployment to the quarkus-bom
-   [#&#8203;37617](quarkusio/quarkus#37617) - SmallRye GraphQL 2.6.1
-   [#&#8203;37611](quarkusio/quarkus#37611) - Fix configuration of custom port for Elasticsearch dev services
-   [#&#8203;37610](quarkusio/quarkus#37610) - Elasticsearch devservice port incorrect binding
-   [#&#8203;37605](quarkusio/quarkus#37605) - Fix type in HeartbeatFilter example of rest-client-reactive doc
-   [#&#8203;37599](quarkusio/quarkus#37599) - Bump kafka3.version from 3.6.0 to 3.6.1
-   [#&#8203;37594](quarkusio/quarkus#37594) - Bump org.jetbrains.kotlinx:kotlinx-serialization-json from 1.6.1 to 1.6.2
-   [#&#8203;37590](quarkusio/quarkus#37590) - Microprofile Metric Missing "Scope" Tag Only When Using Constructor Injection
-   [#&#8203;37588](quarkusio/quarkus#37588) - Update the import.cypher script to use newer syntax
-   [#&#8203;37581](quarkusio/quarkus#37581) - Support using commas to add extensions with CLI
-   [#&#8203;37570](quarkusio/quarkus#37570) - Prevent concurrently running Jacoco ReportCreators to avoid report corruption
-   [#&#8203;37565](quarkusio/quarkus#37565) - ArC: prevent duplicate bean discovery & detect duplicate bean identifiers
-   [#&#8203;37564](quarkusio/quarkus#37564) - Invalid documentation for 'quarkus extension add'
-   [#&#8203;37557](quarkusio/quarkus#37557) - Make docs/sync-web-site.sh recoverable
-   [#&#8203;37553](quarkusio/quarkus#37553) - Register OpenAPI custom filters for reflection
-   [#&#8203;37549](quarkusio/quarkus#37549) - Bump commons-io:commons-io from 2.15.0 to 2.15.1
-   [#&#8203;37546](quarkusio/quarkus#37546) - Bump io.quarkus:quarkus-platform-bom-maven-plugin from 0.0.99 to 0.0.100
-   [#&#8203;37545](quarkusio/quarkus#37545) - Bump org.junit.jupiter:junit-jupiter from 5.10.0 to 5.10.1
-   [#&#8203;37536](quarkusio/quarkus#37536) - Fix != expression in `@PreAuthorize` check
-   [#&#8203;37535](quarkusio/quarkus#37535) - Fix Snappy note about native
-   [#&#8203;37526](quarkusio/quarkus#37526) - Spring security annotatiton PreAuthorize process equals and not equals in the same way
-   [#&#8203;37520](quarkusio/quarkus#37520) - Properly match unknown config files for Windows
-   [#&#8203;37513](quarkusio/quarkus#37513) - Save pathParamValues encoded and perform decoding when requested
-   [#&#8203;37505](quarkusio/quarkus#37505) - Bump org.jboss.logmanager:log4j2-jboss-logmanager from 1.1.1.Final to 1.1.2.Final
-   [#&#8203;37496](quarkusio/quarkus#37496) - Quarkus 3.6.0 generate wrong jacoco xml
-   [#&#8203;37493](quarkusio/quarkus#37493) - upgrading from quarkus 3.5.3 to 3.6.0  java.lang.IllegalArgumentException: A case block for the string value already exist
-   [#&#8203;37479](quarkusio/quarkus#37479) - Redis Cache ttl default value invalid setting
-   [#&#8203;37357](quarkusio/quarkus#37357) - Runtime OpenAPI filters are not registered for reflection
-   [#&#8203;37298](quarkusio/quarkus#37298) - Bump Keycloak version to 23.0.0
-   [#&#8203;37187](quarkusio/quarkus#37187) - Bump org.apache.commons:commons-compress from 1.24.0 to 1.25.0
-   [#&#8203;37129](quarkusio/quarkus#37129) - Bump org.jetbrains.kotlinx:kotlinx-serialization-json from 1.6.0 to 1.6.1
-   [#&#8203;37128](quarkusio/quarkus#37128) - Bump org.junit:junit-bom from 5.10.0 to 5.10.1
-   [#&#8203;37035](quarkusio/quarkus#37035) - Register methods of RESTeasy reactive parameter containers for reflection
-   [#&#8203;36986](quarkusio/quarkus#36986) - Native not index method with SSE and throw NoSuchMethodException
-   [#&#8203;36813](quarkusio/quarkus#36813) - config-yaml warning - unrecognized configuration file on Windows
-   [#&#8203;36773](quarkusio/quarkus#36773) - "Unrecognized configuration file" when using YAML
-   [#&#8203;35960](quarkusio/quarkus#35960) - PathParam URL encoded in quarkus-resteasy-reactive since quarkus 3.2.x

### [`v3.6.1`](https://github.com/quarkusio/quarkus/releases/tag/3.6.1)

[Compare Source](quarkusio/quarkus@3.6.0...3.6.1)

##### Complete changelog

-   [#&#8203;37486](quarkusio/quarkus#37486) - Revert "Unlist quarkus-resteasy-qute and quarkus-resteasy-reactive-qute"
-   [#&#8203;37478](quarkusio/quarkus#37478) - Qute resteasy change in 3.6.0
-   [#&#8203;37454](quarkusio/quarkus#37454) - Config: detect injected config value mismatch for missing values
-   [#&#8203;37453](quarkusio/quarkus#37453) - Fix Panache bytecode enhancement for `@Embeddable` records
-   [#&#8203;37449](quarkusio/quarkus#37449) - Update Apache Maven to 3.9.6
-   [#&#8203;37447](quarkusio/quarkus#37447) - Add Content-Range header to 206 Partial Content file response
-   [#&#8203;37444](quarkusio/quarkus#37444) - Injecting ConfigProperty of type Optional\<List<String>> not working in the native mode
-   [#&#8203;37436](quarkusio/quarkus#37436) - Respect comma escapes in property value for `@RolesAllowed.`
-   [#&#8203;37428](quarkusio/quarkus#37428) - Fix various minor issues in quarkus update
-   [#&#8203;37426](quarkusio/quarkus#37426) - Fix typo configMapRefKey -> configMapKeyRef
-   [#&#8203;37421](quarkusio/quarkus#37421) - Scheduler: register ApplicationNotRunning as bean even if quartz is used
-   [#&#8203;37417](quarkusio/quarkus#37417) - Build fails when using the Quartz extension and `@Scheduled`(..., skipExecutionIf = Scheduled.ApplicationNotRunning.class)
-   [#&#8203;37415](quarkusio/quarkus#37415) - Make Truffle from GraalVM 23.1 work in all Quarkus modes
-   [#&#8203;37401](quarkusio/quarkus#37401) - Print correct profiles in native image
-   [#&#8203;37400](quarkusio/quarkus#37400) - Improve reliability when downloading builder images from Quay.io
-   [#&#8203;37398](quarkusio/quarkus#37398) - Revert "Build cache - Upload quarkus-ide-launcher-999-SNAPSHOT.jar"
-   [#&#8203;37395](quarkusio/quarkus#37395) - Update Gradle to 8.5
-   [#&#8203;37393](quarkusio/quarkus#37393) - Disable new Http2RSTFloodProtectionConfigTest on Windows
-   [#&#8203;37392](quarkusio/quarkus#37392) - Update gradle to 8.5 and backport if possible to finish Java 21 dependencies
-   [#&#8203;37384](quarkusio/quarkus#37384) - Stop disabling unsafe in netty at native-executable runtime
-   [#&#8203;37382](quarkusio/quarkus#37382) - Update MAX_LTS_SUPPORTED_BY_KOTLIN to 21
-   [#&#8203;37367](quarkusio/quarkus#37367) - Documentation: security auth mechanism guide must also list runtime form auth properties alongside build-time ones
-   [#&#8203;37366](quarkusio/quarkus#37366) - Documentation: Fix OIDC credentials reference to secret key
-   [#&#8203;37364](quarkusio/quarkus#37364) - Improve Docker Desktop detection
-   [#&#8203;37361](quarkusio/quarkus#37361) - Do not fail the request in OidcClient filters if OidcClient is disabled
-   [#&#8203;37360](quarkusio/quarkus#37360) - Disable OidcClientFilter at runtime for simpler application testing
-   [#&#8203;37359](quarkusio/quarkus#37359) - Fix incorrect log dependency
-   [#&#8203;37354](quarkusio/quarkus#37354) - Update Boucycastle to 1.77 and Boucycastle FIPS to 1.0.2.4
-   [#&#8203;37351](quarkusio/quarkus#37351) - Upgrade to Jandex 3.1.6
-   [#&#8203;37350](quarkusio/quarkus#37350) - Unlist quarkus-resteasy-reactive-qute and quarkus-resteasy-qute
-   [#&#8203;37347](quarkusio/quarkus#37347) - Runtime (re)initialize Netty's PlatformDependent classes
-   [#&#8203;37318](quarkusio/quarkus#37318) - Use batch mode for update-version.sh
-   [#&#8203;37317](quarkusio/quarkus#37317) - Avoid asking for GPG passphrase on CI
-   [#&#8203;37314](quarkusio/quarkus#37314) - Fix deprecated dev-v1 url with dev-ui in a few places
-   [#&#8203;37300](quarkusio/quarkus#37300) - Prepare docs/sync-web-site.sh for automated releases
-   [#&#8203;37294](quarkusio/quarkus#37294) - Fix the major version of Java 21
-   [#&#8203;37292](quarkusio/quarkus#37292) - Bump testcontainers to 1.19.3 and use docker-java-bom
-   [#&#8203;37291](quarkusio/quarkus#37291) - Bump org.jetbrains.kotlin:kotlin-gradle-plugin-api from 1.9.20 to 1.9.21 in /devtools/gradle
-   [#&#8203;37280](quarkusio/quarkus#37280) - Bump Microsoft SQL Server JDBC driver to 12.4.2
-   [#&#8203;37279](quarkusio/quarkus#37279) - Bump Microsoft SQL Server JDBC driver to 12.4.2
-   [#&#8203;37271](quarkusio/quarkus#37271) - Docs: add keywords to Vert.x guides
-   [#&#8203;37270](quarkusio/quarkus#37270) - Vert.x: report exception for blocking message consumer methods
-   [#&#8203;37268](quarkusio/quarkus#37268) - Reactive REST Client: check for ClientRequestFilter when skipping `@Provider` auto-discovery
-   [#&#8203;37252](quarkusio/quarkus#37252) - Use the default tenant resolver if the custom one does not resolve a tenant
-   [#&#8203;37251](quarkusio/quarkus#37251) - Add a test showing how OIDC ID token can be propagated
-   [#&#8203;37247](quarkusio/quarkus#37247) - Update kindcontainer to 1.4.4
-   [#&#8203;37244](quarkusio/quarkus#37244) - Always execute a JPA password action
-   [#&#8203;37228](quarkusio/quarkus#37228) - Add classes from additional JPA model build items to pre-generate proxies
-   [#&#8203;37224](quarkusio/quarkus#37224) - Qute: dev mode - debug a problem with no-restart-template
-   [#&#8203;37222](quarkusio/quarkus#37222) - RuntimeException in vertx is silently swallowed for blocking ConsumeEvents
-   [#&#8203;37177](quarkusio/quarkus#37177) - QUARKUS_MROFILE=dev and '-Dquarkus.profile=dev' not working for native image
-   [#&#8203;37108](quarkusio/quarkus#37108) - Warning about build time generated proxy for entity OutboxEvent in Hibernate Search
-   [#&#8203;36892](quarkusio/quarkus#36892) - Update Kotlin to version 1.9.21, Mockito to 5.7.0
-   [#&#8203;36747](quarkusio/quarkus#36747) - NoSuchMethodException when reading `@Embeddable` record
-   [#&#8203;36735](quarkusio/quarkus#36735) - Failure to bump BouncyCastle FIPS version to 1.0.2.4 due to a native build failure
-   [#&#8203;36242](quarkusio/quarkus#36242) - Quarkus cannot load Truffle/polyglot languages with the custom class loader.
-   [#&#8203;17839](quarkusio/quarkus#17839) - Invalid memory configuration for netty maxDirectMemory in native image

</details>

<details>
<summary>quarkusio/quarkus-platform</summary>

### [`v3.6.3`](quarkusio/quarkus-platform@3.6.2...3.6.3)

[Compare Source](quarkusio/quarkus-platform@3.6.2...3.6.3)

### [`v3.6.2`](quarkusio/quarkus-platform@3.6.1...3.6.2)

[Compare Source](quarkusio/quarkus-platform@3.6.1...3.6.2)

### [`v3.6.1`](quarkusio/quarkus-platform@3.6.0...3.6.1)

[Compare Source](quarkusio/quarkus-platform@3.6.0...3.6.1)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever MR is behind base branch, or you tick the rebase/retry checkbox.

👻 **Immortal**: This MR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4yNC4wIiwidXBkYXRlZEluVmVyIjoiMzQuMjQuMCJ9-->
svc-squareup-copybara pushed a commit to cashapp/misk that referenced this pull request Oct 4, 2024
This PR contains the following updates:

| Package | Type | Package file | Manager | Update | Change |
|---|---|---|---|---|---|
| [org.threeten:threetenbp](https://www.threeten.org/threetenbp)
([source](https://github.com/ThreeTen/threetenbp)) | dependencies |
misk/gradle/libs.versions.toml | gradle | minor | `1.6.9` -> `1.7.0` |
| [app.cash.tempest:tempest-bom](https://github.com/cashapp/tempest) |
dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2024.08.07.002316-64f40ef` -> `2024.09.04.165019-8430cf3` |
| [org.postgresql:postgresql](https://jdbc.postgresql.org)
([source](https://github.com/pgjdbc/pgjdbc)) | dependencies |
misk/gradle/libs.versions.toml | gradle | minor | `42.3.9` -> `42.7.4` |
| [com.squareup.okio:okio](https://github.com/square/okio) |
dependencies | misk/gradle/libs.versions.toml | gradle | patch | `3.9.0`
-> `3.9.1` |
| [org.mockito:mockito-core](https://github.com/mockito/mockito) |
dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`5.13.0` -> `5.14.1` |
| [ch.qos.logback:logback-core](http://logback.qos.ch)
([source](https://github.com/qos-ch/logback),
[changelog](https://logback.qos.ch/news.html)) | dependencies |
misk/gradle/libs.versions.toml | gradle | minor | `1.4.14` -> `1.5.6` |
| [ch.qos.logback:logback-classic](http://logback.qos.ch)
([source](https://github.com/qos-ch/logback),
[changelog](https://logback.qos.ch/news.html)) | dependencies |
misk/gradle/libs.versions.toml | gradle | minor | `1.4.14` -> `1.5.6` |
|
[org.jetbrains.kotlinx:kotlinx-coroutines-core](https://github.com/Kotlin/kotlinx.coroutines)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`1.8.1` -> `1.9.0` |
| [org.jooq:jooq](http://www.jooq.org)
([source](https://github.com/jOOQ/jOOQ)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `3.18.2` -> `3.18.20`
|
| [redis.clients:jedis](https://github.com/redis/jedis) | dependencies |
misk/gradle/libs.versions.toml | gradle | minor | `5.1.5` -> `5.2.0` |
| [com.google.guava:guava-bom](https://github.com/google/guava)
([source](http://svn.sonatype.org/spice/trunk/oss/oss-parent-9)) |
dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`33.3.0-jre` -> `33.3.1-jre` |
| [io.grpc:grpc-stub](https://github.com/grpc/grpc-java) | dependencies
| misk/gradle/libs.versions.toml | gradle | minor | `1.60.0` -> `1.68.0`
|
| [io.grpc:grpc-protobuf](https://github.com/grpc/grpc-java) |
dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`1.60.0` -> `1.68.0` |
| [io.grpc:grpc-netty](https://github.com/grpc/grpc-java) | dependencies
| misk/gradle/libs.versions.toml | gradle | minor | `1.60.0` -> `1.68.0`
|
| [io.grpc:protoc-gen-grpc-java](https://github.com/grpc/grpc-java) |
dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`1.60.0` -> `1.68.0` |
| [io.grpc:grpc-bom](https://github.com/grpc/grpc-java) | dependencies |
misk/gradle/libs.versions.toml | gradle | minor | `1.60.0` -> `1.68.0` |
| [io.grpc:grpc-api](https://github.com/grpc/grpc-java) | dependencies |
misk/gradle/libs.versions.toml | gradle | minor | `1.60.0` -> `1.68.0` |
|
[com.google.api.grpc:proto-google-common-protos](https://github.com/googleapis/sdk-platform-java)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2.43.0` -> `2.45.1` |
|
[com.google.apis:google-api-services-storage](http://nexus.sonatype.org/oss-repository-hosting.html)
([source](http://svn.sonatype.org/spice/tags/oss-parent-7)) |
dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`v1-rev20240916-2.0.0` -> `v1-rev20240924-2.0.0` |
|
[com.google.cloud:google-cloud-spanner](https://github.com/googleapis/java-spanner)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`6.75.0` -> `6.76.0` |
| [com.google.api:gax](https://github.com/googleapis/sdk-platform-java)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2.52.0` -> `2.54.1` |
|
[com.google.errorprone:error_prone_annotations](https://errorprone.info)
([source](https://github.com/google/error-prone)) | dependencies |
misk/gradle/libs.versions.toml | gradle | minor | `2.31.0` -> `2.32.0` |
|
[com.netflix.concurrency-limits:concurrency-limits-core](https://github.com/Netflix/concurrency-limits)
| dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`0.5.1` -> `0.5.2` |
|
[org.apache.commons:commons-lang3](https://commons.apache.org/proper/commons-lang/)
([source](https://gitbox.apache.org/repos/asf?p=commons-lang.git)) |
dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`3.16.0` -> `3.17.0` |
| [commons-io:commons-io](https://commons.apache.org/proper/commons-io/)
([source](https://gitbox.apache.org/repos/asf?p=commons-io.git)) |
dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2.16.1` -> `2.17.0` |
| [app.cash.sqldelight:runtime](https://github.com/cashapp/sqldelight) |
dependencies | misk/gradle/libs.versions.toml | gradle | patch | `2.0.0`
-> `2.0.2` |
|
[app.cash.sqldelight:mysql-dialect](https://github.com/cashapp/sqldelight)
| dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`2.0.0` -> `2.0.2` |
|
[app.cash.sqldelight:jdbc-driver](https://github.com/cashapp/sqldelight)
| dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`2.0.0` -> `2.0.2` |
|
[app.cash.sqldelight:gradle-plugin](https://github.com/cashapp/sqldelight)
| dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`2.0.0` -> `2.0.2` |
|
[com.google.protobuf:protoc](https://developers.google.com/protocol-buffers/)
([source](https://github.com/protocolbuffers/protobuf)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `3.25.4` -> `3.25.5` |
|
[com.google.protobuf:protobuf-java](https://developers.google.com/protocol-buffers/)
([source](https://github.com/protocolbuffers/protobuf)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `3.25.4` -> `3.25.5` |
| [com.squareup.okhttp3:mockwebserver](https://square.github.io/okhttp/)
([source](https://github.com/square/okhttp)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `5.0.0-alpha.13` ->
`5.0.0-alpha.14` |
| [com.squareup.okhttp3:okhttp](https://square.github.io/okhttp/)
([source](https://github.com/square/okhttp)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `5.0.0-alpha.13` ->
`5.0.0-alpha.14` |
| [io.netty:netty-handler](https://netty.io/)
([source](https://github.com/netty/netty)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `4.1.112.Final` ->
`4.1.113.Final` |
| [io.netty:netty-bom](https://netty.io/)
([source](https://github.com/netty/netty)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `4.1.112.Final` ->
`4.1.113.Final` |
|
[io.micrometer:micrometer-registry-prometheus](https://github.com/micrometer-metrics/micrometer)
| dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`1.12.9` -> `1.12.10` |
|
[io.micrometer:micrometer-core](https://github.com/micrometer-metrics/micrometer)
| dependencies | misk/gradle/libs.versions.toml | gradle | patch |
`1.12.9` -> `1.12.10` |
|
[com.vanniktech.maven.publish.base](https://github.com/vanniktech/gradle-maven-publish-plugin)
| plugin | misk/gradle/libs.versions.toml | gradle | minor | `0.27.0` ->
`0.28.0` |
|
[com.vanniktech:gradle-maven-publish-plugin](https://github.com/vanniktech/gradle-maven-publish-plugin)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`0.27.0` -> `0.28.0` |
| [org.junit.jupiter:junit-jupiter-params](https://junit.org/junit5/)
([source](https://github.com/junit-team/junit5)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `5.11.0` -> `5.11.1` |
| [org.junit.jupiter:junit-jupiter-engine](https://junit.org/junit5/)
([source](https://github.com/junit-team/junit5)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `5.11.0` -> `5.11.1` |
| [org.junit.jupiter:junit-jupiter-api](https://junit.org/junit5/)
([source](https://github.com/junit-team/junit5)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `5.11.0` -> `5.11.1` |
|
[com.fasterxml.jackson.module:jackson-module-kotlin](https://github.com/FasterXML/jackson-module-kotlin)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2.17.2` -> `2.18.0` |
|
[com.fasterxml.jackson.datatype:jackson-datatype-jsr310](https://github.com/FasterXML/jackson-modules-java8)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2.17.2` -> `2.18.0` |
|
[com.fasterxml.jackson.dataformat:jackson-dataformat-yaml](https://github.com/FasterXML/jackson-dataformats-text)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2.17.2` -> `2.18.0` |
|
[com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson)
([source](https://github.com/FasterXML/jackson-databind)) | dependencies
| misk/gradle/libs.versions.toml | gradle | minor | `2.17.2` -> `2.18.0`
|
|
[com.fasterxml.jackson.core:jackson-core](https://github.com/FasterXML/jackson-core)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2.17.2` -> `2.18.0` |
|
[com.fasterxml.jackson:jackson-bom](https://github.com/FasterXML/jackson-bom)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2.17.2` -> `2.18.0` |
|
[com.fasterxml.jackson.core:jackson-annotations](https://github.com/FasterXML/jackson)
([source](https://github.com/FasterXML/jackson-annotations)) |
dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2.17.2` -> `2.18.0` |
|
[com.google.auth:google-auth-library-oauth2-http](https://github.com/googleapis/google-auth-library-java)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`1.24.1` -> `1.27.0` |
|
[com.google.auth:google-auth-library-credentials](https://github.com/googleapis/google-auth-library-java)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`1.24.1` -> `1.27.0` |
| [io.gitlab.arturbosch.detekt:detekt-test-utils](https://detekt.dev)
([source](https://github.com/detekt/detekt)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `1.23.6` -> `1.23.7` |
| [io.gitlab.arturbosch.detekt:detekt-test](https://detekt.dev)
([source](https://github.com/detekt/detekt)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `1.23.6` -> `1.23.7` |
| [io.gitlab.arturbosch.detekt:detekt-psi-utils](https://detekt.dev)
([source](https://github.com/detekt/detekt)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `1.23.6` -> `1.23.7` |
| [io.gitlab.arturbosch.detekt:detekt-parser](https://detekt.dev)
([source](https://github.com/detekt/detekt)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `1.23.6` -> `1.23.7` |
| [io.gitlab.arturbosch.detekt:detekt-gradle-plugin](https://detekt.dev)
([source](https://github.com/detekt/detekt)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `1.23.6` -> `1.23.7` |
| [io.gitlab.arturbosch.detekt:detekt-api](https://detekt.dev)
([source](https://github.com/detekt/detekt)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `1.23.6` -> `1.23.7` |
| [com.datadoghq:dd-trace-api](https://github.com/datadog/dd-trace-java)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`1.38.1` -> `1.39.1` |
| [com.datadoghq:dd-trace-ot](https://github.com/datadog/dd-trace-java)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`1.38.1` -> `1.39.1` |
| [software.amazon.awssdk:sdk-core](https://aws.amazon.com/sdkforjava) |
dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2.27.14` -> `2.28.11` |
|
[software.amazon.awssdk:dynamodb-enhanced](https://aws.amazon.com/sdkforjava)
| dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2.27.14` -> `2.28.11` |
| [software.amazon.awssdk:dynamodb](https://aws.amazon.com/sdkforjava) |
dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2.27.14` -> `2.28.11` |
| [software.amazon.awssdk:aws-core](https://aws.amazon.com/sdkforjava) |
dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2.27.14` -> `2.28.11` |
| [software.amazon.awssdk:bom](https://aws.amazon.com/sdkforjava) |
dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2.27.14` -> `2.28.11` |
| [software.amazon.awssdk:auth](https://aws.amazon.com/sdkforjava) |
dependencies | misk/gradle/libs.versions.toml | gradle | minor |
`2.27.14` -> `2.28.11` |
| [com.amazonaws:aws-java-sdk-sqs](https://aws.amazon.com/sdkforjava)
([source](https://github.com/aws/aws-sdk-java)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `1.12.770` ->
`1.12.772` |
| [com.amazonaws:aws-java-sdk-s3](https://aws.amazon.com/sdkforjava)
([source](https://github.com/aws/aws-sdk-java)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `1.12.770` ->
`1.12.772` |
|
[com.amazonaws:aws-java-sdk-dynamodb](https://aws.amazon.com/sdkforjava)
([source](https://github.com/aws/aws-sdk-java)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `1.12.770` ->
`1.12.772` |
| [com.amazonaws:aws-java-sdk-core](https://aws.amazon.com/sdkforjava)
([source](https://github.com/aws/aws-sdk-java)) | dependencies |
misk/gradle/libs.versions.toml | gradle | patch | `1.12.770` ->
`1.12.772` |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>ThreeTen/threetenbp (org.threeten:threetenbp)</summary>

###
[`v1.7.0`](https://github.com/ThreeTen/threetenbp/releases/tag/v1.7.0)

See the [change
notes](https://www.threeten.org/threetenbp/changes-report.html) for more
information.

</details>

<details>
<summary>pgjdbc/pgjdbc (org.postgresql:postgresql)</summary>

###
[`v42.7.4`](https://github.com/pgjdbc/pgjdbc/blob/HEAD/CHANGELOG.md#4274-2024-08-22-080000--0400)

##### Added

- chore: SCRAM dependency to 3.1 and support channel binding [PR
#&#8203;3188](https://github.com/pgjdbc/pgjdbc/pull/3188)
- chore: Add PostgreSQL 15, 16, and 17beta1 to CI tests [PR
#&#8203;3299](https://github.com/pgjdbc/pgjdbc/pull/3299)
- test: Update to 17beta3 [PR
#&#8203;3308](https://github.com/pgjdbc/pgjdbc/pull/3308)
- chore: Implement direct SSL ALPN connections [PR
#&#8203;3252](https://github.com/pgjdbc/pgjdbc/pull/3252)
- translation: Add Korean translation file [PR
#&#8203;3276](https://github.com/pgjdbc/pgjdbc/pull/3276)

##### Fixed

- fix: PgInterval ignores case for represented interval string [PR
#&#8203;3344](https://github.com/pgjdbc/pgjdbc/pull/3344)
- perf: Avoid extra copies when receiving int4 and int2 in PGStream [PR
#&#8203;3295](https://github.com/pgjdbc/pgjdbc/pull/3295)
- fix: Add support for Infinity::numeric values in ResultSet.getObject
[PR #&#8203;3304](https://github.com/pgjdbc/pgjdbc/pull/3304)
- fix: Ensure order of results for getDouble [PR
#&#8203;3301](https://github.com/pgjdbc/pgjdbc/pull/3301)
- perf: Replace BufferedOutputStream with unsynchronized
PgBufferedOutputStream, allow configuring different Java and SO_SNDBUF
buffer sizes [PR
#&#8203;3248](https://github.com/pgjdbc/pgjdbc/pull/3248)
- fix: Fix SSL tests [PR
#&#8203;3260](https://github.com/pgjdbc/pgjdbc/pull/3260)
- fix: Support bytea in preferQueryMode=simple [PR
#&#8203;3243](https://github.com/pgjdbc/pgjdbc/pull/3243)
- fix: Fix [#&#8203;3234](https://github.com/pgjdbc/pgjdbc/issues/3234)
- Return -1 as update count for stored procedure calls [PR
#&#8203;3235](https://github.com/pgjdbc/pgjdbc/pull/3235)
- fix: Fix [#&#8203;3224](https://github.com/pgjdbc/pgjdbc/issues/3224)
- conversion for TIME '24:00' to LocalTime breaks in binary-mode [PR
#&#8203;3225](https://github.com/pgjdbc/pgjdbc/pull/3225)
- perf: Speed up getDate by parsing bytes instead of String [PR
#&#8203;3141](https://github.com/pgjdbc/pgjdbc/pull/3141)
- fix: support PreparedStatement.setBlob(1, Blob) and
PreparedStatement.setClob(1, Clob) for lobs that return -1 for length
[PR #&#8203;3136](https://github.com/pgjdbc/pgjdbc/pull/3136)
- fix: Validates resultset Params in PGStatement constructor. uses
assertThro… [PR
#&#8203;3171](https://github.com/pgjdbc/pgjdbc/pull/3171)
- fix: Validates resultset parameters [PR
#&#8203;3167](https://github.com/pgjdbc/pgjdbc/pull/3167)
- docs: Replace greater to with greater than [PR
#&#8203;3315](https://github.com/pgjdbc/pgjdbc/pull/3315)
- docs: Clarify binaryTransfer and prepareThreshold [PR
#&#8203;3338](https://github.com/pgjdbc/pgjdbc/pull/3338)
- docs: use.md, typo [PR
#&#8203;3314](https://github.com/pgjdbc/pgjdbc/pull/3314)
- test: Use docker v2 which changes docker-compose to docker compose
[#&#8203;3339](https://github.com/pgjdbc/pgjdbc/pull/3339)
- refactor: Merge PgPreparedStatement#setBinaryStream int and long
methods [PR #&#8203;3165](https://github.com/pgjdbc/pgjdbc/pull/3165)
- test: Test both binaryMode=true,false when creating connections in
DatabaseMetaDataTest [PR
#&#8203;3231](https://github.com/pgjdbc/pgjdbc/pull/3231)
- docs: Fixed typos in all source code and documentations [PR
#&#8203;3242](https://github.com/pgjdbc/pgjdbc/pull/3242)
- chore: Remove self-hosted runner [PR
#&#8203;3227](https://github.com/pgjdbc/pgjdbc/pull/3227)
- docs: Add cancelSignalTimeout in README [PR
#&#8203;3190](https://github.com/pgjdbc/pgjdbc/pull/3190)
- docs: Document READ_ONLY_MODE in README [PR
#&#8203;3175](https://github.com/pgjdbc/pgjdbc/pull/3175)
- test: Test for +/- infinity double values [PR
#&#8203;3294](https://github.com/pgjdbc/pgjdbc/pull/3294)
- test: Switch localhost and auth-test around for test-gss [PR
#&#8203;3343](https://github.com/pgjdbc/pgjdbc/pull/3343)
- fix: remove preDescribe from internalExecuteBatch [PR
#&#8203;2883](https://github.com/pgjdbc/pgjdbc/pull/2883)

##### Deprecated

- test: Deprecate all PostgreSQL versions older than 9.1 [PR
#&#8203;3335](https://github.com/pgjdbc/pgjdbc/pull/3335)

###
[`v42.7.3`](https://github.com/pgjdbc/pgjdbc/blob/HEAD/CHANGELOG.md#4273-2024-04-14-145100--0400)

##### Changed

- chore: gradle config enforces 17+ [PR
#&#8203;3147](https://github.com/pgjdbc/pgjdbc/pull/3147)

##### Fixed

- fix: boolean types not handled in SimpleQuery mode [PR
#&#8203;3146](https://github.com/pgjdbc/pgjdbc/pull/3146)
    -   make sure we handle boolean types in simple query mode
    -   support uuid as well
- handle all well known types in text mode and change `else if` to
`switch`
- fix: released new versions of 42.2.29, 42.3.10, 42.4.5, 42.5.6, 42.6.2
to deal with `NoSuchMethodError on ByteBuffer#position` when running on
Java 8

###
[`v42.7.2`](https://github.com/pgjdbc/pgjdbc/blob/HEAD/CHANGELOG.md#4272-2024-02-21-082300--0500)

##### Security

- security: SQL Injection via line comment generation, it is possible in
`SimpleQuery` mode to generate a line comment by having a placeholder
for a numeric with a `-`
such as `-?`. There must be second placeholder for a string immediately
after. Setting the parameter to a -ve value creates a line comment.
This has been fixed in this version fixes
[CVE-2024-1597](https://www.cve.org/CVERecord?id=CVE-2024-1597).
Reported by [Paul Gerste](https://github.com/paul-gerste-sonarsource).
See the [security
advisory](https://github.com/pgjdbc/pgjdbc/security/advisories/GHSA-24rp-q3w6-vc56)
for more details. This has been fixed in versions 42.7.2, 42.6.1 42.5.5,
42.4.4, 42.3.9, 42.2.28.jre7. See the security advisory for work
arounds.

##### Changed

- fix: Use simple query for isValid. Using Extended query sends two
messages checkConnectionQuery was never ever set or used, removed [PR
#&#8203;3101](https://github.com/pgjdbc/pgjdbc/pull/3101)
- perf: Avoid autoboxing bind indexes by
[@&#8203;bokken](https://github.com/bokken) in [PR
#&#8203;1244](https://github.com/pgjdbc/pgjdbc/pull/1244)
- refactor: Document that encodePassword will zero out the password
array, and remove driver's default encodePassword by
[@&#8203;vlsi](https://github.com/vlsi) in [PR
#&#8203;3084](https://github.com/pgjdbc/pgjdbc/pull/3084)

##### Added

- feat: Add PasswordUtil for encrypting passwords client side [PR
#&#8203;3082](https://github.com/pgjdbc/pgjdbc/pull/3082)

###
[`v42.7.1`](https://github.com/pgjdbc/pgjdbc/blob/HEAD/CHANGELOG.md#4271-2023-12-06-083400--0500)

##### Changed

- perf: improve performance of PreparedStatement.setBlob,
BlobInputStream, and BlobOutputStream with dynamic buffer sizing [PR
#&#8203;3044](https://github.com/pgjdbc/pgjdbc/pull/3044)

##### Fixed

- fix: Apply connectTimeout before SSLSocket.startHandshake to avoid
infinite wait in case the connection is broken [PR
#&#8203;3040](https://github.com/pgjdbc/pgjdbc/pull/3040)
- fix: support waffle-jna 2.x and 3.x by using reflective approach for
ManagedSecBufferDesc [PR
#&#8203;2720](https://github.com/pgjdbc/pgjdbc/pull/2720) Fixes [Issue
#&#8203;2690](https://github.com/pgjdbc/pgjdbc/issues/2720).
- fix: NoSuchMethodError on ByteBuffer#position When Running on Java 8
when accessing arrays, fixes [Issue
#&#8203;3014](https://github.com/pgjdbc/pgjdbc/issues/3014)
- Revert "[PR #&#8203;2925](https://github.com/pgjdbc/pgjdbc/pull/2925)
Use canonical DateStyle name" [PR
#&#8203;3035](https://github.com/pgjdbc/pgjdbc/pull/3035)
Fixes [Issue #&#8203;3008](https://github.com/pgjdbc/pgjdbc/issues/3008)
- Revert "[PR ##&#8203;2973](https://github.com/pgjdbc/pgjdbc/pull/2973)
feat: support SET statements combining with other queries with semicolon
in PreparedStatement" [PR
#&#8203;3010](https://github.com/pgjdbc/pgjdbc/pull/3010)
Fixes [Issue #&#8203;3007](https://github.com/pgjdbc/pgjdbc/issues/3007)
- fix: avoid timezone conversions when sending LocalDateTime to the
database [#&#8203;2852](https://github.com/pgjdbc/pgjdbc/pull/3010)
Fixes [Issue #&#8203;1390](https://github.com/pgjdbc/pgjdbc/issues/1390)
    ,[Issue #&#8203;2850](https://github.com/pgjdbc/pgjdbc/issues/2850)
Closes \[Issue
[#&#8203;1391](https://github.com/pgjdbc/pgjdbc/issues/1391)(https://github.com/pgjdbc/pgjdbc/issues/1391)

###
[`v42.7.0`](https://github.com/pgjdbc/pgjdbc/blob/HEAD/CHANGELOG.md#4270-2023-11-20-093300--0500)

##### Changed

- fix: Deprecate for removal PGPoint.setLocation(java.awt.Point) to cut
dependency to `java.desktop` module. [PR
#&#8203;2967](https://github.com/pgjdbc/pgjdbc/pull/2967)
- feat: return all catalogs for getCatalogs metadata query closes [ISSUE
#&#8203;2949](https://github.com/pgjdbc/pgjdbc/issues/2949) [PR
#&#8203;2953](https://github.com/pgjdbc/pgjdbc/pull/2953)
- feat: support SET statements combining with other queries with
semicolon in PreparedStatement [PR
##&#8203;2973](https://github.com/pgjdbc/pgjdbc/pull/2973)

##### Fixed

- chore: add styleCheck Gradle task to report style violations [PR
#&#8203;2980](https://github.com/pgjdbc/pgjdbc/pull/2980)
- fix: Include currentXid in "Error rolling back prepared transaction"
exception message [PR
#&#8203;2978](https://github.com/pgjdbc/pgjdbc/pull/2978)
- fix: add varbit as a basic type inside the TypeInfoCache [PR
#&#8203;2960](https://github.com/pgjdbc/pgjdbc/pull/2960)
- fix: Fix failing tests for version 16. [PR
#&#8203;2962](https://github.com/pgjdbc/pgjdbc/pull/2962)
- fix: allow setting arrays with ANSI type name [PR
#&#8203;2952](https://github.com/pgjdbc/pgjdbc/pull/2952)
- feat: Use KeepAlive to confirm LSNs [PR
#&#8203;2941](https://github.com/pgjdbc/pgjdbc/pull/2941)
- fix: put double ' around log parameter [PR
#&#8203;2936](https://github.com/pgjdbc/pgjdbc/pull/2936) fixes [ISSUE
#&#8203;2935](https://github.com/pgjdbc/pgjdbc/issues/2935)
- fix: Fix Issue
[#&#8203;2928](https://github.com/pgjdbc/pgjdbc/issues/2928) number of
ports not equal to number of servers in datasource [PR
#&#8203;2929](https://github.com/pgjdbc/pgjdbc/pull/2929)
- fix: Use canonical DateStyle name
([#&#8203;2925](https://github.com/pgjdbc/pgjdbc/issues/2925)) fixes
[pgbouncer issue](https://github.com/pgbouncer/pgbouncer/issues/776)
- fix: Method getFastLong should be able to parse all longs [PR
#&#8203;2881](https://github.com/pgjdbc/pgjdbc/pull/2881)
- docs: Fix typos in info.html [PR
#&#8203;2860](https://github.com/pgjdbc/pgjdbc/pull/2860)
- fix: Return correct default from
PgDatabaseMetaData.getDefaultTransactionIsolation [PR
#&#8203;2992](https://github.com/pgjdbc/pgjdbc/pull/2992) fixes [Issue
#&#8203;2991](https://github.com/pgjdbc/pgjdbc/issues/2991)
-   test: fix assertion in RefCursorFetchTestultFetchSize rows
-   test: use try-with-resources in LogicalReplicationStatusTest

###
[`v42.6.0`](https://github.com/pgjdbc/pgjdbc/blob/HEAD/CHANGELOG.md#4260-2023-03-17-153434--0400)

##### Changed

- fix: use PhantomReferences instead of `Obejct.finalize()` to track
Connection leaks [PR
#&#8203;2847](https://github.com/pgjdbc/pgjdbc/pull/2847)

The change replaces all uses of Object.finalize with PhantomReferences.
The leaked resources (Connections) are tracked in a helper thread that
is active as long as
there are connections in use. By default, the thread keeps running for
30 seconds after all
the connections are released. The timeout is set with
pgjdbc.config.cleanup.thread.ttl system property.

- refactor:(loom) replace the usages of synchronized with ReentrantLock
[PR #&#8203;2635](https://github.com/pgjdbc/pgjdbc/pull/2635)
Fixes [Issue #&#8203;1951](https://github.com/pgjdbc/pgjdbc/issues/1951)

###
[`v42.5.4`](https://github.com/pgjdbc/pgjdbc/blob/HEAD/CHANGELOG.md#4254-2023-02-15-102104--0500)

##### Fixed

- fix: fix testGetSQLTypeQueryCache by searching for xid type. We used
to search for box type but it is now cached. xid is not cached, this
nuance is required for the test.
- fix OidValueCorrectnessTest BOX_ARRAY OID, by adding BOX_ARRAY to the
oidTypeName map \[PR
[#&#8203;2810](https://github.com/pgjdbc/pgjdbc/issues/2810)]\((https://github.com/pgjdbc/pgjdbc/pull/2810).
- fixes [Issue
#&#8203;2804](https://github.com/pgjdbc/pgjdbc/issues/2804).
- fix: Make sure that github CI runs tests on all [PRs
#&#8203;2809](\(https://github.com/pgjdbc/pgjdbc/pull/2809\)).

###
[`v42.5.3`](https://github.com/pgjdbc/pgjdbc/blob/HEAD/CHANGELOG.md#4253-2023-02-03-082450--0500)

##### Fixed

- fix: Add box to TypeInfoCache, fixes [Issue
#&#8203;2746](https://github.com/pgjdbc/pgjdbc/issues/2746) [PR
#&#8203;2747](https://github.com/pgjdbc/pgjdbc/pull/2747)
- fix: regression in PgResultSet LONG_MIN copy and paste error fixes
[Issue #&#8203;2748](https://github.com/pgjdbc/pgjdbc/issues/2748)
[PR#2749](https://github.com/pgjdbc/pgjdbc/pull/2749)

###
[`v42.5.2`](https://github.com/pgjdbc/pgjdbc/blob/HEAD/CHANGELOG.md#4252-2023-01-31-143046--0500)

##### Changed

- regression: This release has 2 known regressions which make it
unusable see the notes above. We advise people to use 42.5.3 instead.
- docs: specify that timeouts are in seconds and there is a maximum.
Housekeeping on some tests fixes [#Issue
2671](https://github.com/pgjdbc/pgjdbc/issues/2671) [PR
#&#8203;2686](https://github.com/pgjdbc/pgjdbc/pull/2686)
- docs: clarify binaryTransfer and add it to README [PR#
2698](https://github.com/pgjdbc/pgjdbc/pull/2698)
- docs: Document the need to encode reserved characters in the
connection URL [PR
#&#8203;2700](https://github.com/pgjdbc/pgjdbc/pull/2700)
- feat: Define binary transfer for custom types
dynamically/automatically fixes [Issue
#&#8203;2554](https://github.com/pgjdbc/pgjdbc/issues/2554) [PR
#&#8203;2556](https://github.com/pgjdbc/pgjdbc/pull/2556)

##### Added

- fix: added gssResponseTimeout as part of [PR
#&#8203;2687](https://github.com/pgjdbc/pgjdbc/pull/2687) to make sure
we don't wait forever on a GSS RESPONSE

##### Fixed

- fix: Ensure case of XML tags in Maven snippet is correct [PR
#&#8203;2682](https://github.com/pgjdbc/pgjdbc/pull/2682)
- fix: Make sure socket is closed if an exception is thrown in
createSocket fixes [Issue
#&#8203;2684](https://github.com/pgjdbc/pgjdbc/issues/2684) [PR
#&#8203;2685](https://github.com/pgjdbc/pgjdbc/pull/2685)
- fix: Apply patch from [Issue
#&#8203;2683](https://github.com/pgjdbc/pgjdbc/issues/2683) to fix
hanging ssl connections [PR
#&#8203;2687](https://github.com/pgjdbc/pgjdbc/pull/2687)
- fix - binary conversion of (very) long numeric values (longer than 4
\* 2^15 digits) [PR
#&#8203;2697](https://github.com/pgjdbc/pgjdbc/pull/2697) fixes [Issue
#&#8203;2695](https://github.com/pgjdbc/pgjdbc/issues/2695)
- minor: enhance readability connection of startup params [PR
#&#8203;2705](https://github.com/pgjdbc/pgjdbc/pull/2785)

###
[`v42.5.1`](https://github.com/pgjdbc/pgjdbc/blob/HEAD/CHANGELOG.md#4251-2022-11-23-101459--0500)

##### Security

- security: StreamWrapper spills to disk if setText, or setBytea sends
very large Strings or arrays to the server. createTempFile creates a
file which can be read by other users on unix like systems (Not macos).
This has been fixed in this version fixes CVE-2022-41946 see the
[security
advisory](https://github.com/pgjdbc/pgjdbc/security/advisories/GHSA-562r-vg33-8x8h)
for more details. Reported by [Jonathan
Leitschuh](https://github.com/JLLeitschuh) This has been fixed in
versions 42.5.1, 42.4.3 42.3.8, 42.2.27.jre7. Note there is no fix for
42.2.26.jre6. See the security advisory for work arounds.

##### Fixed

- fix: make sure we select array_in from pg_catalog to avoid duplicate
array_in functions fixes [#Issue
2548](https://github.com/pgjdbc/pgjdbc/issues/2548) [PR
#&#8203;2552](https://github.com/pgjdbc/pgjdbc/issues/2552)
- fix: binary decoding of bool values [PR
#&#8203;2640](https://github.com/pgjdbc/pgjdbc/pull/2640)
- perf: improve performance of PgResultSet
getByte/getShort/getInt/getLong for float-typed columns [PR
#&#8203;2634](https://github.com/pgjdbc/pgjdbc/pull/2634)
- chore: fix various spelling errors [PR
#&#8203;2592](https://github.com/pgjdbc/pgjdbc/pull/2592)
- chore: Feature/urlparser improve URLParser [PR
#&#8203;2641](https://github.com/pgjdbc/pgjdbc/pull/2592)

###
[`v42.5.0`](https://github.com/pgjdbc/pgjdbc/blob/HEAD/CHANGELOG.md#4250-2022-08-23-112011--0400)

##### Changed

- fix: revert change in [PR
#&#8203;1986](https://github.com/pgjdbc/pgjdbc/pull/1986) where float
was aliased to float4 from float8.
float now aliases to float8 [PR
#&#8203;2598](https://github.com/pgjdbc/pgjdbc/pull/2598) fixes [Issue
#&#8203;2597](https://github.com/pgjdbc/pgjdbc/issues/2597)

###
[`v42.4.2`](https://github.com/pgjdbc/pgjdbc/blob/HEAD/CHANGELOG.md#4242-2022-08-17-103340--0400)

##### Changed

- fix: add alias to the generated getUDT() query for clarity (PR
[#&#8203;2553](https://github.com/pgjdbc/pgjdbc/issues/2553))\[https://github.com/pgjdbc/pgjdbc/pull/2553]

##### Added

- fix: make setObject accept UUID array [PR
#&#8203;2587](https://github.com/pgjdbc/pgjdbc/pull/2587)

##### Fixed

- fix: regression with GSS. Changes introduced to support building with
Java 17 caused failures [Issue
#&#8203;2588](https://github.com/pgjdbc/pgjdbc/issues/2588)
- fix: set a timeout to get the return from requesting SSL upgrade. [PR
#&#8203;2572](https://github.com/pgjdbc/pgjdbc/pull/2572)
- feat: synchronize statement executions (e.g. avoid deadlock when
Connection.isValid is executed from concurrent threads)

###
[`v42.4.1`](https://github.com/pgjdbc/pgjdbc/blob/HEAD/CHANGELOG.md#4241-2022-08-01-162420--0400)

##### Security

- fix: CVE-2022-31197 Fixes SQL generated in PgResultSet.refresh() to
escape column identifiers so as to prevent SQL injection.
- Previously, the column names for both key and data columns in the
table were copied as-is into the generated
SQL. This allowed a malicious table with column names that include
statement terminator to be parsed and
        executed as multiple separate commands.
- Also adds a new test class ResultSetRefreshTest to verify this change.
    -   Reported by [Sho Kato](https://github.com/kato-sho)

##### Changed

-   chore: skip publishing pgjdbc-osgi-test to Central
-   chore: bump Gradle to 7.5
-   test: update JUnit to 5.8.2

##### Added

- chore: added Gradle Wrapper Validation for verifying
gradle-wrapper.jar
- chore: added "permissions: contents: read" for GitHub Actions to avoid
unintentional modifications by the CI
-   chore: support building pgjdbc with Java 17
- feat: synchronize statement executions (e.g. avoid deadlock when
Connection.isValid is executed from concurrent threads)

###
[`v42.4.0`](https://github.com/pgjdbc/pgjdbc/blob/HEAD/CHANGELOG.md#4240-2022-06-09-081402--0400)

##### Changed

- fix: added GROUP_STARTUP_PARAMETERS boolean property to determine
whether or not to group
startup parameters in a transaction (default=false like 42.2.x) fixes
[Issue #&#8203;2425](https://github.com/pgjdbc/pgjdbc/issues/2497)
pgbouncer cannot deal with transactions in statement pooling mode [PR
#&#8203;2425](https://github.com/pgjdbc/pgjdbc/pull/2425)

##### Fixed

- fix: queries with up to 65535 (inclusive) parameters are supported now
(previous limit was 32767)
[PR #&#8203;2525](https://github.com/pgjdbc/pgjdbc/pull/2525), [Issue
#&#8203;1311](https://github.com/pgjdbc/pgjdbc/issues/1311)
- fix: workaround JarIndex parsing issue by using
groupId/artifactId-version directory namings.
Regression since 42.2.13. [PR
#&#8203;2531](https://github.com/pgjdbc/pgjdbc/pull/2531), [issue
#&#8203;2527](https://github.com/pgjdbc/pgjdbc/issues/2527)
-   fix: use Locale.ROOT for toUpperCase() toLowerCase() calls
-   doc: add Vladimir Sitnikov's PGP key
- fix: return correct base type for domain from getUDTs [PR
#&#8203;2520](https://github.com/pgjdbc/pgjdbc/pull/2520) [Issue
#&#8203;2522](https://github.com/pgjdbc/pgjdbc/issues/2522)
- perf: utcTz static and renamed to UTC_TIMEZONE [PR
#&#8203;2519](https://github.com/pgjdbc/pgjdbc/pull/2520)
- doc: fix release version for
[#&#8203;2377](https://github.com/pgjdbc/pgjdbc/issues/2377) (it should
be 42.3.6, not 42.3.5)

</details>

<details>
<summary>square/okio (com.squareup.okio:okio)</summary>

###
[`v3.9.1`](https://github.com/square/okio/blob/HEAD/CHANGELOG.md#Version-391)

*2024-09-12*

- Fix: Support paths containing a single dot (".") in `Path.relativeTo`.
- Fix: Do not read from the upstream source when a 0-byte read is
requested.
- Fix: Update kotlinx.datetime to 0.6.0 to correct a Gradle module
metadata problem with 0.5.0.
Note: this artifact is only used in 'okio-fakefilesystem' and
'okio-nodefilesystem' and not in the Okio core.

</details>

<details>
<summary>mockito/mockito (org.mockito:mockito-core)</summary>

### [`v5.14.1`](https://github.com/mockito/mockito/releases/tag/v5.14.1)

<sup><sup>*Changelog generated by [Shipkit Changelog Gradle
Plugin](https://github.com/shipkit/shipkit-changelog)*</sup></sup>

##### 5.14.1

- 2024-09-30 - [2
commit(s)](https://github.com/mockito/mockito/compare/v5.14.0...v5.14.1)
by Brice Dutheil, dependabot\[bot]
- fix: gradle mockitoAgent configuration should not be transitive
[(#&#8203;3454)](https://github.com/mockito/mockito/pull/3454)
- Bump bytebuddy from 1.15.2 to 1.15.3
[(#&#8203;3452)](https://github.com/mockito/mockito/pull/3452)
- Allow for installing a Java agent within the Mockito jar, without
exposing Byte Buddy's attach mechanism.
[(#&#8203;3437)](https://github.com/mockito/mockito/pull/3437)

### [`v5.14.0`](https://github.com/mockito/mockito/releases/tag/v5.14.0)

<sup><sup>*Changelog generated by [Shipkit Changelog Gradle
Plugin](https://github.com/shipkit/shipkit-changelog)*</sup></sup>

##### 5.14.0

- 2024-09-27 - [9
commit(s)](https://github.com/mockito/mockito/compare/v5.13.0...v5.14.0)
by Ali-Hassan, Brice Dutheil, David Saff, Rafael Winterhalter,
dependabot\[bot]
- Bump org.junit.platform:junit-platform-launcher from 1.11.0 to 1.11.1
[(#&#8203;3451)](https://github.com/mockito/mockito/pull/3451)
- Bump bytebuddy from 1.15.1 to 1.15.2
[(#&#8203;3450)](https://github.com/mockito/mockito/pull/3450)
- Update Documentation of ArgumentCaptor.java
[(#&#8203;3448)](https://github.com/mockito/mockito/pull/3448)
- Split subprojects
[(#&#8203;3447)](https://github.com/mockito/mockito/pull/3447)
- Separate extensions from integration tests
[(#&#8203;3443)](https://github.com/mockito/mockito/issues/3443)
- Bump org.eclipse.platform:org.eclipse.osgi from 3.20.0 to 3.21.0
[(#&#8203;3440)](https://github.com/mockito/mockito/pull/3440)
- Bump com.gradle.enterprise from 3.18 to 3.18.1
[(#&#8203;3439)](https://github.com/mockito/mockito/pull/3439)
- Allow for installing a Java agent within the Mockito jar, without
exposing Byte Buddy's attach mechanism.
[(#&#8203;3437)](https://github.com/mockito/mockito/pull/3437)
- Bump bytebuddy from 1.15.0 to 1.15.1
[(#&#8203;3434)](https://github.com/mockito/mockito/pull/3434)
- Fixes [#&#8203;3419](https://github.com/mockito/mockito/issues/3419):
Disable mocks with an error message
[(#&#8203;3424)](https://github.com/mockito/mockito/pull/3424)
- Accessing a mock after clearInlineMocks could provide much more useful
error message.
[(#&#8203;3419)](https://github.com/mockito/mockito/issues/3419)

</details>

<details>
<summary>Kotlin/kotlinx.coroutines
(org.jetbrains.kotlinx:kotlinx-coroutines-core)</summary>

###
[`v1.9.0`](https://github.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-190)

[Compare
Source](https://github.com/Kotlin/kotlinx.coroutines/compare/1.8.1...1.9.0)

##### Features

- Wasm/WASI target support
([#&#8203;4064](https://github.com/Kotlin/kotlinx.coroutines/issues/4064)).
Thanks, [@&#8203;igoriakovlev](https://github.com/igoriakovlev)!
- `limitedParallelism` now optionally accepts the name of the dispatcher
view for easier debugging
([#&#8203;4023](https://github.com/Kotlin/kotlinx.coroutines/issues/4023)).
- No longer initialize `Dispatchers.IO` on the JVM when other standard
dispatchers are accessed
([#&#8203;4166](https://github.com/Kotlin/kotlinx.coroutines/issues/4166)).
Thanks, [@&#8203;metalhead8816](https://github.com/metalhead8816)!
- Introduced the `Flow<T>.chunked(size: Int): Flow<List<T>>` operator
that groups emitted values into groups of the given size
([#&#8203;1290](https://github.com/Kotlin/kotlinx.coroutines/issues/1290)).
- Closeable dispatchers are instances of `AutoCloseable` now
([#&#8203;4123](https://github.com/Kotlin/kotlinx.coroutines/issues/4123)).

##### Fixes

- Calling `hasNext` on a `Channel`'s iterator is idempotent
([#&#8203;4065](https://github.com/Kotlin/kotlinx.coroutines/issues/4065)).
Thanks, [@&#8203;gitpaxultek](https://github.com/gitpaxultek)!
- `CoroutineScope()` created without an explicit dispatcher uses
`Dispatchers.Default` on Native
([#&#8203;4074](https://github.com/Kotlin/kotlinx.coroutines/issues/4074)).
Thanks, [@&#8203;whyoleg](https://github.com/whyoleg)!
- Fixed a bug that prevented non-Android `Dispatchers.Main` from
initializing when the Firebase dependency is used
([#&#8203;3914](https://github.com/Kotlin/kotlinx.coroutines/issues/3914)).
- Ensured a more intuitive ordering of tasks in `runBlocking`
([#&#8203;4134](https://github.com/Kotlin/kotlinx.coroutines/issues/4134)).
- Forbid casting a `Mutex` to `Semaphore`
([#&#8203;4176](https://github.com/Kotlin/kotlinx.coroutines/issues/4176)).
- Worked around a stack overflow that may occur when calling
`asDeferred` on a `Future` many times
([#&#8203;4156](https://github.com/Kotlin/kotlinx.coroutines/issues/4156)).

##### Deprecations and promotions

- Advanced the deprecation levels for `BroadcastChannel`-based API
([#&#8203;4197](https://github.com/Kotlin/kotlinx.coroutines/issues/4197)).
- Advanced the deprecation levels for the old `kotlinx-coroutines-test`
API
([#&#8203;4198](https://github.com/Kotlin/kotlinx.coroutines/issues/4198)).
- Deprecated `Job.cancelFutureOnCompletion`
([#&#8203;4173](https://github.com/Kotlin/kotlinx.coroutines/issues/4173)).
- Promoted `CoroutineDispatcher.limitedParallelism` to stable
([#&#8203;3864](https://github.com/Kotlin/kotlinx.coroutines/issues/3864)).
- Promoted `CoroutineStart.ATOMIC` from `ExperimentalCoroutinesApi` to
`DelicateCoroutinesApi`
([#&#8203;4169](https://github.com/Kotlin/kotlinx.coroutines/issues/4169)).
- Promoted `CancellableContinuation.resume` with an `onCancellation`
lambda to stable, providing extra arguments to the lambda
([#&#8203;4088](https://github.com/Kotlin/kotlinx.coroutines/issues/4088)).
- Marked the classes and interfaces that are not supposed to be
inherited from with the new `InternalForInheritanceCoroutinesApi` opt-in
([#&#8203;3770](https://github.com/Kotlin/kotlinx.coroutines/issues/3770)).
- Marked the classes and interfaces inheriting from which is not stable
with the new `ExperimentalForInheritanceCoroutinesApi` opt-in
([#&#8203;3770](https://github.com/Kotlin/kotlinx.coroutines/issues/3770)).

##### Other

- Kotlin was updated to 2.0
([#&#8203;4137](https://github.com/Kotlin/kotlinx.coroutines/issues/4137)).
- Reworked the documentation for `CoroutineStart` and `Channel`-based
API
([#&#8203;4147](https://github.com/Kotlin/kotlinx.coroutines/issues/4147),
[#&#8203;4148](https://github.com/Kotlin/kotlinx.coroutines/issues/4148),
[#&#8203;4167](https://github.com/Kotlin/kotlinx.coroutines/issues/4167)).
Thanks, [@&#8203;globsterg](https://github.com/globsterg)!
- Simplified the internal implementation of `Job`
([#&#8203;4053](https://github.com/Kotlin/kotlinx.coroutines/issues/4053)).
-   Small tweaks, fixes, and documentation improvements.

</details>

<details>
<summary>redis/jedis (redis.clients:jedis)</summary>

### [`v5.2.0`](https://github.com/redis/jedis/releases/tag/v5.2.0):
5.2.0 GA

#### Enhanced Client-side caching

We are happy to announce that improved [server-assisted, client-side
caching](https://redis.io/docs/manual/client-side-caching/) is now
generally available! Special thanks to all our beta testers for their
valuable feedback, which helped us refine and improve the initial
implementation.

Client-side caching is supported exclusively with the RESP3 protocol
with Redis >= 7.4 and is available in UnifiedJedis, JedisPooled, and
JedisCluster and other classes.

##### How to try Client-Side Caching

1. [Install
Jedis](https://redis.io/docs/connect/clients/java/jedis/#install)
**5.2.0**
2.  Use the following code example to get started:

```java
public class CSCExampleTest {
  public static void main() {

    HostAndPort node = HostAndPort.from("localhost:6379");
    JedisClientConfig clientConfig = DefaultJedisClientConfig.builder()
        .resp3()                // RESP3 protocol is required for client-side caching
        //.user("myuser")       // Redis server username (optional)
        //.password("mypass")   // Redis user's password (optional)
        .build();

    CacheConfig cacheConfig = getCacheConfig();
    Cache cache = CacheFactory.getCache(cacheConfig);

    try (UnifiedJedis client = new UnifiedJedis(node, clientConfig, cache)) {
      client.set("foo", "bar");
      client.get("foo");
      client.get("foo"); // Cache hit

      System.out.println("Cache size: " + cache.getSize()); // 1
      System.out.println(cache.getStats().toString());

      //Let's change the value of "foo" to invalidate the value stored in the local cache
      client.mset("foo", "new_value", "ignore_me:1", "another_value");

      Thread.sleep(1000); // wait for the cache invalidation to happen

      System.out.println(client.get("foo")); // Cache miss
      System.out.println(cache.getStats().toString());

      client.get("ignore_me:1"); // Client will ignore this key

      System.out.println("Cache size: " + cache.getSize()); // still 1

      // check the cache stats
      System.out.println(cache.getStats().toString());

    } catch (InterruptedException e) {
      throw new RuntimeException(e);
    }
  }

  private static CacheConfig getCacheConfig() {

    // This is a simple cacheable implementation that ignores keys starting with "ignore_me"
    Cacheable cacheable = new DefaultCacheable() {

      final String IGNORE_PREFIX = "ignore_me";

      @&#8203;Override
      public boolean isCacheable(ProtocolCommand command, List<Object> keys) {
        // assuming we'll only execute methods with string keys
        List<String> stringKeys = keys.stream()
            .filter(obj -> obj instanceof String)
            .map(obj -> (String) obj)
            .collect(Collectors.toList());

        for (String key : stringKeys) {
          if (key.startsWith(IGNORE_PREFIX)) {
            return false;
          }
        }

        return isDefaultCacheableCommand(command);
      }
    };

    // Create a cache with a maximum size of 10000 entries
    return CacheConfig.builder()
        .maxSize(10000)
        .cacheable(cacheable)
        .build();
  }
}
```

It is possible to limit or ignore commands or keys for client-side
caching. The `getCacheConfig` method presented above provides an example
of how to achieve that.

#### 🔥 Breaking Changes

- JedisConnectionException contains HostAndPort from
DefaultJedisSocketFactory
([#&#8203;3896](https://github.com/redis/jedis/issues/3896))
- Address change in JSON.GET command without path
([#&#8203;3858](https://github.com/redis/jedis/issues/3858))
- Modify and fail-fast GeoSearchParam
([#&#8203;3827](https://github.com/redis/jedis/issues/3827))
- Support transaction from UnifiedJedis without calling multi first
([#&#8203;3804](https://github.com/redis/jedis/issues/3804))
- Reduce the log level of validateObject to WARN
([#&#8203;3750](https://github.com/redis/jedis/issues/3750))

#### 🧪 Experimental Features

- Support automatic namespacing
([#&#8203;3781](https://github.com/redis/jedis/issues/3781))
- Added support for ADDSCORES argument in FT.AGGREGATE
([#&#8203;3908](https://github.com/redis/jedis/issues/3908))
- Support IGNORE and other optional arguments for timeseries commands
([#&#8203;3860](https://github.com/redis/jedis/issues/3860))

#### 🚀 New Features

- Support Hash field expiration
([#&#8203;3826](https://github.com/redis/jedis/issues/3826))
- Add equals and hashCode to Timeseries Params classes
([#&#8203;3959](https://github.com/redis/jedis/issues/3959))
- Decoding FT.SEARCH reply can be disabled at field level
([#&#8203;3926](https://github.com/redis/jedis/issues/3926))
- Get enriched Connection information
([#&#8203;3745](https://github.com/redis/jedis/issues/3745))
- Support execute the read-only command on replica nodes
([#&#8203;3848](https://github.com/redis/jedis/issues/3848))
- JedisConnectionException contains HostAndPort from
DefaultJedisSocketFactory
([#&#8203;3896](https://github.com/redis/jedis/issues/3896))
- Support \[S]PUBLISH in pipelines and transactions
([#&#8203;3859](https://github.com/redis/jedis/issues/3859))
- Support Hash field expiration
([#&#8203;3826](https://github.com/redis/jedis/issues/3826))
- Custom connection pool to MultiClusterPooledConnectionProvider
([#&#8203;3801](https://github.com/redis/jedis/issues/3801))
- PubSub handle array of messages for RESP2
([#&#8203;3811](https://github.com/redis/jedis/issues/3811))
- Support transaction from UnifiedJedis without calling multi first
([#&#8203;3804](https://github.com/redis/jedis/issues/3804))
- Add last entry id for XREADs and support XREADs reply as map
([#&#8203;3791](https://github.com/redis/jedis/issues/3791))
- Add Experimental, Internal and VisibleForTesting annotations
([#&#8203;3790](https://github.com/redis/jedis/issues/3790))
- Implement equals and hashcode in Params classes
([#&#8203;3728](https://github.com/redis/jedis/issues/3728))
- Add support for redis command: CLIENT TRACKINGINFO
([#&#8203;3751](https://github.com/redis/jedis/issues/3751))
- Support the MAXAGE option for CLIENT KILL
([#&#8203;3754](https://github.com/redis/jedis/issues/3754))
- Polish [#&#8203;3741](https://github.com/redis/jedis/issues/3741)
([#&#8203;3746](https://github.com/redis/jedis/issues/3746))
- Add support for the NOVALUES option of HSCAN
([#&#8203;3741](https://github.com/redis/jedis/issues/3741))
- Support issuing Latency commands
([#&#8203;3729](https://github.com/redis/jedis/issues/3729))

#### 🐛 Bug Fixes

- Accept null replies for BZPOPMAX and BZPOPMIN commands
([#&#8203;3930](https://github.com/redis/jedis/issues/3930))
- Fix empty LUA table reply
([#&#8203;3924](https://github.com/redis/jedis/issues/3924))
- Ensure closing connection in Pipeline
([#&#8203;3865](https://github.com/redis/jedis/issues/3865))
- Address change in JSON.GET command without path
([#&#8203;3858](https://github.com/redis/jedis/issues/3858))
- Consider null values in empty StreamPendingSummary
([#&#8203;3793](https://github.com/redis/jedis/issues/3793))
- Fix UnifiedJedis pexpireAt glitch
([#&#8203;3782](https://github.com/redis/jedis/issues/3782))
- Use expiryOption in PipelineBase.expireAt
([#&#8203;3777](https://github.com/redis/jedis/issues/3777))
- Stop connection fetching before sync/exec
([#&#8203;3756](https://github.com/redis/jedis/issues/3756))
- Check for thread interrupt in subscribe process of PubSub
([#&#8203;3726](https://github.com/redis/jedis/issues/3726))
- Avoid NPE in MultiNodePipelineBase.java
([#&#8203;3697](https://github.com/redis/jedis/issues/3697))
- Fix probable missing (RESP3) protocol processing
([#&#8203;3692](https://github.com/redis/jedis/issues/3692))
- Use circuit breaker fallback exception list
([#&#8203;3664](https://github.com/redis/jedis/issues/3664))

#### 🧰 Maintenance

- Deprecate Triggers and Functions feature
([#&#8203;3968](https://github.com/redis/jedis/issues/3968))
- Bump org.apache.httpcomponents.client5:httpclient5-fluent from 5.3.1
to 5.4 ([#&#8203;3962](https://github.com/redis/jedis/issues/3962))
- Bump org.apache.maven.plugins:maven-surefire-plugin from 3.3.1 to
3.5.0 ([#&#8203;3950](https://github.com/redis/jedis/issues/3950))
- Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.8.0 to
3.10.0 ([#&#8203;3949](https://github.com/redis/jedis/issues/3949))
- Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.5 to 3.2.6
([#&#8203;3957](https://github.com/redis/jedis/issues/3957))
- Added JavaDoc for basic JedisCluster constructors
([#&#8203;3304](https://github.com/redis/jedis/issues/3304))
- Bump org.locationtech.jts:jts-core from 1.19.0 to 1.20.0
([#&#8203;3948](https://github.com/redis/jedis/issues/3948))
- Add A-A failover scenario test
([#&#8203;3935](https://github.com/redis/jedis/issues/3935))
- Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.4 to 3.2.5
([#&#8203;3936](https://github.com/redis/jedis/issues/3936))
- Fix codecov upload
([#&#8203;3933](https://github.com/redis/jedis/issues/3933))
- Rename readonly config param to specify Redis Cluster
([#&#8203;3932](https://github.com/redis/jedis/issues/3932))
- Modify Connection.toIdentityString and test
([#&#8203;3931](https://github.com/redis/jedis/issues/3931))
- Revert "Creating CODEOWNERS for the examples
([#&#8203;3570](https://github.com/redis/jedis/issues/3570))"
([#&#8203;3897](https://github.com/redis/jedis/issues/3897))
- Bump org.apache.maven.plugins:maven-surefire-plugin from 3.2.5 to
3.3.1 ([#&#8203;3891](https://github.com/redis/jedis/issues/3891))
- Bump org.hamcrest:hamcrest from 2.2 to 3.0
([#&#8203;3914](https://github.com/redis/jedis/issues/3914))
- Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.7.0 to 3.8.0
([#&#8203;3909](https://github.com/redis/jedis/issues/3909))
- Bump net.javacrumbs.json-unit:json-unit from 2.38.0 to 2.40.1
([#&#8203;3903](https://github.com/redis/jedis/issues/3903))
- Bump org.apache.maven.plugins:maven-release-plugin from 3.0.1 to 3.1.1
([#&#8203;3890](https://github.com/redis/jedis/issues/3890))
- Fixed typo in Javadoc
([#&#8203;3917](https://github.com/redis/jedis/issues/3917))
- Bump org.apache.maven.plugins:maven-jar-plugin from 3.4.1 to 3.4.2
([#&#8203;3910](https://github.com/redis/jedis/issues/3910))
- Bump com.kohlschutter.junixsocket:junixsocket-core from 2.9.1 to
2.10.0 ([#&#8203;3901](https://github.com/redis/jedis/issues/3901))
- Bump jackson.version from 2.17.1 to 2.17.2
([#&#8203;3902](https://github.com/redis/jedis/issues/3902))
- Add Scenario tests
([#&#8203;3847](https://github.com/redis/jedis/issues/3847))
- Modify the judgment that reads a response as empty to isEmpty method
([#&#8203;3888](https://github.com/redis/jedis/issues/3888))
- Replace `synchronized` with `j.u.c.l.ReentrantLock` for Loom
([#&#8203;3480](https://github.com/redis/jedis/issues/3480))
- Extract messages of unsupported exception as constants
([#&#8203;3887](https://github.com/redis/jedis/issues/3887))
- Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.6.3 to 3.7.0
([#&#8203;3851](https://github.com/redis/jedis/issues/3851))
- Bump org.sonatype.plugins:nexus-staging-maven-plugin from 1.6.13 to
1.7.0 ([#&#8203;3850](https://github.com/redis/jedis/issues/3850))
- Bump com.google.code.gson:gson from 2.10.1 to 2.11.0
([#&#8203;3842](https://github.com/redis/jedis/issues/3842))
- Merge doc tests into main branch to keep in-sync with the code
([#&#8203;3861](https://github.com/redis/jedis/issues/3861))
- Deprecate unused Set<Tuple> builders
([#&#8203;3857](https://github.com/redis/jedis/issues/3857))
- Disable Redis Graph tests
([#&#8203;3856](https://github.com/redis/jedis/issues/3856))
- Introduce EndpointConfig and load endpoint settings from the
endpoints.json file
([#&#8203;3836](https://github.com/redis/jedis/issues/3836))
- Address Gears test fail - Cleanup Function libraries
([#&#8203;3840](https://github.com/redis/jedis/issues/3840))
- Bump jackson.version from 2.17.0 to 2.17.1
([#&#8203;3833](https://github.com/redis/jedis/issues/3833))
- Add methods in CommandArguments and RawableFactory
([#&#8203;3834](https://github.com/redis/jedis/issues/3834))
- Modify and fail-fast GeoSearchParam
([#&#8203;3827](https://github.com/redis/jedis/issues/3827))
- Bump org.apache.maven.plugins:maven-jar-plugin from 3.4.0 to 3.4.1
([#&#8203;3822](https://github.com/redis/jedis/issues/3822))
- Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.3 to 3.2.4
([#&#8203;3823](https://github.com/redis/jedis/issues/3823))
- Bump org.apache.maven.plugins:maven-jar-plugin from 3.3.0 to 3.4.0
([#&#8203;3819](https://github.com/redis/jedis/issues/3819))
- Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.2 to 3.2.3
([#&#8203;3818](https://github.com/redis/jedis/issues/3818))
- Add more tests for the CommandObjects class
([#&#8203;3809](https://github.com/redis/jedis/issues/3809))
- Resolve compile warnings
([#&#8203;3810](https://github.com/redis/jedis/issues/3810))
- Bump com.kohlschutter.junixsocket:junixsocket-core from 2.9.0 to 2.9.1
([#&#8203;3806](https://github.com/redis/jedis/issues/3806))
- Bump org.jacoco:jacoco-maven-plugin from 0.8.11 to 0.8.12
([#&#8203;3805](https://github.com/redis/jedis/issues/3805))
- Bump org.apache.maven.plugins:maven-source-plugin from 3.3.0 to 3.3.1
([#&#8203;3807](https://github.com/redis/jedis/issues/3807))
- Deprecate unused JSON.ARRAPPEND in CommandObjects
([#&#8203;3798](https://github.com/redis/jedis/issues/3798))
- Extensive unit tests for the CommandObjects class
([#&#8203;3796](https://github.com/redis/jedis/issues/3796))
- Add extensive tests for UnifiedJedis
([#&#8203;3788](https://github.com/redis/jedis/issues/3788))
- Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.1 to 3.2.2
([#&#8203;3794](https://github.com/redis/jedis/issues/3794))
- Add Experimental, Internal and VisibleForTesting annotations
([#&#8203;3790](https://github.com/redis/jedis/issues/3790))
- Add TS.INFO \[DEGUB] and CF.MEXISTS in pipelined commands
([#&#8203;3787](https://github.com/redis/jedis/issues/3787))
- Bump org.apache.maven.plugins:maven-compiler-plugin from 3.12.1 to
3.13.0 ([#&#8203;3786](https://github.com/redis/jedis/issues/3786))
- Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.0 to 3.2.1
([#&#8203;3785](https://github.com/redis/jedis/issues/3785))
- Pipelined tests for lists and sets, and API typo fix
([#&#8203;3772](https://github.com/redis/jedis/issues/3772))
- Extensive unit tests for PipeliningBase
([#&#8203;3778](https://github.com/redis/jedis/issues/3778))
- Bump jackson.version from 2.16.2 to 2.17.0
([#&#8203;3776](https://github.com/redis/jedis/issues/3776))
- Bump org.apache.maven.plugins:maven-gpg-plugin from 3.1.0 to 3.2.0
([#&#8203;3775](https://github.com/redis/jedis/issues/3775))
- Fix typo in SetPipelineCommands method name
([#&#8203;3773](https://github.com/redis/jedis/issues/3773))
- Streamline test execution
([#&#8203;3760](https://github.com/redis/jedis/issues/3760))
- Add pipelined tests for sorted sets
([#&#8203;3771](https://github.com/redis/jedis/issues/3771))
- Geo pipelined tests
([#&#8203;3767](https://github.com/redis/jedis/issues/3767))
- Reenable clustering tests
([#&#8203;3764](https://github.com/redis/jedis/issues/3764))
- GETSET command is deprecated since Redis 6.2.0
([#&#8203;3768](https://github.com/redis/jedis/issues/3768))
- Add tests for Stream pipelined commands
([#&#8203;3763](https://github.com/redis/jedis/issues/3763))
- Bump jackson.version from 2.16.1 to 2.16.2
([#&#8203;3762](https://github.com/redis/jedis/issues/3762))
- Bump org.json:json from
[`2024020`](https://github.com/redis/jedis/commit/20240205) to
[`2024030`](https://github.com/redis/jedis/commit/20240303)
([#&#8203;3752](https://github.com/redis/jedis/issues/3752))
- Add Hashes pipeline commands unit tests
([#&#8203;3288](https://github.com/redis/jedis/issues/3288))
- Add unit tests for pipelining - migrate and db commands
([#&#8203;3759](https://github.com/redis/jedis/issues/3759))
- Reduce the log level of validateObject to WARN
([#&#8203;3750](https://github.com/redis/jedis/issues/3750))
- Bump org.json:json from
[`2023101`](https://github.com/redis/jedis/commit/20231013) to
[`2024020`](https://github.com/redis/jedis/commit/20240205)
([#&#8203;3706](https://github.com/redis/jedis/issues/3706))
- Bump com.kohlschutter.junixsocket:junixsocket-core from 2.8.3 to 2.9.0
([#&#8203;3724](https://github.com/redis/jedis/issues/3724))
-   Running doctests also on emb-examples ([#&

</details>

GitOrigin-RevId: 8a275b1c484ffdcd889591afa909c0ac94f02667
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants