From 4755232ea79842944faf75891e5f1dfe41a0e664 Mon Sep 17 00:00:00 2001 From: checketts Date: Thu, 4 Apr 2019 11:59:00 -0600 Subject: [PATCH] Issue #288: Improve Kotlin support via Nullability annotations --- build.gradle | 6 +++ .../resilience4j/decorators/package-info.java | 24 +++++++++ .../bulkhead/event/package-info.java | 24 +++++++++ .../bulkhead/internal/SemaphoreBulkhead.java | 3 +- .../bulkhead/internal/package-info.java | 24 +++++++++ .../resilience4j/bulkhead/package-info.java | 24 +++++++++ .../bulkhead/utils/package-info.java | 24 +++++++++ .../cache/event/package-info.java | 24 +++++++++ .../cache/internal/package-info.java | 24 +++++++++ .../resilience4j/cache/package-info.java | 24 +++++++++ .../circuitbreaker/CircuitBreakerConfig.java | 10 ++-- .../circuitbreaker/event/package-info.java | 24 +++++++++ .../internal/CircuitBreakerMetrics.java | 3 +- .../circuitbreaker/internal/ClosedState.java | 3 +- .../circuitbreaker/internal/package-info.java | 24 +++++++++ .../circuitbreaker/package-info.java | 24 +++++++++ .../circuitbreaker/utils/package-info.java | 24 +++++++++ .../resilience4j/consumer/package-info.java | 24 +++++++++ .../resilience4j/core/EventProcessor.java | 7 ++- .../resilience4j/core/lang/NonNull.java | 47 ++++++++++++++++++ .../resilience4j/core/lang/NonNullApi.java | 45 +++++++++++++++++ .../resilience4j/core/lang/NonNullFields.java | 49 +++++++++++++++++++ .../resilience4j/core/lang/Nullable.java | 47 ++++++++++++++++++ .../resilience4j/core/package-info.java | 24 +++++++++ .../resilience4j/feign/package-info.java | 24 +++++++++ .../metrics/internal/package-info.java | 24 +++++++++ .../resilience4j/metrics/package-info.java | 24 +++++++++ .../resilience4j/micrometer/package-info.java | 24 +++++++++ .../resilience4j/prometheus/package-info.java | 24 +++++++++ .../ratelimiter/event/package-info.java | 24 +++++++++ .../internal/InMemoryRateLimiterRegistry.java | 2 +- .../internal/SemaphoreBasedRateLimiter.java | 3 +- .../ratelimiter/internal/package-info.java | 24 +++++++++ .../ratelimiter/package-info.java | 24 +++++++++ .../ratelimiter/utils/package-info.java | 24 +++++++++ .../resilience4j/ratpack/EndpointsConfig.java | 3 ++ .../ratpack/adapter/package-info.java | 24 +++++++++ .../bulkhead/BulkheadMethodInterceptor.java | 6 +-- .../bulkhead/endpoint/BulkheadEventDTO.java | 7 +++ .../BulkheadEventsEndpointResponse.java | 4 ++ .../bulkhead/endpoint/package-info.java | 24 +++++++++ .../ratpack/bulkhead/package-info.java | 24 +++++++++ .../CircuitBreakerMethodInterceptor.java | 7 +-- .../endpoint/CircuitBreakerEventDTO.java | 19 +++++-- .../CircuitBreakerEventDTOBuilder.java | 4 ++ .../CircuitBreakerEventsEndpointResponse.java | 4 ++ .../circuitbreaker/endpoint/package-info.java | 24 +++++++++ .../ratpack/circuitbreaker/package-info.java | 24 +++++++++ .../ratpack/internal/AbstractTransformer.java | 2 + .../ratpack/internal/package-info.java | 24 +++++++++ .../resilience4j/ratpack/package-info.java | 24 +++++++++ .../RateLimiterMethodInterceptor.java | 5 ++ .../endpoint/RateLimiterEventDTO.java | 7 +++ .../RateLimiterEventsEndpointResponse.java | 4 ++ .../ratelimiter/endpoint/package-info.java | 24 +++++++++ .../ratpack/ratelimiter/package-info.java | 24 +++++++++ .../recovery/DefaultRecoveryFunction.java | 5 +- .../ratpack/recovery/package-info.java | 24 +++++++++ .../ratpack/retry/RetryMethodInterceptor.java | 9 +++- .../ratpack/retry/RetryTransformer.java | 3 +- .../ratpack/retry/endpoint/RetryEventDTO.java | 7 +++ .../endpoint/RetryEventsEndpointResponse.java | 4 ++ .../ratpack/retry/endpoint/package-info.java | 24 +++++++++ .../ratpack/retry/package-info.java | 24 +++++++++ .../reactor/ResilienceBaseSubscriber.java | 4 ++ .../bulkhead/operator/package-info.java | 24 +++++++++ .../operator/CircuitBreakerSubscriber.java | 2 + .../circuitbreaker/operator/package-info.java | 24 +++++++++ .../resilience4j/reactor/package-info.java | 24 +++++++++ .../ratelimiter/operator/package-info.java | 24 +++++++++ .../retrofit/internal/package-info.java | 24 +++++++++ .../resilience4j/retrofit/package-info.java | 24 +++++++++ .../resilience4j/retry/RetryConfig.java | 12 +++-- .../retry/event/AbstractRetryEvent.java | 6 ++- .../retry/event/RetryOnErrorEvent.java | 2 +- .../retry/event/RetryOnIgnoredErrorEvent.java | 2 +- .../retry/event/RetryOnRetryEvent.java | 6 ++- .../retry/event/RetryOnSuccessEvent.java | 2 +- .../retry/event/package-info.java | 24 +++++++++ .../retry/internal/AsyncRetryImpl.java | 2 + .../retry/internal/RetryImpl.java | 23 +++++---- .../retry/internal/package-info.java | 24 +++++++++ .../resilience4j/retry/package-info.java | 24 +++++++++ .../retry/utils/package-info.java | 24 +++++++++ .../resilience4j/adapter/package-info.java | 24 +++++++++ .../bulkhead/operator/package-info.java | 24 +++++++++ .../operator/CircuitBreakerSubscriber.java | 2 + .../operator/DisposableCircuitBreaker.java | 2 + .../circuitbreaker/operator/package-info.java | 24 +++++++++ .../ratelimiter/operator/package-info.java | 24 +++++++++ .../retry/transformer/package-info.java | 24 +++++++++ .../autoconfigure/package-info.java | 24 +++++++++ .../CircuitBreakerEndpointResponse.java | 4 ++ .../endpoint/CircuitBreakerEventDTO.java | 19 +++++-- .../CircuitBreakerEventDTOBuilder.java | 4 ++ .../CircuitBreakerEventsEndpointResponse.java | 8 ++- .../monitoring/endpoint/package-info.java | 24 +++++++++ .../monitoring/health/package-info.java | 24 +++++++++ .../monitoring/package-info.java | 24 +++++++++ .../autoconfigure/package-info.java | 24 +++++++++ .../monitoring/endpoint/package-info.java | 24 +++++++++ .../health/RateLimiterHealthIndicator.java | 2 +- .../monitoring/health/package-info.java | 24 +++++++++ .../model/RateLimiterEndpointResponse.java | 8 ++- .../monitoring/model/RateLimiterEventDTO.java | 16 +++--- .../RateLimiterEventsEndpointResponse.java | 8 ++- .../monitoring/model/package-info.java | 24 +++++++++ .../configure/CircuitBreakerAspect.java | 9 +++- ...CircuitBreakerConfigurationProperties.java | 17 ++++++- .../configure/package-info.java | 24 +++++++++ .../RateLimiterConfigurationProperties.java | 6 ++- .../ratelimiter/configure/package-info.java | 24 +++++++++ .../circuitbreaker/package-info.java | 24 +++++++++ 113 files changed, 1893 insertions(+), 62 deletions(-) create mode 100644 resilience4j-all/src/main/java/io/github/resilience4j/decorators/package-info.java create mode 100644 resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/event/package-info.java create mode 100644 resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/internal/package-info.java create mode 100644 resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/package-info.java create mode 100644 resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/utils/package-info.java create mode 100644 resilience4j-cache/src/main/java/io/github/resilience4j/cache/event/package-info.java create mode 100644 resilience4j-cache/src/main/java/io/github/resilience4j/cache/internal/package-info.java create mode 100644 resilience4j-cache/src/main/java/io/github/resilience4j/cache/package-info.java create mode 100644 resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/event/package-info.java create mode 100644 resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/internal/package-info.java create mode 100644 resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/package-info.java create mode 100644 resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/utils/package-info.java create mode 100644 resilience4j-consumer/src/main/java/io/github/resilience4j/consumer/package-info.java create mode 100644 resilience4j-core/src/main/java/io/github/resilience4j/core/lang/NonNull.java create mode 100644 resilience4j-core/src/main/java/io/github/resilience4j/core/lang/NonNullApi.java create mode 100644 resilience4j-core/src/main/java/io/github/resilience4j/core/lang/NonNullFields.java create mode 100644 resilience4j-core/src/main/java/io/github/resilience4j/core/lang/Nullable.java create mode 100644 resilience4j-core/src/main/java/io/github/resilience4j/core/package-info.java create mode 100644 resilience4j-feign/src/main/java/io/github/resilience4j/feign/package-info.java create mode 100644 resilience4j-metrics/src/main/java/io/github/resilience4j/metrics/internal/package-info.java create mode 100644 resilience4j-metrics/src/main/java/io/github/resilience4j/metrics/package-info.java create mode 100644 resilience4j-micrometer/src/main/java/io/github/resilience4j/micrometer/package-info.java create mode 100644 resilience4j-prometheus/src/main/java/io/github/resilience4j/prometheus/package-info.java create mode 100644 resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/event/package-info.java create mode 100644 resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/internal/package-info.java create mode 100644 resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/package-info.java create mode 100644 resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/utils/package-info.java create mode 100644 resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/adapter/package-info.java create mode 100644 resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/bulkhead/endpoint/package-info.java create mode 100644 resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/bulkhead/package-info.java create mode 100644 resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/endpoint/package-info.java create mode 100644 resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/package-info.java create mode 100644 resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/internal/package-info.java create mode 100644 resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/package-info.java create mode 100644 resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/endpoint/package-info.java create mode 100644 resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/package-info.java create mode 100644 resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/recovery/package-info.java create mode 100644 resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/endpoint/package-info.java create mode 100644 resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/package-info.java create mode 100644 resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/bulkhead/operator/package-info.java create mode 100644 resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/circuitbreaker/operator/package-info.java create mode 100644 resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/package-info.java create mode 100644 resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/ratelimiter/operator/package-info.java create mode 100644 resilience4j-retrofit/src/main/java/io/github/resilience4j/retrofit/internal/package-info.java create mode 100644 resilience4j-retrofit/src/main/java/io/github/resilience4j/retrofit/package-info.java create mode 100644 resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/package-info.java create mode 100644 resilience4j-retry/src/main/java/io/github/resilience4j/retry/internal/package-info.java create mode 100644 resilience4j-retry/src/main/java/io/github/resilience4j/retry/package-info.java create mode 100644 resilience4j-retry/src/main/java/io/github/resilience4j/retry/utils/package-info.java create mode 100644 resilience4j-rxjava2/src/main/java/io/github/resilience4j/adapter/package-info.java create mode 100644 resilience4j-rxjava2/src/main/java/io/github/resilience4j/bulkhead/operator/package-info.java create mode 100644 resilience4j-rxjava2/src/main/java/io/github/resilience4j/circuitbreaker/operator/package-info.java create mode 100644 resilience4j-rxjava2/src/main/java/io/github/resilience4j/ratelimiter/operator/package-info.java create mode 100644 resilience4j-rxjava2/src/main/java/io/github/resilience4j/retry/transformer/package-info.java create mode 100644 resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/autoconfigure/package-info.java create mode 100644 resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/package-info.java create mode 100644 resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/health/package-info.java create mode 100644 resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/package-info.java create mode 100644 resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/autoconfigure/package-info.java create mode 100644 resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/endpoint/package-info.java create mode 100644 resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/health/package-info.java create mode 100644 resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/model/package-info.java create mode 100644 resilience4j-spring/src/main/java/io/github/resilience4j/circuitbreaker/configure/package-info.java create mode 100644 resilience4j-spring/src/main/java/io/github/resilience4j/ratelimiter/configure/package-info.java create mode 100644 resilience4j-vertx/src/main/java/io/github/resilience4j/circuitbreaker/package-info.java diff --git a/build.gradle b/build.gradle index fa93053895..6fe7f5b3e6 100644 --- a/build.gradle +++ b/build.gradle @@ -15,6 +15,7 @@ buildscript { classpath "org.ajoberstar:gradle-git:1.3.2" classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.4.17" classpath 'com.github.erizo.gradle:jcstress-gradle-plugin:0.8.0' + classpath "com.netflix.nebula:gradle-extra-configurations-plugin:4.0.1" } } @@ -55,9 +56,14 @@ configure(project.coreProjects) { apply plugin: 'maven-publish' apply plugin: 'com.jfrog.bintray' apply from: "${rootDir}/publishing.gradle" + apply plugin: 'nebula.optional-base' + dependencies { compile ( libraries.vavr) compile ( libraries.slf4j) + + // JSR-305 only used for non-required meta-annotations + compile "com.google.code.findbugs:jsr305:3.0.2", optional testCompile ( libraries.junit) testCompile ( libraries.assertj) diff --git a/resilience4j-all/src/main/java/io/github/resilience4j/decorators/package-info.java b/resilience4j-all/src/main/java/io/github/resilience4j/decorators/package-info.java new file mode 100644 index 0000000000..d03be88255 --- /dev/null +++ b/resilience4j-all/src/main/java/io/github/resilience4j/decorators/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.decorators; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/event/package-info.java b/resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/event/package-info.java new file mode 100644 index 0000000000..169b1690c8 --- /dev/null +++ b/resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/event/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.bulkhead.event; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/internal/SemaphoreBulkhead.java b/resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/internal/SemaphoreBulkhead.java index 5d5c8e8389..a5a5cc7aa8 100644 --- a/resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/internal/SemaphoreBulkhead.java +++ b/resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/internal/SemaphoreBulkhead.java @@ -27,6 +27,7 @@ import io.github.resilience4j.bulkhead.event.BulkheadOnCallRejectedEvent; import io.github.resilience4j.core.EventConsumer; import io.github.resilience4j.core.EventProcessor; +import io.github.resilience4j.core.lang.Nullable; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; @@ -50,7 +51,7 @@ public class SemaphoreBulkhead implements Bulkhead { * @param name the name of this bulkhead * @param bulkheadConfig custom bulkhead configuration */ - public SemaphoreBulkhead(String name, BulkheadConfig bulkheadConfig) { + public SemaphoreBulkhead(String name, @Nullable BulkheadConfig bulkheadConfig) { this.name = name; this.config = bulkheadConfig != null ? bulkheadConfig : BulkheadConfig.ofDefaults(); diff --git a/resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/internal/package-info.java b/resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/internal/package-info.java new file mode 100644 index 0000000000..b62cad1d53 --- /dev/null +++ b/resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/internal/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.bulkhead.internal; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/package-info.java b/resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/package-info.java new file mode 100644 index 0000000000..7d8ec803fb --- /dev/null +++ b/resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.bulkhead; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/utils/package-info.java b/resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/utils/package-info.java new file mode 100644 index 0000000000..d3d269459d --- /dev/null +++ b/resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/utils/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.bulkhead.utils; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-cache/src/main/java/io/github/resilience4j/cache/event/package-info.java b/resilience4j-cache/src/main/java/io/github/resilience4j/cache/event/package-info.java new file mode 100644 index 0000000000..3e041bf295 --- /dev/null +++ b/resilience4j-cache/src/main/java/io/github/resilience4j/cache/event/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.cache.event; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-cache/src/main/java/io/github/resilience4j/cache/internal/package-info.java b/resilience4j-cache/src/main/java/io/github/resilience4j/cache/internal/package-info.java new file mode 100644 index 0000000000..55d16afa52 --- /dev/null +++ b/resilience4j-cache/src/main/java/io/github/resilience4j/cache/internal/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.cache.internal; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-cache/src/main/java/io/github/resilience4j/cache/package-info.java b/resilience4j-cache/src/main/java/io/github/resilience4j/cache/package-info.java new file mode 100644 index 0000000000..27230d1c48 --- /dev/null +++ b/resilience4j-cache/src/main/java/io/github/resilience4j/cache/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.cache; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/CircuitBreakerConfig.java b/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/CircuitBreakerConfig.java index ba22375168..92d29b6923 100644 --- a/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/CircuitBreakerConfig.java +++ b/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/CircuitBreakerConfig.java @@ -18,6 +18,8 @@ */ package io.github.resilience4j.circuitbreaker; +import io.github.resilience4j.core.lang.Nullable; + import java.time.Duration; import java.util.Arrays; import java.util.Optional; @@ -89,8 +91,8 @@ public static CircuitBreakerConfig ofDefaults(){ } public static class Builder { - private Predicate recordFailurePredicate; - private Predicate errorRecordingPredicate; + @Nullable private Predicate recordFailurePredicate; + @Nullable private Predicate errorRecordingPredicate; @SuppressWarnings("unchecked") private Class[] recordExceptions = new Class[0]; @SuppressWarnings("unchecked") @@ -248,7 +250,9 @@ public CircuitBreakerConfig build() { config.failureRateThreshold = failureRateThreshold; config.ringBufferSizeInClosedState = ringBufferSizeInClosedState; config.ringBufferSizeInHalfOpenState = ringBufferSizeInHalfOpenState; - config.recordFailurePredicate = errorRecordingPredicate; + if(errorRecordingPredicate != null) { + config.recordFailurePredicate = errorRecordingPredicate; + } config.automaticTransitionFromOpenToHalfOpenEnabled = automaticTransitionFromOpenToHalfOpenEnabled; return config; } diff --git a/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/event/package-info.java b/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/event/package-info.java new file mode 100644 index 0000000000..f4a4b8f54b --- /dev/null +++ b/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/event/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.circuitbreaker.event; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/internal/CircuitBreakerMetrics.java b/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/internal/CircuitBreakerMetrics.java index 0091132b7d..ff6230b270 100644 --- a/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/internal/CircuitBreakerMetrics.java +++ b/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/internal/CircuitBreakerMetrics.java @@ -20,6 +20,7 @@ import io.github.resilience4j.circuitbreaker.CircuitBreaker; +import io.github.resilience4j.core.lang.Nullable; import java.util.concurrent.atomic.LongAdder; @@ -33,7 +34,7 @@ class CircuitBreakerMetrics implements CircuitBreaker.Metrics { this(ringBufferSize, null); } - CircuitBreakerMetrics(int ringBufferSize, RingBitSet sourceSet) { + CircuitBreakerMetrics(int ringBufferSize, @Nullable RingBitSet sourceSet) { this.ringBufferSize = ringBufferSize; if(sourceSet != null) { this.ringBitSet = new RingBitSet(this.ringBufferSize, sourceSet); diff --git a/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/internal/ClosedState.java b/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/internal/ClosedState.java index 5491af0ee8..6852fde063 100644 --- a/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/internal/ClosedState.java +++ b/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/internal/ClosedState.java @@ -20,6 +20,7 @@ import io.github.resilience4j.circuitbreaker.CircuitBreaker; import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig; +import io.github.resilience4j.core.lang.Nullable; final class ClosedState extends CircuitBreakerState { @@ -30,7 +31,7 @@ final class ClosedState extends CircuitBreakerState { this(stateMachine, null); } - ClosedState(CircuitBreakerStateMachine stateMachine, CircuitBreakerMetrics circuitBreakerMetrics) { + ClosedState(CircuitBreakerStateMachine stateMachine, @Nullable CircuitBreakerMetrics circuitBreakerMetrics) { super(stateMachine); CircuitBreakerConfig circuitBreakerConfig = stateMachine.getCircuitBreakerConfig(); if(circuitBreakerMetrics == null){ diff --git a/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/internal/package-info.java b/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/internal/package-info.java new file mode 100644 index 0000000000..0bc23ed504 --- /dev/null +++ b/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/internal/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.circuitbreaker.internal; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/package-info.java b/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/package-info.java new file mode 100644 index 0000000000..c4c463eeee --- /dev/null +++ b/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.circuitbreaker; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/utils/package-info.java b/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/utils/package-info.java new file mode 100644 index 0000000000..e85da26282 --- /dev/null +++ b/resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/utils/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2017: Robert Winkler + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.circuitbreaker.utils; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-consumer/src/main/java/io/github/resilience4j/consumer/package-info.java b/resilience4j-consumer/src/main/java/io/github/resilience4j/consumer/package-info.java new file mode 100644 index 0000000000..49da3d55da --- /dev/null +++ b/resilience4j-consumer/src/main/java/io/github/resilience4j/consumer/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.consumer; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-core/src/main/java/io/github/resilience4j/core/EventProcessor.java b/resilience4j-core/src/main/java/io/github/resilience4j/core/EventProcessor.java index 15355aae91..6ae62205bb 100644 --- a/resilience4j-core/src/main/java/io/github/resilience4j/core/EventProcessor.java +++ b/resilience4j-core/src/main/java/io/github/resilience4j/core/EventProcessor.java @@ -18,13 +18,15 @@ */ package io.github.resilience4j.core; +import io.github.resilience4j.core.lang.Nullable; + import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; public class EventProcessor implements EventPublisher { protected volatile boolean consumerRegistered; - private volatile EventConsumer onEventConsumer; + @Nullable private volatile EventConsumer onEventConsumer; private ConcurrentMap, EventConsumer> eventConsumers = new ConcurrentHashMap<>(); public boolean hasConsumers(){ @@ -40,6 +42,7 @@ public void registerConsumer(Class eventType, EventCo @SuppressWarnings("unchecked") public boolean processEvent(E event) { boolean consumed = false; + EventConsumer onEventConsumer = this.onEventConsumer; if(onEventConsumer != null){ onEventConsumer.consumeEvent(event); consumed = true; @@ -55,7 +58,7 @@ public boolean processEvent(E event) { } @Override - public void onEvent(EventConsumer onEventConsumer) { + public void onEvent(@Nullable EventConsumer onEventConsumer) { consumerRegistered = true; this.onEventConsumer = onEventConsumer; } diff --git a/resilience4j-core/src/main/java/io/github/resilience4j/core/lang/NonNull.java b/resilience4j-core/src/main/java/io/github/resilience4j/core/lang/NonNull.java new file mode 100644 index 0000000000..1e2c9ad9da --- /dev/null +++ b/resilience4j-core/src/main/java/io/github/resilience4j/core/lang/NonNull.java @@ -0,0 +1,47 @@ +/* + * + * Copyright 2017: Robert Winkler + * + * 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.github.resilience4j.core.lang; + +import javax.annotation.Nonnull; +import javax.annotation.meta.TypeQualifierNickname; +import java.lang.annotation.*; + +/** + * A common annotation to declare that annotated elements cannot be {@code null}. + * Leverages JSR 305 meta-annotations to indicate nullability in Java to common tools with + * JSR 305 support and used by Kotlin to infer nullability of the API. + *

