Compare commits

...

336 Commits

Author SHA1 Message Date
dependabot[bot] 8e72ab3da0 build(deps): bump grpc from 1.73.0 to 1.74.0
Bumps `grpc` from 1.73.0 to 1.74.0.

Updates `io.grpc:grpc-core` from 1.73.0 to 1.74.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.73.0...v1.74.0)

Updates `io.grpc:grpc-netty` from 1.73.0 to 1.74.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.73.0...v1.74.0)

Updates `io.grpc:grpc-protobuf` from 1.73.0 to 1.74.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.73.0...v1.74.0)

Updates `io.grpc:grpc-stub` from 1.73.0 to 1.74.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.73.0...v1.74.0)

Updates `io.grpc:grpc-grpclb` from 1.73.0 to 1.74.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.73.0...v1.74.0)

Updates `io.grpc:grpc-inprocess` from 1.73.0 to 1.74.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.73.0...v1.74.0)

Updates `io.grpc:grpc-util` from 1.73.0 to 1.74.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.73.0...v1.74.0)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-version: 1.74.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-version: 1.74.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-protobuf
  dependency-version: 1.74.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-version: 1.74.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-grpclb
  dependency-version: 1.74.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-inprocess
  dependency-version: 1.74.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-util
  dependency-version: 1.74.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-03 21:33:58 +02:00
dependabot[bot] 3be6978e23 build(deps): bump org.apache.commons:commons-compress
Bumps [org.apache.commons:commons-compress](https://github.com/apache/commons-compress) from 1.27.1 to 1.28.0.
- [Changelog](https://github.com/apache/commons-compress/blob/master/RELEASE-NOTES.txt)
- [Commits](https://github.com/apache/commons-compress/compare/rel/commons-compress-1.27.1...rel/commons-compress-1.28.0)

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-version: 1.28.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-03 21:33:38 +02:00
yunpeng.hu 9b4c9dd2ce fix 2025-07-28 22:01:18 +02:00
Michael Vorburger 03a3b994e6 chore: Remove xiang90@ and heyitsanthony@ from OWNERS
See https://github.com/etcd-io/jetcd/pull/1487#discussion_r2178670309.

Signed-off-by: Michael Vorburger <mike@vorburger.ch>
2025-07-23 14:06:55 +02:00
Michael Vorburger 10a335bf5f chore: Add vorburger to OWNERS
See https://github.com/etcd-io/jetcd/issues/1486,

for https://github.com/kubernetes/org/issues/5665.

Signed-off-by: Michael Vorburger <mike@vorburger.ch>
2025-07-23 14:06:55 +02:00
Lan fd240de17e chore: add ci for etcd 3.6.0 and drop 3.4
Signed-off-by: Lan <gcslyp@gmail.com>
2025-07-23 14:06:22 +02:00
dependabot[bot] 602feaf479 build(deps): bump org.junit.jupiter:junit-jupiter from 5.13.3 to 5.13.4
Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit-framework) from 5.13.3 to 5.13.4.
- [Release notes](https://github.com/junit-team/junit-framework/releases)
- [Commits](https://github.com/junit-team/junit-framework/compare/r5.13.3...r5.13.4)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-version: 5.13.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-21 22:32:17 +02:00
dependabot[bot] 4489b3f8da build(deps): bump commons-io:commons-io from 2.19.0 to 2.20.0
Bumps [commons-io:commons-io](https://github.com/apache/commons-io) from 2.19.0 to 2.20.0.
- [Changelog](https://github.com/apache/commons-io/blob/master/RELEASE-NOTES.txt)
- [Commits](https://github.com/apache/commons-io/compare/rel/commons-io-2.19.0...rel/commons-io-2.20.0)

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-version: 2.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-21 22:13:28 +02:00
dependabot[bot] 40425c35d5 build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.21.0 to 1.21.3.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.21.0...1.21.3)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-version: 1.21.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-15 08:02:36 +02:00
dependabot[bot] 990a5ea690 build(deps): bump log4j from 2.24.3 to 2.25.1
Bumps `log4j` from 2.24.3 to 2.25.1.

Updates `org.apache.logging.log4j:log4j-api` from 2.24.3 to 2.25.1

Updates `org.apache.logging.log4j:log4j-core` from 2.24.3 to 2.25.1

Updates `org.apache.logging.log4j:log4j-slf4j2-impl` from 2.24.3 to 2.25.1

Updates `org.apache.logging.log4j:log4j-1.2-api` from 2.24.3 to 2.25.1

---
updated-dependencies:
- dependency-name: org.apache.logging.log4j:log4j-api
  dependency-version: 2.25.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-core
  dependency-version: 2.25.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-slf4j2-impl
  dependency-version: 2.25.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-1.2-api
  dependency-version: 2.25.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-15 08:01:51 +02:00
dependabot[bot] 6843e47a96 build(deps): bump org.junit.jupiter:junit-jupiter from 5.13.2 to 5.13.3
Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit-framework) from 5.13.2 to 5.13.3.
- [Release notes](https://github.com/junit-team/junit-framework/releases)
- [Commits](https://github.com/junit-team/junit-framework/compare/r5.13.2...r5.13.3)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-version: 5.13.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-05 18:12:29 +09:00
dependabot[bot] 5a83bdb482 build(deps): bump mockito from 5.17.0 to 5.18.0
Bumps `mockito` from 5.17.0 to 5.18.0.

Updates `org.mockito:mockito-core` from 5.17.0 to 5.18.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.17.0...v5.18.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.17.0 to 5.18.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.17.0...v5.18.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-version: 5.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-version: 5.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-01 08:13:28 +09:00
dependabot[bot] 5f0ee26f3b build(deps): bump io.vertx:vertx-grpc from 4.5.14 to 5.0.1
Bumps [io.vertx:vertx-grpc](https://github.com/vert-x3/vertx-grpc) from 4.5.14 to 5.0.1.
- [Commits](https://github.com/vert-x3/vertx-grpc/compare/4.5.14...5.0.1)

---
updated-dependencies:
- dependency-name: io.vertx:vertx-grpc
  dependency-version: 5.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-01 07:55:53 +09:00
dependabot[bot] 80b72b0b2a build(deps): bump grpc from 1.72.0 to 1.73.0
Bumps `grpc` from 1.72.0 to 1.73.0.

Updates `io.grpc:grpc-core` from 1.72.0 to 1.73.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.72.0...v1.73.0)

Updates `io.grpc:grpc-netty` from 1.72.0 to 1.73.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.72.0...v1.73.0)

Updates `io.grpc:grpc-protobuf` from 1.72.0 to 1.73.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.72.0...v1.73.0)

Updates `io.grpc:grpc-stub` from 1.72.0 to 1.73.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.72.0...v1.73.0)

Updates `io.grpc:grpc-grpclb` from 1.72.0 to 1.73.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.72.0...v1.73.0)

Updates `io.grpc:grpc-inprocess` from 1.72.0 to 1.73.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.72.0...v1.73.0)

Updates `io.grpc:grpc-util` from 1.72.0 to 1.73.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.72.0...v1.73.0)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-version: 1.73.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-version: 1.73.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-protobuf
  dependency-version: 1.73.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-version: 1.73.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-grpclb
  dependency-version: 1.73.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-inprocess
  dependency-version: 1.73.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-util
  dependency-version: 1.73.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-01 07:48:50 +09:00
dependabot[bot] 98307934fe build(deps): bump io.rest-assured:rest-assured from 5.5.1 to 5.5.5
Bumps [io.rest-assured:rest-assured](https://github.com/rest-assured/rest-assured) from 5.5.1 to 5.5.5.
- [Changelog](https://github.com/rest-assured/rest-assured/blob/master/changelog.txt)
- [Commits](https://github.com/rest-assured/rest-assured/compare/rest-assured-5.5.1...rest-assured-5.5.5)

---
updated-dependencies:
- dependency-name: io.rest-assured:rest-assured
  dependency-version: 5.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-01 07:47:32 +09:00
dependabot[bot] a3f85475a2 build(deps): bump org.junit.jupiter:junit-jupiter from 5.12.2 to 5.13.2
Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit-framework) from 5.12.2 to 5.13.2.
- [Release notes](https://github.com/junit-team/junit-framework/releases)
- [Commits](https://github.com/junit-team/junit-framework/compare/r5.12.2...r5.13.2)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-version: 5.13.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-01 07:46:13 +09:00
dependabot[bot] 579e05b634 build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.20.6 to 1.21.0.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.20.6...1.21.0)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-version: 1.21.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-28 21:33:20 +02:00
dependabot[bot] 43f0f23122 build(deps): bump commons-io:commons-io from 2.18.0 to 2.19.0
Bumps commons-io:commons-io from 2.18.0 to 2.19.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-version: 2.19.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-28 21:33:12 +02:00
dependabot[bot] 81ea44b082 build(deps): bump info.picocli:picocli from 4.7.6 to 4.7.7
Bumps [info.picocli:picocli](https://github.com/remkop/picocli) from 4.7.6 to 4.7.7.
- [Release notes](https://github.com/remkop/picocli/releases)
- [Changelog](https://github.com/remkop/picocli/blob/main/RELEASE-NOTES.md)
- [Commits](https://github.com/remkop/picocli/compare/v4.7.6...v4.7.7)

---
updated-dependencies:
- dependency-name: info.picocli:picocli
  dependency-version: 4.7.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-28 21:33:03 +02:00
dependabot[bot] c41c3fdc68 build(deps): bump grpc from 1.71.0 to 1.72.0
Bumps `grpc` from 1.71.0 to 1.72.0.

Updates `io.grpc:grpc-core` from 1.71.0 to 1.72.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.71.0...v1.72.0)

Updates `io.grpc:grpc-netty` from 1.71.0 to 1.72.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.71.0...v1.72.0)

Updates `io.grpc:grpc-protobuf` from 1.71.0 to 1.72.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.71.0...v1.72.0)

Updates `io.grpc:grpc-stub` from 1.71.0 to 1.72.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.71.0...v1.72.0)

Updates `io.grpc:grpc-grpclb` from 1.71.0 to 1.72.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.71.0...v1.72.0)

Updates `io.grpc:grpc-inprocess` from 1.71.0 to 1.72.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.71.0...v1.72.0)

Updates `io.grpc:grpc-util` from 1.71.0 to 1.72.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.71.0...v1.72.0)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-version: 1.72.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-version: 1.72.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-protobuf
  dependency-version: 1.72.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-version: 1.72.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-grpclb
  dependency-version: 1.72.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-inprocess
  dependency-version: 1.72.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-util
  dependency-version: 1.72.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-28 21:32:54 +02:00
Luca Burgazzoli e852bd921d Update deps
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2025-04-28 13:51:24 +02:00
dependabot[bot] 8dd9d3504e build(deps): bump mockito from 5.16.1 to 5.17.0
Bumps `mockito` from 5.16.1 to 5.17.0.

Updates `org.mockito:mockito-core` from 5.16.1 to 5.17.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.16.1...v5.17.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.16.1 to 5.17.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.16.1...v5.17.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-version: 5.17.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-version: 5.17.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-28 13:13:45 +02:00
dependabot[bot] c468ab4dd8 build(deps): bump io.vertx:vertx-grpc from 4.5.13 to 4.5.14
Bumps io.vertx:vertx-grpc from 4.5.13 to 4.5.14.

---
updated-dependencies:
- dependency-name: io.vertx:vertx-grpc
  dependency-version: 4.5.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-28 13:13:35 +02:00
dependabot[bot] 08f3c274cc build(deps): bump com.google.protobuf from 0.9.4 to 0.9.5
Bumps com.google.protobuf from 0.9.4 to 0.9.5.

---
updated-dependencies:
- dependency-name: com.google.protobuf
  dependency-version: 0.9.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-28 13:13:25 +02:00
Chih-Chieh Huang a2c1db0279 core: user provided vertx instance for ClientConnectionManager
This allows user to provide Vertx instance instead of creating a new one

Fixs #1467

Signed-off-by: Chih-Chieh Huang <cchdroid@gmail.com>
2025-04-28 13:13:12 +02:00
dependabot[bot] a65e765e36 build(deps): bump mockito from 5.16.0 to 5.16.1
Bumps `mockito` from 5.16.0 to 5.16.1.

Updates `org.mockito:mockito-core` from 5.16.0 to 5.16.1
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.16.0...v5.16.1)

Updates `org.mockito:mockito-junit-jupiter` from 5.16.0 to 5.16.1
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.16.0...v5.16.1)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-24 08:04:55 +01:00
dependabot[bot] 280a445773 build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.20.5 to 1.20.6.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.20.5...1.20.6)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-24 08:04:44 +01:00
dependabot[bot] d498294fca build(deps): bump grpc from 1.70.0 to 1.71.0
Bumps `grpc` from 1.70.0 to 1.71.0.

Updates `io.grpc:grpc-core` from 1.70.0 to 1.71.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.70.0...v1.71.0)

Updates `io.grpc:grpc-netty` from 1.70.0 to 1.71.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.70.0...v1.71.0)

Updates `io.grpc:grpc-protobuf` from 1.70.0 to 1.71.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.70.0...v1.71.0)

Updates `io.grpc:grpc-stub` from 1.70.0 to 1.71.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.70.0...v1.71.0)

Updates `io.grpc:grpc-grpclb` from 1.70.0 to 1.71.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.70.0...v1.71.0)

Updates `io.grpc:grpc-inprocess` from 1.70.0 to 1.71.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.70.0...v1.71.0)

Updates `io.grpc:grpc-util` from 1.70.0 to 1.71.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.70.0...v1.71.0)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-inprocess
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-util
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-24 08:04:34 +01:00
dependabot[bot] 81ebd3a3fe build(deps): bump mockito from 5.15.2 to 5.16.0
Bumps `mockito` from 5.15.2 to 5.16.0.

Updates `org.mockito:mockito-core` from 5.15.2 to 5.16.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.15.2...v5.16.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.15.2 to 5.16.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.15.2...v5.16.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-05 19:35:28 +01:00
Luca Burgazzoli 9a0d2f4076
Update README 2025-03-03 11:17:32 +01:00
Luca Burgazzoli 61a21a2d7c
Update deps 2025-03-03 10:55:26 +01:00
Luca Burgazzoli 69c2ec3d03
Update deps 2025-03-03 10:52:04 +01:00
dependabot[bot] 59ff5091cc build(deps): bump org.slf4j:slf4j-api from 2.0.16 to 2.0.17
Bumps org.slf4j:slf4j-api from 2.0.16 to 2.0.17.

---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 10:04:25 +01:00
dependabot[bot] 098cf0f8bc build(deps): bump org.awaitility:awaitility from 4.2.2 to 4.3.0
Bumps [org.awaitility:awaitility](https://github.com/awaitility/awaitility) from 4.2.2 to 4.3.0.
- [Changelog](https://github.com/awaitility/awaitility/blob/master/changelog.txt)
- [Commits](https://github.com/awaitility/awaitility/compare/awaitility-4.2.2...awaitility-4.3.0)

---
updated-dependencies:
- dependency-name: org.awaitility:awaitility
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 10:04:17 +01:00
dependabot[bot] e68613fb6b build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.20.4 to 1.20.5.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.20.4...1.20.5)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 10:04:08 +01:00
dependabot[bot] 59337b388b build(deps): bump io.rest-assured:rest-assured from 5.5.0 to 5.5.1
Bumps [io.rest-assured:rest-assured](https://github.com/rest-assured/rest-assured) from 5.5.0 to 5.5.1.
- [Changelog](https://github.com/rest-assured/rest-assured/blob/master/changelog.txt)
- [Commits](https://github.com/rest-assured/rest-assured/compare/rest-assured-5.5.0...rest-assured-5.5.1)

---
updated-dependencies:
- dependency-name: io.rest-assured:rest-assured
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-19 08:57:23 +01:00
dependabot[bot] 9f1a90cc6a build(deps): bump io.vertx:vertx-grpc from 4.5.11 to 4.5.13
Bumps io.vertx:vertx-grpc from 4.5.11 to 4.5.13.

---
updated-dependencies:
- dependency-name: io.vertx:vertx-grpc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-18 14:12:44 +01:00
dependabot[bot] 2e34d10d24 build(deps): bump grpc from 1.68.1 to 1.70.0
Bumps `grpc` from 1.68.1 to 1.70.0.

Updates `io.grpc:grpc-core` from 1.68.1 to 1.70.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.68.1...v1.70.0)

Updates `io.grpc:grpc-netty` from 1.68.1 to 1.70.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.68.1...v1.70.0)

Updates `io.grpc:grpc-protobuf` from 1.68.1 to 1.70.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.68.1...v1.70.0)

Updates `io.grpc:grpc-stub` from 1.68.1 to 1.70.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.68.1...v1.70.0)

Updates `io.grpc:grpc-grpclb` from 1.68.1 to 1.70.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.68.1...v1.70.0)

Updates `io.grpc:grpc-inprocess` from 1.68.1 to 1.70.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.68.1...v1.70.0)

Updates `io.grpc:grpc-util` from 1.68.1 to 1.70.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.68.1...v1.70.0)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-inprocess
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-util
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-18 14:12:35 +01:00
dependabot[bot] 11f45ec3fc build(deps): bump mockito from 5.14.2 to 5.15.2
Bumps `mockito` from 5.14.2 to 5.15.2.

Updates `org.mockito:mockito-core` from 5.14.2 to 5.15.2
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.14.2...v5.15.2)

Updates `org.mockito:mockito-junit-jupiter` from 5.14.2 to 5.15.2
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.14.2...v5.15.2)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-18 14:12:17 +01:00
dependabot[bot] 3a7740fa92 build(deps): bump com.google.guava:guava from 33.3.1-jre to 33.4.0-jre
Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.3.1-jre to 33.4.0-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-18 14:12:08 +01:00
dependabot[bot] b7293499a4 build(deps): bump org.junit.jupiter:junit-jupiter from 5.11.3 to 5.11.4
Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.11.3 to 5.11.4.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.11.3...r5.11.4)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-18 14:11:53 +01:00
Cristian Ferretti 08def01ee1 Wording. 2025-02-18 14:11:34 +01:00
Cristian Ferretti 05f92e0443 Do not retry by default non-idempotent operations. Fixes #1444
Also use the chance to improve javadoc on some *Options objects

Signed-off-by: Cristian Ferretti <jcferretti2020@gmail.com>
2025-02-18 14:11:34 +01:00
dependabot[bot] a240dc6a74 build(deps): bump log4j from 2.24.2 to 2.24.3
Bumps `log4j` from 2.24.2 to 2.24.3.

Updates `org.apache.logging.log4j:log4j-api` from 2.24.2 to 2.24.3

Updates `org.apache.logging.log4j:log4j-core` from 2.24.2 to 2.24.3

Updates `org.apache.logging.log4j:log4j-slf4j2-impl` from 2.24.2 to 2.24.3

Updates `org.apache.logging.log4j:log4j-1.2-api` from 2.24.2 to 2.24.3

---
updated-dependencies:
- dependency-name: org.apache.logging.log4j:log4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-slf4j2-impl
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-1.2-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-20 21:14:13 +01:00
dependabot[bot] 8ee9c1573e build(deps): bump org.assertj:assertj-core from 3.26.3 to 3.27.3
Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.26.3 to 3.27.3.
- [Release notes](https://github.com/assertj/assertj/releases)
- [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.26.3...assertj-build-3.27.3)

---
updated-dependencies:
- dependency-name: org.assertj:assertj-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-20 21:13:37 +01:00
dependabot[bot] 0dad061111 build(deps): bump log4j from 2.24.1 to 2.24.2
Bumps `log4j` from 2.24.1 to 2.24.2.

Updates `org.apache.logging.log4j:log4j-api` from 2.24.1 to 2.24.2

Updates `org.apache.logging.log4j:log4j-core` from 2.24.1 to 2.24.2

Updates `org.apache.logging.log4j:log4j-slf4j2-impl` from 2.24.1 to 2.24.2

Updates `org.apache.logging.log4j:log4j-1.2-api` from 2.24.1 to 2.24.2

---
updated-dependencies:
- dependency-name: org.apache.logging.log4j:log4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-slf4j2-impl
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-1.2-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-27 07:48:00 +01:00
dependabot[bot] dab6c4cb2d build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.20.3 to 1.20.4.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.20.3...1.20.4)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-21 07:53:40 +01:00
dependabot[bot] befcdc538d build(deps): bump commons-io:commons-io from 2.17.0 to 2.18.0
Bumps commons-io:commons-io from 2.17.0 to 2.18.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-21 07:53:32 +01:00
Luca Burgazzoli 8a6c463341
Fix README 2024-11-14 09:37:13 +01:00
Luca Burgazzoli 01a2014b54 Update deps
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2024-11-14 09:28:50 +01:00
dependabot[bot] acbfa6f434 build(deps): bump io.vertx:vertx-grpc from 4.5.10 to 4.5.11
Bumps io.vertx:vertx-grpc from 4.5.10 to 4.5.11.

---
updated-dependencies:
- dependency-name: io.vertx:vertx-grpc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-13 21:32:21 +01:00
dependabot[bot] d2005ada3f build(deps): bump mockito from 5.13.0 to 5.14.2
Bumps `mockito` from 5.13.0 to 5.14.2.

Updates `org.mockito:mockito-core` from 5.13.0 to 5.14.2
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.13.0...v5.14.2)

Updates `org.mockito:mockito-junit-jupiter` from 5.13.0 to 5.14.2
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.13.0...v5.14.2)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-31 09:37:25 +01:00
dependabot[bot] 327a37bbc9 build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.20.1 to 1.20.3.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.20.1...1.20.3)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-31 09:37:16 +01:00
dependabot[bot] 8f182d4b8e build(deps): bump log4j from 2.23.1 to 2.24.1
Bumps `log4j` from 2.23.1 to 2.24.1.

Updates `org.apache.logging.log4j:log4j-api` from 2.23.1 to 2.24.1

Updates `org.apache.logging.log4j:log4j-core` from 2.23.1 to 2.24.1

Updates `org.apache.logging.log4j:log4j-slf4j2-impl` from 2.23.1 to 2.24.1

Updates `org.apache.logging.log4j:log4j-1.2-api` from 2.23.1 to 2.24.1

---
updated-dependencies:
- dependency-name: org.apache.logging.log4j:log4j-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-slf4j2-impl
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-1.2-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-30 15:15:29 +01:00
dependabot[bot] 2da6f79b9d build(deps): bump org.junit.jupiter:junit-jupiter from 5.11.0 to 5.11.3
Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.11.0 to 5.11.3.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.11.0...r5.11.3)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-30 15:07:20 +01:00
dependabot[bot] 05777ffaca build(deps): bump com.google.guava:guava from 33.3.0-jre to 33.3.1-jre
Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.3.0-jre to 33.3.1-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-30 15:07:11 +01:00
dependabot[bot] 503bdd0f5a build(deps): bump commons-io:commons-io from 2.16.1 to 2.17.0
Bumps commons-io:commons-io from 2.16.1 to 2.17.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-30 15:07:02 +01:00
dependabot[bot] 346827957c build(deps): bump grpc from 1.66.0 to 1.68.0
Bumps `grpc` from 1.66.0 to 1.68.0.

Updates `io.grpc:grpc-core` from 1.66.0 to 1.68.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/commits)

Updates `io.grpc:grpc-netty` from 1.66.0 to 1.68.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/commits)

Updates `io.grpc:grpc-protobuf` from 1.66.0 to 1.68.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/commits)

Updates `io.grpc:grpc-stub` from 1.66.0 to 1.68.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/commits)

Updates `io.grpc:grpc-grpclb` from 1.66.0 to 1.68.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/commits)

Updates `io.grpc:grpc-inprocess` from 1.66.0 to 1.68.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/commits)

Updates `io.grpc:grpc-util` from 1.66.0 to 1.68.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/commits)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-inprocess
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-util
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-30 15:06:36 +01:00
dependabot[bot] 8e7ed6aaa6 build(deps): bump org.apache.commons:commons-compress
Bumps org.apache.commons:commons-compress from 1.27.0 to 1.27.1.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-14 00:00:29 +02:00
dependabot[bot] fcfe099aab build(deps): bump mockito from 5.12.0 to 5.13.0
Bumps `mockito` from 5.12.0 to 5.13.0.

Updates `org.mockito:mockito-core` from 5.12.0 to 5.13.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.12.0...v5.13.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.12.0 to 5.13.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.12.0...v5.13.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-14 00:00:21 +02:00
dependabot[bot] d1d21b1cdb build(deps): bump io.vertx:vertx-grpc from 4.5.9 to 4.5.10
Bumps io.vertx:vertx-grpc from 4.5.9 to 4.5.10.

---
updated-dependencies:
- dependency-name: io.vertx:vertx-grpc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-05 00:28:47 +02:00
dependabot[bot] 066d92cf95 build(deps): bump com.google.guava:guava from 33.2.1-jre to 33.3.0-jre
Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.2.1-jre to 33.3.0-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-20 15:51:32 +02:00
Luca Burgazzoli 676bad3dd5
build(deps): bump axion-release-plugin to v1.18.4 2024-08-16 14:59:57 +02:00
Luca Burgazzoli a8f4ab8f20
chore: update gradle from v8.9 to v8.10 2024-08-16 14:24:12 +02:00
Luca Burgazzoli 195032ee2d
chore: fix quay container image 2024-08-16 14:21:39 +02:00
dependabot[bot] 958ed92b92 build(deps): bump org.junit.jupiter:junit-jupiter from 5.10.3 to 5.11.0
Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.10.3 to 5.11.0.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.10.3...r5.11.0)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-16 12:18:34 +02:00
dependabot[bot] 9362dc8db3 build(deps): bump org.slf4j:slf4j-api from 2.0.15 to 2.0.16
Bumps org.slf4j:slf4j-api from 2.0.15 to 2.0.16.

---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-16 12:18:17 +02:00
dependabot[bot] a5e1de0a88 build(deps): bump errorprone from 2.29.2 to 2.30.0
Bumps `errorprone` from 2.29.2 to 2.30.0.

Updates `com.google.errorprone:error_prone_core` from 2.29.2 to 2.30.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.29.2...v2.30.0)

Updates `com.google.errorprone:error_prone_annotations` from 2.29.2 to 2.30.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.29.2...v2.30.0)

---
updated-dependencies:
- dependency-name: com.google.errorprone:error_prone_core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-16 12:18:09 +02:00
dependabot[bot] 7c6fbcc8ce build(deps): bump org.apache.commons:commons-compress
Bumps org.apache.commons:commons-compress from 1.26.2 to 1.27.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-16 12:18:00 +02:00
dependabot[bot] 4bbc3bb65f build(deps): bump org.slf4j:slf4j-api from 2.0.14 to 2.0.15
Bumps org.slf4j:slf4j-api from 2.0.14 to 2.0.15.

---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-09 16:50:35 +02:00
Luca Burgazzoli e78aa2bad2 chore: switch to quay as gcr is deprecated
see https://cloud.google.com/container-registry/docs/deprecations/container-registry-deprecation

Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2024-08-09 09:34:35 +02:00
Luca Burgazzoli 3bc741013a
chore(ci): improve stale action 2024-08-08 13:47:25 +02:00
Luca Burgazzoli d70df1c279 chore(ci): improve issue template 2024-08-08 13:21:21 +02:00
Luca Burgazzoli 612ecbb4dd build(deps): bump grpc from 1.65.1 to 1.66.0 2024-08-08 13:21:21 +02:00
Luca Burgazzoli 2e7fdbf264 chore(ci): improve stale action 2024-08-08 13:21:21 +02:00
linghengqian 7fc1e0078b jetcd-launcher: allow starting Etcd Container via non-root user on Linux
For #1310

Signed-off-by: linghengqian <linghengqian@outlook.com>
2024-08-08 12:55:48 +02:00
dependabot[bot] b51258e4a7 build(deps): bump org.awaitility:awaitility from 4.2.1 to 4.2.2
Bumps [org.awaitility:awaitility](https://github.com/awaitility/awaitility) from 4.2.1 to 4.2.2.
- [Changelog](https://github.com/awaitility/awaitility/blob/master/changelog.txt)
- [Commits](https://github.com/awaitility/awaitility/compare/awaitility-4.2.1...awaitility-4.2.2)

---
updated-dependencies:
- dependency-name: org.awaitility:awaitility
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-08 08:25:27 +02:00
dependabot[bot] 05d2fda634 build(deps): bump org.slf4j:slf4j-api from 2.0.13 to 2.0.14
Bumps org.slf4j:slf4j-api from 2.0.13 to 2.0.14.

---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-08 08:25:19 +02:00
Luca Burgazzoli 639bb27d21 build(deps): bump axion-release-plugin to v1.18.3 2024-08-05 16:32:35 +02:00
Luca Burgazzoli 43bc2614c2 build(deps): bump testcontainers to v1.20.1 2024-08-05 16:32:35 +02:00
Luca Burgazzoli 7ffe8f6c37 build(deps): bump test-retry-gradle-plugin to v1.5.10 2024-08-05 16:32:35 +02:00
Luca Burgazzoli 548b810883 build(deps): bump vertx to 4.5.9 2024-08-05 16:32:35 +02:00
Luca Burgazzoli 6bbb9836a0 build(deps): bump gradle to v8.9 2024-08-05 16:32:35 +02:00
dependabot[bot] 278d3afb16 build(deps): bump grpc from 1.64.0 to 1.65.1
Bumps `grpc` from 1.64.0 to 1.65.1.

Updates `io.grpc:grpc-core` from 1.64.0 to 1.65.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.64.0...v1.65.1)

Updates `io.grpc:grpc-netty` from 1.64.0 to 1.65.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.64.0...v1.65.1)

Updates `io.grpc:grpc-protobuf` from 1.64.0 to 1.65.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.64.0...v1.65.1)

Updates `io.grpc:grpc-stub` from 1.64.0 to 1.65.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.64.0...v1.65.1)

Updates `io.grpc:grpc-grpclb` from 1.64.0 to 1.65.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.64.0...v1.65.1)

Updates `io.grpc:grpc-inprocess` from 1.64.0 to 1.65.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.64.0...v1.65.1)

Updates `io.grpc:grpc-util` from 1.64.0 to 1.65.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.64.0...v1.65.1)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-inprocess
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-util
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 16:09:02 +02:00
Luca Burgazzoli a2e3015e6e build(deps): bump errorprone from 2.28.0 to 2.29.2
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2024-08-05 15:51:44 +02:00
dependabot[bot] ae02549362 build(deps): bump org.assertj:assertj-core from 3.26.0 to 3.26.3
Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.26.0 to 3.26.3.
- [Release notes](https://github.com/assertj/assertj/releases)
- [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.26.0...assertj-build-3.26.3)

---
updated-dependencies:
- dependency-name: org.assertj:assertj-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 15:33:25 +02:00
Lan Liang c008ba5603 Update etcd container version to 3.5.14.
Signed-off-by: Lan Liang <gcslyp@gmail.com>
2024-08-05 14:29:24 +02:00
dependabot[bot] 9cf296c654 build(deps): bump io.rest-assured:rest-assured from 5.4.0 to 5.5.0
Bumps [io.rest-assured:rest-assured](https://github.com/rest-assured/rest-assured) from 5.4.0 to 5.5.0.
- [Changelog](https://github.com/rest-assured/rest-assured/blob/master/changelog.txt)
- [Commits](https://github.com/rest-assured/rest-assured/compare/rest-assured-5.4.0...rest-assured-5.5.0)

---
updated-dependencies:
- dependency-name: io.rest-assured:rest-assured
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 14:27:28 +02:00
dependabot[bot] 36a5738f8d build(deps): bump org.junit.jupiter:junit-jupiter from 5.10.2 to 5.10.3
Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.10.2 to 5.10.3.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.10.2...r5.10.3)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 14:26:59 +02:00
dependabot[bot] 4d93e3b8fa build(deps): bump errorprone from 2.27.1 to 2.28.0
Bumps `errorprone` from 2.27.1 to 2.28.0.

Updates `com.google.errorprone:error_prone_core` from 2.27.1 to 2.28.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.27.1...v2.28.0)

Updates `com.google.errorprone:error_prone_annotations` from 2.27.1 to 2.28.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.27.1...v2.28.0)

---
updated-dependencies:
- dependency-name: com.google.errorprone:error_prone_core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-12 12:06:30 +02:00
dependabot[bot] 185ee008e0 build(deps): bump com.google.guava:guava from 33.2.0-jre to 33.2.1-jre
Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.2.0-jre to 33.2.1-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-03 21:00:53 +02:00
Luca Burgazzoli e878e1d4b1 reproducible build 2024-05-28 20:46:31 +02:00
Luca Burgazzoli 58c80dbbb1 Update deps
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2024-05-28 20:40:43 +02:00
dependabot[bot] aa9ebaa9d4 build(deps): bump org.assertj:assertj-core from 3.25.3 to 3.26.0
Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.25.3 to 3.26.0.
- [Release notes](https://github.com/assertj/assertj/releases)
- [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.25.3...assertj-build-3.26.0)

---
updated-dependencies:
- dependency-name: org.assertj:assertj-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-28 14:30:21 +02:00
dependabot[bot] 26dd155e2f build(deps): bump org.apache.commons:commons-compress
Bumps org.apache.commons:commons-compress from 1.26.1 to 1.26.2.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-28 14:30:13 +02:00
dependabot[bot] 8002f5a746 build(deps): bump io.vertx:vertx-grpc from 4.5.7 to 4.5.8
Bumps io.vertx:vertx-grpc from 4.5.7 to 4.5.8.

---
updated-dependencies:
- dependency-name: io.vertx:vertx-grpc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-28 14:29:58 +02:00
dependabot[bot] 6b22bd6770 build(deps): bump grpc from 1.63.0 to 1.64.0
Bumps `grpc` from 1.63.0 to 1.64.0.

Updates `io.grpc:grpc-core` from 1.63.0 to 1.64.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.63.0...v1.64.0)

Updates `io.grpc:grpc-netty` from 1.63.0 to 1.64.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.63.0...v1.64.0)