+ *

Should be used at parameter, return value, and field level. Method overrides should + * repeat parent {@code @NonNull} annotations unless they behave differently. + *

+ *

Use {@code @NonNullApi} (scope = parameters + return values) and/or {@code @NonNullFields} + * (scope = fields) to set the default behavior to non-nullable in order to avoid annotating + * your whole codebase with {@code @NonNull}. + * + * @see NonNullApi + * @see NonNullFields + * @see Nullable + */ +@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Nonnull +@TypeQualifierNickname +public @interface NonNull { +} \ No newline at end of file diff --git a/resilience4j-core/src/main/java/io/github/resilience4j/core/lang/NonNullApi.java b/resilience4j-core/src/main/java/io/github/resilience4j/core/lang/NonNullApi.java new file mode 100644 index 0000000000..3f578c53ea --- /dev/null +++ b/resilience4j-core/src/main/java/io/github/resilience4j/core/lang/NonNullApi.java @@ -0,0 +1,45 @@ +/* + * + * Copyright 2017: Robert Winkler + * + * 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.github.resilience4j.core.lang; + +import javax.annotation.Nonnull; +import javax.annotation.meta.TypeQualifierDefault; +import java.lang.annotation.*; + +/** + * A common annotation to declare that parameters and return values + * are to be considered as non-nullable by default for a given package. + *

+ *

Leverages JSR-305 meta-annotations to indicate nullability in Java to common + * tools with JSR-305 support and used by Kotlin to infer nullability of the API. + *

+ *

Should be used at package level in association with {@link Nullable} + * annotations at parameter and return value level. + * + * @see NonNullFields + * @see Nullable + * @see NonNull + */ +@Target({ElementType.PACKAGE, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Nonnull +@TypeQualifierDefault({ElementType.METHOD, ElementType.PARAMETER}) +public @interface NonNullApi { +} \ No newline at end of file diff --git a/resilience4j-core/src/main/java/io/github/resilience4j/core/lang/NonNullFields.java b/resilience4j-core/src/main/java/io/github/resilience4j/core/lang/NonNullFields.java new file mode 100644 index 0000000000..4747cd34ca --- /dev/null +++ b/resilience4j-core/src/main/java/io/github/resilience4j/core/lang/NonNullFields.java @@ -0,0 +1,49 @@ +/* + * + * Copyright 2017: Robert Winkler + * + * 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.github.resilience4j.core.lang; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.annotation.Nonnull; +import javax.annotation.meta.TypeQualifierDefault; + +/** + * A common annotation to declare that fields are to be considered as + * non-nullable by default for a given package. + * + *

Leverages JSR-305 meta-annotations to indicate nullability in Java to common + * tools with JSR-305 support and used by Kotlin to infer nullability of the API. + * + *

Should be used at package level in association with {@link Nullable} + * annotations at field level. + * + * @see NonNullFields + * @see Nullable + * @see NonNull + */ +@Target({ElementType.PACKAGE, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Nonnull +@TypeQualifierDefault(ElementType.FIELD) +public @interface NonNullFields { +} diff --git a/resilience4j-core/src/main/java/io/github/resilience4j/core/lang/Nullable.java b/resilience4j-core/src/main/java/io/github/resilience4j/core/lang/Nullable.java new file mode 100644 index 0000000000..d5acc5cada --- /dev/null +++ b/resilience4j-core/src/main/java/io/github/resilience4j/core/lang/Nullable.java @@ -0,0 +1,47 @@ +/* + * + * Copyright 2017: Robert Winkler + * + * 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.github.resilience4j.core.lang; + +import javax.annotation.Nonnull; +import javax.annotation.meta.TypeQualifierNickname; +import javax.annotation.meta.When; +import java.lang.annotation.*; + +/** + * A common annotation to declare that annotated elements can be {@code null} under + * some circumstance. Leverages JSR 305 meta-annotations to indicate nullability in Java + * to common tools with JSR 305 support and used by Kotlin to infer nullability of the API. + *

+ *

Should be used at parameter, return value, and field level. Methods override should + * repeat parent {@code @Nullable} annotations unless they behave differently. + *

+ *

Can be used in association with {@code NonNullApi} or {@code @NonNullFields} to + * override the default non-nullable semantic to nullable. + * + * @see NonNullApi + * @see NonNullFields + * @see NonNull + */ +@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Nonnull(when = When.MAYBE) +@TypeQualifierNickname +public @interface Nullable { +} \ No newline at end of file diff --git a/resilience4j-core/src/main/java/io/github/resilience4j/core/package-info.java b/resilience4j-core/src/main/java/io/github/resilience4j/core/package-info.java new file mode 100644 index 0000000000..8485d3ce5a --- /dev/null +++ b/resilience4j-core/src/main/java/io/github/resilience4j/core/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.core; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-feign/src/main/java/io/github/resilience4j/feign/package-info.java b/resilience4j-feign/src/main/java/io/github/resilience4j/feign/package-info.java new file mode 100644 index 0000000000..d2188ad17a --- /dev/null +++ b/resilience4j-feign/src/main/java/io/github/resilience4j/feign/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.feign; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-metrics/src/main/java/io/github/resilience4j/metrics/internal/package-info.java b/resilience4j-metrics/src/main/java/io/github/resilience4j/metrics/internal/package-info.java new file mode 100644 index 0000000000..ccdfabf032 --- /dev/null +++ b/resilience4j-metrics/src/main/java/io/github/resilience4j/metrics/internal/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.metrics.internal; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-metrics/src/main/java/io/github/resilience4j/metrics/package-info.java b/resilience4j-metrics/src/main/java/io/github/resilience4j/metrics/package-info.java new file mode 100644 index 0000000000..4d53cda451 --- /dev/null +++ b/resilience4j-metrics/src/main/java/io/github/resilience4j/metrics/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.metrics; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-micrometer/src/main/java/io/github/resilience4j/micrometer/package-info.java b/resilience4j-micrometer/src/main/java/io/github/resilience4j/micrometer/package-info.java new file mode 100644 index 0000000000..553419843a --- /dev/null +++ b/resilience4j-micrometer/src/main/java/io/github/resilience4j/micrometer/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.micrometer; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-prometheus/src/main/java/io/github/resilience4j/prometheus/package-info.java b/resilience4j-prometheus/src/main/java/io/github/resilience4j/prometheus/package-info.java new file mode 100644 index 0000000000..2fac0b830a --- /dev/null +++ b/resilience4j-prometheus/src/main/java/io/github/resilience4j/prometheus/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.prometheus; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/event/package-info.java b/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/event/package-info.java new file mode 100644 index 0000000000..6dc9e5731a --- /dev/null +++ b/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/event/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratelimiter.event; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/internal/InMemoryRateLimiterRegistry.java b/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/internal/InMemoryRateLimiterRegistry.java index 55dc8a1565..1b35c811ba 100644 --- a/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/internal/InMemoryRateLimiterRegistry.java +++ b/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/internal/InMemoryRateLimiterRegistry.java @@ -48,7 +48,7 @@ public class InMemoryRateLimiterRegistry implements RateLimiterRegistry { public InMemoryRateLimiterRegistry(final RateLimiterConfig defaultRateLimiterConfig) { this.defaultRateLimiterConfig = requireNonNull(defaultRateLimiterConfig, CONFIG_MUST_NOT_BE_NULL); - rateLimiters = new ConcurrentHashMap<>(); + this.rateLimiters = new ConcurrentHashMap<>(); } /** diff --git a/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/internal/SemaphoreBasedRateLimiter.java b/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/internal/SemaphoreBasedRateLimiter.java index 92e2cfb3c2..247da3e141 100644 --- a/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/internal/SemaphoreBasedRateLimiter.java +++ b/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/internal/SemaphoreBasedRateLimiter.java @@ -18,6 +18,7 @@ */ package io.github.resilience4j.ratelimiter.internal; +import io.github.resilience4j.core.lang.Nullable; import io.github.resilience4j.ratelimiter.RateLimiter; import io.github.resilience4j.ratelimiter.RateLimiterConfig; import io.github.resilience4j.ratelimiter.event.RateLimiterOnFailureEvent; @@ -69,7 +70,7 @@ public SemaphoreBasedRateLimiter(final String name, final RateLimiterConfig rate * @param scheduler executor that will refresh permissions */ public SemaphoreBasedRateLimiter(String name, RateLimiterConfig rateLimiterConfig, - ScheduledExecutorService scheduler) { + @Nullable ScheduledExecutorService scheduler) { this.name = requireNonNull(name, NAME_MUST_NOT_BE_NULL); this.rateLimiterConfig = new AtomicReference<>(requireNonNull(rateLimiterConfig, CONFIG_MUST_NOT_BE_NULL)); diff --git a/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/internal/package-info.java b/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/internal/package-info.java new file mode 100644 index 0000000000..943fac4fa2 --- /dev/null +++ b/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/internal/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratelimiter.internal; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/package-info.java b/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/package-info.java new file mode 100644 index 0000000000..7b7d6ef82b --- /dev/null +++ b/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratelimiter; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/utils/package-info.java b/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/utils/package-info.java new file mode 100644 index 0000000000..f27983040c --- /dev/null +++ b/resilience4j-ratelimiter/src/main/java/io/github/resilience4j/ratelimiter/utils/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratelimiter.utils; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/EndpointsConfig.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/EndpointsConfig.java index 4c69330e1c..d6273eb2a5 100644 --- a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/EndpointsConfig.java +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/EndpointsConfig.java @@ -16,6 +16,7 @@ package io.github.resilience4j.ratpack; +import io.github.resilience4j.core.lang.Nullable; import ratpack.func.Function; import static ratpack.util.Exceptions.uncheck; @@ -81,6 +82,7 @@ public EndpointsConfig bulkheads(Function returnType = invocation.getMethod().getReturnType(); if (Promise.class.isAssignableFrom(returnType)) { Promise result = (Promise) invocation.proceed(); diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/bulkhead/endpoint/BulkheadEventDTO.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/bulkhead/endpoint/BulkheadEventDTO.java index 052a66a6c9..ca1f5839b6 100644 --- a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/bulkhead/endpoint/BulkheadEventDTO.java +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/bulkhead/endpoint/BulkheadEventDTO.java @@ -16,14 +16,18 @@ package io.github.resilience4j.ratpack.bulkhead.endpoint; import io.github.resilience4j.bulkhead.event.BulkheadEvent; +import io.github.resilience4j.core.lang.Nullable; /** * DTO to class for publishing bulkhead events. */ public class BulkheadEventDTO { + @Nullable private String bulkheadName; + @Nullable private BulkheadEvent.Type type; + @Nullable private String creationTime; BulkheadEventDTO() { @@ -39,6 +43,7 @@ public static BulkheadEventDTO createEventDTO(BulkheadEvent bulkheadEvent) { return new BulkheadEventDTO(bulkheadEvent.getBulkheadName(), bulkheadEvent.getEventType(), bulkheadEvent.getCreationTime().toString()); } + @Nullable public String getBulkheadName() { return bulkheadName; } @@ -47,6 +52,7 @@ public void setBulkheadName(String bulkheadName) { this.bulkheadName = bulkheadName; } + @Nullable public BulkheadEvent.Type getType() { return type; } @@ -55,6 +61,7 @@ public void setType(BulkheadEvent.Type type) { this.type = type; } + @Nullable public String getCreationTime() { return creationTime; } diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/bulkhead/endpoint/BulkheadEventsEndpointResponse.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/bulkhead/endpoint/BulkheadEventsEndpointResponse.java index de20644106..9db431a90f 100644 --- a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/bulkhead/endpoint/BulkheadEventsEndpointResponse.java +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/bulkhead/endpoint/BulkheadEventsEndpointResponse.java @@ -15,9 +15,12 @@ */ package io.github.resilience4j.ratpack.bulkhead.endpoint; +import io.github.resilience4j.core.lang.Nullable; + import java.util.List; public class BulkheadEventsEndpointResponse { + @Nullable private List bulkheadEvents; public BulkheadEventsEndpointResponse() { @@ -27,6 +30,7 @@ public BulkheadEventsEndpointResponse(List bulkheadEvents) { this.bulkheadEvents = bulkheadEvents; } + @Nullable public List getBulkheadEvents() { return bulkheadEvents; } diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/bulkhead/endpoint/package-info.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/bulkhead/endpoint/package-info.java new file mode 100644 index 0000000000..0340ae1853 --- /dev/null +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/bulkhead/endpoint/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratpack.bulkhead.endpoint; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/bulkhead/package-info.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/bulkhead/package-info.java new file mode 100644 index 0000000000..25fee9d352 --- /dev/null +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/bulkhead/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratpack.bulkhead; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/CircuitBreakerMethodInterceptor.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/CircuitBreakerMethodInterceptor.java index c9c58db397..52b6a3aeff 100644 --- a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/CircuitBreakerMethodInterceptor.java +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/CircuitBreakerMethodInterceptor.java @@ -18,6 +18,7 @@ import com.google.inject.Inject; import io.github.resilience4j.circuitbreaker.CircuitBreakerOpenException; import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry; +import io.github.resilience4j.core.lang.Nullable; import io.github.resilience4j.ratpack.recovery.RecoveryFunction; import io.github.resilience4j.reactor.circuitbreaker.operator.CircuitBreakerOperator; import org.aopalliance.intercept.MethodInterceptor; @@ -37,9 +38,11 @@ public class CircuitBreakerMethodInterceptor implements MethodInterceptor { @Inject(optional = true) + @Nullable private CircuitBreakerRegistry registry; @SuppressWarnings("unchecked") + @Nullable @Override public Object invoke(MethodInvocation invocation) throws Throwable { CircuitBreaker annotation = invocation.getMethod().getAnnotation(CircuitBreaker.class); @@ -48,9 +51,6 @@ public Object invoke(MethodInvocation invocation) throws Throwable { registry = CircuitBreakerRegistry.ofDefaults(); } io.github.resilience4j.circuitbreaker.CircuitBreaker breaker = registry.circuitBreaker(annotation.name()); - if (breaker == null) { - return invocation.proceed(); - } Class returnType = invocation.getMethod().getReturnType(); if (Promise.class.isAssignableFrom(returnType)) { Promise result = (Promise) proceed(invocation, breaker, recoveryFunction); @@ -107,6 +107,7 @@ public Object invoke(MethodInvocation invocation) throws Throwable { return proceed(invocation, breaker, recoveryFunction); } + @Nullable private Object proceed(MethodInvocation invocation, io.github.resilience4j.circuitbreaker.CircuitBreaker breaker, RecoveryFunction recoveryFunction) throws Throwable { Object result; long start = System.nanoTime(); diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/endpoint/CircuitBreakerEventDTO.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/endpoint/CircuitBreakerEventDTO.java index 6e838b6ebc..8b6bbdd8a5 100644 --- a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/endpoint/CircuitBreakerEventDTO.java +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/endpoint/CircuitBreakerEventDTO.java @@ -18,15 +18,22 @@ import com.fasterxml.jackson.annotation.JsonInclude; import io.github.resilience4j.circuitbreaker.CircuitBreaker; import io.github.resilience4j.circuitbreaker.event.CircuitBreakerEvent; +import io.github.resilience4j.core.lang.Nullable; @JsonInclude(JsonInclude.Include.NON_NULL) public class CircuitBreakerEventDTO { + @Nullable private String circuitBreakerName; + @Nullable private CircuitBreakerEvent.Type type; + @Nullable private String creationTime; + @Nullable private String errorMessage; + @Nullable private Long durationInMs; + @Nullable private CircuitBreaker.StateTransition stateTransition; CircuitBreakerEventDTO() { @@ -35,9 +42,9 @@ public class CircuitBreakerEventDTO { CircuitBreakerEventDTO(String circuitBreakerName, CircuitBreakerEvent.Type type, String creationTime, - String errorMessage, - Long durationInMs, - CircuitBreaker.StateTransition stateTransition) { + @Nullable String errorMessage, + @Nullable Long durationInMs, + @Nullable CircuitBreaker.StateTransition stateTransition) { this.circuitBreakerName = circuitBreakerName; this.type = type; this.creationTime = creationTime; @@ -46,6 +53,7 @@ public class CircuitBreakerEventDTO { this.stateTransition = stateTransition; } + @Nullable public String getCircuitBreakerName() { return circuitBreakerName; } @@ -54,6 +62,7 @@ public void setCircuitBreakerName(String circuitBreakerName) { this.circuitBreakerName = circuitBreakerName; } + @Nullable public CircuitBreakerEvent.Type getType() { return type; } @@ -62,6 +71,7 @@ public void setType(CircuitBreakerEvent.Type type) { this.type = type; } + @Nullable public String getCreationTime() { return creationTime; } @@ -70,6 +80,7 @@ public void setCreationTime(String creationTime) { this.creationTime = creationTime; } + @Nullable public String getErrorMessage() { return errorMessage; } @@ -78,6 +89,7 @@ public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; } + @Nullable public Long getDurationInMs() { return durationInMs; } @@ -86,6 +98,7 @@ public void setDurationInMs(Long durationInMs) { this.durationInMs = durationInMs; } + @Nullable public CircuitBreaker.StateTransition getStateTransition() { return stateTransition; } diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/endpoint/CircuitBreakerEventDTOBuilder.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/endpoint/CircuitBreakerEventDTOBuilder.java index 740f0994e2..523cab2086 100644 --- a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/endpoint/CircuitBreakerEventDTOBuilder.java +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/endpoint/CircuitBreakerEventDTOBuilder.java @@ -17,6 +17,7 @@ import io.github.resilience4j.circuitbreaker.CircuitBreaker; import io.github.resilience4j.circuitbreaker.event.CircuitBreakerEvent; +import io.github.resilience4j.core.lang.Nullable; import java.time.Duration; @@ -24,8 +25,11 @@ class CircuitBreakerEventDTOBuilder { private String circuitBreakerName; private CircuitBreakerEvent.Type type; private String creationTime; + @Nullable private String throwable = null; + @Nullable private Long duration = null; + @Nullable private CircuitBreaker.StateTransition stateTransition = null; CircuitBreakerEventDTOBuilder(String circuitBreakerName, CircuitBreakerEvent.Type type, String creationTime){ diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/endpoint/CircuitBreakerEventsEndpointResponse.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/endpoint/CircuitBreakerEventsEndpointResponse.java index 4dda1cf3c2..9f63536891 100644 --- a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/endpoint/CircuitBreakerEventsEndpointResponse.java +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/endpoint/CircuitBreakerEventsEndpointResponse.java @@ -16,9 +16,12 @@ package io.github.resilience4j.ratpack.circuitbreaker.endpoint; +import io.github.resilience4j.core.lang.Nullable; + import java.util.List; public class CircuitBreakerEventsEndpointResponse { + @Nullable private List circuitBreakerEvents; public CircuitBreakerEventsEndpointResponse(){ @@ -28,6 +31,7 @@ public CircuitBreakerEventsEndpointResponse(List circuit this.circuitBreakerEvents = circuitBreakerEvents; } + @Nullable public List getCircuitBreakerEvents() { return circuitBreakerEvents; } diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/endpoint/package-info.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/endpoint/package-info.java new file mode 100644 index 0000000000..4e1f030eaa --- /dev/null +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/endpoint/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratpack.circuitbreaker.endpoint; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/package-info.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/package-info.java new file mode 100644 index 0000000000..2328b9f2d5 --- /dev/null +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/circuitbreaker/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratpack.circuitbreaker; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/internal/AbstractTransformer.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/internal/AbstractTransformer.java index a99cff7b08..902790e84b 100644 --- a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/internal/AbstractTransformer.java +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/internal/AbstractTransformer.java @@ -16,12 +16,14 @@ package io.github.resilience4j.ratpack.internal; +import io.github.resilience4j.core.lang.Nullable; import ratpack.exec.Downstream; import ratpack.exec.Upstream; import ratpack.func.Function; public abstract class AbstractTransformer implements Function, Upstream> { + @Nullable protected Function recoverer; protected void handleRecovery(Downstream down, Throwable throwable) { diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/internal/package-info.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/internal/package-info.java new file mode 100644 index 0000000000..6de6945023 --- /dev/null +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/internal/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratpack.internal; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/package-info.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/package-info.java new file mode 100644 index 0000000000..ffd1def43c --- /dev/null +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratpack; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/RateLimiterMethodInterceptor.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/RateLimiterMethodInterceptor.java index 1bd2de5cf6..ff91177d5a 100644 --- a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/RateLimiterMethodInterceptor.java +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/RateLimiterMethodInterceptor.java @@ -17,6 +17,7 @@ package io.github.resilience4j.ratpack.ratelimiter; import com.google.inject.Inject; +import io.github.resilience4j.core.lang.Nullable; import io.github.resilience4j.ratelimiter.RateLimiterConfig; import io.github.resilience4j.ratelimiter.RateLimiterRegistry; import io.github.resilience4j.ratelimiter.RequestNotPermitted; @@ -41,9 +42,11 @@ public class RateLimiterMethodInterceptor implements MethodInterceptor { @Inject(optional = true) + @Nullable private RateLimiterRegistry registry; @SuppressWarnings("unchecked") + @Nullable @Override public Object invoke(MethodInvocation invocation) throws Throwable { RateLimiter annotation = invocation.getMethod().getAnnotation(RateLimiter.class); @@ -96,6 +99,7 @@ public Object invoke(MethodInvocation invocation) throws Throwable { return handleProceedWithException(invocation, rateLimiter, recoveryFunction); } + @Nullable private Object proceed(MethodInvocation invocation, io.github.resilience4j.ratelimiter.RateLimiter rateLimiter, RecoveryFunction recoveryFunction) throws Throwable { Object result; try { @@ -106,6 +110,7 @@ private Object proceed(MethodInvocation invocation, io.github.resilience4j.ratel return result; } + @Nullable private Object handleProceedWithException(MethodInvocation invocation, io.github.resilience4j.ratelimiter.RateLimiter rateLimiter, RecoveryFunction recoveryFunction) throws Throwable { RateLimiterConfig rateLimiterConfig = rateLimiter.getRateLimiterConfig(); Duration timeoutDuration = rateLimiterConfig.getTimeoutDuration(); diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/endpoint/RateLimiterEventDTO.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/endpoint/RateLimiterEventDTO.java index c69bc54890..2e4cbf90f3 100644 --- a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/endpoint/RateLimiterEventDTO.java +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/endpoint/RateLimiterEventDTO.java @@ -16,13 +16,17 @@ package io.github.resilience4j.ratpack.ratelimiter.endpoint; import com.fasterxml.jackson.annotation.JsonInclude; +import io.github.resilience4j.core.lang.Nullable; import io.github.resilience4j.ratelimiter.event.RateLimiterEvent; @JsonInclude(JsonInclude.Include.NON_NULL) public class RateLimiterEventDTO { + @Nullable private String rateLimiterName; + @Nullable private RateLimiterEvent.Type rateLimiterEventType; + @Nullable private String rateLimiterCreationTime; public static RateLimiterEventDTO createRateLimiterEventDTO(RateLimiterEvent rateLimiterEvent) { @@ -33,6 +37,7 @@ public static RateLimiterEventDTO createRateLimiterEventDTO(RateLimiterEvent rat return dto; } + @Nullable public String getRateLimiterName() { return rateLimiterName; } @@ -41,6 +46,7 @@ public void setRateLimiterName(String rateLimiterName) { this.rateLimiterName = rateLimiterName; } + @Nullable public RateLimiterEvent.Type getRateLimiterEventType() { return rateLimiterEventType; } @@ -49,6 +55,7 @@ public void setRateLimiterEventType(RateLimiterEvent.Type rateLimiterEventType) this.rateLimiterEventType = rateLimiterEventType; } + @Nullable public String getRateLimiterCreationTime() { return rateLimiterCreationTime; } diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/endpoint/RateLimiterEventsEndpointResponse.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/endpoint/RateLimiterEventsEndpointResponse.java index fe2bde232a..865e4eceaf 100644 --- a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/endpoint/RateLimiterEventsEndpointResponse.java +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/endpoint/RateLimiterEventsEndpointResponse.java @@ -15,10 +15,13 @@ */ package io.github.resilience4j.ratpack.ratelimiter.endpoint; +import io.github.resilience4j.core.lang.Nullable; + import java.util.List; public class RateLimiterEventsEndpointResponse { + @Nullable private List rateLimiterEvents; public RateLimiterEventsEndpointResponse() { @@ -28,6 +31,7 @@ public RateLimiterEventsEndpointResponse(List rateLimiterEv this.rateLimiterEvents = rateLimiterEvents; } + @Nullable public List getRateLimiterEvents() { return rateLimiterEvents; } diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/endpoint/package-info.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/endpoint/package-info.java new file mode 100644 index 0000000000..2e05668473 --- /dev/null +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/endpoint/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratpack.ratelimiter.endpoint; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/package-info.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/package-info.java new file mode 100644 index 0000000000..041cc3dd25 --- /dev/null +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/ratelimiter/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratpack.ratelimiter; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/recovery/DefaultRecoveryFunction.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/recovery/DefaultRecoveryFunction.java index a8637750e6..eb24557543 100644 --- a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/recovery/DefaultRecoveryFunction.java +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/recovery/DefaultRecoveryFunction.java @@ -15,9 +15,12 @@ */ package io.github.resilience4j.ratpack.recovery; +import io.github.resilience4j.core.lang.Nullable; + public class DefaultRecoveryFunction implements RecoveryFunction { @Override - public O apply(Throwable t) throws Exception { + @Nullable + public O apply(@Nullable Throwable t) throws Exception { Exception exception = (Exception)t; if (exception != null) { throw exception; diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/recovery/package-info.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/recovery/package-info.java new file mode 100644 index 0000000000..a577cfdbbc --- /dev/null +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/recovery/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratpack.recovery; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/RetryMethodInterceptor.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/RetryMethodInterceptor.java index 2b4a480b4b..3ce2fa0bec 100644 --- a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/RetryMethodInterceptor.java +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/RetryMethodInterceptor.java @@ -16,6 +16,7 @@ package io.github.resilience4j.ratpack.retry; import com.google.inject.Inject; +import io.github.resilience4j.core.lang.Nullable; import io.github.resilience4j.ratpack.recovery.RecoveryFunction; import io.github.resilience4j.retry.RetryRegistry; import org.aopalliance.intercept.MethodInterceptor; @@ -35,16 +36,18 @@ public class RetryMethodInterceptor implements MethodInterceptor { @Inject(optional = true) + @Nullable private RetryRegistry registry; @SuppressWarnings("unchecked") + @Nullable @Override public Object invoke(MethodInvocation invocation) throws Throwable { Retry annotation = invocation.getMethod().getAnnotation(Retry.class); - io.github.resilience4j.retry.Retry retry = registry.retry(annotation.name()); - if (retry == null) { + if(registry == null) { return invocation.proceed(); } + io.github.resilience4j.retry.Retry retry = registry.retry(annotation.name()); RecoveryFunction recoveryFunction = annotation.recovery().newInstance(); if (registry == null) { registry = RetryRegistry.ofDefaults(); @@ -93,6 +96,7 @@ else if (CompletionStage.class.isAssignableFrom(returnType)) { } @SuppressWarnings("unchecked") + private CompletionStage executeCompletionStage(MethodInvocation invocation, CompletionStage stage, io.github.resilience4j.retry.Retry.Context context, RecoveryFunction recoveryFunction) { final CompletableFuture promise = new CompletableFuture(); stage.whenComplete((v, t) -> { @@ -118,6 +122,7 @@ private CompletionStage executeCompletionStage(MethodInvocation invocation, C return promise; } + @Nullable private Object proceed(MethodInvocation invocation, io.github.resilience4j.retry.Retry retry, RecoveryFunction recoveryFunction) throws Throwable { io.github.resilience4j.retry.Retry.Context context = retry.context(); try { diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/RetryTransformer.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/RetryTransformer.java index fd0ad586f1..9ddf9e2cd3 100644 --- a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/RetryTransformer.java +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/RetryTransformer.java @@ -15,6 +15,7 @@ */ package io.github.resilience4j.ratpack.retry; +import io.github.resilience4j.core.lang.Nullable; import io.github.resilience4j.ratpack.internal.AbstractTransformer; import io.github.resilience4j.retry.Retry; import ratpack.exec.Downstream; @@ -47,7 +48,7 @@ public static RetryTransformer of(Retry retry) { * @param recoverer the recovery function * @return the transformer */ - public RetryTransformer recover(Function recoverer) { + public RetryTransformer recover(@Nullable Function recoverer) { this.recoverer = recoverer; return this; } diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/endpoint/RetryEventDTO.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/endpoint/RetryEventDTO.java index cdcd0e9711..2678f4b1e6 100644 --- a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/endpoint/RetryEventDTO.java +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/endpoint/RetryEventDTO.java @@ -16,14 +16,18 @@ package io.github.resilience4j.ratpack.retry.endpoint; import com.fasterxml.jackson.annotation.JsonInclude; +import io.github.resilience4j.core.lang.Nullable; import io.github.resilience4j.retry.event.RetryEvent; @JsonInclude(JsonInclude.Include.NON_NULL) public class RetryEventDTO { + @Nullable private String retryName; + @Nullable private RetryEvent.Type retryEventType; private int numberOfRetryAttempts; + @Nullable private String retryCreationTime; public static RetryEventDTO createRetryEventDTO(RetryEvent retryEvent) { @@ -35,6 +39,7 @@ public static RetryEventDTO createRetryEventDTO(RetryEvent retryEvent) { return dto; } + @Nullable public String getRetryName() { return retryName; } @@ -43,6 +48,7 @@ public void setRetryName(String retryName) { this.retryName = retryName; } + @Nullable public RetryEvent.Type getRetryEventType() { return retryEventType; } @@ -59,6 +65,7 @@ public void setNumberOfRetryAttempts(int numberOfRetryAttempts) { this.numberOfRetryAttempts = numberOfRetryAttempts; } + @Nullable public String getRetryCreationTime() { return retryCreationTime; } diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/endpoint/RetryEventsEndpointResponse.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/endpoint/RetryEventsEndpointResponse.java index 4461f056ef..8c9aac060a 100644 --- a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/endpoint/RetryEventsEndpointResponse.java +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/endpoint/RetryEventsEndpointResponse.java @@ -15,10 +15,13 @@ */ package io.github.resilience4j.ratpack.retry.endpoint; +import io.github.resilience4j.core.lang.Nullable; + import java.util.List; public class RetryEventsEndpointResponse { + @Nullable private List retryEvents; public RetryEventsEndpointResponse() { @@ -28,6 +31,7 @@ public RetryEventsEndpointResponse(List retryEvents) { this.retryEvents = retryEvents; } + @Nullable public List getRetryEvents() { return retryEvents; } diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/endpoint/package-info.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/endpoint/package-info.java new file mode 100644 index 0000000000..994a408912 --- /dev/null +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/endpoint/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratpack.retry.endpoint; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/package-info.java b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/package-info.java new file mode 100644 index 0000000000..fccb3debfc --- /dev/null +++ b/resilience4j-ratpack/src/main/java/io/github/resilience4j/ratpack/retry/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratpack.retry; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/ResilienceBaseSubscriber.java b/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/ResilienceBaseSubscriber.java index 93f5ba777b..66d258b075 100644 --- a/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/ResilienceBaseSubscriber.java +++ b/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/ResilienceBaseSubscriber.java @@ -15,6 +15,7 @@ */ package io.github.resilience4j.reactor; +import io.github.resilience4j.core.lang.Nullable; import org.reactivestreams.Subscription; import reactor.core.CoreSubscriber; import reactor.core.Disposable; @@ -37,6 +38,7 @@ public abstract class ResilienceBaseSubscriber implements CoreSubscriber, protected final CoreSubscriber actual; + @Nullable private volatile Subscription subscription; private static final AtomicReferenceFieldUpdater S = @@ -52,6 +54,8 @@ protected ResilienceBaseSubscriber(CoreSubscriber actual) { * Return current {@link Subscription} * @return current {@link Subscription} */ + + @Nullable protected Subscription upstream() { return subscription; } diff --git a/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/bulkhead/operator/package-info.java b/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/bulkhead/operator/package-info.java new file mode 100644 index 0000000000..e82116c3ef --- /dev/null +++ b/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/bulkhead/operator/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.reactor.bulkhead.operator; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/circuitbreaker/operator/CircuitBreakerSubscriber.java b/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/circuitbreaker/operator/CircuitBreakerSubscriber.java index 005088fe0b..ee08706534 100644 --- a/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/circuitbreaker/operator/CircuitBreakerSubscriber.java +++ b/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/circuitbreaker/operator/CircuitBreakerSubscriber.java @@ -18,6 +18,7 @@ import io.github.resilience4j.circuitbreaker.CircuitBreaker; import io.github.resilience4j.circuitbreaker.CircuitBreakerOpenException; import io.github.resilience4j.core.StopWatch; +import io.github.resilience4j.core.lang.Nullable; import io.github.resilience4j.reactor.ResilienceBaseSubscriber; import org.reactivestreams.Subscriber; import reactor.core.CoreSubscriber; @@ -34,6 +35,7 @@ class CircuitBreakerSubscriber extends ResilienceBaseSubscriber { private final CircuitBreaker circuitBreaker; + @Nullable private StopWatch stopWatch; private final boolean singleProducer; diff --git a/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/circuitbreaker/operator/package-info.java b/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/circuitbreaker/operator/package-info.java new file mode 100644 index 0000000000..8737257334 --- /dev/null +++ b/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/circuitbreaker/operator/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.reactor.circuitbreaker.operator; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/package-info.java b/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/package-info.java new file mode 100644 index 0000000000..4d228490ba --- /dev/null +++ b/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.reactor; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/ratelimiter/operator/package-info.java b/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/ratelimiter/operator/package-info.java new file mode 100644 index 0000000000..553baccdb8 --- /dev/null +++ b/resilience4j-reactor/src/main/java/io/github/resilience4j/reactor/ratelimiter/operator/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.reactor.ratelimiter.operator; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-retrofit/src/main/java/io/github/resilience4j/retrofit/internal/package-info.java b/resilience4j-retrofit/src/main/java/io/github/resilience4j/retrofit/internal/package-info.java new file mode 100644 index 0000000000..7aeecd103f --- /dev/null +++ b/resilience4j-retrofit/src/main/java/io/github/resilience4j/retrofit/internal/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.retrofit.internal; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-retrofit/src/main/java/io/github/resilience4j/retrofit/package-info.java b/resilience4j-retrofit/src/main/java/io/github/resilience4j/retrofit/package-info.java new file mode 100644 index 0000000000..1fba97cff3 --- /dev/null +++ b/resilience4j-retrofit/src/main/java/io/github/resilience4j/retrofit/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.retrofit; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/RetryConfig.java b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/RetryConfig.java index 6548a414ff..a500ed7aea 100644 --- a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/RetryConfig.java +++ b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/RetryConfig.java @@ -19,6 +19,8 @@ package io.github.resilience4j.retry; +import io.github.resilience4j.core.lang.Nullable; + import java.time.Duration; import java.util.Arrays; import java.util.Optional; @@ -33,6 +35,7 @@ public class RetryConfig { public static final Predicate DEFAULT_RECORD_FAILURE_PREDICATE = (throwable) -> true; private int maxAttempts = DEFAULT_MAX_ATTEMPTS; + @Nullable private Predicate resultPredicate; private IntervalFunction intervalFunction = DEFAULT_INTERVAL_FUNCTION; // The default exception predicate retries all exceptions. @@ -63,6 +66,7 @@ public Predicate getExceptionPredicate() { * @return the resultPredicate */ @SuppressWarnings("unchecked") + @Nullable public Predicate getResultPredicate() { return resultPredicate; } @@ -86,8 +90,10 @@ public static RetryConfig ofDefaults() { } public static class Builder { + @Nullable private Predicate retryExceptionPredicate; - private Predicate exceptionPredicate; + private Predicate exceptionPredicate = DEFAULT_RECORD_FAILURE_PREDICATE; + @Nullable private Predicate resultPredicate; private IntervalFunction intervalFunction = IntervalFunction.ofDefaults(); @SuppressWarnings("unchecked") @@ -166,7 +172,7 @@ public Builder retryOnException(Predicate predicate) { * @see #retryOnException(Predicate) method */ @SafeVarargs - public final Builder retryExceptions(Class... errorClasses) { + public final Builder retryExceptions(@Nullable Class... errorClasses) { this.retryExceptions = errorClasses != null ? errorClasses : new Class[0]; return this; } @@ -191,7 +197,7 @@ public final Builder retryExceptions(Class... errorClass * @see #retryOnException(Predicate) method */ @SafeVarargs - public final Builder ignoreExceptions(Class... errorClasses) { + public final Builder ignoreExceptions(@Nullable Class... errorClasses) { this.ignoreExceptions = errorClasses != null ? errorClasses : new Class[0]; return this; } diff --git a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/AbstractRetryEvent.java b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/AbstractRetryEvent.java index 55976f4ff4..292465d264 100644 --- a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/AbstractRetryEvent.java +++ b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/AbstractRetryEvent.java @@ -18,6 +18,8 @@ */ package io.github.resilience4j.retry.event; +import io.github.resilience4j.core.lang.Nullable; + import java.time.ZonedDateTime; abstract class AbstractRetryEvent implements RetryEvent { @@ -25,9 +27,10 @@ abstract class AbstractRetryEvent implements RetryEvent { private final String name; private final ZonedDateTime creationTime; private final int numberOfAttempts; + @Nullable private final Throwable lastThrowable; - AbstractRetryEvent(String name, int numberOfAttempts, Throwable lastThrowable) { + AbstractRetryEvent(String name, int numberOfAttempts, @Nullable Throwable lastThrowable) { this.name = name; this.numberOfAttempts = numberOfAttempts; this.creationTime = ZonedDateTime.now(); @@ -50,6 +53,7 @@ public int getNumberOfRetryAttempts() { } @Override + @Nullable public Throwable getLastThrowable() { return lastThrowable; } diff --git a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/RetryOnErrorEvent.java b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/RetryOnErrorEvent.java index 7ddc1ae571..16a71447bf 100644 --- a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/RetryOnErrorEvent.java +++ b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/RetryOnErrorEvent.java @@ -37,6 +37,6 @@ public String toString() { getCreationTime(), getName(), getNumberOfRetryAttempts(), - getLastThrowable().toString()); + getLastThrowable() != null ? getLastThrowable().toString() : "null"); } } diff --git a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/RetryOnIgnoredErrorEvent.java b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/RetryOnIgnoredErrorEvent.java index 6d4aab6728..dde713af76 100644 --- a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/RetryOnIgnoredErrorEvent.java +++ b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/RetryOnIgnoredErrorEvent.java @@ -36,6 +36,6 @@ public String toString() { return String.format("%s: Retry '%s' recorded an error which has been ignored: '%s'.", getCreationTime(), getName(), - getLastThrowable().toString()); + getLastThrowable() != null ? getLastThrowable().toString() : "null"); } } diff --git a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/RetryOnRetryEvent.java b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/RetryOnRetryEvent.java index 36a9b5e337..64362f4018 100644 --- a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/RetryOnRetryEvent.java +++ b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/RetryOnRetryEvent.java @@ -1,5 +1,7 @@ package io.github.resilience4j.retry.event; +import io.github.resilience4j.core.lang.Nullable; + import java.time.Duration; /** @@ -9,7 +11,7 @@ public class RetryOnRetryEvent extends AbstractRetryEvent { private final Duration waitInterval; - public RetryOnRetryEvent(String name, int numberOfAttempts, Throwable lastThrowable, long waitInterval) { + public RetryOnRetryEvent(String name, int numberOfAttempts, @Nullable Throwable lastThrowable, long waitInterval) { super(name, numberOfAttempts, lastThrowable); this.waitInterval = Duration.ofMillis(waitInterval); } @@ -25,6 +27,6 @@ public String toString() { getName(), waitInterval, getNumberOfRetryAttempts(), - getLastThrowable().toString()); + getLastThrowable() != null ? getLastThrowable().toString() : "null"); } } diff --git a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/RetryOnSuccessEvent.java b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/RetryOnSuccessEvent.java index 771617766c..d46aeaf266 100644 --- a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/RetryOnSuccessEvent.java +++ b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/RetryOnSuccessEvent.java @@ -39,6 +39,6 @@ public String toString() { getCreationTime(), getName(), getNumberOfRetryAttempts(), - getLastThrowable().toString()); + getLastThrowable() != null ? getLastThrowable().toString() : "null"); } } diff --git a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/package-info.java b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/package-info.java new file mode 100644 index 0000000000..8b8e8a6116 --- /dev/null +++ b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/event/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.retry.event; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/internal/AsyncRetryImpl.java b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/internal/AsyncRetryImpl.java index b20140923c..4cfe0f2eae 100644 --- a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/internal/AsyncRetryImpl.java +++ b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/internal/AsyncRetryImpl.java @@ -28,6 +28,7 @@ import io.github.resilience4j.core.EventConsumer; import io.github.resilience4j.core.EventProcessor; +import io.github.resilience4j.core.lang.Nullable; import io.github.resilience4j.retry.AsyncRetry; import io.github.resilience4j.retry.RetryConfig; import io.github.resilience4j.retry.event.RetryEvent; @@ -47,6 +48,7 @@ public class AsyncRetryImpl implements AsyncRetry { private final Predicate exceptionPredicate; private final RetryConfig config; private final RetryEventProcessor eventProcessor; + @Nullable private final Predicate resultPredicate; private LongAdder succeededAfterRetryCounter; diff --git a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/internal/RetryImpl.java b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/internal/RetryImpl.java index 8c5b54d985..18bba4e0c7 100644 --- a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/internal/RetryImpl.java +++ b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/internal/RetryImpl.java @@ -28,6 +28,7 @@ import io.github.resilience4j.core.EventConsumer; import io.github.resilience4j.core.EventProcessor; +import io.github.resilience4j.core.lang.Nullable; import io.github.resilience4j.retry.Retry; import io.github.resilience4j.retry.RetryConfig; import io.github.resilience4j.retry.event.RetryEvent; @@ -45,16 +46,18 @@ public class RetryImpl implements Retry { /*package*/ static CheckedConsumer sleepFunction = Thread::sleep; private final Metrics metrics; private final RetryEventProcessor eventProcessor; + @Nullable private final Predicate resultPredicate; - private String name; - private RetryConfig config; - private int maxAttempts; - private Function intervalFunction; - private Predicate exceptionPredicate; - private LongAdder succeededAfterRetryCounter; - private LongAdder failedAfterRetryCounter; - private LongAdder succeededWithoutRetryCounter; - private LongAdder failedWithoutRetryCounter; + private final String name; + private final RetryConfig config; + + private final int maxAttempts; + private final Function intervalFunction; + private final Predicate exceptionPredicate; + private final LongAdder succeededAfterRetryCounter; + private final LongAdder failedAfterRetryCounter; + private final LongAdder succeededWithoutRetryCounter; + private final LongAdder failedWithoutRetryCounter; public RetryImpl(String name, RetryConfig config) { this.name = name; @@ -194,7 +197,7 @@ private void throwOrSleepAfterRuntimeException() { } } - private void waitIntervalAfterFailure(int currentNumOfAttempts, Throwable throwable) { + private void waitIntervalAfterFailure(int currentNumOfAttempts,@Nullable Throwable throwable) { // wait interval until the next attempt should start long interval = intervalFunction.apply(numOfAttempts.get()); publishRetryEvent(() -> new RetryOnRetryEvent(getName(), currentNumOfAttempts, throwable, interval)); diff --git a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/internal/package-info.java b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/internal/package-info.java new file mode 100644 index 0000000000..9cd7b33ded --- /dev/null +++ b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/internal/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.retry.internal; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/package-info.java b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/package-info.java new file mode 100644 index 0000000000..b1606f692d --- /dev/null +++ b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.retry; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-retry/src/main/java/io/github/resilience4j/retry/utils/package-info.java b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/utils/package-info.java new file mode 100644 index 0000000000..a4d31f4f8e --- /dev/null +++ b/resilience4j-retry/src/main/java/io/github/resilience4j/retry/utils/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.retry.utils; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-rxjava2/src/main/java/io/github/resilience4j/adapter/package-info.java b/resilience4j-rxjava2/src/main/java/io/github/resilience4j/adapter/package-info.java new file mode 100644 index 0000000000..9e357059e7 --- /dev/null +++ b/resilience4j-rxjava2/src/main/java/io/github/resilience4j/adapter/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.adapter; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-rxjava2/src/main/java/io/github/resilience4j/bulkhead/operator/package-info.java b/resilience4j-rxjava2/src/main/java/io/github/resilience4j/bulkhead/operator/package-info.java new file mode 100644 index 0000000000..ff9d9b639e --- /dev/null +++ b/resilience4j-rxjava2/src/main/java/io/github/resilience4j/bulkhead/operator/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.bulkhead.operator; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-rxjava2/src/main/java/io/github/resilience4j/circuitbreaker/operator/CircuitBreakerSubscriber.java b/resilience4j-rxjava2/src/main/java/io/github/resilience4j/circuitbreaker/operator/CircuitBreakerSubscriber.java index fb0a50e381..610e4db1e6 100644 --- a/resilience4j-rxjava2/src/main/java/io/github/resilience4j/circuitbreaker/operator/CircuitBreakerSubscriber.java +++ b/resilience4j-rxjava2/src/main/java/io/github/resilience4j/circuitbreaker/operator/CircuitBreakerSubscriber.java @@ -4,6 +4,7 @@ import io.github.resilience4j.circuitbreaker.CircuitBreaker; import io.github.resilience4j.circuitbreaker.CircuitBreakerOpenException; import io.github.resilience4j.core.StopWatch; +import io.github.resilience4j.core.lang.Nullable; import io.reactivex.internal.subscriptions.SubscriptionHelper; import org.reactivestreams.Subscriber; import org.reactivestreams.Subscription; @@ -22,6 +23,7 @@ final class CircuitBreakerSubscriber extends AtomicReference im private final CircuitBreaker circuitBreaker; private final Subscriber childSubscriber; private final AtomicReference permitted = new AtomicReference<>(Permit.PENDING); + @Nullable private StopWatch stopWatch; CircuitBreakerSubscriber(CircuitBreaker circuitBreaker, Subscriber childSubscriber) { diff --git a/resilience4j-rxjava2/src/main/java/io/github/resilience4j/circuitbreaker/operator/DisposableCircuitBreaker.java b/resilience4j-rxjava2/src/main/java/io/github/resilience4j/circuitbreaker/operator/DisposableCircuitBreaker.java index 138ae591cc..de9f544d38 100644 --- a/resilience4j-rxjava2/src/main/java/io/github/resilience4j/circuitbreaker/operator/DisposableCircuitBreaker.java +++ b/resilience4j-rxjava2/src/main/java/io/github/resilience4j/circuitbreaker/operator/DisposableCircuitBreaker.java @@ -8,6 +8,7 @@ import io.github.resilience4j.circuitbreaker.CircuitBreaker; import io.github.resilience4j.circuitbreaker.CircuitBreakerOpenException; import io.github.resilience4j.core.StopWatch; +import io.github.resilience4j.core.lang.Nullable; import io.reactivex.disposables.Disposable; import io.reactivex.internal.disposables.DisposableHelper; @@ -18,6 +19,7 @@ */ class DisposableCircuitBreaker extends AtomicReference implements Disposable { private final CircuitBreaker circuitBreaker; + @Nullable private StopWatch stopWatch; private final AtomicReference permitted = new AtomicReference<>(Permit.PENDING); diff --git a/resilience4j-rxjava2/src/main/java/io/github/resilience4j/circuitbreaker/operator/package-info.java b/resilience4j-rxjava2/src/main/java/io/github/resilience4j/circuitbreaker/operator/package-info.java new file mode 100644 index 0000000000..1d0dc0f768 --- /dev/null +++ b/resilience4j-rxjava2/src/main/java/io/github/resilience4j/circuitbreaker/operator/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.circuitbreaker.operator; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-rxjava2/src/main/java/io/github/resilience4j/ratelimiter/operator/package-info.java b/resilience4j-rxjava2/src/main/java/io/github/resilience4j/ratelimiter/operator/package-info.java new file mode 100644 index 0000000000..ba053314e6 --- /dev/null +++ b/resilience4j-rxjava2/src/main/java/io/github/resilience4j/ratelimiter/operator/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratelimiter.operator; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-rxjava2/src/main/java/io/github/resilience4j/retry/transformer/package-info.java b/resilience4j-rxjava2/src/main/java/io/github/resilience4j/retry/transformer/package-info.java new file mode 100644 index 0000000000..e7641cbd0d --- /dev/null +++ b/resilience4j-rxjava2/src/main/java/io/github/resilience4j/retry/transformer/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.retry.transformer; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/autoconfigure/package-info.java b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/autoconfigure/package-info.java new file mode 100644 index 0000000000..d7c7d81ebe --- /dev/null +++ b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/autoconfigure/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.circuitbreaker.autoconfigure; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/CircuitBreakerEndpointResponse.java b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/CircuitBreakerEndpointResponse.java index e5af6b4337..53fa2d69f2 100644 --- a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/CircuitBreakerEndpointResponse.java +++ b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/CircuitBreakerEndpointResponse.java @@ -1,8 +1,11 @@ package io.github.resilience4j.circuitbreaker.monitoring.endpoint; +import io.github.resilience4j.core.lang.Nullable; + import java.util.List; public class CircuitBreakerEndpointResponse { + @Nullable private List circuitBreakers; public CircuitBreakerEndpointResponse(){ @@ -12,6 +15,7 @@ public CircuitBreakerEndpointResponse(List circuitBreakers){ this.circuitBreakers = circuitBreakers; } + @Nullable public List getCircuitBreakers() { return circuitBreakers; } diff --git a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/CircuitBreakerEventDTO.java b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/CircuitBreakerEventDTO.java index 4dbcb543a4..a38867218c 100644 --- a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/CircuitBreakerEventDTO.java +++ b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/CircuitBreakerEventDTO.java @@ -19,15 +19,22 @@ import io.github.resilience4j.circuitbreaker.CircuitBreaker; import io.github.resilience4j.circuitbreaker.event.CircuitBreakerEvent; +import io.github.resilience4j.core.lang.Nullable; @JsonInclude(JsonInclude.Include.NON_NULL) public class CircuitBreakerEventDTO { + @Nullable private String circuitBreakerName; + @Nullable private CircuitBreakerEvent.Type type; + @Nullable private String creationTime; + @Nullable private String errorMessage; + @Nullable private Long durationInMs; + @Nullable private CircuitBreaker.StateTransition stateTransition; CircuitBreakerEventDTO() { @@ -36,9 +43,9 @@ public class CircuitBreakerEventDTO { CircuitBreakerEventDTO(String circuitBreakerName, CircuitBreakerEvent.Type type, String creationTime, - String errorMessage, - Long durationInMs, - CircuitBreaker.StateTransition stateTransition) { + @Nullable String errorMessage, + @Nullable Long durationInMs, + @Nullable CircuitBreaker.StateTransition stateTransition) { this.circuitBreakerName = circuitBreakerName; this.type = type; this.creationTime = creationTime; @@ -47,6 +54,7 @@ public class CircuitBreakerEventDTO { this.stateTransition = stateTransition; } + @Nullable public String getCircuitBreakerName() { return circuitBreakerName; } @@ -55,6 +63,7 @@ public void setCircuitBreakerName(String circuitBreakerName) { this.circuitBreakerName = circuitBreakerName; } + @Nullable public CircuitBreakerEvent.Type getType() { return type; } @@ -63,6 +72,7 @@ public void setType(CircuitBreakerEvent.Type type) { this.type = type; } + @Nullable public String getCreationTime() { return creationTime; } @@ -71,6 +81,7 @@ public void setCreationTime(String creationTime) { this.creationTime = creationTime; } + @Nullable public String getErrorMessage() { return errorMessage; } @@ -79,6 +90,7 @@ public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; } + @Nullable public Long getDurationInMs() { return durationInMs; } @@ -87,6 +99,7 @@ public void setDurationInMs(Long durationInMs) { this.durationInMs = durationInMs; } + @Nullable public CircuitBreaker.StateTransition getStateTransition() { return stateTransition; } diff --git a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/CircuitBreakerEventDTOBuilder.java b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/CircuitBreakerEventDTOBuilder.java index b20cb0f81b..5d526e181e 100644 --- a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/CircuitBreakerEventDTOBuilder.java +++ b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/CircuitBreakerEventDTOBuilder.java @@ -19,13 +19,17 @@ import io.github.resilience4j.circuitbreaker.CircuitBreaker; import io.github.resilience4j.circuitbreaker.event.CircuitBreakerEvent; +import io.github.resilience4j.core.lang.Nullable; class CircuitBreakerEventDTOBuilder { private String circuitBreakerName; private CircuitBreakerEvent.Type type; private String creationTime; + @Nullable private String throwable = null; + @Nullable private Long duration = null; + @Nullable private CircuitBreaker.StateTransition stateTransition = null; CircuitBreakerEventDTOBuilder(String circuitBreakerName, CircuitBreakerEvent.Type type, String creationTime){ diff --git a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/CircuitBreakerEventsEndpointResponse.java b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/CircuitBreakerEventsEndpointResponse.java index 7dcab96e2a..7fbb3cd7fd 100644 --- a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/CircuitBreakerEventsEndpointResponse.java +++ b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/CircuitBreakerEventsEndpointResponse.java @@ -1,22 +1,26 @@ package io.github.resilience4j.circuitbreaker.monitoring.endpoint; +import io.github.resilience4j.core.lang.Nullable; + import java.util.List; public class CircuitBreakerEventsEndpointResponse { + @Nullable private List circuitBreakerEvents; public CircuitBreakerEventsEndpointResponse(){ } - public CircuitBreakerEventsEndpointResponse(List circuitBreakerEvents){ + public CircuitBreakerEventsEndpointResponse(@Nullable List circuitBreakerEvents){ this.circuitBreakerEvents = circuitBreakerEvents; } + @Nullable public List getCircuitBreakerEvents() { return circuitBreakerEvents; } - public void setCircuitBreakerEvents(List circuitBreakerEvents) { + public void setCircuitBreakerEvents(@Nullable List circuitBreakerEvents) { this.circuitBreakerEvents = circuitBreakerEvents; } } diff --git a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/package-info.java b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/package-info.java new file mode 100644 index 0000000000..7b392591f2 --- /dev/null +++ b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/endpoint/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.circuitbreaker.monitoring.endpoint; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/health/package-info.java b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/health/package-info.java new file mode 100644 index 0000000000..da9e9bb009 --- /dev/null +++ b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/health/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.circuitbreaker.monitoring.health; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/package-info.java b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/package-info.java new file mode 100644 index 0000000000..81fb47a948 --- /dev/null +++ b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/circuitbreaker/monitoring/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.circuitbreaker.monitoring; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/autoconfigure/package-info.java b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/autoconfigure/package-info.java new file mode 100644 index 0000000000..1e0ee7c650 --- /dev/null +++ b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/autoconfigure/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratelimiter.autoconfigure; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/endpoint/package-info.java b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/endpoint/package-info.java new file mode 100644 index 0000000000..09727a6a67 --- /dev/null +++ b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/endpoint/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratelimiter.monitoring.endpoint; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/health/RateLimiterHealthIndicator.java b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/health/RateLimiterHealthIndicator.java index 30961633c7..0950751cc6 100644 --- a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/health/RateLimiterHealthIndicator.java +++ b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/health/RateLimiterHealthIndicator.java @@ -28,7 +28,7 @@ public class RateLimiterHealthIndicator implements HealthIndicator { public RateLimiterHealthIndicator(RateLimiter rateLimiter) { this.rateLimiter = rateLimiter; - timeoutInNanos = rateLimiter.getRateLimiterConfig().getTimeoutDuration().toNanos(); + this.timeoutInNanos = rateLimiter.getRateLimiterConfig().getTimeoutDuration().toNanos(); } @Override diff --git a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/health/package-info.java b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/health/package-info.java new file mode 100644 index 0000000000..4896fc7a11 --- /dev/null +++ b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/health/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratelimiter.monitoring.health; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/model/RateLimiterEndpointResponse.java b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/model/RateLimiterEndpointResponse.java index 86dab35fba..3721e56c22 100644 --- a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/model/RateLimiterEndpointResponse.java +++ b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/model/RateLimiterEndpointResponse.java @@ -15,25 +15,29 @@ */ package io.github.resilience4j.ratelimiter.monitoring.model; +import io.github.resilience4j.core.lang.Nullable; + import java.util.List; public class RateLimiterEndpointResponse { + @Nullable private List rateLimitersNames; // created for spring to be able to construct POJO public RateLimiterEndpointResponse() {} - public RateLimiterEndpointResponse(List rateLimitersNames) { + public RateLimiterEndpointResponse(@Nullable List rateLimitersNames) { this.rateLimitersNames = rateLimitersNames; } + @Nullable public List getRateLimitersNames() { return rateLimitersNames; } - public void setRateLimitersNames(List rateLimitersNames) { + public void setRateLimitersNames(@Nullable List rateLimitersNames) { this.rateLimitersNames = rateLimitersNames; } } diff --git a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/model/RateLimiterEventDTO.java b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/model/RateLimiterEventDTO.java index 8cd5c99268..60d876e013 100644 --- a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/model/RateLimiterEventDTO.java +++ b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/model/RateLimiterEventDTO.java @@ -17,14 +17,15 @@ import com.fasterxml.jackson.annotation.JsonInclude; +import io.github.resilience4j.core.lang.Nullable; import io.github.resilience4j.ratelimiter.event.RateLimiterEvent; @JsonInclude(JsonInclude.Include.NON_NULL) public class RateLimiterEventDTO { - private String rateLimiterName; - private RateLimiterEvent.Type rateLimiterEventType; - private String rateLimiterCreationTime; + @Nullable private String rateLimiterName; + @Nullable private RateLimiterEvent.Type rateLimiterEventType; + @Nullable private String rateLimiterCreationTime; public static RateLimiterEventDTO createRateLimiterEventDTO(RateLimiterEvent rateLimiterEvent) { RateLimiterEventDTO dto = new RateLimiterEventDTO(); @@ -34,27 +35,30 @@ public static RateLimiterEventDTO createRateLimiterEventDTO(RateLimiterEvent rat return dto; } + @Nullable public String getRateLimiterName() { return rateLimiterName; } - public void setRateLimiterName(String rateLimiterName) { + public void setRateLimiterName(@Nullable String rateLimiterName) { this.rateLimiterName = rateLimiterName; } + @Nullable public RateLimiterEvent.Type getRateLimiterEventType() { return rateLimiterEventType; } - public void setRateLimiterEventType(RateLimiterEvent.Type rateLimiterEventType) { + public void setRateLimiterEventType(@Nullable RateLimiterEvent.Type rateLimiterEventType) { this.rateLimiterEventType = rateLimiterEventType; } + @Nullable public String getRateLimiterCreationTime() { return rateLimiterCreationTime; } - public void setRateLimiterCreationTime(String rateLimiterCreationTime) { + public void setRateLimiterCreationTime(@Nullable String rateLimiterCreationTime) { this.rateLimiterCreationTime = rateLimiterCreationTime; } } diff --git a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/model/RateLimiterEventsEndpointResponse.java b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/model/RateLimiterEventsEndpointResponse.java index 8c55ee6276..9a18796767 100644 --- a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/model/RateLimiterEventsEndpointResponse.java +++ b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/model/RateLimiterEventsEndpointResponse.java @@ -15,24 +15,28 @@ */ package io.github.resilience4j.ratelimiter.monitoring.model; +import io.github.resilience4j.core.lang.Nullable; + import java.util.List; public class RateLimiterEventsEndpointResponse { + @Nullable private List eventsList; public RateLimiterEventsEndpointResponse() { } - public RateLimiterEventsEndpointResponse(List eventsList) { + public RateLimiterEventsEndpointResponse(@Nullable List eventsList) { this.eventsList = eventsList; } + @Nullable public List getEventsList() { return eventsList; } - public void setEventsList(List eventsList) { + public void setEventsList(@Nullable List eventsList) { this.eventsList = eventsList; } } diff --git a/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/model/package-info.java b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/model/package-info.java new file mode 100644 index 0000000000..930713189c --- /dev/null +++ b/resilience4j-spring-boot2/src/main/java/io/github/resilience4j/ratelimiter/monitoring/model/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratelimiter.monitoring.model; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-spring/src/main/java/io/github/resilience4j/circuitbreaker/configure/CircuitBreakerAspect.java b/resilience4j-spring/src/main/java/io/github/resilience4j/circuitbreaker/configure/CircuitBreakerAspect.java index 22094daf40..bfabf44024 100644 --- a/resilience4j-spring/src/main/java/io/github/resilience4j/circuitbreaker/configure/CircuitBreakerAspect.java +++ b/resilience4j-spring/src/main/java/io/github/resilience4j/circuitbreaker/configure/CircuitBreakerAspect.java @@ -20,6 +20,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; +import io.github.resilience4j.core.lang.Nullable; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; @@ -60,13 +61,16 @@ public void matchAnnotatedClassOrMethod(CircuitBreaker circuitBreaker) { } @Around(value = "matchAnnotatedClassOrMethod(backendMonitored)", argNames = "proceedingJoinPoint, backendMonitored") - public Object circuitBreakerAroundAdvice(ProceedingJoinPoint proceedingJoinPoint, CircuitBreaker backendMonitored) throws Throwable { + public Object circuitBreakerAroundAdvice(ProceedingJoinPoint proceedingJoinPoint, @Nullable CircuitBreaker backendMonitored) throws Throwable { Method method = ((MethodSignature) proceedingJoinPoint.getSignature()).getMethod(); String methodName = method.getDeclaringClass().getName() + "#" + method.getName(); if (backendMonitored == null) { backendMonitored = getBackendMonitoredAnnotation(proceedingJoinPoint); } - String backend = backendMonitored.name(); + if(backendMonitored == null) { //because annotations wasn't found + return proceedingJoinPoint.proceed(); + } + String backend = backendMonitored.name(); io.github.resilience4j.circuitbreaker.CircuitBreaker circuitBreaker = getOrCreateCircuitBreaker(methodName, backend); Class returnType = method.getReturnType(); if (circuitBreakerAspectExtList != null && !circuitBreakerAspectExtList.isEmpty()) { @@ -95,6 +99,7 @@ private io.github.resilience4j.circuitbreaker.CircuitBreaker getOrCreateCircuitB return circuitBreaker; } + @Nullable private CircuitBreaker getBackendMonitoredAnnotation(ProceedingJoinPoint proceedingJoinPoint) { if (logger.isDebugEnabled()) { logger.debug("circuitBreaker parameter is null"); diff --git a/resilience4j-spring/src/main/java/io/github/resilience4j/circuitbreaker/configure/CircuitBreakerConfigurationProperties.java b/resilience4j-spring/src/main/java/io/github/resilience4j/circuitbreaker/configure/CircuitBreakerConfigurationProperties.java index 56678adc00..18f02a7f47 100644 --- a/resilience4j-spring/src/main/java/io/github/resilience4j/circuitbreaker/configure/CircuitBreakerConfigurationProperties.java +++ b/resilience4j-spring/src/main/java/io/github/resilience4j/circuitbreaker/configure/CircuitBreakerConfigurationProperties.java @@ -17,6 +17,7 @@ import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig; import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig.Builder; +import io.github.resilience4j.core.lang.Nullable; import org.hibernate.validator.constraints.time.DurationMin; import org.springframework.beans.BeanUtils; @@ -56,7 +57,7 @@ private CircuitBreakerConfig createCircuitBreakerConfig(BackendProperties backen return buildCircuitBreakerConfig(backendProperties).build(); } - public Builder buildCircuitBreakerConfig(BackendProperties properties) { + public Builder buildCircuitBreakerConfig(@Nullable BackendProperties properties) { if (properties == null) { return new Builder(); } @@ -111,16 +112,20 @@ public Map getBackends() { public static class BackendProperties { @DurationMin(seconds = 1) + @Nullable private Duration waitDurationInOpenState; @Min(1) @Max(100) + @Nullable private Integer failureRateThreshold; @Min(1) + @Nullable private Integer ringBufferSizeInClosedState; @Min(1) + @Nullable private Integer ringBufferSizeInHalfOpenState; @NotNull @@ -132,10 +137,13 @@ public static class BackendProperties { @NotNull private Boolean registerHealthIndicator = true; + @Nullable private Class> recordFailurePredicate; + @Nullable private Class[] recordExceptions; + @Nullable private Class[] ignoreExceptions; /** * Sets the wait duration in seconds the CircuitBreaker should stay open, before it switches to half closed. @@ -152,6 +160,7 @@ public void setWaitInterval(Integer waitInterval) { * * @return the failure rate threshold */ + @Nullable public Integer getFailureRateThreshold() { return failureRateThreshold; } @@ -170,6 +179,7 @@ public void setFailureRateThreshold(Integer failureRateThreshold) { * * @return the wait duration */ + @Nullable public Duration getWaitDurationInOpenState() { return waitDurationInOpenState; } @@ -188,6 +198,7 @@ public void setWaitDurationInOpenState(Duration waitDurationInOpenState) { * * @return the ring buffer size */ + @Nullable public Integer getRingBufferSizeInClosedState() { return ringBufferSizeInClosedState; } @@ -206,6 +217,7 @@ public void setRingBufferSizeInClosedState(Integer ringBufferSizeInClosedState) * * @return the ring buffer size */ + @Nullable public Integer getRingBufferSizeInHalfOpenState() { return ringBufferSizeInHalfOpenState; } @@ -251,6 +263,7 @@ public void setRegisterHealthIndicator(Boolean registerHealthIndicator) { this.registerHealthIndicator = registerHealthIndicator; } + @Nullable public Class> getRecordFailurePredicate() { return recordFailurePredicate; } @@ -259,6 +272,7 @@ public void setRecordFailurePredicate(Class> recordFailureP this.recordFailurePredicate = recordFailurePredicate; } + @Nullable public Class[] getRecordExceptions() { return recordExceptions; } @@ -267,6 +281,7 @@ public void setRecordExceptions(Class[] recordExceptions) { this.recordExceptions = recordExceptions; } + @Nullable public Class[] getIgnoreExceptions() { return ignoreExceptions; } diff --git a/resilience4j-spring/src/main/java/io/github/resilience4j/circuitbreaker/configure/package-info.java b/resilience4j-spring/src/main/java/io/github/resilience4j/circuitbreaker/configure/package-info.java new file mode 100644 index 0000000000..e4a5ac77e0 --- /dev/null +++ b/resilience4j-spring/src/main/java/io/github/resilience4j/circuitbreaker/configure/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.circuitbreaker.configure; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-spring/src/main/java/io/github/resilience4j/ratelimiter/configure/RateLimiterConfigurationProperties.java b/resilience4j-spring/src/main/java/io/github/resilience4j/ratelimiter/configure/RateLimiterConfigurationProperties.java index d02e76dd2f..9eb1401f48 100644 --- a/resilience4j-spring/src/main/java/io/github/resilience4j/ratelimiter/configure/RateLimiterConfigurationProperties.java +++ b/resilience4j-spring/src/main/java/io/github/resilience4j/ratelimiter/configure/RateLimiterConfigurationProperties.java @@ -15,6 +15,7 @@ */ package io.github.resilience4j.ratelimiter.configure; +import io.github.resilience4j.core.lang.Nullable; import io.github.resilience4j.ratelimiter.RateLimiterConfig; import java.time.Duration; @@ -30,7 +31,7 @@ public class RateLimiterConfigurationProperties { private int rateLimiterAspectOrder = Integer.MAX_VALUE; private Map limiters = new HashMap<>(); - public static RateLimiterConfig createRateLimiterConfig(LimiterProperties limiterProperties) { + public static RateLimiterConfig createRateLimiterConfig(@Nullable LimiterProperties limiterProperties) { if (limiterProperties == null) { return RateLimiterConfig.ofDefaults(); } @@ -92,6 +93,7 @@ public static class LimiterProperties { * * @return the permissions limit for refresh period */ + @Nullable public Integer getLimitForPeriod() { return limitForPeriod; } @@ -116,6 +118,7 @@ public void setLimitForPeriod(Integer limitForPeriod) { * * @return the period of limit refresh */ + @Nullable public Integer getLimitRefreshPeriodInMillis() { return limitRefreshPeriodInMillis; } @@ -138,6 +141,7 @@ public void setLimitRefreshPeriodInMillis(Integer limitRefreshPeriodInMillis) { * * @return wait for permission duration */ + @Nullable public Integer getTimeoutInMillis() { return timeoutInMillis; } diff --git a/resilience4j-spring/src/main/java/io/github/resilience4j/ratelimiter/configure/package-info.java b/resilience4j-spring/src/main/java/io/github/resilience4j/ratelimiter/configure/package-info.java new file mode 100644 index 0000000000..e46e9e2894 --- /dev/null +++ b/resilience4j-spring/src/main/java/io/github/resilience4j/ratelimiter/configure/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.ratelimiter.configure; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file diff --git a/resilience4j-vertx/src/main/java/io/github/resilience4j/circuitbreaker/package-info.java b/resilience4j-vertx/src/main/java/io/github/resilience4j/circuitbreaker/package-info.java new file mode 100644 index 0000000000..c4c463eeee --- /dev/null +++ b/resilience4j-vertx/src/main/java/io/github/resilience4j/circuitbreaker/package-info.java @@ -0,0 +1,24 @@ +/* + * + * Copyright 2018: Clint Checketts + * + * 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. + * + * + */ +@NonNullApi +@NonNullFields +package io.github.resilience4j.circuitbreaker; + +import io.github.resilience4j.core.lang.NonNullApi; +import io.github.resilience4j.core.lang.NonNullFields; \ No newline at end of file