Updates `io.grpc:grpc-protobuf` from 1.63.0 to 1.64.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.63.0...v1.64.0)

Updates `io.grpc:grpc-stub` from 1.63.0 to 1.64.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.63.0...v1.64.0)

Updates `io.grpc:grpc-grpclb` from 1.63.0 to 1.64.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.63.0...v1.64.0)

Updates `io.grpc:grpc-inprocess` from 1.63.0 to 1.64.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.63.0...v1.64.0)

Updates `io.grpc:grpc-util` from 1.63.0 to 1.64.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.63.0...v1.64.0)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-inprocess
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-util
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-15 19:25:42 +02:00
dependabot[bot] 25096da986 build(deps): bump mockito from 5.11.0 to 5.12.0
Bumps `mockito` from 5.11.0 to 5.12.0.

Updates `org.mockito:mockito-core` from 5.11.0 to 5.12.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.11.0...v5.12.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.11.0 to 5.12.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.11.0...v5.12.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-14 14:05:40 +02:00
dependabot[bot] f58a8ff98e build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.19.7 to 1.19.8.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.7...1.19.8)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-14 14:05:30 +02:00
dependabot[bot] d7d6cec501 build(deps): bump info.picocli:picocli from 4.7.5 to 4.7.6
Bumps [info.picocli:picocli](https://github.com/remkop/picocli) from 4.7.5 to 4.7.6.
- [Release notes](https://github.com/remkop/picocli/releases)
- [Changelog](https://github.com/remkop/picocli/blob/main/RELEASE-NOTES.md)
- [Commits](https://github.com/remkop/picocli/compare/v4.7.5...v4.7.6)

---
updated-dependencies:
- dependency-name: info.picocli:picocli
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-14 14:05:20 +02:00
dependabot[bot] 83946aabe5 build(deps): bump com.google.guava:guava from 33.1.0-jre to 33.2.0-jre
Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.1.0-jre to 33.2.0-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-14 14:05:08 +02:00
dependabot[bot] 84d55279f3 build(deps): bump errorprone from 2.27.0 to 2.27.1
Bumps `errorprone` from 2.27.0 to 2.27.1.

Updates `com.google.errorprone:error_prone_core` from 2.27.0 to 2.27.1
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.27.0...v2.27.1)

Updates `com.google.errorprone:error_prone_annotations` from 2.27.0 to 2.27.1
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.27.0...v2.27.1)

---
updated-dependencies:
- dependency-name: com.google.errorprone:error_prone_core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-14 14:04:51 +02:00
Giri Ramasamy 6d375c889d watcher: Expose isClosed method
Signed-off-by: Giri Ramasamy <46867712+giri-vsr@users.noreply.github.com>
2024-05-14 14:04:27 +02:00
dependabot[bot] cdd5cd9e17 build(deps): bump errorprone from 2.26.1 to 2.27.0
Bumps `errorprone` from 2.26.1 to 2.27.0.

Updates `com.google.errorprone:error_prone_core` from 2.26.1 to 2.27.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.26.1...v2.27.0)

Updates `com.google.errorprone:error_prone_annotations` from 2.26.1 to 2.27.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.26.1...v2.27.0)

---
updated-dependencies:
- dependency-name: com.google.errorprone:error_prone_core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-29 11:19:51 +02:00
Luca Burgazzoli ff17ffc43d
chore: update to gradle 8.7 2024-04-17 09:56:39 +02:00
dependabot[bot] 3a00414754 build(deps): bump org.slf4j:slf4j-api from 2.0.12 to 2.0.13
Bumps org.slf4j:slf4j-api from 2.0.12 to 2.0.13.

---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-16 09:10:06 +02:00
dependabot[bot] 5f133eae4d build(deps): bump commons-io:commons-io from 2.16.0 to 2.16.1
Bumps commons-io:commons-io from 2.16.0 to 2.16.1.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-16 09:09:52 +02:00
dependabot[bot] 64852f4808 build(deps): bump grpc from 1.62.2 to 1.63.0
Bumps `grpc` from 1.62.2 to 1.63.0.

Updates `io.grpc:grpc-core` from 1.62.2 to 1.63.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.62.2...v1.63.0)

Updates `io.grpc:grpc-netty` from 1.62.2 to 1.63.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.62.2...v1.63.0)

Updates `io.grpc:grpc-protobuf` from 1.62.2 to 1.63.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.62.2...v1.63.0)

Updates `io.grpc:grpc-stub` from 1.62.2 to 1.63.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.62.2...v1.63.0)

Updates `io.grpc:grpc-grpclb` from 1.62.2 to 1.63.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.62.2...v1.63.0)

Updates `io.grpc:grpc-inprocess` from 1.62.2 to 1.63.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.62.2...v1.63.0)

Updates `io.grpc:grpc-util` from 1.62.2 to 1.63.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.62.2...v1.63.0)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-inprocess
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-util
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-08 14:35:29 +02:00
rmarian c7cb8c6657 core: update errors retryable condition.
Format affected source files.

Fixes etcd-io#1344.

Signed-off-by: rmarian <marianradu12@gmail.com>
2024-04-03 08:03:37 +02:00
rmarian 8e1749e116 core: update errors retryable condition.
Retry request in case of auth store revision old error from server

Fixes #1344.

Signed-off-by: rmarian <marianradu12@gmail.com>
2024-04-03 08:03:37 +02:00
dependabot[bot] 8090e42c1e build(deps): bump commons-io:commons-io from 2.15.1 to 2.16.0
Bumps commons-io:commons-io from 2.15.1 to 2.16.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-30 17:32:15 +01:00
dependabot[bot] f233eede35 build(deps): bump io.vertx:vertx-grpc from 4.5.5 to 4.5.7
Bumps io.vertx:vertx-grpc from 4.5.5 to 4.5.7.

---
updated-dependencies:
- dependency-name: io.vertx:vertx-grpc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-30 17:32:06 +01:00
dependabot[bot] 9130dcd292 build(deps): bump org.awaitility:awaitility from 4.2.0 to 4.2.1
Bumps [org.awaitility:awaitility](https://github.com/awaitility/awaitility) from 4.2.0 to 4.2.1.
- [Changelog](https://github.com/awaitility/awaitility/blob/master/changelog.txt)
- [Commits](https://github.com/awaitility/awaitility/compare/awaitility-4.2.0...awaitility-4.2.1)

---
updated-dependencies:
- dependency-name: org.awaitility:awaitility
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-17 19:24:12 +01:00
Cristian Ferretti 2398ebd24c Retry auth failures and require leader in ElectionImpl.
Signed-off-by: Cristian Ferretti <jcferretti2020@gmail.com>
2024-03-17 18:59:00 +01:00
dependabot[bot] 2cd129352a build(deps): bump io.vertx:vertx-grpc from 4.5.4 to 4.5.5
Bumps io.vertx:vertx-grpc from 4.5.4 to 4.5.5.

---
updated-dependencies:
- dependency-name: io.vertx:vertx-grpc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-15 16:29:57 +01:00
dependabot[bot] f5d9aa7ba5 build(deps): bump com.google.guava:guava from 33.0.0-jre to 33.1.0-jre
Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.0.0-jre to 33.1.0-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-15 08:45:43 +01:00
dependabot[bot] d46860b85e build(deps): bump errorprone from 2.25.0 to 2.26.1
Bumps `errorprone` from 2.25.0 to 2.26.1.

Updates `com.google.errorprone:error_prone_core` from 2.25.0 to 2.26.1
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.25.0...v2.26.1)

Updates `com.google.errorprone:error_prone_annotations` from 2.25.0 to 2.26.1
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.25.0...v2.26.1)

---
updated-dependencies:
- dependency-name: com.google.errorprone:error_prone_core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-15 08:44:47 +01:00
dependabot[bot] 51f38b50a1 build(deps): bump org.apache.commons:commons-compress
Bumps org.apache.commons:commons-compress from 1.26.0 to 1.26.1.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-12 08:52:27 +01:00
dependabot[bot] 3625d1e505 build(deps): bump log4j from 2.23.0 to 2.23.1
Bumps `log4j` from 2.23.0 to 2.23.1.

Updates `org.apache.logging.log4j:log4j-api` from 2.23.0 to 2.23.1

Updates `org.apache.logging.log4j:log4j-core` from 2.23.0 to 2.23.1

Updates `org.apache.logging.log4j:log4j-slf4j2-impl` from 2.23.0 to 2.23.1

Updates `org.apache.logging.log4j:log4j-1.2-api` from 2.23.0 to 2.23.1

---
updated-dependencies:
- dependency-name: org.apache.logging.log4j:log4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-slf4j2-impl
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-1.2-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-12 08:52:17 +01:00
dependabot[bot] 1054fc22a5 build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.19.6 to 1.19.7.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.6...1.19.7)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-09 08:59:39 +01:00
tunefun 948aa67cc4 election,lease,maintenance,watch: Register handlers before request
Fixes #1308

Signed-off-by: tunefun <965728225@qq.com>
2024-03-09 08:59:15 +01:00
Cristian Ferretti ae0e54035b Switch default load balancer policy to round_robin 2024-03-09 08:51:03 +01:00
tunefun 10b07f508c lease: Exceptions of lease keepAlive can be perceived
Fixes #1322

Signed-off-by: tunefun <965728225@qq.com>
2024-03-05 14:11:51 +01:00
dependabot[bot] 4274990a7a build(deps): bump mockito from 5.10.0 to 5.11.0
Bumps `mockito` from 5.10.0 to 5.11.0.

Updates `org.mockito:mockito-core` from 5.10.0 to 5.11.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.10.0...v5.11.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.10.0 to 5.11.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.10.0...v5.11.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-05 09:56:06 +01:00
dependabot[bot] 47ca2ba98c build(deps): bump grpc from 1.61.1 to 1.62.2
Bumps `grpc` from 1.61.1 to 1.62.2.

Updates `io.grpc:grpc-core` from 1.61.1 to 1.62.2
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.61.1...v1.62.2)

Updates `io.grpc:grpc-netty` from 1.61.1 to 1.62.2
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.61.1...v1.62.2)

Updates `io.grpc:grpc-protobuf` from 1.61.1 to 1.62.2
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.61.1...v1.62.2)

Updates `io.grpc:grpc-stub` from 1.61.1 to 1.62.2
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.61.1...v1.62.2)

Updates `io.grpc:grpc-grpclb` from 1.61.1 to 1.62.2
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.61.1...v1.62.2)

Updates `io.grpc:grpc-inprocess` from 1.61.1 to 1.62.2
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.61.1...v1.62.2)

Updates `io.grpc:grpc-util` from 1.61.1 to 1.62.2
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.61.1...v1.62.2)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-inprocess
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-util
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-05 09:55:57 +01:00
dependabot[bot] c184f37c36 build(deps): bump log4j from 2.22.1 to 2.23.0
Bumps `log4j` from 2.22.1 to 2.23.0.

Updates `org.apache.logging.log4j:log4j-api` from 2.22.1 to 2.23.0

Updates `org.apache.logging.log4j:log4j-core` from 2.22.1 to 2.23.0

Updates `org.apache.logging.log4j:log4j-slf4j2-impl` from 2.22.1 to 2.23.0

Updates `org.apache.logging.log4j:log4j-1.2-api` from 2.22.1 to 2.23.0

---
updated-dependencies:
- dependency-name: org.apache.logging.log4j:log4j-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-slf4j2-impl
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-1.2-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-22 23:56:23 +01:00
dependabot[bot] dbf9761486 build(deps): bump errorprone from 2.24.1 to 2.25.0
Bumps `errorprone` from 2.24.1 to 2.25.0.

Updates `com.google.errorprone:error_prone_core` from 2.24.1 to 2.25.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.24.1...v2.25.0)

Updates `com.google.errorprone:error_prone_annotations` from 2.24.1 to 2.25.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.24.1...v2.25.0)

---
updated-dependencies:
- dependency-name: com.google.errorprone:error_prone_core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-22 23:56:10 +01:00
dependabot[bot] ee171cd43d build(deps): bump org.apache.commons:commons-compress
Bumps org.apache.commons:commons-compress from 1.25.0 to 1.26.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-22 23:56:01 +01:00
dependabot[bot] cb77344660 build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.19.5 to 1.19.6.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.5...1.19.6)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-22 23:54:20 +01:00
dependabot[bot] 77bb3a9afd build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.19.4 to 1.19.5.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.4...1.19.5)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-09 14:28:34 +01:00
dependabot[bot] 0fa9f1e4e2 build(deps): bump org.junit.jupiter:junit-jupiter from 5.10.1 to 5.10.2
Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.10.1 to 5.10.2.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.10.1...r5.10.2)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-09 14:08:53 +01:00
dependabot[bot] 25ac1996bd build(deps): bump org.slf4j:slf4j-api from 2.0.11 to 2.0.12
Bumps org.slf4j:slf4j-api from 2.0.11 to 2.0.12.

---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-09 14:08:46 +01:00
dependabot[bot] 5226f2c676 build(deps): bump io.vertx:vertx-grpc from 4.5.1 to 4.5.3
Bumps io.vertx:vertx-grpc from 4.5.1 to 4.5.3.

---
updated-dependencies:
- dependency-name: io.vertx:vertx-grpc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-07 07:44:51 +01:00
dependabot[bot] 163d9504ca build(deps): bump org.assertj:assertj-core from 3.25.1 to 3.25.3
Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.25.1 to 3.25.3.
- [Release notes](https://github.com/assertj/assertj/releases)
- [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.25.1...assertj-build-3.25.3)

---
updated-dependencies:
- dependency-name: org.assertj:assertj-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-07 07:44:43 +01:00
dependabot[bot] 78a4939b02 build(deps): bump grpc from 1.61.0 to 1.61.1
Bumps `grpc` from 1.61.0 to 1.61.1.

Updates `io.grpc:grpc-core` from 1.61.0 to 1.61.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.61.0...v1.61.1)

Updates `io.grpc:grpc-netty` from 1.61.0 to 1.61.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.61.0...v1.61.1)

Updates `io.grpc:grpc-protobuf` from 1.61.0 to 1.61.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.61.0...v1.61.1)

Updates `io.grpc:grpc-stub` from 1.61.0 to 1.61.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.61.0...v1.61.1)

Updates `io.grpc:grpc-grpclb` from 1.61.0 to 1.61.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.61.0...v1.61.1)

Updates `io.grpc:grpc-inprocess` from 1.61.0 to 1.61.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.61.0...v1.61.1)

Updates `io.grpc:grpc-util` from 1.61.0 to 1.61.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.61.0...v1.61.1)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-inprocess
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-util
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-07 07:44:34 +01:00
dependabot[bot] 8d9e0004e8 build(deps): bump mockito from 5.9.0 to 5.10.0
Bumps `mockito` from 5.9.0 to 5.10.0.

Updates `org.mockito:mockito-core` from 5.9.0 to 5.10.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.9.0...v5.10.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.9.0 to 5.10.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.9.0...v5.10.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-07 07:44:25 +01:00
dependabot[bot] 3ca756983c build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.19.3 to 1.19.4.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.3...1.19.4)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-07 07:44:14 +01:00
dependabot[bot] 7891e67977 build(deps): bump actions/dependency-review-action from 3 to 4
Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 3 to 4.
- [Release notes](https://github.com/actions/dependency-review-action/releases)
- [Commits](https://github.com/actions/dependency-review-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/dependency-review-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-07 07:44:02 +01:00
Lan Liang 47598152b3 Update compile version to java11.
Signed-off-by: Lan Liang <gcslyp@gmail.com>
2024-01-16 09:28:22 +01:00
dependabot[bot] c916beff8c build(deps): bump mockito from 5.8.0 to 5.9.0
Bumps `mockito` from 5.8.0 to 5.9.0.

Updates `org.mockito:mockito-core` from 5.8.0 to 5.9.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.8.0...v5.9.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.8.0 to 5.9.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.8.0...v5.9.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-15 21:36:06 +01:00
dependabot[bot] d55aa8923c build(deps): bump grpc from 1.60.1 to 1.61.0
Bumps `grpc` from 1.60.1 to 1.61.0.

Updates `io.grpc:grpc-core` from 1.60.1 to 1.61.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.60.1...v1.61.0)

Updates `io.grpc:grpc-netty` from 1.60.1 to 1.61.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.60.1...v1.61.0)

Updates `io.grpc:grpc-protobuf` from 1.60.1 to 1.61.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.60.1...v1.61.0)

Updates `io.grpc:grpc-stub` from 1.60.1 to 1.61.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.60.1...v1.61.0)

Updates `io.grpc:grpc-grpclb` from 1.60.1 to 1.61.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.60.1...v1.61.0)

Updates `io.grpc:grpc-inprocess` from 1.60.1 to 1.61.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.60.1...v1.61.0)

Updates `io.grpc:grpc-util` from 1.60.1 to 1.61.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.60.1...v1.61.0)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-inprocess
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-util
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-12 20:14:49 +01:00
dependabot[bot] 85a9a54c3f build(deps): bump errorprone from 2.24.0 to 2.24.1
Bumps `errorprone` from 2.24.0 to 2.24.1.

Updates `com.google.errorprone:error_prone_core` from 2.24.0 to 2.24.1
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.24.0...v2.24.1)

Updates `com.google.errorprone:error_prone_annotations` from 2.24.0 to 2.24.1
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.24.0...v2.24.1)

---
updated-dependencies:
- dependency-name: com.google.errorprone:error_prone_core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-09 21:11:58 +01:00
dependabot[bot] 287a62d2db build(deps): bump log4j from 2.22.0 to 2.22.1
Bumps `log4j` from 2.22.0 to 2.22.1.

Updates `org.apache.logging.log4j:log4j-api` from 2.22.0 to 2.22.1

Updates `org.apache.logging.log4j:log4j-core` from 2.22.0 to 2.22.1

Updates `org.apache.logging.log4j:log4j-slf4j2-impl` from 2.22.0 to 2.22.1

Updates `org.apache.logging.log4j:log4j-1.2-api` from 2.22.0 to 2.22.1

---
updated-dependencies:
- dependency-name: org.apache.logging.log4j:log4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-slf4j2-impl
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-1.2-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 20:51:09 +01:00
dependabot[bot] c0114ef977 build(deps): bump org.slf4j:slf4j-api from 2.0.9 to 2.0.11
Bumps org.slf4j:slf4j-api from 2.0.9 to 2.0.11.

---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 20:36:03 +01:00
dependabot[bot] 312cf24163 build(deps): bump org.assertj:assertj-core from 3.24.2 to 3.25.1
Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.24.2 to 3.25.1.
- [Release notes](https://github.com/assertj/assertj/releases)
- [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.24.2...assertj-build-3.25.1)

---
updated-dependencies:
- dependency-name: org.assertj:assertj-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 20:35:06 +01:00
dependabot[bot] 4c9c705731 build(deps): bump grpc from 1.60.0 to 1.60.1
Bumps `grpc` from 1.60.0 to 1.60.1.

Updates `io.grpc:grpc-core` from 1.60.0 to 1.60.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.60.0...v1.60.1)

Updates `io.grpc:grpc-netty` from 1.60.0 to 1.60.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.60.0...v1.60.1)

Updates `io.grpc:grpc-protobuf` from 1.60.0 to 1.60.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.60.0...v1.60.1)

Updates `io.grpc:grpc-stub` from 1.60.0 to 1.60.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.60.0...v1.60.1)

Updates `io.grpc:grpc-grpclb` from 1.60.0 to 1.60.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.60.0...v1.60.1)

Updates `io.grpc:grpc-inprocess` from 1.60.0 to 1.60.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.60.0...v1.60.1)

Updates `io.grpc:grpc-util` from 1.60.0 to 1.60.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.60.0...v1.60.1)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-inprocess
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-util
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 20:34:42 +01:00
dependabot[bot] 3820950960 build(deps): bump errorprone from 2.23.0 to 2.24.0
Bumps `errorprone` from 2.23.0 to 2.24.0.

Updates `com.google.errorprone:error_prone_core` from 2.23.0 to 2.24.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.23.0...v2.24.0)

Updates `com.google.errorprone:error_prone_annotations` from 2.23.0 to 2.24.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.23.0...v2.24.0)

---
updated-dependencies:
- dependency-name: com.google.errorprone:error_prone_core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 20:34:00 +01:00
Luca Burgazzoli 4bd5d5a21c
Update README 2023-12-19 20:47:32 +01:00
dependabot[bot] 93ca59af7d build(deps): bump com.google.guava:guava from 32.1.3-jre to 33.0.0-jre
Bumps [com.google.guava:guava](https://github.com/google/guava) from 32.1.3-jre to 33.0.0-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-19 20:24:30 +01:00
Luca Burgazzoli 9411dc2dc1 update dependencies
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-12-15 09:11:41 +01:00
dependabot[bot] ca13d1a205 build(deps): bump io.rest-assured:rest-assured from 5.3.2 to 5.4.0
Bumps [io.rest-assured:rest-assured](https://github.com/rest-assured/rest-assured) from 5.3.2 to 5.4.0.
- [Changelog](https://github.com/rest-assured/rest-assured/blob/master/changelog.txt)
- [Commits](https://github.com/rest-assured/rest-assured/commits/rest-assured-5.4.0)

---
updated-dependencies:
- dependency-name: io.rest-assured:rest-assured
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-14 09:20:14 +01:00
dependabot[bot] 433ea80345 build(deps): bump actions/stale from 8 to 9
Bumps [actions/stale](https://github.com/actions/stale) from 8 to 9.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/stale/compare/v8...v9)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-14 08:59:12 +01:00
Giri Ramasamy 3d662958c5 watcher: Register Exception Handler before watch request
Signed-off-by: Giri Ramasamy <46867712+giri-vsr@users.noreply.github.com>
2023-12-14 08:44:31 +01:00
John Jiang e3c0a46349 build: Upgrade Gradle to 8.5
Signed-off-by: John Jiang <john.sha.jiang@gmail.com>
2023-12-06 09:45:17 +01:00
dependabot[bot] edec87e344 build(deps): bump commons-io:commons-io from 2.15.0 to 2.15.1
Bumps commons-io:commons-io from 2.15.0 to 2.15.1.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-06 09:25:50 +01:00
dependabot[bot] 670b6e48a8 build(deps): bump mockito from 5.7.0 to 5.8.0
Bumps `mockito` from 5.7.0 to 5.8.0.

Updates `org.mockito:mockito-core` from 5.7.0 to 5.8.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.7.0...v5.8.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.7.0 to 5.8.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.7.0...v5.8.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-06 09:25:43 +01:00
dependabot[bot] 60eb6b2ccb build(deps): bump grpc from 1.59.0 to 1.60.0
Bumps `grpc` from 1.59.0 to 1.60.0.

Updates `io.grpc:grpc-core` from 1.59.0 to 1.60.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.59.0...v1.60.0)

Updates `io.grpc:grpc-netty` from 1.59.0 to 1.60.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.59.0...v1.60.0)

Updates `io.grpc:grpc-protobuf` from 1.59.0 to 1.60.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.59.0...v1.60.0)

Updates `io.grpc:grpc-stub` from 1.59.0 to 1.60.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.59.0...v1.60.0)

Updates `io.grpc:grpc-grpclb` from 1.59.0 to 1.60.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.59.0...v1.60.0)

Updates `io.grpc:grpc-inprocess` from 1.59.0 to 1.60.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.59.0...v1.60.0)

Updates `io.grpc:grpc-util` from 1.59.0 to 1.60.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.59.0...v1.60.0)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-inprocess
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-util
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-06 09:25:27 +01:00
dependabot[bot] 4f7c486dcc build(deps): bump actions/setup-java from 3 to 4
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3 to 4.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-29 20:08:36 +01:00
Nikita Sokolov 436b61ce42 launcher.Etcd.builder().build() should leak no Network.newNetwork()
https://github.com/etcd-io/jetcd/issues/1271
Signed-off-by: Nikita Sokolov <faucct@gmail.com>
2023-11-23 09:11:32 +01:00
dependabot[bot] d20cdf61cf build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.19.2 to 1.19.3.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.2...1.19.3)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-21 21:52:24 +01:00
dependabot[bot] ff57964889 build(deps): bump org.apache.commons:commons-compress
Bumps org.apache.commons:commons-compress from 1.24.0 to 1.25.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 19:40:03 +01:00
dependabot[bot] 68ec7eea55 build(deps): bump io.vertx:vertx-grpc from 4.4.6 to 4.5.0
Bumps io.vertx:vertx-grpc from 4.4.6 to 4.5.0.

---
updated-dependencies:
- dependency-name: io.vertx:vertx-grpc
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 19:39:55 +01:00
dependabot[bot] b825daaab2 build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.19.1 to 1.19.2.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.1...1.19.2)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 19:39:44 +01:00
dependabot[bot] 40c7a2a6f7 build(deps): bump log4j from 2.21.1 to 2.22.0
Bumps `log4j` from 2.21.1 to 2.22.0.

Updates `org.apache.logging.log4j:log4j-api` from 2.21.1 to 2.22.0

Updates `org.apache.logging.log4j:log4j-core` from 2.21.1 to 2.22.0

Updates `org.apache.logging.log4j:log4j-slf4j2-impl` from 2.21.1 to 2.22.0

Updates `org.apache.logging.log4j:log4j-1.2-api` from 2.21.1 to 2.22.0

---
updated-dependencies:
- dependency-name: org.apache.logging.log4j:log4j-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-slf4j2-impl
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-1.2-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 19:39:37 +01:00
dependabot[bot] 9a7a98a2ba build(deps): bump mockito from 5.6.0 to 5.7.0
Bumps `mockito` from 5.6.0 to 5.7.0.

Updates `org.mockito:mockito-core` from 5.6.0 to 5.7.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.6.0...v5.7.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.6.0 to 5.7.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.6.0...v5.7.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 20:26:21 +01:00
Lan Liang 20815675e0 etcd: update to 3.5.10
Signed-off-by: Lan Liang <gcslyp@gmail.com>
2023-11-06 20:26:12 +01:00
dependabot[bot] 2c3027e23a build(deps): bump org.junit.jupiter:junit-jupiter from 5.10.0 to 5.10.1
Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.10.0 to 5.10.1.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.10.0...r5.10.1)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 20:25:58 +01:00
dependabot[bot] ce674679bc build(deps): bump commons-io:commons-io from 2.14.0 to 2.15.0
Bumps commons-io:commons-io from 2.14.0 to 2.15.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-26 20:37:25 +02:00
dependabot[bot] c51adfb748 build(deps): bump log4j from 2.21.0 to 2.21.1
Bumps `log4j` from 2.21.0 to 2.21.1.

Updates `org.apache.logging.log4j:log4j-api` from 2.21.0 to 2.21.1

Updates `org.apache.logging.log4j:log4j-core` from 2.21.0 to 2.21.1

Updates `org.apache.logging.log4j:log4j-slf4j2-impl` from 2.21.0 to 2.21.1

Updates `org.apache.logging.log4j:log4j-1.2-api` from 2.21.0 to 2.21.1

---
updated-dependencies:
- dependency-name: org.apache.logging.log4j:log4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-slf4j2-impl
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.logging.log4j:log4j-1.2-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-24 20:13:03 +02:00
Luca Burgazzoli 31a60ae3cd The 0.7.6 version does not throw an exception when keepAliveOnce failed #1254
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-10-23 14:26:17 +02:00
dependabot[bot] 838b69c61d build(deps): bump grpc from 1.58.0 to 1.59.0
Bumps `grpc` from 1.58.0 to 1.59.0.

Updates `io.grpc:grpc-core` from 1.58.0 to 1.59.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.58.0...v1.59.0)

Updates `io.grpc:grpc-netty` from 1.58.0 to 1.59.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.58.0...v1.59.0)

Updates `io.grpc:grpc-protobuf` from 1.58.0 to 1.59.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.58.0...v1.59.0)

Updates `io.grpc:grpc-stub` from 1.58.0 to 1.59.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.58.0...v1.59.0)

Updates `io.grpc:grpc-grpclb` from 1.58.0 to 1.59.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.58.0...v1.59.0)

Updates `io.grpc:grpc-inprocess` from 1.58.0 to 1.59.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.58.0...v1.59.0)

Updates `io.grpc:grpc-util` from 1.58.0 to 1.59.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.58.0...v1.59.0)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-inprocess
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-util
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-21 12:35:07 +02:00
dependabot[bot] e02e39cc12 build(deps): bump errorprone from 2.22.0 to 2.23.0
Bumps `errorprone` from 2.22.0 to 2.23.0.

Updates `com.google.errorprone:error_prone_core` from 2.22.0 to 2.23.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.22.0...v2.23.0)

Updates `com.google.errorprone:error_prone_annotations` from 2.22.0 to 2.23.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.22.0...v2.23.0)

---
updated-dependencies:
- dependency-name: com.google.errorprone:error_prone_core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-21 12:35:00 +02:00
Luca Burgazzoli 71315d7fac chore(deps): bump plugin dependencies
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-10-18 19:30:41 +02:00
James Blair 542eb4b84b Complete migration to owners file.
Signed-off-by: James Blair <mail@jamesblair.net>
2023-10-18 08:03:39 +02:00
dependabot[bot] 9101ac8ded build(deps): bump log4j from 2.20.0 to 2.21.0
Bumps `log4j` from 2.20.0 to 2.21.0.

Updates `org.apache.logging.log4j:log4j-api` from 2.20.0 to 2.21.0

Updates `org.apache.logging.log4j:log4j-core` from 2.20.0 to 2.21.0

Updates `org.apache.logging.log4j:log4j-slf4j2-impl` from 2.20.0 to 2.21.0

Updates `org.apache.logging.log4j:log4j-1.2-api` from 2.20.0 to 2.21.0

---
updated-dependencies:
- dependency-name: org.apache.logging.log4j:log4j-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-slf4j2-impl
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-1.2-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-17 20:46:08 +02:00
Luca Burgazzoli 4a95c1c8ab chore(deps): replace the old net.jodah:failsafe with dev.failsafe:failsafe
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-10-16 18:13:46 +02:00
Luca Burgazzoli 9c44c72cfc replace usage of guava with standard java #1207
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-10-16 13:03:21 +02:00
Andreas Skoog 461346e7f4 replace usage of guava with standard java
Avoid adding extra third party dependency 'guava' by replacing methods with equivalent alternatives in standard jdk.

This helps users of etcd since every transitive third party dependency requires more code to be downloaded and might result in dependency conflicts.

fixes #1207

Signed-off-by: Andreas Skoog <andreas.skoog@avanza.se>
2023-10-16 13:03:21 +02:00
Luca Burgazzoli 85b61dff25 temporary disable LeaseMemoryLeakTest::testKeepAliveOnceMemoryLeak as it is flaky 2023-10-16 12:01:31 +02:00
Luca Burgazzoli 26762faa94 Etcd memory leak when using jetcd-core 0.7.6 #1236
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-10-16 10:16:28 +02:00
Luca Burgazzoli 755a69753b chore(launcher): set a writable data dir
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-10-12 15:49:27 +02:00
Luca Burgazzoli e5ff902efa chore(launcher): use health endpoint to wait for continaer to start
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-10-12 15:49:27 +02:00
Luca Burgazzoli 38f3c89b20 chore(launcher): fix deprecated '--logger=capnslog' flag warning
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-10-12 15:49:27 +02:00
Luca Burgazzoli d1c93ceec8 chore(ci): execute actions/dependency-review-action only for PRs
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-10-12 15:49:16 +02:00
Luca Burgazzoli fae598b05b chore: improve ci workflows
- split main and pr workflow
- introduces reusable workflows (build, checks)
- add support for testing agains java 21
- update etcd container to v3.4.27
- update gradle to 8.4.x

Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-10-12 11:09:42 +02:00
Lan Liang 485b67bd8c chore: fix CI for javadoc and check javadoc at CI
Signed-off-by: Lan Liang <gcslyp@gmail.com>
2023-10-12 11:09:33 +02:00
dependabot[bot] da5333dfae build(deps): bump io.vertx:vertx-grpc from 4.4.5 to 4.4.6
Bumps io.vertx:vertx-grpc from 4.4.5 to 4.4.6.

---
updated-dependencies:
- dependency-name: io.vertx:vertx-grpc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-12 10:10:34 +02:00
dependabot[bot] daeec91226 build(deps): bump com.google.guava:guava from 32.1.2-jre to 32.1.3-jre
Bumps [com.google.guava:guava](https://github.com/google/guava) from 32.1.2-jre to 32.1.3-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-12 10:10:26 +02:00
Lan Liang 06711666ec Clean up deprecated method of maintenance
Signed-off-by: Lan Liang <gcslyp@gmail.com>
2023-10-11 15:30:49 +02:00
dependabot[bot] 3bc6e78446 build(deps): bump errorprone from 2.21.1 to 2.22.0
Bumps `errorprone` from 2.21.1 to 2.22.0.

Updates `com.google.errorprone:error_prone_core` from 2.21.1 to 2.22.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.21.1...v2.22.0)

Updates `com.google.errorprone:error_prone_annotations` from 2.21.1 to 2.22.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.21.1...v2.22.0)

---
updated-dependencies:
- dependency-name: com.google.errorprone:error_prone_core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 12:00:36 +02:00
dependabot[bot] 189f754ade build(deps): bump mockito from 5.5.0 to 5.6.0
Bumps `mockito` from 5.5.0 to 5.6.0.

Updates `org.mockito:mockito-core` from 5.5.0 to 5.6.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.5.0...v5.6.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.5.0 to 5.6.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.5.0...v5.6.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 09:43:55 +02:00
dependabot[bot] 81b8cf85e9 build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.19.0 to 1.19.1.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.0...1.19.1)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 09:43:46 +02:00
dependabot[bot] 5deb9b7cbc build(deps): bump commons-io:commons-io from 2.13.0 to 2.14.0
Bumps commons-io:commons-io from 2.13.0 to 2.14.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 09:43:37 +02:00
Lan Liang 226c59b705 Update the code of conduct to cncf, same with etcd.
Signed-off-by: Lan Liang <gcslyp@gmail.com>
2023-10-11 08:59:47 +02:00
Lan Liang 204eb1249e Skip exec chmod command when not mount data directory
Signed-off-by: Lan Liang <gcslyp@gmail.com>
2023-10-11 08:56:28 +02:00
James Blair dff1e79130 Add OWNERS file for jetcd.
Signed-off-by: James Blair <mail@jamesblair.net>
2023-09-20 07:56:12 +02:00
dependabot[bot] 58a4fa5366 build(deps): bump org.apache.commons:commons-compress
Bumps org.apache.commons:commons-compress from 1.23.0 to 1.24.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-11 20:50:40 +02:00
John Jiang f1bfe5676b fix: README.MD -> README.md; ube -> uber
Signed-off-by: John Jiang <john.sha.jiang@gmail.com>
2023-09-11 09:12:43 +02:00
John Jiang 38b34a9a99 feat(ci): check trailing whitespace and newline
Signed-off-by: John Jiang <john.sha.jiang@gmail.com>
2023-09-11 09:12:13 +02:00
John Jiang 0450daca63 build: support OpenJDK 17 for buid-main.yml
Signed-off-by: John Jiang <john.sha.jiang@gmail.com>
2023-09-08 08:50:58 +02:00
John Jiang 3e5e1466e9 build: test with OpenJDK 17 on PR
Signed-off-by: John Jiang <john.sha.jiang@gmail.com>
2023-09-08 08:50:58 +02:00
Luca Burgazzoli cb5cf70429 chore: re-format enum definitions
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-09-08 08:43:43 +02:00
Luca Burgazzoli 5e3cb9194e chore: remove deprecated method 2023-09-08 08:43:43 +02:00
Luca Burgazzoli 9c91b56b3c build(deps): bump grpc from 1.57.2 to 1.58.0 2023-09-08 08:43:43 +02:00
John Jiang 471c5690d0 chore: remove trailing spaces and add newlines for non-Java files
Signed-off-by: John Jiang <john.sha.jiang@gmail.com>
2023-09-06 11:17:40 +02:00
John Jiang bcf99363c0 fix(javadoc): type headings should begin at <h2>
Signed-off-by: John Jiang <john.sha.jiang@gmail.com>
2023-09-05 12:29:23 +02:00
dependabot[bot] 84edb66b16 build(deps): bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-04 20:15:25 +02:00
dependabot[bot] 19ba6865f1 build(deps): bump org.slf4j:slf4j-api from 2.0.7 to 2.0.9
Bumps org.slf4j:slf4j-api from 2.0.7 to 2.0.9.

---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-04 19:59:00 +02:00
John Jiang c88e161bd4 fix: wile should be while
Signed-off-by: John Jiang <john.sha.jiang@gmail.com>
2023-09-04 09:38:57 +02:00
dependabot[bot] 7de06aeee3 build(deps): bump info.picocli:picocli from 4.7.4 to 4.7.5
Bumps [info.picocli:picocli](https://github.com/remkop/picocli) from 4.7.4 to 4.7.5.
- [Release notes](https://github.com/remkop/picocli/releases)
- [Changelog](https://github.com/remkop/picocli/blob/main/RELEASE-NOTES.md)
- [Commits](https://github.com/remkop/picocli/compare/v4.7.4...v4.7.5)

---
updated-dependencies:
- dependency-name: info.picocli:picocli
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-01 10:02:10 +02:00
dependabot[bot] 4dbca648ba build(deps): bump io.vertx:vertx-grpc from 4.4.4 to 4.4.5
Bumps io.vertx:vertx-grpc from 4.4.4 to 4.4.5.

---
updated-dependencies:
- dependency-name: io.vertx:vertx-grpc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-30 22:23:16 +02:00
Luca Burgazzoli 04a3b7528b add watch test with restart delay
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-08-28 12:52:22 +02:00
dependabot[bot] aa9e8a0214 build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.18.3 to 1.19.0.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.18.3...1.19.0)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-23 00:38:04 +02:00
dependabot[bot] a0aa568e40 build(deps): bump mockito from 5.4.0 to 5.5.0
Bumps `mockito` from 5.4.0 to 5.5.0.

Updates `org.mockito:mockito-core` from 5.4.0 to 5.5.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.4.0...v5.5.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.4.0 to 5.5.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.4.0...v5.5.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-23 00:37:56 +02:00
Xuan Nguyen 4d5ce0520c etcd-io/jetcd #479 Use new and better canonical link to Google Groups
Signed-off-by: Xuan Nguyen <nguyenxndaidev@gmail.com>
2023-08-20 17:15:52 +02:00
dependabot[bot] 31749a9945 build(deps): bump grpc from 1.57.1 to 1.57.2
Bumps `grpc` from 1.57.1 to 1.57.2.

Updates `io.grpc:grpc-core` from 1.57.1 to 1.57.2
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.57.1...v1.57.2)

Updates `io.grpc:grpc-netty` from 1.57.1 to 1.57.2
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.57.1...v1.57.2)

Updates `io.grpc:grpc-protobuf` from 1.57.1 to 1.57.2
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.57.1...v1.57.2)

Updates `io.grpc:grpc-stub` from 1.57.1 to 1.57.2
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.57.1...v1.57.2)

Updates `io.grpc:grpc-grpclb` from 1.57.1 to 1.57.2
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.57.1...v1.57.2)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-16 23:30:25 +02:00
dependabot[bot] b95fc68fb3 build(deps): bump errorprone from 2.21.0 to 2.21.1
Bumps `errorprone` from 2.21.0 to 2.21.1.

Updates `com.google.errorprone:error_prone_core` from 2.21.0 to 2.21.1
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.21.0...v2.21.1)

Updates `com.google.errorprone:error_prone_annotations` from 2.21.0 to 2.21.1
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.21.0...v2.21.1)

---
updated-dependencies:
- dependency-name: com.google.errorprone:error_prone_core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-07 20:07:06 +02:00
Luca Burgazzoli 9c402e507e
feat(ci): add initial release workflow 2023-08-02 21:19:09 +02:00
Luca Burgazzoli 3aaa21aea5
feat(ci): add initial release workflow 2023-08-02 21:00:14 +02:00
Luca Burgazzoli c74101f3a5
feat(ci): add initial release workflow 2023-08-02 20:56:07 +02:00
Luca Burgazzoli b86db3296a
feat(ci): add initial release workflow 2023-08-02 20:47:28 +02:00
Luca Burgazzoli 0f42523da3
feat(ci): add initial release workflow 2023-08-02 20:35:54 +02:00
dependabot[bot] 66123d9bd3 build(deps): bump errorprone from 2.20.0 to 2.21.0
Bumps `errorprone` from 2.20.0 to 2.21.0.

Updates `com.google.errorprone:error_prone_core` from 2.20.0 to 2.21.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.20.0...v2.21.0)

Updates `com.google.errorprone:error_prone_annotations` from 2.20.0 to 2.21.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.20.0...v2.21.0)

---
updated-dependencies:
- dependency-name: com.google.errorprone:error_prone_core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-02 19:46:45 +02:00
dependabot[bot] 53217d9899 build(deps): bump grpc from 1.57.0 to 1.57.1
Bumps `grpc` from 1.57.0 to 1.57.1.

Updates `io.grpc:grpc-core` from 1.57.0 to 1.57.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.57.0...v1.57.1)

Updates `io.grpc:grpc-netty` from 1.57.0 to 1.57.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.57.0...v1.57.1)

Updates `io.grpc:grpc-protobuf` from 1.57.0 to 1.57.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.57.0...v1.57.1)

Updates `io.grpc:grpc-stub` from 1.57.0 to 1.57.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.57.0...v1.57.1)

Updates `io.grpc:grpc-grpclb` from 1.57.0 to 1.57.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.57.0...v1.57.1)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-02 19:46:28 +02:00
John Jiang 67aab8aaaf fix: unnecessary transient in MemorizingClientSupplier
Signed-off-by: John Jiang <john.sha.jiang@gmail.com>
2023-08-02 13:38:12 +02:00
dependabot[bot] e2f138b910 build(deps): bump com.google.guava:guava from 32.1.1-jre to 32.1.2-jre
Bumps [com.google.guava:guava](https://github.com/google/guava) from 32.1.1-jre to 32.1.2-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-01 22:16:39 +02:00
dependabot[bot] 50e25af43b build(deps): bump grpc from 1.56.1 to 1.57.0
Bumps `grpc` from 1.56.1 to 1.57.0.

Updates `io.grpc:grpc-core` from 1.56.1 to 1.57.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.56.1...v1.57.0)

Updates `io.grpc:grpc-netty` from 1.56.1 to 1.57.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.56.1...v1.57.0)

Updates `io.grpc:grpc-protobuf` from 1.56.1 to 1.57.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.56.1...v1.57.0)

Updates `io.grpc:grpc-stub` from 1.56.1 to 1.57.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.56.1...v1.57.0)

Updates `io.grpc:grpc-grpclb` from 1.56.1 to 1.57.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.56.1...v1.57.0)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-31 08:46:35 +02:00
dependabot[bot] eb7fbe46d8 build(deps): bump org.junit.jupiter:junit-jupiter from 5.9.3 to 5.10.0
Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.9.3 to 5.10.0.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.9.3...r5.10.0)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-25 15:26:10 +02:00
dependabot[bot] 2ff3fc2255 build(deps): bump com.google.protobuf from 0.9.3 to 0.9.4
Bumps com.google.protobuf from 0.9.3 to 0.9.4.

---
updated-dependencies:
- dependency-name: com.google.protobuf
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-18 00:21:27 +02:00
Giridharan Ramasamy 151c1d7b51 watcher: Added WithCreatedNotify Option for receiving created event
This adds WatchOption to receive watch created event

Fixes #1186

Signed-off-by: Giridharan Ramasamy <46867712+giri-vsr@users.noreply.github.com>
2023-07-08 21:37:26 +02:00
dependabot[bot] ec48303a20 build(deps): bump grpc from 1.56.0 to 1.56.1
Bumps `grpc` from 1.56.0 to 1.56.1.

Updates `io.grpc:grpc-core` from 1.56.0 to 1.56.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.56.0...v1.56.1)

Updates `io.grpc:grpc-netty` from 1.56.0 to 1.56.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.56.0...v1.56.1)

Updates `io.grpc:grpc-protobuf` from 1.56.0 to 1.56.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.56.0...v1.56.1)

Updates `io.grpc:grpc-stub` from 1.56.0 to 1.56.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.56.0...v1.56.1)

Updates `io.grpc:grpc-grpclb` from 1.56.0 to 1.56.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.56.0...v1.56.1)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-03 20:34:38 +02:00
dependabot[bot] b3175ebf07 build(deps): bump com.google.guava:guava from 32.0.1-jre to 32.1.1-jre
Bumps [com.google.guava:guava](https://github.com/google/guava) from 32.0.1-jre to 32.1.1-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-30 20:20:51 +02:00
Luca Burgazzoli 9454705c8c
fix(ci): split main build an publish jobs 2023-06-30 12:34:10 +02:00
Luca Burgazzoli e5a8e87224
fix(ci): add matric to main workflow 2023-06-30 12:30:59 +02:00
Luca Burgazzoli 3fd947f4cf
fix(ci): print current version before publish 2023-06-30 12:21:54 +02:00
Lan Liang ca95a0a33f [ghaction] martix CI for etcd version
Signed-off-by: Lan Liang <gcslyp@gmail.com>
2023-06-30 12:18:54 +02:00
Lan 5c150ac1e4 Add cache and schedule for ghaction
Signed-off-by: Lan Liang <gcslyp@gmail.com>
2023-06-30 12:04:21 +02:00
Luca Burgazzoli 156df8a0bc chore(doc): fix snapshot link 2023-06-30 11:29:43 +02:00
Luca Burgazzoli 38dd03c334 fix(ci): print current version before publish 2023-06-30 11:28:26 +02:00
Luca Burgazzoli 32fc5a0c2c fix(ci): fetch all tags and refs 2023-06-30 11:27:45 +02:00
dependabot[bot] f643a52081 build(deps): bump mockito from 5.3.1 to 5.4.0
Bumps `mockito` from 5.3.1 to 5.4.0.

Updates `org.mockito:mockito-core` from 5.3.1 to 5.4.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.3.1...v5.4.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.3.1 to 5.4.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.3.1...v5.4.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-28 17:04:30 +02:00
Cheng Pan f6b94488a7 Remove quote from properties' values
Signed-off-by: Cheng Pan <chengpan@apache.org>
2023-06-28 16:51:36 +02:00
dependabot[bot] 1dea66df1f build(deps): bump io.vertx:vertx-grpc from 4.4.3 to 4.4.4
Bumps io.vertx:vertx-grpc from 4.4.3 to 4.4.4.

---
updated-dependencies:
- dependency-name: io.vertx:vertx-grpc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-22 20:37:51 +02:00
dependabot[bot] e956deab04 build(deps): bump errorprone from 2.19.1 to 2.20.0
Bumps `errorprone` from 2.19.1 to 2.20.0.

Updates `com.google.errorprone:error_prone_core` from 2.19.1 to 2.20.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.19.1...v2.20.0)

Updates `com.google.errorprone:error_prone_annotations` from 2.19.1 to 2.20.0
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.19.1...v2.20.0)

---
updated-dependencies:
- dependency-name: com.google.errorprone:error_prone_core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-17 08:03:27 +02:00
dependabot[bot] 39b1ca4d9a build(deps): bump grpc from 1.55.1 to 1.56.0
Bumps `grpc` from 1.55.1 to 1.56.0.

Updates `io.grpc:grpc-core` from 1.55.1 to 1.56.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.55.1...v1.56.0)

Updates `io.grpc:grpc-netty` from 1.55.1 to 1.56.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.55.1...v1.56.0)

Updates `io.grpc:grpc-protobuf` from 1.55.1 to 1.56.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.55.1...v1.56.0)

Updates `io.grpc:grpc-stub` from 1.55.1 to 1.56.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.55.1...v1.56.0)

Updates `io.grpc:grpc-grpclb` from 1.55.1 to 1.56.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.55.1...v1.56.0)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-15 09:23:47 +02:00
dependabot[bot] 040d6e49df build(deps): bump autoService from 1.1.0 to 1.1.1
Bumps `autoService` from 1.1.0 to 1.1.1.

Updates `com.google.auto.service:auto-service-annotations` from 1.1.0 to 1.1.1
- [Release notes](https://github.com/google/auto/releases)
- [Commits](https://github.com/google/auto/compare/auto-value-1.1...auto-service-1.1.1)

Updates `com.google.auto.service:auto-service` from 1.1.0 to 1.1.1
- [Release notes](https://github.com/google/auto/releases)
- [Commits](https://github.com/google/auto/compare/auto-value-1.1...auto-service-1.1.1)

---
updated-dependencies:
- dependency-name: com.google.auto.service:auto-service-annotations
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.google.auto.service:auto-service
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-12 20:27:46 +02:00
Luca Burgazzoli 23aeac541f Add test for #1161
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-06-10 19:40:01 +02:00
Luca Burgazzoli 73c7120e04 misc cleanup
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-06-10 15:16:19 +02:00
Luca Burgazzoli 36f34219b2 updates deps and test cleanup
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-06-10 12:50:06 +02:00
Luca Burgazzoli dbd35a5305 Add test for #1132
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-06-10 12:29:48 +02:00
Luca Burgazzoli a203276502 chore(deps): replace jcommander with picocli
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-06-10 12:19:06 +02:00
Luca Burgazzoli bdf5c17ed7 The keepAliveOnce delay increases after the jetcd version is upgraded to 0.7.3 #1119
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-06-10 11:06:42 +02:00
dependabot[bot] 40cd1a1d10 build(deps): bump com.google.guava:guava from 32.0.0-jre to 32.0.1-jre
Bumps [com.google.guava:guava](https://github.com/google/guava) from 32.0.0-jre to 32.0.1-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-09 20:33:43 +02:00
dependabot[bot] b87ceb7bad build(deps): bump commons-io:commons-io from 2.12.0 to 2.13.0
Bumps commons-io:commons-io from 2.12.0 to 2.13.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-08 23:16:59 +02:00
dependabot[bot] e80103f25d build(deps): bump io.vertx:vertx-grpc from 4.4.2 to 4.4.3
Bumps io.vertx:vertx-grpc from 4.4.2 to 4.4.3.

---
updated-dependencies:
- dependency-name: io.vertx:vertx-grpc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-08 09:35:59 +02:00
dependabot[bot] 2a5a1574de build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.18.2 to 1.18.3.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.18.2...1.18.3)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-08 09:35:43 +02:00
dependabot[bot] f2733061ac build(deps): bump org.jooq:jool-java-8 from 0.9.14 to 0.9.15
Bumps [org.jooq:jool-java-8](https://github.com/jOOQ/jOOL) from 0.9.14 to 0.9.15.
- [Commits](https://github.com/jOOQ/jOOL/compare/version-0.9.14...version-0.9.15)

---
updated-dependencies:
- dependency-name: org.jooq:jool-java-8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-31 20:14:22 +02:00
dependabot[bot] 1ea5639c0e build(deps): bump org.junit.jupiter:junit-jupiter from 5.9.2 to 5.9.3
Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.9.2 to 5.9.3.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.9.2...r5.9.3)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-31 08:14:52 +02:00
dependabot[bot] 2558a89c0c build(deps): bump com.google.errorprone:javac
Bumps [com.google.errorprone:javac](https://github.com/google/error-prone-javac) from 9+181-r4173-1 to 1.8.0-u20.
- [Commits](https://github.com/google/error-prone-javac/commits)

---
updated-dependencies:
- dependency-name: com.google.errorprone:javac
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-31 08:04:47 +02:00
dependabot[bot] 100b2a42a9 build(deps): bump org.apache.commons:commons-compress
Bumps org.apache.commons:commons-compress from 1.22 to 1.23.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-31 08:04:35 +02:00
dependabot[bot] fd65e2772a build(deps): bump com.google.protobuf from 0.9.2 to 0.9.3
Bumps com.google.protobuf from 0.9.2 to 0.9.3.

---
updated-dependencies:
- dependency-name: com.google.protobuf
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-31 08:04:25 +02:00
dependabot[bot] d736ac4872 build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.18.1 to 1.18.2.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.18.1...1.18.2)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-31 08:04:13 +02:00
Luca Burgazzoli 9cd1e98911 refactor: use vertx executor service
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-05-31 08:03:58 +02:00
Luca Burgazzoli 879bb221c7 etcd: update to v3.5.9
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-05-30 14:04:33 +02:00
Cristian Ferretti 6c59cf6569 Ensure any service threads are created as daemon threads (redo).
Signed-off-by: Cristian Ferretti <cristianferretti@deephaven.io>
2023-05-30 09:31:45 +02:00
dependabot[bot] 80e2b38c22 build(deps): bump mockito from 5.1.1 to 5.3.1
Bumps `mockito` from 5.1.1 to 5.3.1.

Updates `org.mockito:mockito-core` from 5.1.1 to 5.3.1
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.1.1...v5.3.1)

Updates `org.mockito:mockito-junit-jupiter` from 5.1.1 to 5.3.1
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.1.1...v5.3.1)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-29 20:44:58 +02:00
dependabot[bot] 198fe32947 build(deps): bump com.github.johnrengelman.shadow from 8.1.0 to 8.1.1
Bumps com.github.johnrengelman.shadow from 8.1.0 to 8.1.1.

---
updated-dependencies:
- dependency-name: com.github.johnrengelman.shadow
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-29 20:23:56 +02:00
dependabot[bot] c886569a9e build(deps): bump com.google.guava:guava from 31.1-jre to 32.0.0-jre
Bumps [com.google.guava:guava](https://github.com/google/guava) from 31.1-jre to 32.0.0-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-29 20:18:29 +02:00
dependabot[bot] 00425bd26c build(deps): bump org.testcontainers:testcontainers
Bumps [org.testcontainers:testcontainers](https://github.com/testcontainers/testcontainers-java) from 1.17.6 to 1.18.1.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.17.6...1.18.1)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-29 20:18:15 +02:00
dependabot[bot] 403ea94314 build(deps): bump commons-io:commons-io from 2.11.0 to 2.12.0
Bumps commons-io:commons-io from 2.11.0 to 2.12.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-29 20:18:04 +02:00
dependabot[bot] 73749064e8 build(deps): bump errorprone from 2.18.0 to 2.19.1
Bumps `errorprone` from 2.18.0 to 2.19.1.

Updates `com.google.errorprone:error_prone_core` from 2.18.0 to 2.19.1
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.18.0...v2.19.1)

Updates `com.google.errorprone:error_prone_annotations` from 2.18.0 to 2.19.1
- [Release notes](https://github.com/google/error-prone/releases)
- [Commits](https://github.com/google/error-prone/compare/v2.18.0...v2.19.1)

---
updated-dependencies:
- dependency-name: com.google.errorprone:error_prone_core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.google.errorprone:error_prone_annotations
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-28 16:17:13 +02:00
Luca Burgazzoli 20e83785e0 chore(deps): add dependency-review-action 2023-05-28 16:16:33 +02:00
dependabot[bot] 272c14343d build(deps): bump autoService from 1.0.1 to 1.1.0
Bumps `autoService` from 1.0.1 to 1.1.0.

Updates `com.google.auto.service:auto-service-annotations` from 1.0.1 to 1.1.0
- [Release notes](https://github.com/google/auto/releases)
- [Commits](https://github.com/google/auto/compare/auto-common-1.0.1...auto-value-1.1)

Updates `com.google.auto.service:auto-service` from 1.0.1 to 1.1.0
- [Release notes](https://github.com/google/auto/releases)
- [Commits](https://github.com/google/auto/compare/auto-common-1.0.1...auto-value-1.1)

---
updated-dependencies:
- dependency-name: com.google.auto.service:auto-service-annotations
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.google.auto.service:auto-service
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-28 16:09:16 +02:00
dependabot[bot] f4006a496f build(deps): bump org.slf4j:slf4j-api from 2.0.6 to 2.0.7
Bumps [org.slf4j:slf4j-api](https://github.com/qos-ch/slf4j) from 2.0.6 to 2.0.7.
- [Commits](https://github.com/qos-ch/slf4j/compare/v_2.0.6...v_2.0.7)

---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-28 16:09:06 +02:00
dependabot[bot] d25a7cd578 build(deps): bump grpc from 1.53.0 to 1.55.1
Bumps `grpc` from 1.53.0 to 1.55.1.

Updates `io.grpc:grpc-core` from 1.53.0 to 1.55.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.53.0...v1.55.1)

Updates `io.grpc:grpc-netty` from 1.53.0 to 1.55.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.53.0...v1.55.1)

Updates `io.grpc:grpc-protobuf` from 1.53.0 to 1.55.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.53.0...v1.55.1)

Updates `io.grpc:grpc-stub` from 1.53.0 to 1.55.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.53.0...v1.55.1)

Updates `io.grpc:grpc-grpclb` from 1.53.0 to 1.55.1
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.53.0...v1.55.1)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-protobuf
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-grpclb
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-28 16:08:55 +02:00
dependabot[bot] 8a448151a9 build(deps): bump io.vertx:vertx-grpc from 4.4.0 to 4.4.2
Bumps io.vertx:vertx-grpc from 4.4.0 to 4.4.2.

---
updated-dependencies:
- dependency-name: io.vertx:vertx-grpc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-28 16:08:44 +02:00
Luca Burgazzoli 938e745ba0 chore(test): re-generate ssl certs 2023-05-28 15:55:49 +02:00
Luca Burgazzoli 47c8e7578d chore(deps): configure dependabot to ignore protoc 2023-05-28 15:43:36 +02:00
Luca Burgazzoli 5445564688 chore(deps): enable depndabot 2023-05-28 15:38:26 +02:00
Luca Burgazzoli 389b2c137b chore(deps): update gradle 2023-05-28 15:38:14 +02:00
iamthinh 0790996723 Update Lease.md 2023-04-18 08:22:02 +02:00
dependabot[bot] 275aea177a build(deps): bump actions/stale from 7 to 8
Bumps [actions/stale](https://github.com/actions/stale) from 7 to 8.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/stale/compare/v7...v8)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-27 09:04:39 +02:00
Luca Burgazzoli ebf983b811 fix: build is failing due to PMD #1126
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-03-08 09:20:18 +01:00
Luca Burgazzoli 64fe54aced chore: update deps
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2023-03-08 09:20:18 +01:00
Jean-Baptiste Onofré 0f35c8aa40 1124: upgrade to slf4j 2.0.6 and log4j 2.20.0
Signed-off-by: Jean-Baptiste Onofré <jbonofre@apache.org>
2023-03-06 08:52:03 +01:00
dependabot[bot] 7639c8161f build(deps): bump actions/stale from 6 to 7
Bumps [actions/stale](https://github.com/actions/stale) from 6 to 7.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/stale/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-24 07:47:55 +01:00
Ilia Ilinykh 822032bb78 extension: EtcdClusterExtension
Added ability to use settings in EtcdClusterExtension.

Signed-off-by: Ilia Ilinykh <ilyasyoy@gmail.com>
2023-01-30 07:54:39 +01:00
Ilia Ilinykh 4441c2b742 launcher: mounting data directory
added settings to turn-off mounting of data directory.

Signed-off-by: Ilia Ilinykh <ilyasyoy@gmail.com>
2023-01-30 07:54:39 +01:00
Ilia Ilinykh 061e3de023 documentation: CONTRIBUTING.md
Fixed formatting command.

Signed-off-by: Ilia Ilinykh <ilyasyoy@gmail.com>
2023-01-30 07:54:39 +01:00
ponfee.fu f6afc20a49 fix spelled mistake method name "getTTl" (#1112) 2022-12-07 09:39:20 +01:00
Luca Burgazzoli 2247c1e2ba
chore: add release doc 2022-12-07 09:13:40 +01:00
Luca Burgazzoli c89a275117 remove explicit grpc sourcesets
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2022-12-06 00:24:23 +01:00
dependabot[bot] 6f4bd13b0e build(deps): bump actions/stale from 1 to 6
Bumps [actions/stale](https://github.com/actions/stale) from 1 to 6.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/stale/compare/v1...v6)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-02 15:08:22 +01:00
dependabot[bot] 795dacf662 build(deps): bump actions/setup-java from 2 to 3
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 2 to 3.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-02 15:08:11 +01:00
dependabot[bot] 9786709d0e build(deps): bump actions/checkout from 2 to 3
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-02 15:08:02 +01:00
Luca Burgazzoli 68514bd258
chore(dependabot): add github action packages 2022-12-02 15:01:40 +01:00
Luca Burgazzoli afa560e25a chore: update deps 2022-12-02 08:06:34 +01:00
darvay 70c9f45d34 Add handling for "etcdserver: revision of auth store is old" error experienced by customers when Role changes are made to the ETCD Cluster.
We are seeing a use case when ETCD Role grants are updated we are getting an error "etcdserver: revision of auth store is old" on all JETCD clients right after the grant is applied. The only fix now is for the client to restart and reconnect.

ETCD Cluster config:

ETCD_AUTH_TOKEN: jwt,pub-key=/auth-token/authToken.pub,priv-key=/auth-token/authToken.key,sign-method=RS256,ttl=8h

Signed-off-by: darvay <darvay@apple.com>
2022-11-16 10:32:37 +01:00
Tsong Lew bd0ffdfe78 test: update testMemberManagementAddLearner and testMemberManagementAddNonLearner
Signed-off-by: Tsong Lew <tsonglew@gmail.com>
2022-11-09 09:30:25 +01:00
Tsong Lew 515aa7b001 feat: default addMember method
Signed-off-by: Tsong Lew <tsonglew@gmail.com>
2022-11-09 09:30:25 +01:00
Tsong Lew e5da670d99 feat: add isLearner in Member and MemberAddRequest
Signed-off-by: Tsong Lew <tsonglew@gmail.com>
2022-11-09 09:30:25 +01:00
Luca Burgazzoli cadde88d11 Add watch and get test
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2022-10-11 20:44:58 +02:00
backwards-rat-race f1036933a1 docs: fix case-sensitive typo in README.md when linking to docs/SslConfig.md.
previously when clicking the link via GitHub a 404 was returned rather than the expected document

Signed-off-by: backwards-rat-race <backwards-rat-race@users.noreply.github.com>
2022-10-10 08:59:55 +02:00
Luca Burgazzoli 4f7878790e chore: update deps 2022-09-26 10:55:39 +02:00
Junpei Kawamoto f25f8dcf80 Fix mismatches of field numbers and types
Compared with rpc.proto in etcd-io/etcd, there are one field number
mismatch and two field type mismatches. This commit fixes them.

Signed-off-by: Junpei Kawamoto <kawamoto.junpei@gmail.com>
2022-08-20 14:07:55 +02:00
Cheng Pan c98f45dfb8 Build: Remove workaround for gradle protoc plugin on Apple Silicon
Signed-off-by: Cheng Pan <chengpan@apache.org>
2022-08-07 17:47:21 +02:00
Luca Burgazzoli db1a00e655 chore: fix javadocs
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2022-07-28 21:59:47 +02:00
Luca Burgazzoli 4c347d3f89 chore: remove remaining manual Listener -> CompletionStage conversion
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2022-07-28 21:59:47 +02:00
Luca Burgazzoli 59435017f1 chore: add better validation for pr
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2022-07-28 17:27:02 +02:00
Luca Burgazzoli 30329ae6a1 chore: update pmd and spotless rules
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2022-07-28 17:27:02 +02:00
Luca Burgazzoli 22b9cc8010 deps: update protc to v3.21.4
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2022-07-28 17:15:21 +02:00
Luca Burgazzoli a6f54e1c4f Improve EtcdClusterExtension
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2022-07-28 16:56:22 +02:00
Luca Burgazzoli 4d23a6e083 chore: fix formatting 2022-07-28 15:28:50 +02:00
Luca Burgazzoli acb479cd76 fix pmd findings 2022-07-28 15:28:50 +02:00
Luca Burgazzoli 87bddc9d65 Fix junit extension 2022-07-28 15:28:50 +02:00
Luca Burgazzoli 194b503ec7 temporary disable AuthUnitTest 2022-07-28 00:20:50 +02:00
Luca Burgazzoli 2b081daa76 update deps
Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
2022-07-28 00:20:50 +02:00
Gunnar Morling 874eb7a8cc Adding missing license headers 2022-07-27 23:03:38 +02:00
Cheng Pan 6f80b0383a Upgrade docker image to support run on Arm platform
https://console.cloud.google.com/gcr/images/etcd-development/global/etcd@sha256:795d8660c48c439a7c3764c2330ed9222ab5db5bb524d8d0607cac76f7ba82a3/details?tab=pull

Signed-off-by: Cheng Pan <chengpan@apache.org>
2022-07-26 15:57:51 +02:00
Luca Burgazzoli f14b88dcd5 deps: org.testcontainers:testcontainers [1.16.3 -> 1.17.1] 2022-05-09 23:13:38 +02:00
Luca Burgazzoli d75354c833 deps:org.mockito [4.4.0 -> 4.5.1] 2022-05-09 23:13:38 +02:00
Luca Burgazzoli 4a628406fa deps: org.gradle:test-retry-gradle-plugin [1.3.1 -> 1.3.2] 2022-05-09 23:13:38 +02:00
Luca Burgazzoli 494d49ffc5 deps: io.vertx [4.2.6 -> 4.2.7] 2022-05-09 23:13:38 +02:00
Luca Burgazzoli 5be5126d35 deps:io.grpc [1.45.1 -> 1.46.0] 2022-05-09 23:13:38 +02:00
Luca Burgazzoli 6b882a170d deps: com.google.errorprone:error_prone_core [2.12.1 -> 2.13.1] 2022-05-09 23:13:38 +02:00
Luca Burgazzoli 5bd7dd4c33 deps: com.diffplug.spotless:spotless-plugin-gradle [6.4.2 -> 6.5.2] 2022-05-09 23:13:38 +02:00
Duo Zhang 9f46a16f1d
Set daemon to true when creating background thread pool, and also set… (#1062)
* Set daemon to true when creating background thread pool, and also set a proper name for the thread

* abstract a util method in Util

* spotlessApply
2022-04-13 07:05:27 +02:00
Tenghuan He b8b825e4e3 Fix build instructions in README.md
Actually jetcd is built with `gradle` instead of `maven`
2022-04-13 07:04:25 +02:00
Duo Zhang 515372b7f6 Close vertx instance when closing ClientConnectionManager 2022-04-11 08:02:54 +02:00
Luca Burgazzoli 515db5c96d chore: fix code style 2022-04-08 13:00:23 +02:00
Luca Burgazzoli 378eb56c2f io.grpc [1.45.0 -> 1.45.1] 2022-04-08 13:00:23 +02:00
Luca Burgazzoli 7e7da2ced6 com.google.errorprone:error_prone_core [2.11.0 -> 2.12.1] 2022-04-08 13:00:23 +02:00
Luca Burgazzoli b968372009 com.diffplug.spotless:spotless-plugin-gradle [6.3.0 -> 6.4.2] 2022-04-08 13:00:23 +02:00
vinsia af093bbd12 invalid etcd token with Unkonwn status code 2022-04-08 12:56:24 +02:00
shalk(xiao kun) 937b04c4dc Update README.md 2022-04-08 12:56:12 +02:00
Luca Burgazzoli af450ed4f7
cleanup 2022-03-18 23:11:20 +01:00
173 changed files with 3559 additions and 1911 deletions

View File

@ -15,13 +15,11 @@ assignees: ''
A clear and concise description of what the bug is.
**To Reproduce**
Steps or reproducer to reproduce the behavior.
This section *must* be provided, if not, the issue may not get attention.
Steps or reproducer to reproduce the behavior in a form of a unit test.
This section *must* be provided, if not, the issue may not get attention since the maintainers have very limited capacity.
**Expected behavior**
A clear and concise description of what you expected to happen.
**Additional context**
Add any other context about the problem here.

View File

@ -1,11 +1,18 @@
version: 2
updates:
- package-ecosystem: maven
directory: "/"
schedule:
interval: daily
open-pull-requests-limit: 10
ignore:
- dependency-name: org.codehaus.plexus:plexus-compiler-javac-errorprone
versions:
- "> 2.8.6, < 2.9"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: daily
time: "19:30"
timezone: Europe/Paris
- package-ecosystem: "gradle"
directory: "/"
schedule:
interval: daily
time: "19:30"
timezone: Europe/Paris
labels:
- area/dependencies
ignore:
- dependency-name: com.google.protobuf:protoc

View File

@ -1,5 +1,5 @@
#
# Copyright 2016-2021 The jetcd authors
# Copyright 2016-2023 The jetcd authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@ -14,10 +14,10 @@
# limitations under the License.
#
name: Build and Publish
name: Build and Publish (Snapshot)
concurrency:
group: ${{ github.ref }}-${{ github.workflow }}
group: ${{ github.workflow }}-${{ github.sha }}
cancel-in-progress: true
on:
@ -25,23 +25,52 @@ on:
branches:
- main
workflow_dispatch:
schedule:
- cron: "0 0 * * *"
jobs:
checks:
uses: ./.github/workflows/checks.yml
build:
needs:
- checks
strategy:
matrix:
java-version:
- 11
- 17
- 21
etcd:
- quay.io/coreos/etcd:v3.5.21
- quay.io/coreos/etcd:v3.6.0
uses: ./.github/workflows/build.yml
with:
javaVersion: "${{ matrix.java-version }}"
etcdImage: "${{ matrix.etcd }}"
publish:
runs-on: ubuntu-latest
needs:
- build
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set Up Java
uses: actions/setup-java@v2
- name: 'Checkout'
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 'Set Up Java'
uses: actions/setup-java@v4
with:
java-version: 11
distribution: 'temurin'
- name: Build Project
env:
OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
cache: 'gradle'
- name: 'Collect Info'
run: |
./gradlew currentVersion
- name: 'Publish Snapshot'
if: github.event_name != 'schedule'
env:
NEXUS_USERNAME: ${{ secrets.OSSRH_USERNAME }}
NEXUS_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
run: |
./gradlew spotlessCheck
./gradlew test
./gradlew publishToSonatype -Prelease.forceSnapshot

View File

@ -1,5 +1,5 @@
#
# Copyright 2016-2021 The jetcd authors
# Copyright 2016-2023 The jetcd authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@ -17,9 +17,12 @@
name: Build PR
concurrency:
group: ${{ github.ref }}-${{ github.workflow }}
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
cancel-in-progress: true
permissions:
contents: read
on:
pull_request:
branches:
@ -27,17 +30,22 @@ on:
workflow_dispatch:
jobs:
checks:
uses: ./.github/workflows/checks.yml
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set Up Java
uses: actions/setup-java@v2
with:
java-version: 11
distribution: 'temurin'
- name: Build Project
run: |
./gradlew spotlessCheck
./gradlew test
needs:
- checks
strategy:
matrix:
java-version:
- 11
- 17
- 21
etcd:
- quay.io/coreos/etcd:v3.5.21
- quay.io/coreos/etcd:v3.6.0
uses: ./.github/workflows/build.yml
with:
javaVersion: "${{ matrix.java-version }}"
etcdImage: "${{ matrix.etcd }}"

33
.github/workflows/build.yml vendored Normal file
View File

@ -0,0 +1,33 @@
name: Build
on:
workflow_call:
inputs:
javaVersion:
required: true
type: string
etcdImage:
required: true
type: string
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 'Checkout'
uses: actions/checkout@v4
- name: 'Set Up Java'
uses: actions/setup-java@v4
with:
java-version: ${{ inputs.javaVersion }}
distribution: 'temurin'
cache: 'gradle'
- name: 'Build Project'
env:
ETCD_IMAGE: ${{ inputs.etcdImage }}
run: |
export TC_USER="$(id -u):$(id -g)"
echo "tc user -> $TC_USER"
./gradlew test --info

37
.github/workflows/checks.yml vendored Normal file
View File

@ -0,0 +1,37 @@
name: Checks
on:
workflow_call:
jobs:
check:
runs-on: ubuntu-latest
steps:
- name: 'Checkout'
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 'Set Up Java'
uses: actions/setup-java@v4
with:
java-version: 11
distribution: 'temurin'
cache: 'gradle'
- name: 'Run check task'
run: |
./gradlew check -x test
- name: 'Run check script'
run: |
bash ./.github/workflows/scripts/precheck.sh
shell: bash
deps:
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
steps:
- name: 'Checkout'
uses: actions/checkout@v4
- name: 'Dependency Review'
uses: actions/dependency-review-action@v4

55
.github/workflows/scripts/precheck.sh vendored Normal file
View File

@ -0,0 +1,55 @@
#!/usr/bin/env bash
failed=0
# Check trailing whitespace
files=$(find . -type f \
-not -path "./.git/*" \
-not -path "*/.gradle/*" \
-not -path "*/.idea/*" \
-not -path "*/.vscode/*" \
-not -path "*/build/*" \
-not -path "*/out/*" \
-not -path "*/bin/*" \
-not -name "*.jar" \
-not -name "*.java" \
-exec grep -E -l " +$" {} \;)
count=0
for file in $files; do
((count++))
echo "$file"
done
if [ $count -ne 0 ]; then
failed=1
echo "Error: trailing whitespace(s) in the above $count file(s)"
fi
# Check newline
files=$(find . -type f -size +0c \
-not -path "./.git/*" \
-not -path "*/.gradle/*" \
-not -path "*/.idea/*" \
-not -path "*/.vscode/*" \
-not -path "*/build/*" \
-not -path "*/out/*" \
-not -path "*/bin/*" \
-not -name "*.jar" \
-not -name "*.java" \
-exec bash -c 'if [[ $(tail -c1 "$0" | wc -l) -eq 0 ]]; then echo "$0"; fi' {} \;)
count=0
for file in $files; do
((count++))
echo "$file"
done
if [ $count -ne 0 ]; then
failed=1
echo "Error: no newline in the above $count file(s)"
fi
exit $failed

View File

@ -1,5 +1,5 @@
#
# Copyright 2016-2021 The jetcd authors
# Copyright 2016-2023 The jetcd authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@ -24,18 +24,19 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v1
- uses: actions/stale@v9
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 60
days-before-close: 7
only-labels: 'waiting-for-feedbacks'
stale-issue-label: stale
exempt-issue-label: never-stale
exempt-issue-labels: never-stale
stale-pr-label: stale
exempt-pr-label: never-stale
exempt-pr-labels: never-stale
stale-issue-message: |
This issue is stale because it has been open 60 days with no activity.
Remove stale label or comment or this will be closed in 7 days.
stale-pr-message: |
This PR is stale because it has been open 60 days with no activity.
Remove stale label or comment or this will be closed in 7 days.
Remove stale label or comment or this will be closed in 7 days.

1
.gitignore vendored
View File

@ -15,3 +15,4 @@ logs/
.sdkmanrc
build/
bin/
out/

View File

@ -4,7 +4,7 @@ jetcd is Apache 2.0 licensed and accepts contributions via GitHub pull requests.
# Email and chat
- Email: [etcd-dev](https://groups.google.com/forum/?hl=en#!forum/etcd-dev)
- Email: [etcd-dev](https://groups.google.com/g/etcd-dev)
- IRC: #[etcd](irc://irc.freenode.org:6667/#etcd) IRC channel on freenode.org
## Getting started
@ -25,7 +25,7 @@ This is a rough outline of what a contributor's workflow looks like:
- Make sure commit messages are in the proper format (see below).
- Push changes in a topic branch to a personal fork of the repository.
- Submit a pull request to etcd-io/jetcd.
- The PR must receive a LGTM from at least one maintainer found in the [MAINTAINERS](https://github.com/etcd-io/etcd/blob/master/MAINTAINERS) file.
- The PR must receive a LGTM from at least one maintainer found in the [OWNERS](https://github.com/etcd-io/jetcd/blob/main/OWNERS) file.
Thanks for contributing!
@ -40,7 +40,7 @@ Please follow this style to make jetcd easy to review, maintain, and develop.
To make sure CI checks would pass please run
```bash
./mvnw license:format
./gradlew spotlessApply
```
and including any changes in PR before opening it.

View File

@ -1,5 +0,0 @@
Fanmin Shi <fanmin.shi@coreos.com> (@fanminshi) pkg:*
Luca Burgazzoli <lburgazzoli@gmail.com> (@lburgazzoli) pkg:*
Xiang Li <xiang.li@coreos.com> (@xiang90) pkg:*
Anthony Romano <anthony.romano@coreos.com> (@heyitsanthony) pkg:*

6
OWNERS Normal file
View File

@ -0,0 +1,6 @@
# See the OWNERS docs at https://go.k8s.io/owners
approvers:
- fanminshi # Fanmin Shi <fanmin.shi@coreos.com>
- lburgazzoli # Luca Burgazzoli <lburgazzoli@gmail.com>
- vorburger # Michael Vorburger <mike@vorburger.ch>

View File

@ -10,7 +10,7 @@ jetcd is the official java client for [etcd](https://github.com/etcd-io/etcd) v3
## Java Versions
Java 8 or above is required.
Java 11 or above is required.
## Download
@ -23,7 +23,7 @@ Java 8 or above is required.
</dependency>
```
Development snapshots are available in [Sonatypes's snapshot repository](https://oss.sonatype.org/content/repositories/snapshots/io/etcd).
Development snapshots are available in [Sonatypes's snapshot repository](https://oss.sonatype.org/content/repositories/snapshots/io/etcd/).
### Gradle
@ -63,7 +63,7 @@ GetResponse response = getFuture.get();
// delete the key
kvClient.delete(key).get();
```
To build one ssl secured client, refer to [secured client config](docs/sslconfig.md).
To build one ssl secured client, refer to [secured client config](docs/SslConfig.md).
For full etcd v3 API, plesase refer to the [official API documentation](https://etcd.io/docs/current/learning/api/).
@ -76,11 +76,11 @@ The [jetcd-ctl](https://github.com/etcd-io/jetcd/tree/master/jetcd-ctl) is a sta
The `io.etcd:jetcd-test` offers a convenient utility to programmatically start & stop an isolated `etcd` server. This can be very useful e.g. for integration testing, like so:
```java
import io.etcd.Client;
import io.etcd.jetcd.Client;
import io.etcd.jetcd.test.EtcdClusterExtension;
import org.junit.jupiter.api.extension.RegisterExtension;
@RegisterExtension
@RegisterExtension
public static final EtcdClusterExtension cluster = EtcdClusterExtension.builder()
.withNodes(1)
.build();
@ -99,7 +99,7 @@ The current major version is zero (0.y.z). Anything may change at any time. The
## Build from source
The project can be built with [Apache Maven](https://maven.apache.org/):
The project can be built with [Gradle](https://gradle.org/):
```
./gradlew compileJava
@ -111,7 +111,7 @@ The project is tested against a three node `etcd` setup started with the Launche
```sh
$ ./gradlew test
````
```
### Troubleshooting
@ -119,7 +119,7 @@ It recommmonds building the project before running tests so that you have artifa
## Contact
* Mailing list: [etcd-dev](https://groups.google.com/forum/?hl=en#!forum/etcd-dev)
* Mailing list: [etcd-dev](https://groups.google.com/g/etcd-dev)
## Contributing
@ -128,3 +128,5 @@ See [CONTRIBUTING](https://github.com/etcd-io/jetcd/blob/master/CONTRIBUTING.md)
## License
jetcd is under the Apache 2.0 license. See the [LICENSE](https://github.com/etcd-io/jetcd/blob/master/LICENSE) file for details.

View File

@ -63,7 +63,7 @@ subprojects {
}
compileJava {
options.release = 8
options.release = 11
}
test {
@ -72,16 +72,29 @@ subprojects {
maxParallelForks = Runtime.runtime.availableProcessors() ?: 1
retry {
maxRetries = 3
maxRetries = 1
maxFailures = 5
}
}
testing {
suites {
test {
useJUnitJupiter()
}
}
}
testlogger {
theme 'mocha-parallel'
showStandardStreams false
}
tasks.register('allDeps', DependencyReportTask)
tasks.withType(AbstractArchiveTask).configureEach {
preserveFileTimestamps = false
reproducibleFileOrder = true
}
}

View File

@ -1,61 +1,3 @@
## CoreOS Community Code of Conduct
## etcd Community Code of Conduct
### Contributor Code of Conduct
As contributors and maintainers of this project, and in the interest of
fostering an open and welcoming community, we pledge to respect all people who
contribute through reporting issues, posting feature requests, updating
documentation, submitting pull requests or patches, and other activities.
We are committed to making participation in this project a harassment-free
experience for everyone, regardless of level of experience, gender, gender
identity and expression, sexual orientation, disability, personal appearance,
body size, race, ethnicity, age, religion, or nationality.
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery
* Personal attacks
* Trolling or insulting/derogatory comments
* Public or private harassment
* Publishing others' private information, such as physical or electronic addresses, without explicit permission
* Other unethical or unprofessional conduct.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct. By adopting this Code of Conduct,
project maintainers commit themselves to fairly and consistently applying these
principles to every aspect of managing this project. Project maintainers who do
not follow or enforce the Code of Conduct may be permanently removed from the
project team.
This code of conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community.
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting a project maintainer, Brandon Philips
<brandon.philips@coreos.com>, and/or Rithu John <rithu.john@coreos.com>.
This Code of Conduct is adapted from the Contributor Covenant
(http://contributor-covenant.org), version 1.2.0, available at
http://contributor-covenant.org/version/1/2/0/
### CoreOS Events Code of Conduct
CoreOS events are working conferences intended for professional networking and
collaboration in the CoreOS community. Attendees are expected to behave
according to professional standards and in accordance with their employers
policies on appropriate workplace behavior.
While at CoreOS events or related social networking opportunities, attendees
should not engage in discriminatory or offensive speech or actions including
but not limited to gender, sexuality, race, age, disability, or religion.
Speakers should be especially aware of these concerns.
CoreOS does not condone any statements by speakers contrary to these standards.
CoreOS reserves the right to deny entrance and/or eject from an event (without
refund) any individual found to be engaging in discriminatory or offensive
speech or actions.
Please bring any concerns to the immediate attention of designated on-site
staff, Brandon Philips <brandon.philips@coreos.com>, and/or Rithu John <rithu.john@coreos.com>.
etcd follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md).

View File

@ -26,6 +26,3 @@ for (KeyValue kv : response.getKvs()) {
);
}
----

View File

@ -46,7 +46,7 @@ The Lease interface provides methods to grant, revoke, and keepalive leases.
1. This function is called periodically by `keepAliveSchedule`.
2. The lease may expire as:
* The etcd respond overtime.
* The client faile to send request in time.
* The client fails to send request in time.
3. It will scan the keepAlives map and find the leases that requires keepAlive requests to send based on its nextKeepAliveTime.
4. Send request to the StreamObserver for these leases.
@ -66,4 +66,4 @@ The Lease interface provides methods to grant, revoke, and keepalive leases.
1. The StreamObserver is the stream etcd uses to send responses.
2. The gRPC client calls onNext when etcd server delivers a response.
3. The onNext function will call `processKeepAliveRespond`.
3. The onNext function will call `processKeepAliveRespond`.

21
docs/RELEASE.adoc Normal file
View File

@ -0,0 +1,21 @@
= Release
+
[source,shell]
----
$ ./gradlew currentVersion
Project version: 0.7.5-SNAPSHOT
$ ./gradlew release
$ git tag
jetcd-0.7.5
$ ./gradlew currentVersion
Project version: 0.7.5
$ ./gradlew publish
published jetcd-0.7.5 release version
$ ./gradlew markNextVersion -Prelease.version=0.7.6
----

View File

@ -3,16 +3,16 @@
# prepare certification files
If your etcd cluster is installed using [etcdadm](https://github.com/kubernetes-sigs/etcdadm), you are likely to find
certification files in the path `/etc/etcd/pki/`: `ca.crt`, `etcdctl-etcd-client.key`, `etcdctl-etcd-client.crt`
certification files in the path `/etc/etcd/pki/`: `ca.crt`, `etcdctl-etcd-client.key`, `etcdctl-etcd-client.crt`.
If your etcd cluster is the builtin etcd in one kubernetes cluster(
using [kubeadm](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/)),
you can find the same files in `/etc/kubernetes/pki/etcd/`: `ca.crt`, `healthcheck-client.crt`, `healthcheck-client.key`
you can find the same files in `/etc/kubernetes/pki/etcd/`: `ca.crt`, `healthcheck-client.crt`, `healthcheck-client.key`.
Because `SslContextBuilder` only support a PKCS#8 private key file in PEM format, convert `etcdctl-etcd-client.key`
to `etcdctl-etcd-client.key.pem` according
to [netty SslContextBuilder doc](https://netty.io/wiki/sslcontextbuilder-and-private-key.html)
to [netty SslContextBuilder doc](https://netty.io/wiki/sslcontextbuilder-and-private-key.html).
# build jetcd client
@ -28,9 +28,9 @@ to [netty SslContextBuilder doc](https://netty.io/wiki/sslcontextbuilder-and-pri
.endpoints("https://10.168.168.66:2379")
.sslContext(context)
.build();
client.getClusterClient().listMember().get().getMembers().forEach(member -> {
logger.info("member: {}", member);
});
```
```

View File

@ -12,15 +12,15 @@ The Watch provide methods to watch on a key interval and cancel a watcher. If th
4. Cancel watch request, the etcd client should process watch cancellation and filter all the notification after cancellation request.
5. The watch client should be able to make a progress notify request that propagates the latest revision number to all watches
5. The watch client should be able to make a progress notify request that propagates the latest revision number to all watches.
# Implementation
The etcd client process watch request with [watch function](#watch-function), process notification with [processEvents function](#processevents-function) , process resume with [resume function](#resume-function), process cancel with [cancelWatch function](#cancelwatch-function) and request progress with [requestProgress function](#requestProgress-function).
The etcd client process watch request with [watch function](#watch-function), process notification with [processEvents function](#processevents-function), process resume with [resume function](#resume-function), process cancel with [cancelWatch function](#cancelwatch-function) and request progress with [requestProgress function](#requestProgress-function).
## watch function
Watch watches on a key interval.
Watch watches on a key interval.
1. Send create request to [requestStream](#requeststream-instance).
2. If the watch is create successfully, the `onCreate` will be called and the ListenableFuture task will be completed.
@ -116,4 +116,4 @@ Process cancel response from etcd server.
Resume all the the watchers on new requestStream.
1. Build new watch creation request for old watcher with last revision + 1.
2. Call `watch` function with the new watch creation request.
2. Call `watch` function with the new watch creation request.

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright 2016-2021 The jetcd authors
Copyright 2016-2023 The jetcd authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -271,4 +271,3 @@
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="CHECKSTYLE:ON"/>
</profile>
</profiles>

View File

@ -10,4 +10,4 @@ Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
limitations under the License.

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright 2016-2021 The jetcd authors
Copyright 2016-2023 The jetcd authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -23,6 +23,8 @@
<description>PMD Rules that govern static code analysis for jetcd</description>
<exclude-pattern>.*/io/etcd/jetcd/api/.*</exclude-pattern>
<rule ref="category/java/bestpractices.xml/AvoidUsingHardCodedIP"/>
<rule ref="category/java/bestpractices.xml/UnusedFormalParameter"/>
<rule ref="category/java/bestpractices.xml/UnusedLocalVariable"/>
@ -42,6 +44,7 @@
<rule ref="category/java/codestyle.xml/UselessQualifiedThis"/>
<rule ref="category/java/codestyle.xml/ControlStatementBraces"/>
<rule ref="category/java/codestyle.xml/UnnecessaryImport"/>
<rule ref="category/java/codestyle.xml/EmptyControlStatement"/>
<rule ref="category/java/design.xml/FinalFieldCouldBeStatic">
<priority>4</priority>
@ -71,15 +74,6 @@
</properties>
</rule>
<rule ref="category/java/errorprone.xml/EmptyFinallyBlock"/>
<rule ref="category/java/errorprone.xml/EmptyIfStmt"/>
<rule ref="category/java/errorprone.xml/EmptyInitializer"/>
<rule ref="category/java/errorprone.xml/EmptyStatementBlock"/>
<rule ref="category/java/errorprone.xml/EmptyStatementNotInLoop"/>
<rule ref="category/java/errorprone.xml/EmptySwitchStatements"/>
<rule ref="category/java/errorprone.xml/EmptySynchronizedBlock"/>
<rule ref="category/java/errorprone.xml/EmptyTryBlock"/>
<rule ref="category/java/errorprone.xml/EmptyWhileStmt"/>
<rule ref="category/java/errorprone.xml/JumbledIncrementer"/>
<rule ref="category/java/errorprone.xml/MisplacedNullCheck"/>
<rule ref="category/java/errorprone.xml/OverrideBothEqualsAndHashcode"/>
@ -96,4 +90,4 @@
<rule ref="category/java/performance.xml/BigIntegerInstantiation"/>
<rule ref="category/java/bestpractices.xml/PrimitiveWrapperInstantiation" />
</ruleset>
</ruleset>

View File

@ -1,11 +1,10 @@
#
# project
#
gitProject = 'https://github.com/etcd-io/jetcd'
gitURL = 'git@github.com/etcd-io/jetcd.git'
gitProject = https://github.com/etcd-io/jetcd
gitURL = git@github.com/etcd-io/jetcd.git
#
# gradle
#
org.gradle.parallel = true

View File

@ -1,46 +1,46 @@
[versions]
grpc = "1.45.0"
log4j = "2.17.2"
mockito = "4.4.0"
slf4j = "1.7.36"
guava = "31.1-jre"
grpc = "1.74.0"
log4j = "2.25.1"
mockito = "5.18.0"
slf4j = "2.0.17"
guava = "33.4.8-jre"
assertj = "3.27.3"
junit = "5.13.4"
testcontainers = "1.21.3"
protoc = "3.25.1"
failsafe = "3.3.2"
awaitility = "4.3.0"
commonsIo = "2.20.0"
commonCompress = "1.28.0"
autoService = "1.1.1"
errorprone = "2.30.0"
vertx = "5.0.1"
picocli = "4.7.7"
restAssured = "5.5.5"
javaxAnnotation = "1.3.2"
assertj = "3.22.0"
junit = "5.8.2"
testcontainers = "1.16.3"
protoc = "3.17.2"
failsafe = "2.4.4"
awaitility = "4.2.0"
commonsIo = "2.11.0"
commonCompress = "1.21"
autoService = "1.0.1"
jool = "0.9.14"
jcommander = "1.82"
errorprone = "2.11.0"
vertx = "4.2.6"
versionsPlugin = "0.42.0"
errorPronePlugin = "2.0.2"
spotlessPlugin = "6.3.0"
shadowPlugin = "7.1.2"
testLoggerPlugin = "3.2.0"
protobufPlugin = "0.8.18"
nexusPublishPlugin = "1.1.0"
axionReleasePlugin = "1.13.6"
testRetryPlugin = "1.3.1"
versionsPlugin = "0.52.0"
errorPronePlugin = "4.0.1"
spotlessPlugin = "6.25.0"
shadowPlugin = "8.1.1"
testLoggerPlugin = "4.0.0"
protobufPlugin = "0.9.5"
nexusPublishPlugin = "2.0.0"
axionReleasePlugin = "1.18.17"
testRetryPlugin = "1.6.2"
[libraries]
slf4j = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" }
guava = { module = "com.google.guava:guava", version.ref = "guava" }
javaxAnnotation = { module = "javax.annotation:javax.annotation-api", version.ref = "javaxAnnotation" }
assertj = { module = "org.assertj:assertj-core", version.ref = "assertj" }
junit = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" }
testcontainers = { module = "org.testcontainers:testcontainers", version.ref = "testcontainers" }
protoc = { module = "com.google.protobuf:protoc", version.ref = "protoc" }
failsafe = { module = "net.jodah:failsafe", version.ref = "failsafe" }
failsafe = { module = "dev.failsafe:failsafe", version.ref = "failsafe" }
awaitility = { module = "org.awaitility:awaitility", version.ref = "awaitility" }
jcommander = { module = "com.beust:jcommander", version.ref = "jcommander"}
jool = { module = "org.jooq:jool-java-8", version.ref = "jool"}
picocli = { module = "info.picocli:picocli", version.ref = "picocli"}
restAssured = { module = "io.rest-assured:rest-assured", version.ref = "restAssured"}
commonsIo = { module = "commons-io:commons-io", version.ref = "commonsIo" }
commonsCompress = { module = "org.apache.commons:commons-compress", version.ref = "commonCompress" }
@ -53,26 +53,32 @@ grpcNetty = { module = "io.grpc:grpc-netty", version.ref = "grpc" }
grpcProtobuf = { module = "io.grpc:grpc-protobuf", version.ref = "grpc" }
grpcStub = { module = "io.grpc:grpc-stub", version.ref = "grpc" }
grpcGrpclb = { module = "io.grpc:grpc-grpclb", version.ref = "grpc" }
grpcInprocess = { module = "io.grpc:grpc-inprocess", version.ref = "grpc" }
grpcUtil = { module = "io.grpc:grpc-util", version.ref = "grpc" }
vertxGrpc = { module = "io.vertx:vertx-grpc", version.ref = "vertx" }
log4jApi = { module = "org.apache.logging.log4j:log4j-api", version.ref = "log4j" }
log4jCore = { module = "org.apache.logging.log4j:log4j-core", version.ref = "log4j" }
log4jSlf4j = { module = "org.apache.logging.log4j:log4j-slf4j-impl", version.ref = "log4j" }
log4jSlf4j = { module = "org.apache.logging.log4j:log4j-slf4j2-impl", version.ref = "log4j" }
log4j12 = { module = "org.apache.logging.log4j:log4j-1.2-api", version.ref = "log4j" }
autoServiceAnnotations = { module = "com.google.auto.service:auto-service-annotations", version.ref = "autoService"}
autoServiceProcessor = { module = "com.google.auto.service:auto-service", version.ref = "autoService"}
javaxAnnotation = { module = "javax.annotation:javax.annotation-api", version.ref = "javaxAnnotation" }
errorprone = { module = "com.google.errorprone:error_prone_core", version.ref = "errorprone" }
errorproneJavac = { module = "com.google.errorprone:javac", version = "9+181-r4173-1" }
errorproneAnnotations = { module = "com.google.errorprone:error_prone_annotations", version.ref = "errorprone" }
errorproneJavac = { module = "com.google.errorprone:javac", version = "9+" }
[bundles]
grpc = [ "grpcCore", "grpcNetty", "grpcProtobuf", "grpcStub", "grpcGrpclb" ]
log4j = [ "log4jApi", "log4jCore", "log4jSlf4j", "log4j12" ]
mockito = [ "mockitoCore", "mockitoJunit" ]
testing = ["junit", "assertj", "mockitoCore", "mockitoJunit"]
grpc = [ "grpcCore", "grpcNetty", "grpcProtobuf", "grpcStub", "grpcGrpclb", "grpcUtil"]
grpcTest = [ "grpcInprocess"]
log4j = [ "log4jApi", "log4jCore", "log4jSlf4j", "log4j12" ]
mockito = [ "mockitoCore", "mockitoJunit" ]
testing = ["junit", "assertj", "mockitoCore", "mockitoJunit"]
javax = [ "javaxAnnotation" ]
[plugins]

View File

@ -20,10 +20,10 @@ apply plugin: "io.github.gradle-nexus.publish-plugin"
ext {
if (!project.hasProperty('nexusUsername')) {
nexusUsername = "$System.env.OSSRH_USERNAME"
nexusUsername = "$System.env.NEXUS_USERNAME"
}
if (!project.hasProperty('nexusPassword')) {
nexusPassword = "$System.env.OSSRH_PASSWORD"
nexusPassword = "$System.env.NEXUS_PASSWORD"
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2016-2020 The jetcd authors
* Copyright 2016-2023 The jetcd authors
*
* Licensed under the Apache License, Version 2.0 (the 'License');
* you may not use this file except in compliance with the License.
@ -22,4 +22,4 @@ task pubblications {
println "Publication $publication.name [$publication.groupId/$publication.artifactId/$publication.version]"
}
}
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2016-2021 The jetcd authors
* Copyright 2016-2023 The jetcd authors
*
* Licensed under the Apache License, Version 2.0 (the 'License');
* you may not use this file except in compliance with the License.
@ -89,9 +89,12 @@ signing {
sign publishing.publications."${project.name}"
}
check.dependsOn javadoc
javadoc {
if(JavaVersion.current().isJava9Compatible()) {
options.addBooleanOption('html5', true)
}
}
exclude "**/io/etcd/jetcd/api/**"
}

View File

@ -19,6 +19,7 @@ apply plugin: "pmd"
dependencies {
errorprone(libs.errorprone)
errorprone(libs.errorproneAnnotations)
errorproneJavac(libs.errorproneJavac)
}
@ -27,9 +28,10 @@ tasks.withType(JavaCompile).configureEach {
excludedPaths = '.*/generated/.*'
disableWarningsInGeneratedCode = true
}
options.deprecation = true
}
pmd {
consoleOutput = true
ruleSets = [ rootProject.file("etc/pmd-ruleset.xml") ]
ruleSets = [ "${project.rootDir}/etc/pmd-ruleset.xml" ]
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2016-2021 The jetcd authors
* Copyright 2016-2023 The jetcd authors
*
* Licensed under the Apache License, Version 2.0 (the 'License');
* you may not use this file except in compliance with the License.
@ -25,4 +25,4 @@ scmVersion {
allprojects {
project.version = scmVersion.version
}
}

View File

@ -24,7 +24,6 @@ spotless {
endWithNewline()
importOrderFile(rootProject.file('etc/eclipse.importorder'))
eclipse().configFile(rootProject.file('etc/eclipse-formatter-config.xml'))
//licenseHeaderFile(rootProject.file('etc/license.txt'))
//licenseHeader 'Copyright $YEAR The jetcd authors'
targetExclude("build/generated/**/*.java")
}
}

Binary file not shown.

View File

@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

47
gradlew vendored
View File

@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
@ -55,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@ -80,13 +82,11 @@ do
esac
done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@ -114,7 +114,7 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
CLASSPATH="\\\"\\\""
# Determine the Java command to use to start the JVM.
@ -133,22 +133,29 @@ location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@ -193,18 +200,28 @@ if "$cygwin" || "$msys" ; then
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.

183
gradlew.bat vendored
View File

@ -1,89 +1,94 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:execute
@rem Setup the command line
set CLASSPATH=
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@ -31,12 +31,22 @@ import io.grpc.Status;
*/
public enum ErrorCode {
CANCELLED(Status.CANCELLED), UNKNOWN(Status.UNKNOWN), INVALID_ARGUMENT(Status.INVALID_ARGUMENT),
DEADLINE_EXCEEDED(Status.DEADLINE_EXCEEDED), NOT_FOUND(Status.NOT_FOUND), ALREADY_EXISTS(Status.ALREADY_EXISTS),
PERMISSION_DENIED(Status.PERMISSION_DENIED), UNAUTHENTICATED(Status.UNAUTHENTICATED),
RESOURCE_EXHAUSTED(Status.RESOURCE_EXHAUSTED), FAILED_PRECONDITION(Status.FAILED_PRECONDITION), ABORTED(Status.ABORTED),
OUT_OF_RANGE(Status.OUT_OF_RANGE), UNIMPLEMENTED(Status.UNIMPLEMENTED), INTERNAL(Status.INTERNAL),
UNAVAILABLE(Status.UNAVAILABLE), DATA_LOSS(Status.DATA_LOSS),;
CANCELLED(Status.CANCELLED),
UNKNOWN(Status.UNKNOWN),
INVALID_ARGUMENT(Status.INVALID_ARGUMENT),
DEADLINE_EXCEEDED(Status.DEADLINE_EXCEEDED),
NOT_FOUND(Status.NOT_FOUND),
ALREADY_EXISTS(Status.ALREADY_EXISTS),
PERMISSION_DENIED(Status.PERMISSION_DENIED),
UNAUTHENTICATED(Status.UNAUTHENTICATED),
RESOURCE_EXHAUSTED(Status.RESOURCE_EXHAUSTED),
FAILED_PRECONDITION(Status.FAILED_PRECONDITION),
ABORTED(Status.ABORTED),
OUT_OF_RANGE(Status.OUT_OF_RANGE),
UNIMPLEMENTED(Status.UNIMPLEMENTED),
INTERNAL(Status.INTERNAL),
UNAVAILABLE(Status.UNAVAILABLE),
DATA_LOSS(Status.DATA_LOSS),;
private static final Map<Integer, ErrorCode> errorByRpcCode;

View File

@ -16,7 +16,7 @@
package io.etcd.jetcd.common.exception;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Objects;
/**
* Base exception type for all exceptions produced by the etcd service.
@ -27,7 +27,7 @@ public class EtcdException extends RuntimeException {
EtcdException(ErrorCode code, String message, Throwable cause) {
super(message, cause);
this.code = checkNotNull(code);
this.code = Objects.requireNonNull(code, "Error code must not be null");
}
/**

View File

@ -16,9 +16,10 @@
package io.etcd.jetcd.common.exception;
import java.util.Objects;
import io.grpc.Status;
import static com.google.common.base.Preconditions.checkNotNull;
import static io.grpc.Status.fromThrowable;
/**
@ -65,7 +66,7 @@ public final class EtcdExceptionFactory {
}
public static EtcdException toEtcdException(Throwable cause) {
checkNotNull(cause, "cause can't be null");
Objects.requireNonNull(cause, "cause can't be null");
if (cause instanceof EtcdException) {
return (EtcdException) cause;
}
@ -74,7 +75,7 @@ public final class EtcdExceptionFactory {
}
public static EtcdException toEtcdException(Status status) {
checkNotNull(status, "status can't be null");
Objects.requireNonNull(status, "status can't be null");
return fromStatus(status);
}

View File

@ -20,9 +20,10 @@ dependencies {
api project(':jetcd-common')
api libs.slf4j
api libs.guava
api libs.failsafe
compileOnly libs.javaxAnnotation
//compileOnly libs.javaxAnnotation
compileOnly libs.autoServiceAnnotations
annotationProcessor libs.autoServiceProcessor
@ -30,6 +31,7 @@ dependencies {
testImplementation project(':jetcd-launcher')
testImplementation project(':jetcd-test')
testImplementation libs.restAssured
testImplementation libs.awaitility
testImplementation libs.commonsIo
testImplementation libs.bundles.testing

View File

@ -17,8 +17,8 @@
package io.etcd.jetcd;
import java.nio.charset.Charset;
import java.util.Objects;
import com.google.common.base.Preconditions;
import com.google.protobuf.ByteString;
/**
@ -32,7 +32,7 @@ public final class ByteSequence {
private final ByteString byteString;
private ByteSequence(ByteString byteString) {
Preconditions.checkNotNull(byteString, "byteString should not be null");
Objects.requireNonNull(byteString, "byteString should not be null");
this.byteString = byteString;
this.hashVal = byteString.hashCode();
}
@ -48,9 +48,7 @@ public final class ByteSequence {
if (prefix == null) {
return false;
}
ByteString baseByteString = byteString;
ByteString prefixByteString = prefix.byteString;
return baseByteString.startsWith(prefixByteString);
return byteString.startsWith(prefix.byteString);
}
/**
@ -60,7 +58,7 @@ public final class ByteSequence {
* @return a new {@code ByteSequence} instance
*/
public ByteSequence concat(ByteSequence other) {
Preconditions.checkNotNull(other, "other byteSequence should not be null");
Objects.requireNonNull(other, "other byteSequence should not be null");
return new ByteSequence(this.byteString.concat(other.byteString));
}
@ -71,7 +69,7 @@ public final class ByteSequence {
* @return a new {@code ByteSequence} instance
*/
public ByteSequence concat(ByteString other) {
Preconditions.checkNotNull(other, "other byteSequence should not be null");
Objects.requireNonNull(other, "other byteSequence should not be null");
return new ByteSequence(this.byteString.concat(other));
}
@ -157,10 +155,22 @@ public final class ByteSequence {
return new ByteSequence(ByteString.copyFrom(bytes));
}
/**
* Create new ByteSequence from a {@link ByteString}.
*
* @param source input {@link ByteString}
* @return the ByteSequence
*/
public static ByteSequence from(ByteString source) {
return new ByteSequence(source);
}
/**
* Create new ByteSequence from raw bytes.
*
* @param source input bytes
* @return the ByteSequence
*/
public static ByteSequence from(byte[] source) {
return new ByteSequence(ByteString.copyFrom(source));
}

View File

@ -27,41 +27,57 @@ public interface Client extends AutoCloseable {
/**
* Returns the {@link Auth} client.
*
* @return the client.
*/
Auth getAuthClient();
/**
* Returns the {@link KV} client.
*
* @return the client.
*/
KV getKVClient();
/**
* Returns the {@link Cluster} client.
*
* @return the client.
*/
Cluster getClusterClient();
/**
* Returns the {@link Maintenance} client.
*
* @return the client.
*/
Maintenance getMaintenanceClient();
/**
* Returns the {@link Lease} client.
*
* @return the client.
*/
Lease getLeaseClient();
/**
* Returns the {@link Watch} client.
*
* @return the client.
*/
Watch getWatchClient();
/**
* Returns the {@link Lock} client.
*
* @return the client.
*/
Lock getLockClient();
/**
* Returns the {@link Election} client.
*
* @return the client.
*/
Election getElectionClient();
@ -70,6 +86,8 @@ public interface Client extends AutoCloseable {
/**
* Returns a new {@link ClientBuilder}.
*
* @return the builder.
*/
static ClientBuilder builder() {
return new ClientBuilder();

View File

@ -19,16 +19,12 @@ package io.etcd.jetcd;
import java.net.URI;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import javax.net.ssl.SSLException;
@ -41,13 +37,12 @@ import io.grpc.Metadata;
import io.grpc.netty.GrpcSslContexts;
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import io.vertx.core.Vertx;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.common.collect.Streams;
/**
* ClientBuilder knows how to create an Client instance.
* ClientBuilder knows how to create a Client instance.
*/
public final class ClientBuilder implements Cloneable {
@ -66,6 +61,7 @@ public final class ClientBuilder implements Cloneable {
private ByteSequence namespace = ByteSequence.EMPTY;
private long retryDelay = 500;
private long retryMaxDelay = 2500;
private int retryMaxAttempts = 2;
private ChronoUnit retryChronoUnit = ChronoUnit.MILLIS;
private Duration keepaliveTime = Duration.ofSeconds(30L);
private Duration keepaliveTimeout = Duration.ofSeconds(10L);
@ -73,6 +69,7 @@ public final class ClientBuilder implements Cloneable {
private Duration retryMaxDuration;
private Duration connectTimeout;
private boolean waitForReady = true;
private Vertx vertx;
ClientBuilder() {
}
@ -135,7 +132,7 @@ public final class ClientBuilder implements Cloneable {
* @throws IllegalArgumentException if some endpoint is invalid
*/
public ClientBuilder endpoints(Iterable<URI> endpoints) {
Preconditions.checkNotNull(endpoints, "endpoints can't be null");
Objects.requireNonNull(endpoints, "endpoints can't be null");
endpoints.forEach(e -> {
if (e.getHost() == null) {
@ -143,8 +140,8 @@ public final class ClientBuilder implements Cloneable {
}
});
final String target = Streams.stream(endpoints)
.map(e -> e.getHost() + (e.getPort() != -1 ? (":" + e.getPort()) : ""))
final String target = StreamSupport.stream(endpoints.spliterator(), false)
.map(e -> e.getHost() + (e.getPort() != -1 ? ":" + e.getPort() : ""))
.distinct()
.collect(Collectors.joining(","));
@ -162,6 +159,8 @@ public final class ClientBuilder implements Cloneable {
/**
* Returns the auth user
*
* @return the user.
*/
public ByteSequence user() {
return user;
@ -175,13 +174,15 @@ public final class ClientBuilder implements Cloneable {
* @throws NullPointerException if user is <code>null</code>
*/
public ClientBuilder user(ByteSequence user) {
Preconditions.checkNotNull(user, "user can't be null");
Objects.requireNonNull(user, "user can't be null");
this.user = user;
return this;
}
/**
* Returns the auth password
*
* @return the password.
*/
public ByteSequence password() {
return password;
@ -195,13 +196,15 @@ public final class ClientBuilder implements Cloneable {
* @throws NullPointerException if password is <code>null</code>
*/
public ClientBuilder password(ByteSequence password) {
Preconditions.checkNotNull(password, "password can't be null");
Objects.requireNonNull(password, "password can't be null");
this.password = password;
return this;
}
/**
* Returns the namespace of each key used
*
* @return the namespace.
*/
public ByteSequence namespace() {
return namespace;
@ -216,13 +219,15 @@ public final class ClientBuilder implements Cloneable {
* @throws NullPointerException if namespace is <code>null</code>
*/
public ClientBuilder namespace(ByteSequence namespace) {
Preconditions.checkNotNull(namespace, "namespace can't be null");
Objects.requireNonNull(namespace, "namespace can't be null");
this.namespace = namespace;
return this;
}
/**
* Returns the executor service
*
* @return the executor service.
*/
public ExecutorService executorService() {
return executorService;
@ -236,7 +241,7 @@ public final class ClientBuilder implements Cloneable {
* @throws NullPointerException if executorService is <code>null</code>
*/
public ClientBuilder executorService(ExecutorService executorService) {
Preconditions.checkNotNull(executorService, "executorService can't be null");
Objects.requireNonNull(executorService, "executorService can't be null");
this.executorService = executorService;
return this;
}
@ -249,7 +254,7 @@ public final class ClientBuilder implements Cloneable {
* @throws NullPointerException if loadBalancerPolicy is <code>null</code>
*/
public ClientBuilder loadBalancerPolicy(String loadBalancerPolicy) {
Preconditions.checkNotNull(loadBalancerPolicy, "loadBalancerPolicy can't be null");
Objects.requireNonNull(loadBalancerPolicy, "loadBalancerPolicy can't be null");
this.loadBalancerPolicy = loadBalancerPolicy;
return this;
}
@ -265,6 +270,8 @@ public final class ClientBuilder implements Cloneable {
/**
* Returns the ssl context
*
* @return the ssl context.
*/
public SslContext sslContext() {
return sslContext;
@ -298,6 +305,8 @@ public final class ClientBuilder implements Cloneable {
/**
* Returns The authority used to authenticate connections to servers.
*
* @return the authority.
*/
public String authority() {
return authority;
@ -316,6 +325,8 @@ public final class ClientBuilder implements Cloneable {
/**
* Returns the maximum message size allowed for a single gRPC frame.
*
* @return max inbound message size.
*/
public Integer maxInboundMessageSize() {
return maxInboundMessageSize;
@ -334,6 +345,8 @@ public final class ClientBuilder implements Cloneable {
/**
* Returns the headers to be added to http request headers
*
* @return headers.
*/
public Map<Metadata.Key<?>, Object> headers() {
return headers == null ? Collections.emptyMap() : Collections.unmodifiableMap(headers);
@ -370,6 +383,8 @@ public final class ClientBuilder implements Cloneable {
/**
* Returns the headers to be added to auth request headers
*
* @return auth headers.
*/
public Map<Metadata.Key<?>, Object> authHeaders() {
return authHeaders == null ? Collections.emptyMap() : Collections.unmodifiableMap(authHeaders);
@ -406,6 +421,8 @@ public final class ClientBuilder implements Cloneable {
/**
* Returns the interceptors
*
* @return the interceptors.
*/
public List<ClientInterceptor> interceptors() {
return interceptors;
@ -443,6 +460,8 @@ public final class ClientBuilder implements Cloneable {
/**
* Returns the auth interceptors
*
* @return the interceptors.
*/
public List<ClientInterceptor> authInterceptors() {
return authInterceptors;
@ -480,6 +499,8 @@ public final class ClientBuilder implements Cloneable {
/**
* Returns The delay between retries.
*
* @return the retry delay.
*/
public long retryDelay() {
return retryDelay;
@ -498,6 +519,8 @@ public final class ClientBuilder implements Cloneable {
/**
* Returns the max backing off delay between retries
*
* @return max retry delay.
*/
public long retryMaxDelay() {
return retryMaxDelay;
@ -514,6 +537,31 @@ public final class ClientBuilder implements Cloneable {
return this;
}
/**
* Returns the max number of retry attempts
*
* @return max retry attempts.
*/
public int retryMaxAttempts() {
return retryMaxAttempts;
}
/**
* Set the max number of retry attempts
*
* @param retryMaxAttempts The max retry attempts.
* @return this builder
*/
public ClientBuilder retryMaxAttempts(int retryMaxAttempts) {
this.retryMaxAttempts = retryMaxAttempts;
return this;
}
/**
* Returns the keep alive time.
*
* @return keep alive time.
*/
public Duration keepaliveTime() {
return keepaliveTime;
}
@ -532,6 +580,11 @@ public final class ClientBuilder implements Cloneable {
return this;
}
/**
* Returns the keep alive time out.
*
* @return keep alive time out.
*/
public Duration keepaliveTimeout() {
return keepaliveTimeout;
}
@ -564,6 +617,8 @@ public final class ClientBuilder implements Cloneable {
/**
* Returns he retries period unit.
*
* @return the chrono unit.
*/
public ChronoUnit retryChronoUnit() {
return retryChronoUnit;
@ -582,6 +637,8 @@ public final class ClientBuilder implements Cloneable {
/**
* Returns the retries max duration.
*
* @return retry max duration.
*/
public Duration retryMaxDuration() {
return retryMaxDuration;
@ -589,6 +646,8 @@ public final class ClientBuilder implements Cloneable {
/**
* Returns the connect timeout.
*
* @return connect timeout.
*/
public Duration connectTimeout() {
return connectTimeout;
@ -650,6 +709,30 @@ public final class ClientBuilder implements Cloneable {
return this;
}
/**
* Gets the Vertx instance.
*
* @return the vertx instance.
*/
public Vertx vertx() {
return vertx;
}
/**
* configure Vertx instance.
*
* @param vertx Vertx instance to use.
* @return this builder to train
* @throws IllegalArgumentException if vertx is null
*/
public ClientBuilder vertx(Vertx vertx) {
Preconditions.checkArgument(vertx != null, "vertx can't be null");
this.vertx = vertx;
return this;
}
/**
* build a new Client.
*
@ -664,6 +747,8 @@ public final class ClientBuilder implements Cloneable {
/**
* Returns a copy of this builder
*
* @return a copy of the builder.
*/
public ClientBuilder copy() {
try {

View File

@ -39,13 +39,22 @@ public interface Cluster extends CloseableClient {
CompletableFuture<MemberListResponse> listMember();
/**
* add a new member into the cluster.
* add a non-learner new member into the cluster.
*
* @param peerAddrs the peer addresses of the new member
* @return the response
*/
CompletableFuture<MemberAddResponse> addMember(List<URI> peerAddrs);
/**
* add a new member into the cluster.
*
* @param peerAddrs the peer addresses of the new member
* @param isLearner whether the member is raft learner
* @return the response
*/
CompletableFuture<MemberAddResponse> addMember(List<URI> peerAddrs, boolean isLearner);
/**
* removes an existing member from the cluster.
*

View File

@ -22,11 +22,11 @@ import io.grpc.Metadata;
* Constants of Etcd.
*/
public class Constants {
public static final String TOKEN = "token";
public static final ByteSequence NULL_KEY = ByteSequence.from(new byte[] { '\0' });
public static final Metadata.Key<String> REQUIRE_LEADER_KEY = Metadata.Key.of("hasleader",
public static final Metadata.Key<String> REQUIRE_LEADER_KEY = Metadata.Key.of(
"hasleader",
Metadata.ASCII_STRING_MARSHALLER);
public static final String REQUIRE_LEADER_VALUE = "true";
}

View File

@ -26,6 +26,7 @@ import io.etcd.jetcd.options.CompactOption;
import io.etcd.jetcd.options.DeleteOption;
import io.etcd.jetcd.options.GetOption;
import io.etcd.jetcd.options.PutOption;
import io.etcd.jetcd.options.TxnOption;
import io.etcd.jetcd.support.CloseableClient;
/**
@ -115,4 +116,12 @@ public interface KV extends CloseableClient {
* @return a Txn
*/
Txn txn();
/**
* creates a transaction.
*
* @param option TxnOption
* @return a Txn
*/
Txn txn(TxnOption option);
}

View File

@ -29,13 +29,18 @@ public class KeyValue {
public KeyValue(io.etcd.jetcd.api.KeyValue kv, ByteSequence namespace) {
this.kv = kv;
this.unprefixedKey = ByteSequence
.from(kv.getKey().isEmpty() ? kv.getKey() : Util.unprefixNamespace(kv.getKey(), namespace));
this.value = ByteSequence.from(kv.getValue());
this.unprefixedKey = ByteSequence.from(
kv.getKey().isEmpty()
? kv.getKey()
: Util.unprefixNamespace(kv.getKey(), namespace));
}
/**
* Returns the key
*
* @return the key.
*/
public ByteSequence getKey() {
return unprefixedKey;
@ -43,6 +48,8 @@ public class KeyValue {
/**
* Returns the value
*
* @return the value.
*/
public ByteSequence getValue() {
return value;
@ -50,6 +57,8 @@ public class KeyValue {
/**
* Returns the create revision.
*
* @return the create revision.
*/
public long getCreateRevision() {
return kv.getCreateRevision();
@ -57,6 +66,8 @@ public class KeyValue {
/**
* Returns the mod revision.
*
* @return the mod revision.
*/
public long getModRevision() {
return kv.getModRevision();
@ -64,6 +75,8 @@ public class KeyValue {
/**
* Returns the version.
*
* @return the version.
*/
public long getVersion() {
return kv.getVersion();
@ -71,6 +84,8 @@ public class KeyValue {
/**
* Returns the lease.
*
* @return the lease.
*/
public long getLease() {
return kv.getLease();

View File

@ -17,16 +17,9 @@
package io.etcd.jetcd;
import java.io.OutputStream;
import java.net.URI;
import java.util.concurrent.CompletableFuture;
import io.etcd.jetcd.maintenance.AlarmMember;
import io.etcd.jetcd.maintenance.AlarmResponse;
import io.etcd.jetcd.maintenance.DefragmentResponse;
import io.etcd.jetcd.maintenance.HashKVResponse;
import io.etcd.jetcd.maintenance.MoveLeaderResponse;
import io.etcd.jetcd.maintenance.SnapshotResponse;
import io.etcd.jetcd.maintenance.StatusResponse;
import io.etcd.jetcd.maintenance.*;
import io.etcd.jetcd.support.CloseableClient;
import io.grpc.stub.StreamObserver;
@ -68,16 +61,6 @@ public interface Maintenance extends CloseableClient {
*/
CompletableFuture<AlarmResponse> alarmDisarm(AlarmMember member);
/**
* Defragment one member of the cluster by its endpoint.
*
* @param endpoint the etcd server endpoint.
* @return the response result
* @deprecated use {@link #defragmentMember(String)}
*/
@Deprecated
CompletableFuture<DefragmentResponse> defragmentMember(URI endpoint);
/**
* Defragment one member of the cluster by its endpoint.
*
@ -100,16 +83,6 @@ public interface Maintenance extends CloseableClient {
*/
CompletableFuture<DefragmentResponse> defragmentMember(String target);
/**
* get the status of a member by its endpoint.
*
* @param endpoint the etcd server endpoint.
* @return the response result
* @deprecated use {@link #statusMember(String)}
*/
@Deprecated
CompletableFuture<StatusResponse> statusMember(URI endpoint);
/**
* get the status of a member by its endpoint.
*
@ -118,17 +91,6 @@ public interface Maintenance extends CloseableClient {
*/
CompletableFuture<StatusResponse> statusMember(String target);
/**
* returns a hash of the KV state at the time of the RPC.
*
* @param endpoint the etcd server endpoint.
* @param rev the revision
* @return the response result
* @deprecated use {@link #hashKV(String, long)}
*/
@Deprecated
CompletableFuture<HashKVResponse> hashKV(URI endpoint, long rev);
/**
* returns a hash of the KV state at the time of the RPC.
* If revision is zero, the hash is computed on all keys. If the revision

View File

@ -0,0 +1,32 @@
/*
* Copyright 2016-2023 The jetcd authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.etcd.jetcd;
public class Preconditions {
public static void checkArgument(boolean expression, String errorMessage) {
if (!expression) {
throw new IllegalArgumentException(errorMessage);
}
}
public static void checkState(boolean expression, String errorMessage) {
if (!expression) {
throw new IllegalStateException(errorMessage);
}
}
}

View File

@ -23,6 +23,8 @@ public interface Response {
/**
* Returns the response header
*
* @return the header.
*/
Header getHeader();
@ -30,21 +32,29 @@ public interface Response {
/**
* Returns the cluster id
*
* @return the cluster id.
*/
long getClusterId();
/**
* Returns the member id
*
* @return the member id.
*/
long getMemberId();
/**
* Returns the revision id
*
* @return the revision.
*/
long getRevision();
/**
* Returns the raft term
*
* @return theraft term.
*/
long getRaftTerm();
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2016-2021 The jetcd authors
* Copyright 2016-2023 The jetcd authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -25,20 +25,19 @@ import io.etcd.jetcd.op.Op;
/**
* Txn is the interface that wraps mini-transactions.
*
* <h3>Usage examples</h3>
* <h2>Usage examples</h2>
*
* <pre>
* {@code
* txn.If(
* new Cmp(KEY, Cmp.Op.GREATER, CmpTarget.value(VALUE)),
* new Cmp(KEY, cmp.Op.EQUAL, CmpTarget.version(2))
* ).Then(
* Op.put(KEY2, VALUE2, PutOption.DEFAULT),
* Op.put(KEY3, VALUE3, PutOption.DEFAULT)
* ).Else(
* Op.put(KEY4, VALUE4, PutOption.DEFAULT),
* Op.put(KEY4, VALUE4, PutOption.DEFAULT)
* ).commit();
* new Cmp(KEY, Cmp.Op.GREATER, CmpTarget.value(VALUE)),
* new Cmp(KEY, cmp.Op.EQUAL, CmpTarget.version(2))).Then(
* Op.put(KEY2, VALUE2, PutOption.DEFAULT),
* Op.put(KEY3, VALUE3, PutOption.DEFAULT))
* .Else(
* Op.put(KEY4, VALUE4, PutOption.DEFAULT),
* Op.put(KEY4, VALUE4, PutOption.DEFAULT))
* .commit();
* }
* </pre>
*
@ -48,18 +47,17 @@ import io.etcd.jetcd.op.Op;
* <pre>
* {@code
* txn.If(
* new Cmp(KEY, Cmp.Op.GREATER, CmpTarget.value(VALUE))
* ).If(
* new Cmp(KEY, cmp.Op.EQUAL, CmpTarget.version(VERSION))
* ).Then(
* Op.put(KEY2, VALUE2, PutOption.DEFAULT)
* ).Then(
* Op.put(KEY3, VALUE3, PutOption.DEFAULT)
* ).Else(
* Op.put(KEY4, VALUE4, PutOption.DEFAULT)
* ).Else(
* Op.put(KEY4, VALUE4, PutOption.DEFAULT)
* ).commit();
* new Cmp(KEY, Cmp.Op.GREATER, CmpTarget.value(VALUE))).If(
* new Cmp(KEY, cmp.Op.EQUAL, CmpTarget.version(VERSION)))
* .Then(
* Op.put(KEY2, VALUE2, PutOption.DEFAULT))
* .Then(
* Op.put(KEY3, VALUE3, PutOption.DEFAULT))
* .Else(
* Op.put(KEY4, VALUE4, PutOption.DEFAULT))
* .Else(
* Op.put(KEY4, VALUE4, PutOption.DEFAULT))
* .commit();
* }
* </pre>
*/

View File

@ -226,6 +226,11 @@ public interface Watch extends CloseableClient {
@Override
void close();
/**
* Returns if watcher is already closed
*/
boolean isClosed();
/**
* Requests the latest revision processed and propagates it to listeners
*/

View File

@ -33,6 +33,8 @@ public class AuthRoleListResponse extends AbstractResponse<io.etcd.jetcd.api.Aut
/**
* Returns a list of roles.
*
* @return the roles.
*/
public List<String> getRoles() {
return getResponse().getRolesList();

View File

@ -16,14 +16,10 @@
package io.etcd.jetcd.auth;
import io.etcd.jetcd.Auth;
import io.etcd.jetcd.ByteSequence;
import io.etcd.jetcd.impl.AbstractResponse;
/**
* AuthRoleRevokePermissionResponse returned by
* {@link Auth#roleRevokePermission(ByteSequence.ByteSequence,
* ByteSequence.ByteSequence, ByteSequence.ByteSequence)} contains a header.
* AuthRoleRevokePermissionResponse
*/
public class AuthRoleRevokePermissionResponse extends AbstractResponse<io.etcd.jetcd.api.AuthRoleRevokePermissionResponse> {

View File

@ -16,14 +16,10 @@
package io.etcd.jetcd.auth;
import io.etcd.jetcd.Auth;
import io.etcd.jetcd.ByteSequence;
import io.etcd.jetcd.impl.AbstractResponse;
/**
* AuthUserChangePasswordResponse returned by
* {@link Auth#userChangePassword(ByteSequence.ByteSequence,
* ByteSequence.ByteSequence)} contains a header.
* AuthUserChangePasswordResponse
*/
public class AuthUserChangePasswordResponse extends AbstractResponse<io.etcd.jetcd.api.AuthUserChangePasswordResponse> {

View File

@ -34,6 +34,8 @@ public class AuthUserGetResponse extends AbstractResponse<io.etcd.jetcd.api.Auth
/**
* Returns a list of roles.
*
* @return the roles.
*/
public List<String> getRoles() {
return getResponse().getRolesList();

View File

@ -16,14 +16,10 @@
package io.etcd.jetcd.auth;
import io.etcd.jetcd.Auth;
import io.etcd.jetcd.ByteSequence;
import io.etcd.jetcd.impl.AbstractResponse;
/**
* AuthUserGrantRoleResponse returned by
* {@link Auth#userGrantRole(ByteSequence.ByteSequence,
* ByteSequence.ByteSequence)} contains a header.
* AuthUserGrantRoleResponse
*/
public class AuthUserGrantRoleResponse extends AbstractResponse<io.etcd.jetcd.api.AuthUserGrantRoleResponse> {

View File

@ -33,6 +33,8 @@ public class AuthUserListResponse extends AbstractResponse<io.etcd.jetcd.api.Aut
/**
* Returns a list of users.
*
* @return the users.
*/
public List<String> getUsers() {
return getResponse().getUsersList();

View File

@ -39,6 +39,8 @@ public class Permission {
/**
* Returns the type of Permission: READ, WRITE, READWRITE, or UNRECOGNIZED.
*
* @return the permission type.
*/
public Type getPermType() {
return permType;

View File

@ -31,6 +31,8 @@ public class Member {
/**
* Returns the member ID for this member.
*
* @return the id.
*/
public long getId() {
return member.getID();
@ -38,6 +40,8 @@ public class Member {
/**
* Returns the human-readable name of the member, ff the member is not started, the name will be an empty string.
*
* @return the name.
*/
public String getName() {
return member.getName();
@ -45,6 +49,8 @@ public class Member {
/**
* Returns the list of URLs the member exposes to the cluster for communication.
*
* @return the peer url
*/
public List<URI> getPeerURIs() {
return Util.toURIs(member.getPeerURLsList());
@ -53,8 +59,19 @@ public class Member {
/**
* Returns list of URLs the member exposes to clients for communication, if the member is not started, clientURLs will
* be empty.
*
* @return the client URIs.
*/
public List<URI> getClientURIs() {
return Util.toURIs(member.getClientURLsList());
}
/**
* Returns if the member is raft learner
*
* @return if the member is raft learner
*/
public boolean isLearner() {
return member.getIsLearner();
}
}

View File

@ -22,7 +22,7 @@ import io.etcd.jetcd.Cluster;
import io.etcd.jetcd.impl.AbstractResponse;
/**
* MemberAddResponse returned by {@link Cluster#addMember(List)}
* MemberAddResponse returned by {@link Cluster#addMember(List, boolean)}
* contains a header, added member, and list of members after adding the new member.
*/
public class MemberAddResponse extends AbstractResponse<io.etcd.jetcd.api.MemberAddResponse> {

View File

@ -22,7 +22,9 @@ import java.util.stream.Collectors;
/**
* Util class for Cluster models.
*/
public class Util {
final class Util {
private Util() {
}
/**
* Converts a list of API member to a List of client side member.

View File

@ -34,6 +34,8 @@ public class CampaignResponse extends AbstractResponse<io.etcd.jetcd.api.Campaig
/**
* Returns the resources used for holding leadership of the election.
*
* @return the leader.
*/
public LeaderKey getLeader() {
return leaderKey;

View File

@ -32,7 +32,9 @@ public class LeaderKey {
}
/**
* Returns the election identifier that corresponds to the leadership key. *
* Returns the election identifier that corresponds to the leadership key.
*
* @return the name.
*/
public ByteSequence getName() {
return name;
@ -41,6 +43,8 @@ public class LeaderKey {
/**
* Returns the opaque key representing the ownership of the election. If the key
* is deleted, then leadership is lost.
*
* @return the key.
*/
public ByteSequence getKey() {
return key;
@ -50,6 +54,8 @@ public class LeaderKey {
* Returns the creation revision of the key. It can be used to test for ownership
* of an election during transactions by testing the key's creation revision
* matches rev.
*
* @return the revision.
*/
public long getRevision() {
return revision;
@ -57,6 +63,8 @@ public class LeaderKey {
/**
* Returns the lease ID of the election leader.
*
* @return the lese id.
*/
public long getLease() {
return lease;

View File

@ -30,6 +30,8 @@ public class LeaderResponse extends AbstractResponse<io.etcd.jetcd.api.LeaderRes
/**
* Returns the key-value pair representing the latest leader update.
*
* @return the kv.
*/
public KeyValue getKv() {
return kv;

View File

@ -20,5 +20,4 @@ package io.etcd.jetcd.election;
* Signals that leader for given election does not exist.
*/
public class NoLeaderException extends RuntimeException {
public static final NoLeaderException INSTANCE = new NoLeaderException();
}

View File

@ -20,5 +20,4 @@ package io.etcd.jetcd.election;
* Signals that candidate is not a leader at the moment.
*/
public class NotLeaderException extends RuntimeException {
public static final NotLeaderException INSTANCE = new NotLeaderException();
}

View File

@ -31,7 +31,7 @@ import io.grpc.stub.MetadataUtils;
import com.google.protobuf.ByteString;
import static com.google.common.base.Preconditions.checkArgument;
import static io.etcd.jetcd.Preconditions.checkArgument;
/**
* AuthTokenInterceptor fills header with Auth token of any rpc calls and
@ -58,14 +58,11 @@ class AuthCredential extends CallCredentials {
}
}
@Override
public void thisUsesUnstableApi() {
}
public void refresh() {
meta = null;
}
@SuppressWarnings("rawtypes")
private void authenticate(MetadataApplier applier) {
checkArgument(!manager.builder().user().isEmpty(), "username can not be empty.");
checkArgument(!manager.builder().password().isEmpty(), "password can not be empty.");

View File

@ -55,7 +55,7 @@ import io.etcd.jetcd.auth.Permission;
import com.google.protobuf.ByteString;
import static com.google.common.base.Preconditions.checkNotNull;
import static java.util.Objects.requireNonNull;
/**
* Implementation of etcd auth client.
@ -88,8 +88,8 @@ final class AuthImpl extends Impl implements Auth {
@Override
public CompletableFuture<AuthUserAddResponse> userAdd(ByteSequence user, ByteSequence password) {
checkNotNull(user, "user can't be null");
checkNotNull(password, "password can't be null");
requireNonNull(user, "user can't be null");
requireNonNull(password, "password can't be null");
AuthUserAddRequest addRequest = AuthUserAddRequest.newBuilder()
.setNameBytes(ByteString.copyFrom(user.getBytes()))
@ -103,7 +103,7 @@ final class AuthImpl extends Impl implements Auth {
@Override
public CompletableFuture<AuthUserDeleteResponse> userDelete(ByteSequence user) {
checkNotNull(user, "user can't be null");
requireNonNull(user, "user can't be null");
AuthUserDeleteRequest deleteRequest = AuthUserDeleteRequest.newBuilder()
.setNameBytes(ByteString.copyFrom(user.getBytes()))
@ -116,8 +116,8 @@ final class AuthImpl extends Impl implements Auth {
@Override
public CompletableFuture<AuthUserChangePasswordResponse> userChangePassword(ByteSequence user, ByteSequence password) {
checkNotNull(user, "user can't be null");
checkNotNull(password, "password can't be null");
requireNonNull(user, "user can't be null");
requireNonNull(password, "password can't be null");
AuthUserChangePasswordRequest changePasswordRequest = AuthUserChangePasswordRequest.newBuilder()
.setNameBytes(ByteString.copyFrom(user.getBytes()))
@ -131,7 +131,7 @@ final class AuthImpl extends Impl implements Auth {
@Override
public CompletableFuture<AuthUserGetResponse> userGet(ByteSequence user) {
checkNotNull(user, "user can't be null");
requireNonNull(user, "user can't be null");
AuthUserGetRequest userGetRequest = AuthUserGetRequest.newBuilder()
.setNameBytes(ByteString.copyFrom(user.getBytes()))
@ -153,8 +153,8 @@ final class AuthImpl extends Impl implements Auth {
@Override
public CompletableFuture<AuthUserGrantRoleResponse> userGrantRole(ByteSequence user, ByteSequence role) {
checkNotNull(user, "user can't be null");
checkNotNull(role, "key can't be null");
requireNonNull(user, "user can't be null");
requireNonNull(role, "key can't be null");
AuthUserGrantRoleRequest userGrantRoleRequest = AuthUserGrantRoleRequest.newBuilder()
.setUserBytes(ByteString.copyFrom(user.getBytes()))
@ -168,8 +168,8 @@ final class AuthImpl extends Impl implements Auth {
@Override
public CompletableFuture<AuthUserRevokeRoleResponse> userRevokeRole(ByteSequence user, ByteSequence role) {
checkNotNull(user, "user can't be null");
checkNotNull(role, "key can't be null");
requireNonNull(user, "user can't be null");
requireNonNull(role, "key can't be null");
AuthUserRevokeRoleRequest userRevokeRoleRequest = AuthUserRevokeRoleRequest.newBuilder()
.setNameBytes(ByteString.copyFrom(user.getBytes()))
@ -183,7 +183,7 @@ final class AuthImpl extends Impl implements Auth {
@Override
public CompletableFuture<AuthRoleAddResponse> roleAdd(ByteSequence user) {
checkNotNull(user, "user can't be null");
requireNonNull(user, "user can't be null");
AuthRoleAddRequest roleAddRequest = AuthRoleAddRequest.newBuilder().setNameBytes(ByteString.copyFrom(user.getBytes()))
.build();
@ -196,10 +196,10 @@ final class AuthImpl extends Impl implements Auth {
@Override
public CompletableFuture<AuthRoleGrantPermissionResponse> roleGrantPermission(ByteSequence role, ByteSequence key,
ByteSequence rangeEnd, Permission.Type permType) {
checkNotNull(role, "role can't be null");
checkNotNull(key, "key can't be null");
checkNotNull(rangeEnd, "rangeEnd can't be null");
checkNotNull(permType, "permType can't be null");
requireNonNull(role, "role can't be null");
requireNonNull(key, "key can't be null");
requireNonNull(rangeEnd, "rangeEnd can't be null");
requireNonNull(permType, "permType can't be null");
io.etcd.jetcd.api.Permission.Type type;
switch (permType) {
@ -235,7 +235,7 @@ final class AuthImpl extends Impl implements Auth {
@Override
public CompletableFuture<AuthRoleGetResponse> roleGet(ByteSequence role) {
checkNotNull(role, "role can't be null");
requireNonNull(role, "role can't be null");
AuthRoleGetRequest roleGetRequest = AuthRoleGetRequest.newBuilder()
.setRoleBytes(ByteString.copyFrom(role.getBytes()))
@ -258,14 +258,14 @@ final class AuthImpl extends Impl implements Auth {
@Override
public CompletableFuture<AuthRoleRevokePermissionResponse> roleRevokePermission(ByteSequence role, ByteSequence key,
ByteSequence rangeEnd) {
checkNotNull(role, "role can't be null");
checkNotNull(key, "key can't be null");
checkNotNull(rangeEnd, "rangeEnd can't be null");
requireNonNull(role, "role can't be null");
requireNonNull(key, "key can't be null");
requireNonNull(rangeEnd, "rangeEnd can't be null");
AuthRoleRevokePermissionRequest roleRevokePermissionRequest = AuthRoleRevokePermissionRequest.newBuilder()
.setRoleBytes(ByteString.copyFrom(role.getBytes()))
.setKeyBytes(ByteString.copyFrom(key.getBytes()))
.setRangeEndBytes(ByteString.copyFrom(rangeEnd.getBytes()))
.setKey(ByteString.copyFrom(key.getBytes()))
.setRangeEnd(ByteString.copyFrom(rangeEnd.getBytes()))
.build();
return completable(
@ -275,7 +275,7 @@ final class AuthImpl extends Impl implements Auth {
@Override
public CompletableFuture<AuthRoleDeleteResponse> roleDelete(ByteSequence role) {
checkNotNull(role, "role can't be null");
requireNonNull(role, "role can't be null");
AuthRoleDeleteRequest roleDeleteRequest = AuthRoleDeleteRequest.newBuilder()
.setRoleBytes(ByteString.copyFrom(role.getBytes()))
.build();

View File

@ -16,50 +16,33 @@
package io.etcd.jetcd.impl;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.function.BiConsumer;
import java.util.function.Function;
import java.util.function.Predicate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.etcd.jetcd.ByteSequence;
import io.etcd.jetcd.ClientBuilder;
import io.etcd.jetcd.support.Errors;
import io.grpc.CallOptions;
import io.grpc.Channel;
import io.grpc.ClientCall;
import io.grpc.ClientInterceptor;
import io.etcd.jetcd.support.Util;
import io.grpc.*;
import io.grpc.ForwardingClientCall.SimpleForwardingClientCall;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.grpc.Metadata;
import io.grpc.MethodDescriptor;
import io.grpc.netty.NegotiationType;
import io.grpc.stub.AbstractStub;
import io.netty.channel.ChannelOption;
import io.vertx.core.Vertx;
import io.vertx.core.VertxOptions;
import io.vertx.grpc.VertxChannelBuilder;
import com.google.common.util.concurrent.ListenableFuture;
import net.jodah.failsafe.Failsafe;
import net.jodah.failsafe.RetryPolicy;
import static io.etcd.jetcd.common.exception.EtcdExceptionFactory.toEtcdException;
final class ClientConnectionManager {
private static final Logger LOGGER = LoggerFactory.getLogger(ClientConnectionManager.class);
private final Object lock;
private final ClientBuilder builder;
private final ExecutorService executorService;
private final AuthCredential credential;
private volatile Vertx vertx;
private volatile ManagedChannel managedChannel;
ClientConnectionManager(ClientBuilder builder) {
@ -73,10 +56,15 @@ final class ClientConnectionManager {
this.credential = new AuthCredential(this);
if (builder.executorService() == null) {
this.executorService = Executors.newCachedThreadPool();
// default to daemon
this.executorService = Executors.newCachedThreadPool(Util.createThreadFactory("jetcd-", true));
} else {
this.executorService = builder.executorService();
}
if (builder.vertx() != null) {
this.vertx = builder.vertx();
}
}
ManagedChannel getChannel() {
@ -135,6 +123,9 @@ final class ClientConnectionManager {
if (managedChannel != null) {
managedChannel.shutdownNow();
}
if (vertx != null) {
vertx.close();
}
}
if (builder.executorService() == null) {
@ -168,8 +159,7 @@ final class ClientConnectionManager {
throw new IllegalArgumentException("At least one endpoint should be provided");
}
final Vertx vertx = Vertx.vertx();
final VertxChannelBuilder channelBuilder = VertxChannelBuilder.forTarget(vertx, target);
final VertxChannelBuilder channelBuilder = VertxChannelBuilder.forTarget(vertx(), target);
if (builder.authority() != null) {
channelBuilder.overrideAuthority(builder.authority());
@ -201,7 +191,7 @@ final class ClientConnectionManager {
if (builder.loadBalancerPolicy() != null) {
channelBuilder.defaultLoadBalancingPolicy(builder.loadBalancerPolicy());
} else {
channelBuilder.defaultLoadBalancingPolicy("pick_first");
channelBuilder.defaultLoadBalancingPolicy("round_robin");
}
if (builder.headers() != null) {
@ -230,48 +220,15 @@ final class ClientConnectionManager {
return channelBuilder;
}
/**
* execute the task and retry it in case of failure.
*
* @param task a function that returns a new SourceFuture.
* @param resultConvert a function that converts Type S to Type T.
* @param doRetry a function that determines the retry condition base on SourceFuture error.
* @param <S> Source type
* @param <T> Converted Type.
* @return a CompletableFuture with type T.
*/
@SuppressWarnings("FutureReturnValueIgnored")
public <S, T> CompletableFuture<T> execute(
Callable<ListenableFuture<S>> task,
Function<S, T> resultConvert,
Predicate<Throwable> doRetry) {
RetryPolicy<CompletableFuture<S>> retryPolicy = new RetryPolicy<CompletableFuture<S>>().handleIf(doRetry)
.onRetriesExceeded(e -> LOGGER.warn("maximum number of auto retries reached"))
.withBackoff(builder.retryDelay(), builder.retryMaxDelay(), builder.retryChronoUnit());
if (builder.retryMaxDuration() != null) {
retryPolicy = retryPolicy.withMaxDuration(builder.retryMaxDuration());
Vertx vertx() {
if (this.vertx == null) {
synchronized (this.lock) {
if (this.vertx == null) {
this.vertx = Vertx.vertx(new VertxOptions().setUseDaemonThread(true));
}
}
}
return Failsafe.with(retryPolicy).with(executorService)
.getAsyncExecution(execution -> {
CompletableFuture<S> wrappedFuture = new CompletableFuture<>();
ListenableFuture<S> future = task.call();
future.addListener(() -> {
try {
wrappedFuture.complete(future.get());
execution.complete(wrappedFuture);
} catch (Exception error) {
if (Errors.isInvalidTokenError(error)) {
authCredential().refresh();
}
if (!execution.retryOn(error)) {
// permanent failure
wrappedFuture.completeExceptionally(error);
}
}
}, executorService);
}).thenCompose(f -> f.thenApply(resultConvert));
return this.vertx;
}
}

View File

@ -56,14 +56,26 @@ final class ClusterImpl extends Impl implements Cluster {
}
/**
* add a new member into the cluster.
* add a non-learner new member into the cluster.
*
* @param peerAddrs the peer addresses of the new member
*/
@Override
public CompletableFuture<MemberAddResponse> addMember(List<URI> peerAddrs) {
return addMember(peerAddrs, false);
}
/**
* add a new member into the cluster.
*
* @param peerAddrs the peer addresses of the new member
* @param isLearner whether the member is raft learner
*/
@Override
public CompletableFuture<MemberAddResponse> addMember(List<URI> peerAddrs, boolean isLearner) {
MemberAddRequest memberAddRequest = MemberAddRequest.newBuilder()
.addAllPeerURLs(peerAddrs.stream().map(URI::toString).collect(Collectors.toList()))
.setIsLearner(isLearner)
.build();
return completable(

View File

@ -25,7 +25,6 @@ import io.etcd.jetcd.api.LeaderRequest;
import io.etcd.jetcd.api.ProclaimRequest;
import io.etcd.jetcd.api.ResignRequest;
import io.etcd.jetcd.api.VertxElectionGrpc;
import io.etcd.jetcd.common.exception.EtcdExceptionFactory;
import io.etcd.jetcd.election.CampaignResponse;
import io.etcd.jetcd.election.LeaderKey;
import io.etcd.jetcd.election.LeaderResponse;
@ -33,13 +32,14 @@ import io.etcd.jetcd.election.NoLeaderException;
import io.etcd.jetcd.election.NotLeaderException;
import io.etcd.jetcd.election.ProclaimResponse;
import io.etcd.jetcd.election.ResignResponse;
import io.etcd.jetcd.support.Errors;
import io.etcd.jetcd.support.Util;
import io.grpc.StatusRuntimeException;
import com.google.protobuf.ByteString;
import static com.google.common.base.Preconditions.checkNotNull;
import static io.etcd.jetcd.common.exception.EtcdExceptionFactory.toEtcdException;
import static java.util.Objects.requireNonNull;
final class ElectionImpl extends Impl implements Election {
private final VertxElectionGrpc.ElectionVertxStub stub;
@ -52,10 +52,31 @@ final class ElectionImpl extends Impl implements Election {
this.namespace = connectionManager.getNamespace();
}
// Election operations are done in a context where a client is trying to implement
// some fault tolerance related use case; in that type of context, it makes sense to always
// apply require leader, since we don't want a client connected to a non-raft-leader server
// have an election method just go silent if the server the client happens to be connected to
// becomes partitioned from the actual raft-leader server in the etcd servers cluster:
// in that scenario and without required leader, an attempt to campaign could block forever
// not because some other client is already an election leader, but because the server the client
// is connected to is partitioned and can't tell.
// With require leader, in that case the call will fail and we give
// the client the ability to (a) know (b) retry on a different server.
// The retry on a different server should happen automatically if the connection manager is using
// a round robin strategy.
//
// Beware in the context of this election API, the word "leader" is overloaded.
// In the paragraph above when we say "raft-leader" we are talking about the etcd server that is a leader
// of the etcd servers cluster according to raft, we are not talking about the client that
// happens to be the leader of an election using the election API in this file.
private VertxElectionGrpc.ElectionVertxStub stubWithLeader() {
return Util.applyRequireLeader(true, stub);
}
@Override
public CompletableFuture<CampaignResponse> campaign(ByteSequence electionName, long leaseId, ByteSequence proposal) {
checkNotNull(electionName, "election name should not be null");
checkNotNull(proposal, "proposal should not be null");
requireNonNull(electionName, "election name should not be null");
requireNonNull(proposal, "proposal should not be null");
CampaignRequest request = CampaignRequest.newBuilder()
.setName(Util.prefixNamespace(electionName, namespace))
@ -63,16 +84,17 @@ final class ElectionImpl extends Impl implements Election {
.setLease(leaseId)
.build();
return completable(
stub.campaign(request),
CampaignResponse::new,
this::convertException);
return wrapConvertException(
execute(
() -> stubWithLeader().campaign(request),
CampaignResponse::new,
Errors::isRetryableForNoSafeRedoOp));
}
@Override
public CompletableFuture<ProclaimResponse> proclaim(LeaderKey leaderKey, ByteSequence proposal) {
checkNotNull(leaderKey, "leader key should not be null");
checkNotNull(proposal, "proposal should not be null");
requireNonNull(leaderKey, "leader key should not be null");
requireNonNull(proposal, "proposal should not be null");
ProclaimRequest request = ProclaimRequest.newBuilder()
.setLeader(
@ -85,44 +107,46 @@ final class ElectionImpl extends Impl implements Election {
.setValue(ByteString.copyFrom(proposal.getBytes()))
.build();
return completable(
stub.proclaim(request),
ProclaimResponse::new,
this::convertException);
return wrapConvertException(
execute(
() -> stubWithLeader().proclaim(request),
ProclaimResponse::new,
Errors::isRetryableForNoSafeRedoOp));
}
@Override
public CompletableFuture<LeaderResponse> leader(ByteSequence electionName) {
checkNotNull(electionName, "election name should not be null");
requireNonNull(electionName, "election name should not be null");
LeaderRequest request = LeaderRequest.newBuilder()
.setName(Util.prefixNamespace(electionName, namespace))
.build();
return completable(
stub.leader(request),
r -> new LeaderResponse(r, namespace),
this::convertException);
return wrapConvertException(
execute(
() -> stubWithLeader().leader(request),
response -> new LeaderResponse(response, namespace),
Errors::isRetryableForNoSafeRedoOp));
}
@Override
public void observe(ByteSequence electionName, Listener listener) {
checkNotNull(electionName, "election name should not be null");
checkNotNull(listener, "listener should not be null");
requireNonNull(electionName, "election name should not be null");
requireNonNull(listener, "listener should not be null");
LeaderRequest request = LeaderRequest.newBuilder()
.setName(ByteString.copyFrom(electionName.getBytes()))
.setName(Util.prefixNamespace(electionName, namespace))
.build();
stub.observe(request)
.handler(value -> listener.onNext(new LeaderResponse(value, namespace)))
.endHandler(ignored -> listener.onCompleted())
.exceptionHandler(error -> listener.onError(EtcdExceptionFactory.toEtcdException(error)));
stubWithLeader().observeWithHandler(request,
value -> listener.onNext(new LeaderResponse(value, namespace)),
ignored -> listener.onCompleted(),
error -> listener.onError(toEtcdException(error)));
}
@Override
public CompletableFuture<ResignResponse> resign(LeaderKey leaderKey) {
checkNotNull(leaderKey, "leader key should not be null");
requireNonNull(leaderKey, "leader key should not be null");
ResignRequest request = ResignRequest.newBuilder()
.setLeader(
@ -134,25 +158,42 @@ final class ElectionImpl extends Impl implements Election {
.build())
.build();
return completable(
stub.resign(request),
ResignResponse::new,
this::convertException);
return wrapConvertException(
execute(
() -> stubWithLeader().resign(request),
ResignResponse::new,
Errors::isRetryableForNoSafeRedoOp));
}
private Throwable convertException(Throwable e) {
if (e instanceof StatusRuntimeException) {
StatusRuntimeException exception = (StatusRuntimeException) e;
String description = exception.getStatus().getDescription();
// different APIs use different messages. we cannot distinguish missing leader error otherwise,
// because communicated status is always UNKNOWN
if ("election: not leader".equals(description)) {
return NotLeaderException.INSTANCE;
} else if ("election: no leader".equals(description)) {
return NoLeaderException.INSTANCE;
}
}
private <S> CompletableFuture<S> wrapConvertException(CompletableFuture<S> future) {
return future.exceptionally(e -> {
throw convertException(e);
});
}
private RuntimeException convertException(Throwable e) {
Throwable cause = e;
while (cause != null) {
if (cause instanceof StatusRuntimeException) {
StatusRuntimeException exception = (StatusRuntimeException) cause;
String description = exception.getStatus().getDescription();
// different APIs use different messages. we cannot distinguish missing leader error otherwise,
// because communicated status is always UNKNOWN
if ("election: not leader".equals(description)) {
// Candidate is not a leader at the moment.
// Note there is a one letter difference, but this exception type is not the same as
// NoLeaderException.
return new NotLeaderException();
}
if ("election: no leader".equals(description)) {
// Leader for given election does not exist.
// Note there is a one letter difference, but this exception type is not the same as
// NotLeaderException.
return new NoLeaderException();
}
}
cause = cause.getCause();
}
return toEtcdException(e);
}
}

View File

@ -13,9 +13,11 @@ import io.etcd.jetcd.support.Errors;
import io.grpc.Status;
import io.vertx.core.Future;
import net.jodah.failsafe.Failsafe;
import net.jodah.failsafe.RetryPolicy;
import dev.failsafe.Failsafe;
import dev.failsafe.RetryPolicy;
import dev.failsafe.RetryPolicyBuilder;
import static io.etcd.jetcd.support.Errors.isAuthStoreExpired;
import static io.etcd.jetcd.support.Errors.isInvalidTokenError;
abstract class Impl {
@ -87,9 +89,11 @@ abstract class Impl {
*/
protected <S, T> CompletableFuture<T> execute(
Supplier<Future<S>> supplier,
Function<S, T> resultConvert) {
Function<S, T> resultConvert,
boolean autoRetry) {
return execute(supplier, resultConvert, Errors::isRetryable);
return execute(supplier, resultConvert,
autoRetry ? Errors::isRetryableForSafeRedoOp : Errors::isRetryableForNoSafeRedoOp);
}
/**
@ -107,28 +111,50 @@ abstract class Impl {
Function<S, T> resultConvert,
Predicate<Status> doRetry) {
RetryPolicy<S> retryPolicy = new RetryPolicy<S>()
return Failsafe
.with(retryPolicy(doRetry))
.with(connectionManager.getExecutorService())
.getStageAsync(() -> supplier.get().toCompletionStage())
.thenApply(resultConvert);
}
protected <S> RetryPolicy<S> retryPolicy(Predicate<Status> doRetry) {
RetryPolicyBuilder<S> policy = RetryPolicy.<S> builder()
.onFailure(e -> {
logger.warn("retry failure (attempt: {}, error: {})",
e.getAttemptCount(),
e.getException() != null ? e.getException().getMessage() : "<none>");
})
.onRetry(e -> {
logger.debug("retry (attempt: {}, error: {})",
e.getAttemptCount(),
e.getLastException() != null ? e.getLastException().getMessage() : "<none>");
})
.onRetriesExceeded(e -> {
logger.warn("maximum number of auto retries reached (attempt: {}, error: {})",
e.getAttemptCount(),
e.getException() != null ? e.getException().getMessage() : "<none>");
})
.handleIf(throwable -> {
Status status = Status.fromThrowable(throwable);
if (isInvalidTokenError(status)) {
connectionManager.authCredential().refresh();
}
if (isAuthStoreExpired(status)) {
connectionManager.authCredential().refresh();
}
return doRetry.test(status);
})
.onRetriesExceeded(e -> logger.warn("maximum number of auto retries reached"))
.withMaxRetries(connectionManager.builder().retryMaxAttempts())
.withBackoff(
connectionManager.builder().retryDelay(),
connectionManager.builder().retryMaxDelay(),
connectionManager.builder().retryChronoUnit());
if (connectionManager.builder().retryMaxDuration() != null) {
retryPolicy = retryPolicy.withMaxDuration(connectionManager.builder().retryMaxDuration());
policy = policy.withMaxDuration(connectionManager.builder().retryMaxDuration());
}
return Failsafe
.with(retryPolicy)
.with(connectionManager.getExecutorService())
.getStageAsync(() -> supplier.get().toCompletionStage())
.thenApply(resultConvert);
return policy.build();
}
}

View File

@ -33,10 +33,11 @@ import io.etcd.jetcd.options.CompactOption;
import io.etcd.jetcd.options.DeleteOption;
import io.etcd.jetcd.options.GetOption;
import io.etcd.jetcd.options.PutOption;
import io.etcd.jetcd.options.TxnOption;
import io.etcd.jetcd.support.Errors;
import io.etcd.jetcd.support.Requests;
import static com.google.common.base.Preconditions.checkNotNull;
import static java.util.Objects.requireNonNull;
/**
* Implementation of etcd kv client.
@ -59,13 +60,13 @@ final class KVImpl extends Impl implements KV {
@Override
public CompletableFuture<PutResponse> put(ByteSequence key, ByteSequence value, PutOption option) {
checkNotNull(key, "key should not be null");
checkNotNull(value, "value should not be null");
checkNotNull(option, "option should not be null");
requireNonNull(key, "key should not be null");
requireNonNull(value, "value should not be null");
requireNonNull(option, "option should not be null");
return execute(
() -> stub.put(Requests.mapPutRequest(key, value, option, namespace)),
response -> new PutResponse(response, namespace),
Errors::isRetryable);
option.isAutoRetry() ? Errors::isRetryableForSafeRedoOp : Errors::isRetryableForNoSafeRedoOp);
}
@Override
@ -75,13 +76,13 @@ final class KVImpl extends Impl implements KV {
@Override
public CompletableFuture<GetResponse> get(ByteSequence key, GetOption option) {
checkNotNull(key, "key should not be null");
checkNotNull(option, "option should not be null");
requireNonNull(key, "key should not be null");
requireNonNull(option, "option should not be null");
return execute(
() -> stub.range(Requests.mapRangeRequest(key, option, namespace)),
response -> new GetResponse(response, namespace),
Errors::isRetryable);
Errors::isRetryableForSafeRedoOp);
}
@Override
@ -91,13 +92,13 @@ final class KVImpl extends Impl implements KV {
@Override
public CompletableFuture<DeleteResponse> delete(ByteSequence key, DeleteOption option) {
checkNotNull(key, "key should not be null");
checkNotNull(option, "option should not be null");
requireNonNull(key, "key should not be null");
requireNonNull(option, "option should not be null");
return execute(
() -> stub.deleteRange(Requests.mapDeleteRequest(key, option, namespace)),
response -> new DeleteResponse(response, namespace),
Errors::isRetryable);
option.isAutoRetry() ? Errors::isRetryableForSafeRedoOp : Errors::isRetryableForNoSafeRedoOp);
}
@Override
@ -107,7 +108,7 @@ final class KVImpl extends Impl implements KV {
@Override
public CompletableFuture<CompactResponse> compact(long rev, CompactOption option) {
checkNotNull(option, "option should not be null");
requireNonNull(option, "option should not be null");
CompactionRequest request = CompactionRequest.newBuilder()
.setRevision(rev).setPhysical(option.isPhysical())
@ -116,15 +117,21 @@ final class KVImpl extends Impl implements KV {
return execute(
() -> stub.compact(request),
CompactResponse::new,
Errors::isRetryable);
Errors::isRetryableForSafeRedoOp);
}
@Override
public Txn txn() {
return txn(TxnOption.DEFAULT);
}
@Override
public Txn txn(TxnOption option) {
return TxnImpl.newTxn(
request -> execute(
() -> stub.txn(request),
response -> new TxnResponse(response, namespace), Errors::isRetryable),
response -> new TxnResponse(response, namespace),
option.isAutoRetry() ? Errors::isRetryableForSafeRedoOp : Errors::isRetryableForNoSafeRedoOp),
namespace);
}
}

View File

@ -16,15 +16,15 @@
package io.etcd.jetcd.impl;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import io.etcd.jetcd.Lease;
import io.etcd.jetcd.api.LeaseGrantRequest;
@ -44,10 +44,10 @@ import io.etcd.jetcd.support.Util;
import io.grpc.stub.StreamObserver;
import io.vertx.core.streams.WriteStream;
import static com.google.common.base.Preconditions.checkNotNull;
import static io.etcd.jetcd.common.exception.EtcdExceptionFactory.newClosedLeaseClientException;
import static io.etcd.jetcd.common.exception.EtcdExceptionFactory.newEtcdException;
import static io.etcd.jetcd.common.exception.EtcdExceptionFactory.toEtcdException;
import static java.util.Objects.requireNonNull;
/**
* Implementation of lease client.
@ -84,7 +84,8 @@ final class LeaseImpl extends Impl implements Lease {
LeaseGrantRequest.newBuilder()
.setTTL(ttl)
.build()),
LeaseGrantResponse::new);
LeaseGrantResponse::new,
true);
}
@Override
@ -94,7 +95,8 @@ final class LeaseImpl extends Impl implements Lease {
LeaseGrantRequest.newBuilder()
.setTTL(ttl)
.build()),
LeaseGrantResponse::new);
LeaseGrantResponse::new,
true);
}
@Override
@ -104,12 +106,13 @@ final class LeaseImpl extends Impl implements Lease {
LeaseRevokeRequest.newBuilder()
.setID(leaseId)
.build()),
LeaseRevokeResponse::new);
LeaseRevokeResponse::new,
true);
}
@Override
public CompletableFuture<LeaseTimeToLiveResponse> timeToLive(long leaseId, LeaseOption option) {
checkNotNull(option, "LeaseOption should not be null");
requireNonNull(option, "LeaseOption should not be null");
LeaseTimeToLiveRequest leaseTimeToLiveRequest = LeaseTimeToLiveRequest.newBuilder()
.setID(leaseId)
@ -118,7 +121,8 @@ final class LeaseImpl extends Impl implements Lease {
return execute(
() -> this.stub.leaseTimeToLive(leaseTimeToLiveRequest),
LeaseTimeToLiveResponse::new);
LeaseTimeToLiveResponse::new,
true);
}
@Override
@ -143,27 +147,28 @@ final class LeaseImpl extends Impl implements Lease {
@Override
public CompletableFuture<LeaseKeepAliveResponse> keepAliveOnce(long leaseId) {
final AtomicReference<WriteStream<LeaseKeepAliveRequest>> ref = new AtomicReference<>();
final CompletableFuture<LeaseKeepAliveResponse> future = new CompletableFuture<>();
final LeaseKeepAliveRequest req = LeaseKeepAliveRequest.newBuilder().setID(leaseId).build();
final CloseableClient ka = keepAlive(leaseId, new StreamObserver<LeaseKeepAliveResponse>() {
@Override
public void onNext(LeaseKeepAliveResponse value) {
future.complete(value);
}
leaseStub
.leaseKeepAliveWithHandler(
s -> {
ref.set(s);
s.write(req);
},
r -> {
if (r.getTTL() != 0) {
future.complete(new LeaseKeepAliveResponse(r));
} else {
future.completeExceptionally(
newEtcdException(ErrorCode.NOT_FOUND, "etcdserver: requested lease not found"));
}
},
null,
future::completeExceptionally);
@Override
public void onError(Throwable t) {
future.completeExceptionally(toEtcdException(t));
}
@Override
public void onCompleted() {
}
});
return future.whenCompleteAsync(
(val, throwable) -> ka.close(),
connectionManager().getExecutorService());
return future.whenComplete((r, t) -> ref.get().end(req));
}
@Override
@ -186,20 +191,20 @@ final class LeaseImpl extends Impl implements Lease {
* The KeepAliver hold a background task and stream for keep aliaves.
*/
private final class KeepAlive extends Service {
private volatile ScheduledFuture<?> task;
private volatile ScheduledFuture<?> restart;
private volatile ScheduledExecutorService executor;
private volatile WriteStream<io.etcd.jetcd.api.LeaseKeepAliveRequest> requestStream;
private volatile Long task;
private volatile Long restart;
private volatile WriteStream<LeaseKeepAliveRequest> requestStream;
public KeepAlive() {
this.executor = Executors.newScheduledThreadPool(2);
}
@Override
public void doStart() {
leaseStub.leaseKeepAlive(this::writeHandler)
.handler(this::handleResponse)
.exceptionHandler(this::handleException);
leaseStub.leaseKeepAliveWithHandler(
this::writeHandler,
this::handleResponse,
null,
this::handleException);
}
@Override
@ -208,12 +213,10 @@ final class LeaseImpl extends Impl implements Lease {
requestStream.end();
}
if (this.restart != null) {
this.restart.cancel(true);
this.restart = null;
connectionManager().vertx().cancelTimer(this.restart);
}
if (this.task != null) {
this.task.cancel(true);
this.task = null;
connectionManager().vertx().cancelTimer(this.task);
}
}
@ -223,20 +226,20 @@ final class LeaseImpl extends Impl implements Lease {
this.task = null;
this.restart = null;
this.executor.shutdownNow();
}
private void writeHandler(WriteStream<io.etcd.jetcd.api.LeaseKeepAliveRequest> stream) {
private void writeHandler(WriteStream<LeaseKeepAliveRequest> stream) {
requestStream = stream;
task = executor.scheduleAtFixedRate(
() -> keepAlives.values().forEach(element -> sendKeepAlive(element, stream)),
task = connectionManager().vertx().setPeriodic(
0,
500,
TimeUnit.MILLISECONDS);
l -> {
keepAlives.values().forEach(element -> sendKeepAlive(element, stream));
});
}
private void sendKeepAlive(KeepAliveObserver observer, WriteStream<io.etcd.jetcd.api.LeaseKeepAliveRequest> stream) {
private void sendKeepAlive(KeepAliveObserver observer, WriteStream<LeaseKeepAliveRequest> stream) {
if (observer.getNextKeepAlive() < System.currentTimeMillis()) {
stream.write(
LeaseKeepAliveRequest.newBuilder().setID(observer.getLeaseId()).build());
@ -267,12 +270,20 @@ final class LeaseImpl extends Impl implements Lease {
}
}
private synchronized void handleException(Throwable r) {
private synchronized void handleException(Throwable throwable) {
if (!this.isRunning()) {
return;
}
restart = this.executor.schedule(this::restart, 500, TimeUnit.MILLISECONDS);
keepAlives.values().forEach(ka -> ka.onError(throwable));
restart = connectionManager().vertx().setTimer(
500,
l -> {
if (isRunning()) {
restart();
}
});
}
}
@ -280,42 +291,35 @@ final class LeaseImpl extends Impl implements Lease {
* The DeadLiner hold a background task to check deadlines.
*/
private class DeadLine extends Service {
private volatile ScheduledFuture<?> task;
private volatile ScheduledExecutorService executor;
private volatile Long task;
public DeadLine() {
this.executor = Executors.newScheduledThreadPool(2);
}
@Override
public void doStart() {
this.task = executor.scheduleAtFixedRate(() -> {
long now = System.currentTimeMillis();
this.task = connectionManager().vertx().setPeriodic(
0,
1000,
l -> {
long now = System.currentTimeMillis();
keepAlives.values().removeIf(ka -> {
if (ka.getDeadLine() < now) {
ka.onCompleted();
return true;
}
return false;
keepAlives.values().removeIf(ka -> {
if (ka.getDeadLine() < now) {
ka.onCompleted();
return true;
}
return false;
});
});
}, 0, 1000, TimeUnit.MILLISECONDS);
}
@Override
public void doStop() {
if (this.task != null) {
this.task.cancel(true);
connectionManager().vertx().cancelTimer(this.task);
}
}
@Override
public void close() {
super.close();
this.executor.shutdownNow();
}
}
/**
@ -329,6 +333,10 @@ final class LeaseImpl extends Impl implements Lease {
private long nextKeepAlive;
public KeepAliveObserver(long leaseId) {
this(leaseId, Collections.emptyList());
}
public KeepAliveObserver(long leaseId, Collection<StreamObserver<LeaseKeepAliveResponse>> observers) {
this.nextKeepAlive = System.currentTimeMillis();
// Use user-provided timeout if present to avoid removing KeepAlive before first response from server
@ -337,7 +345,7 @@ final class LeaseImpl extends Impl implements Lease {
: DEFAULT_FIRST_KEEPALIVE_TIMEOUT_MS;
this.deadLine = nextKeepAlive + initialKeepAliveTimeoutMs;
this.observers = new CopyOnWriteArrayList<>();
this.observers = new CopyOnWriteArrayList<>(observers);
this.leaseId = leaseId;
}

View File

@ -28,12 +28,28 @@ import io.etcd.jetcd.lock.UnlockResponse;
import io.etcd.jetcd.support.Errors;
import io.etcd.jetcd.support.Util;
import static com.google.common.base.Preconditions.checkNotNull;
import static java.util.Objects.requireNonNull;
final class LockImpl extends Impl implements Lock {
private final VertxLockGrpc.LockVertxStub stub;
private final ByteSequence namespace;
// Lock operations are done in a context where a client is trying to implement
// some strict mutual exclusion use case; in that type of context, it makes sense to always
// apply require leader, since we don't want a client connected to a non-raft-leader server
// to have a lock method just go silent if the server the client happens to be connected to
// becomes partitioned from the actual raft-leader server in the etcd servers cluster:
// in that scenario and without required leader, an attempt to lock could block forever
// not because some other client is already holding a lock, but because the server the client
// is connected to is partitioned and can't tell.
// With require leader, in that case the call will fail and the client has the ability to
// (a) know (b) retry on a different server.
// The retry on a different server should happen automatically if the connection manager is using
// a round robin strategy.
private VertxLockGrpc.LockVertxStub stubWithLeader() {
return Util.applyRequireLeader(true, stub);
}
LockImpl(ClientConnectionManager connectionManager) {
super(connectionManager);
@ -43,7 +59,7 @@ final class LockImpl extends Impl implements Lock {
@Override
public CompletableFuture<LockResponse> lock(ByteSequence name, long leaseId) {
checkNotNull(name);
requireNonNull(name);
LockRequest request = LockRequest.newBuilder()
.setName(Util.prefixNamespace(name, namespace))
@ -51,22 +67,22 @@ final class LockImpl extends Impl implements Lock {
.build();
return execute(
() -> stub.lock(request),
() -> stubWithLeader().lock(request),
response -> new LockResponse(response, namespace),
Errors::isRetryable);
Errors::isRetryableForSafeRedoOp);
}
@Override
public CompletableFuture<UnlockResponse> unlock(ByteSequence lockKey) {
checkNotNull(lockKey);
requireNonNull(lockKey);
UnlockRequest request = UnlockRequest.newBuilder()
.setKey(Util.prefixNamespace(lockKey, namespace))
.build();
return execute(
() -> stub.unlock(request),
() -> stubWithLeader().unlock(request),
UnlockResponse::new,
Errors::isRetryable);
Errors::isRetryableForSafeRedoOp);
}
}

View File

@ -18,26 +18,17 @@ package io.etcd.jetcd.impl;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicLong;
import io.etcd.jetcd.Maintenance;
import io.etcd.jetcd.api.AlarmRequest;
import io.etcd.jetcd.api.*;
import io.etcd.jetcd.api.AlarmType;
import io.etcd.jetcd.api.DefragmentRequest;
import io.etcd.jetcd.api.HashKVRequest;
import io.etcd.jetcd.api.MaintenanceGrpc;
import io.etcd.jetcd.api.MoveLeaderRequest;
import io.etcd.jetcd.api.SnapshotRequest;
import io.etcd.jetcd.api.StatusRequest;
import io.etcd.jetcd.api.VertxMaintenanceGrpc;
import io.etcd.jetcd.maintenance.AlarmResponse;
import io.etcd.jetcd.maintenance.DefragmentResponse;
import io.etcd.jetcd.maintenance.HashKVResponse;
import io.etcd.jetcd.maintenance.MoveLeaderResponse;
import io.etcd.jetcd.maintenance.StatusResponse;
import io.etcd.jetcd.support.Util;
import io.grpc.stub.StreamObserver;
import static com.google.common.base.Preconditions.checkArgument;
@ -80,50 +71,28 @@ final class MaintenanceImpl extends Impl implements Maintenance {
return completable(this.stub.alarm(alarmRequest), AlarmResponse::new);
}
@Override
public CompletableFuture<DefragmentResponse> defragmentMember(URI endpoint) {
return this.connectionManager().withNewChannel(
// TODO
endpoint.toString(),
MaintenanceGrpc::newFutureStub,
stub -> Util.toCompletableFuture(
stub.defragment(DefragmentRequest.getDefaultInstance()),
DefragmentResponse::new,
this.connectionManager().getExecutorService()));
}
@Override
public CompletableFuture<DefragmentResponse> defragmentMember(String target) {
return this.connectionManager().withNewChannel(
target,
MaintenanceGrpc::newFutureStub,
stub -> Util.toCompletableFuture(
stub.defragment(DefragmentRequest.getDefaultInstance()),
DefragmentResponse::new,
this.connectionManager().getExecutorService()));
}
@Override
public CompletableFuture<StatusResponse> statusMember(URI endpoint) {
return this.connectionManager().withNewChannel(
// TODO
endpoint.toString(),
MaintenanceGrpc::newFutureStub,
stub -> Util.toCompletableFuture(
stub.status(StatusRequest.getDefaultInstance()),
StatusResponse::new,
this.connectionManager().getExecutorService()));
VertxMaintenanceGrpc::newVertxStub,
stub -> {
return stub.defragment(DefragmentRequest.getDefaultInstance())
.map(DefragmentResponse::new)
.toCompletionStage().toCompletableFuture();
});
}
@Override
public CompletableFuture<StatusResponse> statusMember(String target) {
return this.connectionManager().withNewChannel(
target,
MaintenanceGrpc::newFutureStub,
stub -> Util.toCompletableFuture(
stub.status(StatusRequest.getDefaultInstance()),
StatusResponse::new,
this.connectionManager().getExecutorService()));
VertxMaintenanceGrpc::newVertxStub,
stub -> {
return stub.status(StatusRequest.getDefaultInstance())
.map(StatusResponse::new)
.toCompletionStage().toCompletableFuture();
});
}
@Override
@ -133,27 +102,16 @@ final class MaintenanceImpl extends Impl implements Maintenance {
MoveLeaderResponse::new);
}
@Override
public CompletableFuture<HashKVResponse> hashKV(URI endpoint, long rev) {
return this.connectionManager().withNewChannel(
// TODO
endpoint.toString(),
MaintenanceGrpc::newFutureStub,
stub -> Util.toCompletableFuture(
stub.hashKV(HashKVRequest.newBuilder().setRevision(rev).build()),
HashKVResponse::new,
this.connectionManager().getExecutorService()));
}
@Override
public CompletableFuture<HashKVResponse> hashKV(String target, long rev) {
return this.connectionManager().withNewChannel(
target,
MaintenanceGrpc::newFutureStub,
stub -> Util.toCompletableFuture(
stub.hashKV(HashKVRequest.newBuilder().setRevision(rev).build()),
HashKVResponse::new,
this.connectionManager().getExecutorService()));
VertxMaintenanceGrpc::newVertxStub,
stub -> {
return stub.hashKV(HashKVRequest.newBuilder().setRevision(rev).build())
.map(HashKVResponse::new)
.toCompletionStage().toCompletableFuture();
});
}
@Override
@ -161,19 +119,20 @@ final class MaintenanceImpl extends Impl implements Maintenance {
final CompletableFuture<Long> answer = new CompletableFuture<>();
final AtomicLong bytes = new AtomicLong(0);
this.stub.snapshot(SnapshotRequest.getDefaultInstance())
.handler(r -> {
this.stub.snapshotWithHandler(
SnapshotRequest.getDefaultInstance(),
r -> {
try {
r.getBlob().writeTo(outputStream);
bytes.addAndGet(r.getBlob().size());
} catch (IOException e) {
answer.completeExceptionally(toEtcdException(e));
}
})
.endHandler(event -> {
},
event -> {
answer.complete(bytes.get());
})
.exceptionHandler(e -> {
},
e -> {
answer.completeExceptionally(toEtcdException(e));
});
@ -183,9 +142,10 @@ final class MaintenanceImpl extends Impl implements Maintenance {
@Override
public void snapshot(StreamObserver<io.etcd.jetcd.maintenance.SnapshotResponse> observer) {
this.stub.snapshot(SnapshotRequest.getDefaultInstance())
.handler(r -> observer.onNext(new io.etcd.jetcd.maintenance.SnapshotResponse(r)))
.endHandler(event -> observer.onCompleted())
.exceptionHandler(e -> observer.onError(toEtcdException(e)));
this.stub.snapshotWithHandler(
SnapshotRequest.getDefaultInstance(),
r -> observer.onNext(new io.etcd.jetcd.maintenance.SnapshotResponse(r)),
event -> observer.onCompleted(),
e -> observer.onError(toEtcdException(e)));
}
}

View File

@ -41,7 +41,6 @@ import io.etcd.jetcd.options.WatchOption;
import io.etcd.jetcd.support.Errors;
import io.etcd.jetcd.support.Util;
import io.grpc.Status;
import io.vertx.core.streams.ReadStream;
import io.vertx.core.streams.WriteStream;
import com.google.common.base.Strings;
@ -73,7 +72,9 @@ final class WatchImpl extends Impl implements Watch {
this.lock = new Object();
this.stub = connectionManager.newStub(VertxWatchGrpc::newVertxStub);
this.executor = MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(1));
// set it to daemon as there is no way for users to create this thread pool by their own
this.executor = MoreExecutors.listeningDecorator(
Executors.newScheduledThreadPool(1, Util.createThreadFactory("jetcd-watch-", true)));
this.closed = new AtomicBoolean();
this.watchers = new CopyOnWriteArrayList<>();
this.namespace = connectionManager.getNamespace();
@ -122,10 +123,8 @@ final class WatchImpl extends Impl implements Watch {
private final Listener listener;
private final AtomicBoolean closed;
//private StreamObserver<WatchRequest> stream;
private AtomicReference<WriteStream<WatchRequest>> wstream;
private AtomicBoolean started;
private ReadStream<WatchResponse> rstream;
private final AtomicReference<WriteStream<WatchRequest>> wstream;
private final AtomicBoolean started;
private long revision;
private long id;
@ -137,7 +136,6 @@ final class WatchImpl extends Impl implements Watch {
this.started = new AtomicBoolean();
this.wstream = new AtomicReference<>();
this.rstream = null;
this.id = -1;
this.revision = this.option.getRevision();
}
@ -148,7 +146,8 @@ final class WatchImpl extends Impl implements Watch {
//
// ************************
boolean isClosed() {
@Override
public boolean isClosed() {
return this.closed.get() || WatchImpl.this.closed.get();
}
@ -158,7 +157,7 @@ final class WatchImpl extends Impl implements Watch {
}
if (started.compareAndSet(false, true)) {
// id is not really useful today but it may be in etcd 3.4
// id is not really useful today, but it may be in etcd 3.4
id = -1;
WatchCreateRequest.Builder builder = WatchCreateRequest.newBuilder()
@ -170,7 +169,7 @@ final class WatchImpl extends Impl implements Watch {
.map(endKey -> Util.prefixNamespaceToRangeEnd(endKey, namespace))
.ifPresent(builder::setRangeEnd);
if (!option.getEndKey().isPresent() && option.isPrefix()) {
if (option.getEndKey().isEmpty() && option.isPrefix()) {
ByteSequence endKey = OptionsUtil.prefixEndOf(key);
builder.setRangeEnd(Util.prefixNamespaceToRangeEnd(endKey, namespace));
}
@ -183,14 +182,15 @@ final class WatchImpl extends Impl implements Watch {
builder.addFilters(WatchCreateRequest.FilterType.NOPUT);
}
rstream = Util.applyRequireLeader(option.withRequireLeader(), stub).watch(stream -> {
wstream.set(stream);
stream.write(WatchRequest.newBuilder().setCreateRequest(builder).build());
});
rstream.handler(this::onNext);
rstream.exceptionHandler(this::onError);
rstream.endHandler(event -> onCompleted());
var ignored = Util.applyRequireLeader(option.withRequireLeader(), stub)
.watchWithHandler(
stream -> {
wstream.set(stream);
stream.write(WatchRequest.newBuilder().setCreateRequest(builder).build());
},
this::onNext,
event -> onCompleted(),
this::onError);
}
}
@ -245,7 +245,9 @@ final class WatchImpl extends Impl implements Watch {
// handle a special case when watch has been created and closed at the same time
if (response.getCreated() && response.getCanceled() && response.getCancelReason() != null
&& response.getCancelReason().contains("etcdserver: permission denied")) {
&& (response.getCancelReason().contains("etcdserver: permission denied") ||
response.getCancelReason().contains("etcdserver: invalid auth token"))) {
// potentially access token expired
connectionManager().authCredential().refresh();
Status error = Status.Code.CANCELLED.toStatus().withDescription(response.getCancelReason());
@ -263,6 +265,9 @@ final class WatchImpl extends Impl implements Watch {
revision = Math.max(revision, response.getHeader().getRevision());
id = response.getWatchId();
if (option.isCreatedNotify()) {
listener.onNext(new io.etcd.jetcd.watch.WatchResponse(response));
}
} else if (response.getCanceled()) {
//
@ -351,8 +356,8 @@ final class WatchImpl extends Impl implements Watch {
private void reschedule() {
Futures.addCallback(executor.schedule(this::resume, 500, TimeUnit.MILLISECONDS), new FutureCallback<Object>() {
@Override
public void onFailure(Throwable throwable) {
LOG.warn("scheduled resume failed", throwable);
public void onFailure(Throwable t) {
LOG.warn("scheduled resume failed", t);
}
@Override

View File

@ -37,6 +37,8 @@ public class DeleteResponse extends AbstractResponse<DeleteRangeResponse> {
/**
* Returns the number of keys deleted by the delete range request.
*
* @return number of deleted items.
*/
public long getDeleted() {
return getResponse().getDeleted();
@ -44,6 +46,8 @@ public class DeleteResponse extends AbstractResponse<DeleteRangeResponse> {
/**
* Returns previous key-value pairs.
*
* @return previous kv,
*/
public synchronized List<KeyValue> getPrevKvs() {
if (prevKvs == null) {

View File

@ -37,6 +37,8 @@ public class GetResponse extends AbstractResponse<RangeResponse> {
/**
* Returns a list of key-value pairs matched by the range request.
*
* @return kvs.
*/
public synchronized List<KeyValue> getKvs() {
if (kvs == null) {
@ -48,13 +50,21 @@ public class GetResponse extends AbstractResponse<RangeResponse> {
/**
* Returns if there are more keys to return in the requested range.
*
* @return more.
*/
public boolean isMore() {
return getResponse().getMore();
}
/**
* Returns the number of keys within the range when requested.
* Returns the number of keys within the range requested.
* Note this value is never affected by filtering options (limit, min or max created or modified revisions)
* Count is the count for keys on the range part of a request.
* Filters for limit and created or modified revision ranges restrict the
* returned KVs, but not the count.
*
* @return count.
*/
public long getCount() {
return getResponse().getCount();

View File

@ -31,6 +31,8 @@ public class PutResponse extends AbstractResponse<io.etcd.jetcd.api.PutResponse>
/**
* Returns previous key-value pair.
*
* @return prev kv.
*/
public KeyValue getPrevKv() {
return new KeyValue(getResponse().getPrevKv(), namespace);
@ -38,6 +40,8 @@ public class PutResponse extends AbstractResponse<io.etcd.jetcd.api.PutResponse>
/**
* Returns whether a previous key-value pair is present.
*
* @return if has prev kv.
*/
public boolean hasPrevKv() {
return getResponse().hasPrevKv();

View File

@ -47,6 +47,8 @@ public class TxnResponse extends AbstractResponse<io.etcd.jetcd.api.TxnResponse>
/**
* Returns true if the compare evaluated to true or false otherwise.
*
* @return if succeeded.
*/
public boolean isSucceeded() {
return getResponse().getSucceeded();
@ -54,6 +56,8 @@ public class TxnResponse extends AbstractResponse<io.etcd.jetcd.api.TxnResponse>
/**
* Returns a list of DeleteResponse; empty list if none.
*
* @return delete responses.
*/
public synchronized List<DeleteResponse> getDeleteResponses() {
if (deleteResponses == null) {
@ -68,6 +72,8 @@ public class TxnResponse extends AbstractResponse<io.etcd.jetcd.api.TxnResponse>
/**
* Returns a list of GetResponse; empty list if none.
*
* @return get responses.
*/
public synchronized List<GetResponse> getGetResponses() {
if (getResponses == null) {
@ -81,6 +87,8 @@ public class TxnResponse extends AbstractResponse<io.etcd.jetcd.api.TxnResponse>
/**
* Returns a list of PutResponse; empty list if none.
*
* @return put responses.
*/
public synchronized List<PutResponse> getPutResponses() {
if (putResponses == null) {
@ -94,6 +102,8 @@ public class TxnResponse extends AbstractResponse<io.etcd.jetcd.api.TxnResponse>
/**
* Returns a list of TxnResponse; empty list if none.
*
* @return txn responses.
*/
public synchronized List<TxnResponse> getTxnResponses() {
if (txnResponses == null) {

View File

@ -26,6 +26,8 @@ public class LeaseGrantResponse extends AbstractResponse<io.etcd.jetcd.api.Lease
/**
* Returns the lease ID for the granted lease.
*
* @return the id.
*/
public long getID() {
return getResponse().getID();
@ -33,6 +35,8 @@ public class LeaseGrantResponse extends AbstractResponse<io.etcd.jetcd.api.Lease
/**
* Returns the server chosen lease time-to-live in seconds.
*
* @return the ttl.
*/
public long getTTL() {
return getResponse().getTTL();

View File

@ -26,6 +26,8 @@ public class LeaseKeepAliveResponse extends AbstractResponse<io.etcd.jetcd.api.L
/**
* Returns the lease ID from the keep alive request.
*
* @return the id.
*/
public long getID() {
return getResponse().getID();
@ -33,6 +35,8 @@ public class LeaseKeepAliveResponse extends AbstractResponse<io.etcd.jetcd.api.L
/**
* Returns the new time-to-live for the lease.
*
* @return the ttl.
*/
public long getTTL() {
return getResponse().getTTL();

View File

@ -32,6 +32,8 @@ public class LeaseTimeToLiveResponse extends AbstractResponse<io.etcd.jetcd.api.
/**
* Returns the lease ID from the keep alive request.
*
* @return the lease id.
*/
public long getID() {
return getResponse().getID();
@ -39,13 +41,17 @@ public class LeaseTimeToLiveResponse extends AbstractResponse<io.etcd.jetcd.api.
/**
* Returns the remaining TTL in seconds for the lease; the lease will expire in under TTL+1 seconds.
*
* @return the ttl.
*/
public long getTTl() {
public long getTTL() {
return getResponse().getTTL();
}
/**
* Returns the initial granted time in seconds upon lease creation/renewal.
*
* @return the granted ttl.
*/
public long getGrantedTTL() {
return getResponse().getGrantedTTL();
@ -53,6 +59,8 @@ public class LeaseTimeToLiveResponse extends AbstractResponse<io.etcd.jetcd.api.
/**
* Returns the list of keys attached to this lease.
*
* @return the keys.
*/
public synchronized List<ByteSequence> getKeys() {
if (keys == null) {

View File

@ -33,6 +33,8 @@ public class LockResponse extends AbstractResponse<io.etcd.jetcd.api.lock.LockRe
* Returns the key that will exist on etcd for the duration that the Lock caller
* owns the lock. Users should not modify this key or the lock may exhibit
* undefined behavior.
*
* @return the key.
*/
public ByteSequence getKey() {
return unprefixedKey;

View File

@ -28,6 +28,8 @@ public class AlarmMember {
/**
* Returns the ID of the member associated with the raised alarm.
*
* @return the member id.
*/
public long getMemberId() {
return memberId;
@ -36,6 +38,8 @@ public class AlarmMember {
/**
*
* Returns the type of alarm which has been raised.
*
* @return the alarm type.
*/
public AlarmType getAlarmType() {
return alarmType;

View File

@ -51,6 +51,8 @@ public class AlarmResponse extends AbstractResponse<io.etcd.jetcd.api.AlarmRespo
/**
* Returns a list of alarms associated with the alarm request.
*
* @return the alarms.
*/
public synchronized List<AlarmMember> getAlarms() {
if (alarms == null) {

View File

@ -16,13 +16,11 @@
package io.etcd.jetcd.maintenance;
import java.net.URI;
import io.etcd.jetcd.Maintenance;
import io.etcd.jetcd.impl.AbstractResponse;
/**
* DefragmentResponse returned by {@link Maintenance#defragmentMember(URI)} contains a header.
* DefragmentResponse returned by {@link Maintenance#defragmentMember(String)} contains a header.
*/
public class DefragmentResponse extends AbstractResponse<io.etcd.jetcd.api.DefragmentResponse> {

View File

@ -16,13 +16,11 @@
package io.etcd.jetcd.maintenance;
import java.net.URI;
import io.etcd.jetcd.Maintenance;
import io.etcd.jetcd.impl.AbstractResponse;
/**
* HashKVResponse returned by {@link Maintenance#hashKV(URI, long)}.
* HashKVResponse returned by {@link Maintenance#hashKV(String, long)}.
*/
public class HashKVResponse extends AbstractResponse<io.etcd.jetcd.api.HashKVResponse> {
@ -32,6 +30,8 @@ public class HashKVResponse extends AbstractResponse<io.etcd.jetcd.api.HashKVRes
/**
* Returns the hash value computed from the responding member's MVCC keys up to a given revision.
*
* @return the response hash.
*/
public int getHash() {
return getResponse().getHash();
@ -39,6 +39,8 @@ public class HashKVResponse extends AbstractResponse<io.etcd.jetcd.api.HashKVRes
/**
* Returns the compacted revision of key-value store when hash begins.
*
* @return if compacted.
*/
public long getCompacted() {
return getResponse().getCompactRevision();

View File

@ -28,6 +28,8 @@ public class SnapshotResponse extends AbstractResponse<io.etcd.jetcd.api.Snapsho
/**
* Returns the remaining bytes.
*
* @return the remaining bytes.
*/
public long getRemainingBytes() {
return getResponse().getRemainingBytes();
@ -35,6 +37,8 @@ public class SnapshotResponse extends AbstractResponse<io.etcd.jetcd.api.Snapsho
/**
* Returns the blob.
*
* @return the blob.
*/
public ByteString getBlob() {
return getResponse().getBlob();

View File

@ -16,13 +16,11 @@
package io.etcd.jetcd.maintenance;
import java.net.URI;
import io.etcd.jetcd.Maintenance;
import io.etcd.jetcd.impl.AbstractResponse;
/**
* StatusResponse returned by {@link Maintenance#statusMember(URI)} contains
* StatusResponse returned by {@link Maintenance#statusMember(String)} contains
* a header, version, dbSize, current leader, raftIndex, and raftTerm.
*/
public class StatusResponse extends AbstractResponse<io.etcd.jetcd.api.StatusResponse> {
@ -33,6 +31,8 @@ public class StatusResponse extends AbstractResponse<io.etcd.jetcd.api.StatusRes
/**
* Returns the cluster protocol version used by the responding member.
*
* @return the version.
*/
public String getVersion() {
return getResponse().getVersion();
@ -40,13 +40,17 @@ public class StatusResponse extends AbstractResponse<io.etcd.jetcd.api.StatusRes
/**
* Returns the size of the backend database, in bytes, of the responding member.
*
* @return the db sie.
*/
public long getDbSize() {
return getResponse().getDbSize();
}
/**
* Returns the the member ID which the responding member believes is the current leader.
* Returns the member ID which the responding member believes is the current leader.
*
* @return the leader.
*/
public long getLeader() {
return getResponse().getLeader();
@ -54,6 +58,8 @@ public class StatusResponse extends AbstractResponse<io.etcd.jetcd.api.StatusRes
/**
* Returns the current raft index of the responding member.
*
* @return the raft index.
*/
public long getRaftIndex() {
return getResponse().getRaftIndex();
@ -61,6 +67,8 @@ public class StatusResponse extends AbstractResponse<io.etcd.jetcd.api.StatusRes
/**
* Returns the current raft term of the responding member.
*
* @return the raft term.
*/
public long getRaftTerm() {
return getResponse().getRaftTerm();

View File

@ -17,6 +17,7 @@
package io.etcd.jetcd.op;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
@ -27,7 +28,6 @@ import io.etcd.jetcd.api.TxnRequest;
import io.etcd.jetcd.kv.TxnResponse;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
/**
* Build an etcd transaction.
@ -60,7 +60,7 @@ public class TxnImpl implements Txn {
@Override
public TxnImpl If(Cmp... cmps) {
return If(ImmutableList.copyOf(cmps));
return If(Arrays.asList(cmps));
}
TxnImpl If(List<Cmp> cmps) {
@ -77,7 +77,7 @@ public class TxnImpl implements Txn {
@Override
public TxnImpl Then(Op... ops) {
return Then(ImmutableList.copyOf(ops));
return Then(Arrays.asList(ops));
}
TxnImpl Then(List<Op> ops) {
@ -93,7 +93,7 @@ public class TxnImpl implements Txn {
@Override
public TxnImpl Else(Op... ops) {
return Else(ImmutableList.copyOf(ops));
return Else(Arrays.asList(ops));
}
TxnImpl Else(List<Op> ops) {

View File

@ -17,15 +17,35 @@
package io.etcd.jetcd.options;
public final class CompactOption {
public static final CompactOption DEFAULT = builder().build();
public static final CompactOption DEFAULT = newBuilder().build();
private final boolean physical;
private CompactOption(boolean physical) {
this.physical = physical;
}
public boolean isPhysical() {
return physical;
}
/**
* Returns the builder.
*
* @deprecated use {@link #builder()}
* @return the builder
*/
@SuppressWarnings("InlineMeSuggester")
@Deprecated
public static Builder newBuilder() {
return builder();
}
public static Builder builder() {
return new Builder();
}
public static class Builder {
public static final class Builder {
private boolean physical = false;
private Builder() {
@ -49,14 +69,4 @@ public final class CompactOption {
return new CompactOption(this.physical);
}
}
private final boolean physical;
private CompactOption(boolean physical) {
this.physical = physical;
}
public boolean isPhysical() {
return physical;
}
}

View File

@ -21,21 +21,81 @@ import java.util.Optional;
import io.etcd.jetcd.ByteSequence;
import io.etcd.jetcd.KV;
import static com.google.common.base.Preconditions.checkNotNull;
import static java.util.Objects.requireNonNull;
public final class DeleteOption {
public static final DeleteOption DEFAULT = builder().build();
public static final DeleteOption DEFAULT = newBuilder().build();
private final ByteSequence endKey;
private final boolean prevKV;
private final boolean prefix;
private final boolean autoRetry;
private DeleteOption(ByteSequence endKey, boolean prevKV, boolean prefix, final boolean autoRetry) {
this.endKey = endKey;
this.prevKV = prevKV;
this.prefix = prefix;
this.autoRetry = autoRetry;
}
public Optional<ByteSequence> getEndKey() {
return Optional.ofNullable(endKey);
}
/**
* Whether to get the previous key/value pairs before deleting them.
*
* @return true if get the previous key/value pairs before deleting them, otherwise false.
*/
public boolean isPrevKV() {
return prevKV;
}
/**
* Whether to treat this deletion as deletion by prefix
*
* @return true if deletion by prefix.
*/
public boolean isPrefix() {
return prefix;
}
/**
* Whether to treat a delete operation as idempotent from the point of view of automated retries.
* Note under failure scenarios this may mean a single delete is attempted more than once.
*
* @return true if automated retries should happen.
*/
public boolean isAutoRetry() {
return autoRetry;
}
/**
* Returns the builder.
*
* @deprecated use {@link #builder()}
* @return the builder
*/
@SuppressWarnings("InlineMeSuggester")
@Deprecated
public static Builder newBuilder() {
return builder();
}
/**
* Returns the builder.
*
* @return the builder
*/
public static Builder builder() {
return new Builder();
}
public static class Builder {
private Optional<ByteSequence> endKey = Optional.empty();
public static final class Builder {
private ByteSequence endKey;
private boolean prevKV = false;
private boolean prefix = false;
private boolean autoRetry = false;
private Builder() {
}
@ -59,7 +119,7 @@ public final class DeleteOption {
* @return builder
*/
public Builder withRange(ByteSequence endKey) {
this.endKey = Optional.ofNullable(endKey);
this.endKey = endKey;
return this;
}
@ -90,7 +150,7 @@ public final class DeleteOption {
*/
@Deprecated
public Builder withPrefix(ByteSequence prefix) {
checkNotNull(prefix, "prefix should not be null");
requireNonNull(prefix, "prefix should not be null");
ByteSequence prefixEnd = OptionsUtil.prefixEndOf(prefix);
this.withRange(prefixEnd);
return this;
@ -107,36 +167,23 @@ public final class DeleteOption {
return this;
}
/**
* When autoRetry is set, the delete operation is treated as idempotent from the point of view of automated retries.
* Note under some failure scenarios true may make a delete operation be attempted more than once, where
* a first attempt succeeded but its result did not reach the client; by default (autoRetry=false),
* the client won't retry since it is not safe to assume on such a failure the operation did not happen.
* Requesting withAutoRetry means the client is explicitly asking for retry nevertheless.
*
* @return builder
*/
public Builder withAutoRetry() {
this.autoRetry = true;
return this;
}
public DeleteOption build() {
return new DeleteOption(endKey, prevKV, prefix);
return new DeleteOption(endKey, prevKV, prefix, autoRetry);
}
}
private final Optional<ByteSequence> endKey;
private final boolean prevKV;
private final boolean prefix;
private DeleteOption(Optional<ByteSequence> endKey, boolean prevKV, boolean prefix) {
this.endKey = endKey;
this.prevKV = prevKV;
this.prefix = prefix;
}
public Optional<ByteSequence> getEndKey() {
return endKey;
}
/**
* Whether to get the previous key/value pairs before deleting them.
*
* @return true if get the previous key/value pairs before deleting them, otherwise false.
*/
public boolean isPrevKV() {
return prevKV;
}
public boolean isPrefix() {
return prefix;
}
}

View File

@ -20,26 +20,244 @@ import java.util.Optional;
import io.etcd.jetcd.ByteSequence;
import io.etcd.jetcd.KV;
import io.etcd.jetcd.kv.GetResponse;
import static com.google.common.base.Preconditions.checkNotNull;
import static java.util.Objects.requireNonNull;
/**
* The option for get operation.
*/
public final class GetOption {
public static final GetOption DEFAULT = builder().build();
public static final GetOption DEFAULT = newBuilder().build();
private final ByteSequence endKey;
private final long limit;
private final long revision;
private final SortOrder sortOrder;
private final SortTarget sortTarget;
private final boolean serializable;
private final boolean keysOnly;
private final boolean countOnly;
private final long minCreateRevision;
private final long maxCreateRevision;
private final long minModRevision;
private final long maxModRevision;
private final boolean prefix;
private GetOption(
ByteSequence endKey,
long limit,
long revision,
SortOrder sortOrder,
SortTarget sortTarget,
boolean serializable,
boolean keysOnly,
boolean countOnly,
long minCreateRevision,
long maxCreateRevision,
long minModRevision,
long maxModRevision,
boolean prefix) {
this.endKey = endKey;
this.limit = limit;
this.revision = revision;
this.sortOrder = sortOrder;
this.sortTarget = sortTarget;
this.serializable = serializable;
this.keysOnly = keysOnly;
this.countOnly = countOnly;
this.minCreateRevision = minCreateRevision;
this.maxCreateRevision = maxCreateRevision;
this.minModRevision = minModRevision;
this.maxModRevision = maxModRevision;
this.prefix = prefix;
}
/**
* Create a builder to construct option for get operation.
* Get the maximum number of keys to return for a get request.
*
* @return builder
* <p>
* Note this filter does not affect the count field in GetResponse.
* {@link GetResponse#getCount()} always counts the number of keys matched on a range, independent of filters.
* </p>
*
*
* @return the maximum number of keys to return.
*/
public long getLimit() {
return this.limit;
}
/**
* Get the end key for a range request
*
* @return the end key for a range request
*/
public Optional<ByteSequence> getEndKey() {
return Optional.ofNullable(this.endKey);
}
/**
* Get the revision for the request
*
* @return the revision for the request
*/
public long getRevision() {
return revision;
}
/**
* Get the sort order for the request
*
* @return the sort order for the request
*/
public SortOrder getSortOrder() {
return sortOrder;
}
/**
* Get the sort field for the request
*
* @return the sort field for the request
*/
public SortTarget getSortField() {
return sortTarget;
}
/**
* Return if the consistency level for this request is "serializable".
* Note serializable is a lower than default consistency, and implies
* the possibility of getting stale data.
*
* @return true if this request is only serializable consistency
*/
public boolean isSerializable() {
return serializable;
}
/**
* True if this request should get only keys in a range and there is no
* need to retrieve the values.
*
* @return true if only get keys
*/
public boolean isKeysOnly() {
return keysOnly;
}
/**
* True if this request should only populate the count of keys matching
* a range, and no other data.
*
* @return true if only get the count of keys
*/
public boolean isCountOnly() {
return countOnly;
}
/**
* Only populate results for keys that match a
* minimum value for a created revision.
*
* <p>
* Note this filter does not affect the count field in GetResponse.
* {@link GetResponse#getCount()} always counts the number of keys matched on a range, independent of filters.
* For the same reason, it would be meaningless to mix setting a min create revision option
* with the count only option.
* </p>
*
* @return minimum created revision to match, or zero for any.
*/
public long getMinCreateRevision() {
return this.minCreateRevision;
}
/**
* Only populate results for keys that match a
* maximum value for a created revision.
*
* <p>
* Note this filter does not affect the count field in GetResponse.
* {@link GetResponse#getCount()} always counts the number of keys matched on a range, independent of filters.
* For the same reason, it would be meaningless to mix setting a max create revision option
* with the count only option.
* </p>
*
* @return maximum created revision to match, or zero for any.
*/
public long getMaxCreateRevision() {
return this.maxCreateRevision;
}
/**
* Only populate results for keys that match a
* minimum value for a modified revision.
*
* <p>
* Note this filter does not affect the count field in GetResponse.
* {@link GetResponse#getCount()} always counts the number of keys matched on a range, independent of filters.
* For the same reason, it would be meaningless to mix setting a min mod revision option
* with the count only option.
* </p>
*
* @return minimum modified revision to match, or zero for any.
*/
public long getMinModRevision() {
return this.minModRevision;
}
/**
* Only populate results for keys that match a
* maximum value for a modified revision.
*
* <p>
* Note this filter does not affect the count field in GetResponse.
* {@link GetResponse#getCount()} always counts the number of keys matched on a range, independent of filters.
* For the same reason, it would be meaningless to mix setting a max mod revision option
* with the count only option.
* </p>
*
* @return maximum modified revision to match, or zero for any.
*/
public long getMaxModRevision() {
return this.maxModRevision;
}
/**
* True if this Get request should do prefix match
*
* @return true if this Get request should do prefix match
*/
public boolean isPrefix() {
return prefix;
}
public enum SortOrder {
NONE, ASCEND, DESCEND,
}
public enum SortTarget {
KEY, VERSION, CREATE, MOD, VALUE,
}
/**
* Returns the builder.
*
* @deprecated use {@link #builder()}
* @return the builder
*/
@SuppressWarnings("InlineMeSuggester")
@Deprecated
public static Builder newBuilder() {
return builder();
}
public static Builder builder() {
return new Builder();
}
public static class Builder {
public static final class Builder {
private long limit = 0L;
private long revision = 0L;
@ -48,7 +266,7 @@ public final class GetOption {
private boolean serializable = false;
private boolean keysOnly = false;
private boolean countOnly = false;
private Optional<ByteSequence> endKey = Optional.empty();
private ByteSequence endKey;
private long minCreateRevision = 0L;
private long maxCreateRevision = 0L;
private long minModRevision = 0L;
@ -61,6 +279,13 @@ public final class GetOption {
/**
* Limit the number of keys to return for a get request. By default is 0 - no limitation.
*
* <p>
* Note this filter does not affect the count field in GetResponse.
* {@link GetResponse#getCount()} always counts the number of keys matched on a range, independent of filters.
* For the same reason, it would be meaningless to mix setting this option
* with the count only option.
* </p>
*
* @param limit the maximum number of keys to return for a get request.
* @return builder
*/
@ -114,7 +339,9 @@ public final class GetOption {
* <p>
* Get requests are linearizable by
* default. For better performance, a serializable get request is served locally without needing
* to reach consensus with other nodes in the cluster.
* to reach consensus with other nodes in the cluster. Note this is a tradeoff with strict
* consistency so it should be used with care in situations where reading stale
* is acceptable.
*
* @param serializable is the get request a serializable get request.
* @return builder
@ -164,7 +391,7 @@ public final class GetOption {
* @return builder
*/
public Builder withRange(ByteSequence endKey) {
this.endKey = Optional.ofNullable(endKey);
this.endKey = endKey;
return this;
}
@ -194,17 +421,24 @@ public final class GetOption {
*/
@Deprecated
public Builder withPrefix(ByteSequence prefix) {
checkNotNull(prefix, "prefix should not be null");
requireNonNull(prefix, "prefix should not be null");
ByteSequence prefixEnd = OptionsUtil.prefixEndOf(prefix);
this.withRange(prefixEnd);
return this;
}
/**
* Limit returned keys to those with create revision greater than the provided value.
* Limit returned keys to those with create revision greater or equal than the provided value.
* min_create_revision is the lower bound for returned key create revisions; all keys with
* lesser create revisions will be filtered away.
*
* <p>
* Note this filter does not affect the count field in GetResponse.
* {@link GetResponse#getCount()} always counts the number of keys matched on a range, independent of filters.
* For the same reason, it would be meaningless to mix setting this option
* with the count only option.
* </p>
*
* @param createRevision create revision
* @return builder
*/
@ -214,10 +448,17 @@ public final class GetOption {
}
/**
* Limit returned keys to those with create revision less than the provided value.
* Limit returned keys to those with create revision less or equal than the provided value.
* max_create_revision is the upper bound for returned key create revisions; all keys with
* greater create revisions will be filtered away.
*
* <p>
* Note this filter does not affect the count field in GetResponse.
* {@link GetResponse#getCount()} always counts the number of keys matched on a range, independent of filters.
* For the same reason, it would be meaningless to mix setting this option
* with the count only option.
* </p>
*
* @param createRevision create revision
* @return builder
*/
@ -227,10 +468,17 @@ public final class GetOption {
}
/**
* Limit returned keys to those with mod revision greater than the provided value.
* Limit returned keys to those with mod revision greater or equal than the provided value.
* min_mod_revision is the lower bound for returned key mod revisions; all keys with lesser mod
* revisions will be filtered away.
*
* <p>
* Note this filter does not affect the count field in GetResponse.
* {@link GetResponse#getCount()} always counts the number of keys matched on a range, independent of filters.
* For the same reason, it would be meaningless to mix setting this option
* with the count only option.
* </p>
*
* @param modRevision mod revision
* @return this builder instance
*/
@ -240,10 +488,17 @@ public final class GetOption {
}
/**
* Limit returned keys to those with mod revision less than the provided value. max_mod_revision
* Limit returned keys to those with mod revision less or equal than the provided value. max_mod_revision
* is the upper bound for returned key mod revisions; all keys with greater mod revisions will
* be filtered away.
*
* <p>
* Note this filter does not affect the count field in GetResponse.
* {@link GetResponse#getCount()} always counts the number of keys matched on a range, independent of filters.
* For the same reason, it would be meaningless to mix setting this option
* with the count only option.
* </p>
*
* @param modRevision mod revision
* @return this builder instance
*/
@ -258,106 +513,21 @@ public final class GetOption {
* @return the GetOption
*/
public GetOption build() {
return new GetOption(endKey, limit, revision, sortOrder, sortTarget, serializable, keysOnly, countOnly,
minCreateRevision, maxCreateRevision, minModRevision, maxModRevision, prefix);
return new GetOption(
endKey,
limit,
revision,
sortOrder,
sortTarget,
serializable,
keysOnly,
countOnly,
minCreateRevision,
maxCreateRevision,
minModRevision,
maxModRevision,
prefix);
}
}
private final Optional<ByteSequence> endKey;
private final long limit;
private final long revision;
private final SortOrder sortOrder;
private final SortTarget sortTarget;
private final boolean serializable;
private final boolean keysOnly;
private final boolean countOnly;
private final long minCreateRevision;
private final long maxCreateRevision;
private final long minModRevision;
private final long maxModRevision;
private final boolean prefix;
private GetOption(Optional<ByteSequence> endKey, long limit, long revision, SortOrder sortOrder, SortTarget sortTarget,
boolean serializable, boolean keysOnly, boolean countOnly, long minCreateRevision, long maxCreateRevision,
long minModRevision, long maxModRevision, boolean prefix) {
this.endKey = endKey;
this.limit = limit;
this.revision = revision;
this.sortOrder = sortOrder;
this.sortTarget = sortTarget;
this.serializable = serializable;
this.keysOnly = keysOnly;
this.countOnly = countOnly;
this.minCreateRevision = minCreateRevision;
this.maxCreateRevision = maxCreateRevision;
this.minModRevision = minModRevision;
this.maxModRevision = maxModRevision;
this.prefix = prefix;
}
/**
* Get the maximum number of keys to return for a get request.
*
* @return the maximum number of keys to return.
*/
public long getLimit() {
return this.limit;
}
public Optional<ByteSequence> getEndKey() {
return this.endKey;
}
public long getRevision() {
return revision;
}
public SortOrder getSortOrder() {
return sortOrder;
}
public SortTarget getSortField() {
return sortTarget;
}
public boolean isSerializable() {
return serializable;
}
public boolean isKeysOnly() {
return keysOnly;
}
public boolean isCountOnly() {
return countOnly;
}
public long getMinCreateRevision() {
return this.minCreateRevision;
}
public long getMaxCreateRevision() {
return this.maxCreateRevision;
}
public long getMinModRevision() {
return this.minModRevision;
}
public long getMaxModRevision() {
return this.maxModRevision;
}
public boolean isPrefix() {
return prefix;
}
public enum SortOrder {
NONE, ASCEND, DESCEND,
}
public enum SortTarget {
KEY, VERSION, CREATE, MOD, VALUE,
}
}

View File

@ -17,14 +17,35 @@
package io.etcd.jetcd.options;
public class LeaseOption {
public static final LeaseOption DEFAULT = builder().build();
public static final LeaseOption DEFAULT = newBuilder().build();
private final boolean attachedKeys;
private LeaseOption(boolean attachedKeys) {
this.attachedKeys = attachedKeys;
}
public boolean isAttachedKeys() {
return attachedKeys;
}
/**
* Returns the builder.
*
* @deprecated use {@link #builder()}
* @return the builder
*/
@SuppressWarnings("InlineMeSuggester")
@Deprecated
public static Builder newBuilder() {
return builder();
}
public static Builder builder() {
return new Builder();
}
public static class Builder {
public static final class Builder {
private boolean attachedKeys;
@ -46,14 +67,4 @@ public class LeaseOption {
}
}
private final boolean attachedKeys;
private LeaseOption(boolean attachedKeys) {
this.attachedKeys = attachedKeys;
}
public boolean isAttachedKeys() {
return attachedKeys;
}
}

View File

@ -22,20 +22,70 @@ import static com.google.common.base.Preconditions.checkArgument;
* The options for put operation.
*/
public final class PutOption {
public static final PutOption DEFAULT = builder().build();
public static final PutOption DEFAULT = newBuilder().build();
private final long leaseId;
private final boolean prevKV;
private final boolean autoRetry;
private PutOption(long leaseId, boolean prevKV, boolean autoRetry) {
this.leaseId = leaseId;
this.prevKV = prevKV;
this.autoRetry = autoRetry;
}
/**
* Get the lease id.
*
* @return the lease id
*/
public long getLeaseId() {
return this.leaseId;
}
/**
* Get the previous KV.
*
* @return the prevKV
*/
public boolean getPrevKV() {
return this.prevKV;
}
/**
* Whether to treat a put operation as idempotent from the point of view of automated retries.
* Note under failure scenarios this may mean a single put executes more than once.
*
* @return true if automated retries should happen.
*/
public boolean isAutoRetry() {
return autoRetry;
}
/**
* Returns the builder.
*
* @deprecated use {@link #builder()}
* @return the builder
*/
@SuppressWarnings("InlineMeSuggester")
@Deprecated
public static Builder newBuilder() {
return builder();
}
public static Builder builder() {
return new Builder();
}
/**
* Builder to construct a put option.
*/
public static class Builder {
public static final class Builder {
private long leaseId = 0L;
private boolean prevKV = false;
private boolean autoRetry = false;
private Builder() {
}
@ -63,40 +113,29 @@ public final class PutOption {
return this;
}
/**
* When autoRetry is set, treat this put as idempotent from the point of view of automated retries.
* Note under some failure scenarios autoRetry=true may make a put operation execute more than once, where
* a first attempt succeeded but its result did not reach the client; by default (autoRetry=false),
* the client won't retry since it is not safe to assume on such a failure that the operation did not happen
* in the server.
* Requesting withAutoRetry means the client is explicitly asking for retry nevertheless.
*
* @return builder
*/
public Builder withAutoRetry() {
this.autoRetry = true;
return this;
}
/**
* build the put option.
*
* @return the put option
*/
public PutOption build() {
return new PutOption(this.leaseId, this.prevKV);
return new PutOption(this.leaseId, this.prevKV, this.autoRetry);
}
}
private final long leaseId;
private final boolean prevKV;
private PutOption(long leaseId, boolean prevKV) {
this.leaseId = leaseId;
this.prevKV = prevKV;
}
/**
* Get the lease id.
*
* @return the lease id
*/
public long getLeaseId() {
return this.leaseId;
}
/**
* Get the previous KV.
*
* @return the prevKV
*/
public boolean getPrevKV() {
return this.prevKV;
}
}

View File

@ -0,0 +1,54 @@
package io.etcd.jetcd.options;
public final class TxnOption {
public static final TxnOption DEFAULT = builder().build();
private final boolean autoRetry;
private TxnOption(final boolean autoRetry) {
this.autoRetry = autoRetry;
}
/**
* Whether to treat a txn operation as idempotent from the point of view of automated retries.
*
* @return true if automated retries should happen.
*/
public boolean isAutoRetry() {
return autoRetry;
}
/**
* Returns the builder.
*
* @return the builder
*/
public static TxnOption.Builder builder() {
return new TxnOption.Builder();
}
public static final class Builder {
private boolean autoRetry = false;
private Builder() {
}
/**
* When autoRetry is set, the txn operation is treated as idempotent from the point of view of automated retries.
* Note under some failure scenarios true may make a txn operation be attempted and/or execute more than once, where
* a first attempt executed but its result status did not reach the client; by default (autoRetry=false),
* the client won't retry since it is not safe to assume on such a failure the operation did not happen.
* Requesting withAutoRetry means the client is explicitly asking for retry nevertheless.
*
* @return builder
*/
public Builder withAutoRetry() {
this.autoRetry = true;
return this;
}
public TxnOption build() {
return new TxnOption(autoRetry);
}
}
}

View File

@ -20,30 +20,135 @@ import java.util.Optional;
import io.etcd.jetcd.ByteSequence;
import static com.google.common.base.Preconditions.checkNotNull;
import static java.util.Objects.requireNonNull;
/**
* The option for watch operation.
*/
public final class WatchOption {
public static final WatchOption DEFAULT = builder().build();
public static final WatchOption DEFAULT = newBuilder().build();
private final ByteSequence endKey;
private final long revision;
private final boolean prevKV;
private final boolean progressNotify;
private final boolean createdNotify;
private final boolean noPut;
private final boolean noDelete;
private final boolean requireLeader;
private final boolean prefix;
private WatchOption(ByteSequence endKey, long revision, boolean prevKV, boolean progressNotify, boolean createdNotify,
boolean noPut, boolean noDelete, boolean requireLeader, boolean prefix) {
this.endKey = endKey;
this.revision = revision;
this.prevKV = prevKV;
this.progressNotify = progressNotify;
this.createdNotify = createdNotify;
this.noPut = noPut;
this.noDelete = noDelete;
this.requireLeader = requireLeader;
this.prefix = prefix;
}
public Optional<ByteSequence> getEndKey() {
return Optional.ofNullable(this.endKey);
}
/**
* Create a builder to construct option for watch operation.
* Returns the revision to watch from.
*
* @return builder
* @return the revision.
*/
public long getRevision() {
return revision;
}
/**
* Whether created watcher gets the previous KV before the event happens.
*
* @return if true, watcher receives the previous KV before the event happens.
*/
public boolean isPrevKV() {
return prevKV;
}
/**
* Whether watcher server send periodic progress updates.
*
* @return if true, watcher server should send periodic progress updates.
*/
public boolean isProgressNotify() {
return progressNotify;
}
/**
* Whether watcher server send watch create event.
*
* @return if true, watcher server should send watch create event.
*/
public boolean isCreatedNotify() {
return createdNotify;
}
/**
* Whether filter put event in server side.
*
* @return if true, filter put event in server side
*/
public boolean isNoPut() {
return noPut;
}
/**
* Whether filter delete event in server side.
*
* @return if true, filter delete event in server side
*/
public boolean isNoDelete() {
return noDelete;
}
/**
* If true, when creating the watch streaming stub, use the REQUIRED_LEADER Metadata annotation,
* which ensures the stream will error out if quorum is lost by
* the server the stream is connected to. This will make the watch fail with an error
* and finish.
* Without this option, a watch running against a server that is out of quorum
* simply goes silent.
*
* @return if true, use REQUIRE_LEADER metadata annotation for watch streams
*/
public boolean withRequireLeader() {
return requireLeader;
}
public boolean isPrefix() {
return prefix;
}
/**
* Returns the builder.
*
* @deprecated use {@link #builder()}
* @return the builder
*/
@SuppressWarnings("InlineMeSuggester")
@Deprecated
public static Builder newBuilder() {
return builder();
}
public static Builder builder() {
return new Builder();
}
public static class Builder {
public static final class Builder {
private long revision = 0L;
private Optional<ByteSequence> endKey = Optional.empty();
private ByteSequence endKey;
private boolean prevKV = false;
private boolean progressNotify = false;
private boolean createNotify = false;
private boolean noPut = false;
private boolean noDelete = false;
private boolean requireLeader = false;
@ -87,7 +192,7 @@ public final class WatchOption {
* @return builder
*/
public Builder withRange(ByteSequence endKey) {
this.endKey = Optional.ofNullable(endKey);
this.endKey = endKey;
return this;
}
@ -115,6 +220,17 @@ public final class WatchOption {
return this;
}
/**
* When createNotify is set, the watch server sends event when watch is created.
*
* @param createNotify configure the watcher to receive watch create event.
* @return builder
*/
public Builder withCreateNotify(boolean createNotify) {
this.createNotify = createNotify;
return this;
}
/**
* filter out put event in server side.
*
@ -157,7 +273,7 @@ public final class WatchOption {
*/
@Deprecated
public Builder withPrefix(ByteSequence prefix) {
checkNotNull(prefix, "prefix should not be null");
requireNonNull(prefix, "prefix should not be null");
ByteSequence prefixEnd = OptionsUtil.prefixEndOf(prefix);
this.withRange(prefixEnd);
return this;
@ -179,94 +295,9 @@ public final class WatchOption {
}
public WatchOption build() {
return new WatchOption(endKey, revision, prevKV, progressNotify, noPut, noDelete, requireLeader, prefix);
return new WatchOption(endKey, revision, prevKV, progressNotify, createNotify, noPut, noDelete, requireLeader,
prefix);
}
}
private final Optional<ByteSequence> endKey;
private final long revision;
private final boolean prevKV;
private final boolean progressNotify;
private final boolean noPut;
private final boolean noDelete;
private final boolean requireLeader;
private final boolean prefix;
private WatchOption(Optional<ByteSequence> endKey, long revision, boolean prevKV, boolean progressNotify, boolean noPut,
boolean noDelete, boolean requireLeader, boolean prefix) {
this.endKey = endKey;
this.revision = revision;
this.prevKV = prevKV;
this.progressNotify = progressNotify;
this.noPut = noPut;
this.noDelete = noDelete;
this.requireLeader = requireLeader;
this.prefix = prefix;
}
public Optional<ByteSequence> getEndKey() {
return this.endKey;
}
/**
* Returns the revision to watch from.
*/
public long getRevision() {
return revision;
}
/**
* Whether created watcher gets the previous KV before the event happens.
*
* @return if true, watcher receives the previous KV before the event happens.
*/
public boolean isPrevKV() {
return prevKV;
}
/**
* Whether watcher server send periodic progress updates.
*
* @return if true, watcher server should send periodic progress updates.
*/
public boolean isProgressNotify() {
return progressNotify;
}
/**
* Whether filter put event in server side.
*
* @return if true, filter put event in server side
*/
public boolean isNoPut() {
return noPut;
}
/**
* Whether filter delete event in server side.
*
* @return if true, filter delete event in server side
*/
public boolean isNoDelete() {
return noDelete;
}
/**
* If true, when creating the watch streaming stub, use the REQUIRED_LEADER Metadata annotation,
* which ensures the stream will error out if quorum is lost by
* the server the stream is connected to. This will make the watch fail with an error
* and finish.
* Without this option, a watch running against a server that is out of quorum
* simply goes silent.
*
* @return if true, use REQUIRE_LEADER metadata annotation for watch streams
*/
public boolean withRequireLeader() {
return requireLeader;
}
public boolean isPrefix() {
return prefix;
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2016-2021 The jetcd authors
* Copyright 2016-2023 The jetcd authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -18,7 +18,7 @@ package io.etcd.jetcd.resolver;
import java.net.URI;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.Objects;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -29,8 +29,6 @@ import io.grpc.Attributes;
import io.grpc.EquivalentAddressGroup;
import io.grpc.NameResolver;
import io.grpc.Status;
import io.grpc.internal.GrpcUtil;
import io.grpc.internal.SharedResourceHolder;
import com.google.common.base.Preconditions;
@ -46,7 +44,6 @@ public abstract class AbstractNameResolver extends NameResolver {
private volatile boolean shutdown;
private volatile boolean resolving;
private Executor executor;
private Listener listener;
public AbstractNameResolver(URI targetUri) {
@ -68,8 +65,7 @@ public abstract class AbstractNameResolver extends NameResolver {
public void start(Listener listener) {
synchronized (lock) {
Preconditions.checkState(this.listener == null, "already started");
this.executor = SharedResourceHolder.get(GrpcUtil.SHARED_CHANNEL_EXECUTOR);
this.listener = Preconditions.checkNotNull(listener, "listener");
this.listener = Objects.requireNonNull(listener, "listener");
resolve();
}
}
@ -85,21 +81,13 @@ public abstract class AbstractNameResolver extends NameResolver {
return;
}
shutdown = true;
synchronized (lock) {
if (executor != null) {
executor = SharedResourceHolder.release(GrpcUtil.SHARED_CHANNEL_EXECUTOR, executor);
}
}
}
private void resolve() {
if (resolving || shutdown) {
return;
}
synchronized (lock) {
executor.execute(this::doResolve);
}
doResolve();
}
private void doResolve() {
@ -123,7 +111,7 @@ public abstract class AbstractNameResolver extends NameResolver {
savedListener.onAddresses(groups, Attributes.EMPTY);
} catch (Exception e) {
LOGGER.warn("Error wile getting list of servers", e);
LOGGER.warn("Error while getting list of servers", e);
savedListener.onError(Status.NOT_FOUND);
} finally {
resolving = false;

Some files were not shown because too many files have changed in this diff Show More