Skip to content

Commit 3665c70

Browse files
authored
Moved code from Registries into AbstractRegistry in order to remove duplicate code
1 parent e0efe6d commit 3665c70

File tree

27 files changed

+631
-262
lines changed

27 files changed

+631
-262
lines changed

resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/BulkheadRegistry.java

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@
1919
package io.github.resilience4j.bulkhead;
2020

2121

22-
import java.util.function.Supplier;
23-
2422
import io.github.resilience4j.bulkhead.internal.InMemoryBulkheadRegistry;
2523
import io.github.resilience4j.core.Registry;
2624
import io.vavr.collection.Seq;
2725

26+
import java.util.Map;
27+
import java.util.function.Supplier;
28+
2829
/**
2930
* The {@link BulkheadRegistry} is a factory to create Bulkhead instances which stores all bulkhead instances in a registry.
3031
*/
@@ -49,13 +50,13 @@ public interface BulkheadRegistry extends Registry<Bulkhead, BulkheadConfig> {
4950
* Returns a managed {@link Bulkhead} or creates a new one with a custom BulkheadConfig configuration.
5051
*
5152
* @param name the name of the Bulkhead
52-
* @param bulkheadConfig a custom Bulkhead configuration
53+
* @param config a custom Bulkhead configuration
5354
* @return The {@link Bulkhead}
5455
*/
55-
Bulkhead bulkhead(String name, BulkheadConfig bulkheadConfig);
56+
Bulkhead bulkhead(String name, BulkheadConfig config);
5657

5758
/**
58-
* Returns a managed {@link Bulkhead} or creates a new one with a custom BulkheadConfig configuration.
59+
* Returns a managed {@link Bulkhead} or creates a new one with a custom Bulkhead configuration.
5960
*
6061
* @param name the name of the Bulkhead
6162
* @param bulkheadConfigSupplier a custom Bulkhead configuration supplier
@@ -64,7 +65,16 @@ public interface BulkheadRegistry extends Registry<Bulkhead, BulkheadConfig> {
6465
Bulkhead bulkhead(String name, Supplier<BulkheadConfig> bulkheadConfigSupplier);
6566

6667
/**
67-
* @deprecated
68+
* Returns a managed {@link Bulkhead} or creates a new one with a custom Bulkhead configuration.
69+
*
70+
* @param name the name of the Bulkhead
71+
* @param configName a custom Bulkhead configuration name
72+
* @return The {@link Bulkhead}
73+
*/
74+
Bulkhead bulkhead(String name, String configName);
75+
76+
/**
77+
* @deprecated Use {@link BulkheadRegistry#getDefaultConfig()} instead
6878
* @since (0.15.0)
6979
* Returns a default BulkheadConfig instance this registry is using.
7080
*
@@ -83,6 +93,16 @@ static BulkheadRegistry of(BulkheadConfig bulkheadConfig) {
8393
return new InMemoryBulkheadRegistry(bulkheadConfig);
8494
}
8595

96+
/**
97+
* Creates a BulkheadRegistry with a Map of shared Bulkhead configurations.
98+
*
99+
* @param configs a Map of shared Bulkhead configurations
100+
* @return a RetryRegistry with a Map of shared Bulkhead configurations.
101+
*/
102+
static BulkheadRegistry of(Map<String, BulkheadConfig> configs) {
103+
return new InMemoryBulkheadRegistry(configs);
104+
}
105+
86106
/**
87107
* Creates a BulkheadRegistry with a default Bulkhead configuration
88108
*

resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/ThreadPoolBulkheadRegistry.java

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,17 @@
1919
package io.github.resilience4j.bulkhead;
2020

2121

22-
import java.util.function.Supplier;
23-
2422
import io.github.resilience4j.bulkhead.internal.InMemoryThreadPoolBulkheadRegistry;
23+
import io.github.resilience4j.core.Registry;
2524
import io.vavr.collection.Seq;
2625

26+
import java.util.Map;
27+
import java.util.function.Supplier;
28+
2729
/**
2830
* The {@link ThreadPoolBulkheadRegistry} is a factory to create ThreadPoolBulkhead instances which stores all bulkhead instances in a registry.
2931
*/
30-
public interface ThreadPoolBulkheadRegistry {
32+
public interface ThreadPoolBulkheadRegistry extends Registry<ThreadPoolBulkhead, ThreadPoolBulkheadConfig> {
3133

3234
/**
3335
* Creates a BulkheadRegistry with a custom Bulkhead configuration.
@@ -48,6 +50,16 @@ static ThreadPoolBulkheadRegistry ofDefaults() {
4850
return new InMemoryThreadPoolBulkheadRegistry(ThreadPoolBulkheadConfig.ofDefaults());
4951
}
5052

53+
/**
54+
* Creates a ThreadPoolBulkheadRegistry with a Map of shared ThreadPoolBulkhead configurations.
55+
*
56+
* @param configs a Map of shared Bulkhead configurations
57+
* @return a ThreadPoolBulkheadRegistry with a Map of shared ThreadPoolBulkhead configurations.
58+
*/
59+
static ThreadPoolBulkheadRegistry of(Map<String, ThreadPoolBulkheadConfig> configs) {
60+
return new InMemoryThreadPoolBulkheadRegistry(configs);
61+
}
62+
5163
/**
5264
* Returns all managed {@link ThreadPoolBulkhead} instances.
5365
*
@@ -64,16 +76,16 @@ static ThreadPoolBulkheadRegistry ofDefaults() {
6476
ThreadPoolBulkhead bulkhead(String name);
6577

6678
/**
67-
* Returns a managed {@link ThreadPoolBulkhead} or creates a new one with a custom BulkheadConfig configuration.
79+
* Returns a managed {@link ThreadPoolBulkhead} or creates a new one with a custom ThreadPoolBulkhead configuration.
6880
*
6981
* @param name the name of the ThreadPoolBulkhead
70-
* @param bulkheadConfig a custom ThreadPoolBulkheadConfig configuration
82+
* @param config a custom ThreadPoolBulkheadConfig configuration
7183
* @return The {@link ThreadPoolBulkhead}
7284
*/
73-
ThreadPoolBulkhead bulkhead(String name, ThreadPoolBulkheadConfig bulkheadConfig);
85+
ThreadPoolBulkhead bulkhead(String name, ThreadPoolBulkheadConfig config);
7486

7587
/**
76-
* Returns a managed {@link ThreadPoolBulkhead} or creates a new one with a custom BulkheadConfig configuration.
88+
* Returns a managed {@link ThreadPoolBulkhead} or creates a new one with a custom ThreadPoolBulkhead configuration.
7789
*
7890
* @param name the name of the ThreadPoolBulkhead
7991
* @param bulkheadConfigSupplier a custom ThreadPoolBulkhead configuration supplier
@@ -82,10 +94,22 @@ static ThreadPoolBulkheadRegistry ofDefaults() {
8294
ThreadPoolBulkhead bulkhead(String name, Supplier<ThreadPoolBulkheadConfig> bulkheadConfigSupplier);
8395

8496
/**
97+
* Returns a managed {@link ThreadPoolBulkhead} or creates a new one with a custom ThreadPoolBulkhead configuration.
98+
*
99+
* @param name the name of the ThreadPoolBulkhead
100+
* @param configName a custom CircuitBreaker ThreadPoolBulkhead name
101+
* @return The {@link ThreadPoolBulkhead}
102+
*/
103+
ThreadPoolBulkhead bulkhead(String name, String configName);
104+
105+
/**
106+
* @deprecated Use {@link ThreadPoolBulkheadRegistry#getDefaultConfig()} instead
107+
* @since (0.15.0)
85108
* Returns a default ThreadPoolBulkheadConfig instance this registry is using.
86109
*
87110
* @return ThreadPoolBulkheadConfig instance
88111
*/
112+
@Deprecated
89113
ThreadPoolBulkheadConfig getDefaultBulkheadConfig();
90114

91115
}

resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/internal/FixedThreadPoolBulkhead.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
import java.util.concurrent.*;
3434
import java.util.function.Supplier;
3535

36+
import static java.util.Objects.requireNonNull;
37+
3638
/**
3739
* A Bulkhead implementation based on a fixed ThreadPoolExecutor.
3840
* which is based into the thread pool execution handling :
@@ -42,6 +44,8 @@
4244
*/
4345
public class FixedThreadPoolBulkhead implements ThreadPoolBulkhead {
4446

47+
private static final String CONFIG_MUST_NOT_BE_NULL = "Config must not be null";
48+
4549
private final String name;
4650
private final ThreadPoolExecutor executorService;
4751
private final FixedThreadPoolBulkhead.BulkheadMetrics metrics;
@@ -56,8 +60,7 @@ public class FixedThreadPoolBulkhead implements ThreadPoolBulkhead {
5660
*/
5761
public FixedThreadPoolBulkhead(String name, @Nullable ThreadPoolBulkheadConfig bulkheadConfig) {
5862
this.name = name;
59-
this.config = bulkheadConfig != null ? bulkheadConfig
60-
: ThreadPoolBulkheadConfig.ofDefaults();
63+
this.config = requireNonNull(bulkheadConfig, CONFIG_MUST_NOT_BE_NULL);
6164
// init thread pool executor
6265
this.executorService = new ThreadPoolExecutor(config.getCoreThreadPoolSize(), config.getMaxThreadPoolSize(),
6366
config.getKeepAliveTime(), TimeUnit.MILLISECONDS,

resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/internal/InMemoryBulkheadRegistry.java

Lines changed: 45 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,70 +18,88 @@
1818
*/
1919
package io.github.resilience4j.bulkhead.internal;
2020

21-
import java.util.Objects;
22-
import java.util.concurrent.ConcurrentHashMap;
23-
import java.util.concurrent.ConcurrentMap;
24-
import java.util.function.Supplier;
25-
2621
import io.github.resilience4j.bulkhead.Bulkhead;
2722
import io.github.resilience4j.bulkhead.BulkheadConfig;
2823
import io.github.resilience4j.bulkhead.BulkheadRegistry;
2924
import io.github.resilience4j.core.AbstractRegistry;
25+
import io.github.resilience4j.core.ConfigurationNotFoundException;
3026
import io.vavr.collection.Array;
3127
import io.vavr.collection.Seq;
3228

29+
import java.util.Map;
30+
import java.util.Objects;
31+
import java.util.function.Supplier;
32+
3333
/**
3434
* Bulkhead instance manager;
3535
* Constructs/returns bulkhead instances.
3636
*/
3737
public final class InMemoryBulkheadRegistry extends AbstractRegistry<Bulkhead, BulkheadConfig> implements BulkheadRegistry {
3838

39-
private final BulkheadConfig defaultBulkheadConfig;
40-
4139
/**
42-
* The bulkheads, indexed by name
40+
* The constructor with default default.
4341
*/
44-
private final ConcurrentMap<String, Bulkhead> bulkheads;
42+
public InMemoryBulkheadRegistry() {
43+
this(BulkheadConfig.ofDefaults());
44+
}
45+
46+
public InMemoryBulkheadRegistry(Map<String, BulkheadConfig> configs) {
47+
this(configs.getOrDefault(DEFAULT_CONFIG, BulkheadConfig.ofDefaults()));
48+
this.configurations.putAll(configs);
49+
}
4550

4651
/**
47-
* The constructor with custom default bulkhead config
52+
* The constructor with custom default config.
4853
*
49-
* @param bulkheadConfig custom bulkhead config to use
54+
* @param defaultConfig The default config.
5055
*/
51-
public InMemoryBulkheadRegistry(BulkheadConfig bulkheadConfig) {
52-
super();
53-
this.defaultBulkheadConfig = bulkheadConfig;
54-
this.bulkheads = new ConcurrentHashMap<>();
56+
public InMemoryBulkheadRegistry(BulkheadConfig defaultConfig) {
57+
super(defaultConfig);
5558
}
5659

60+
/**
61+
* {@inheritDoc}
62+
*/
5763
@Override
5864
public Seq<Bulkhead> getAllBulkheads() {
59-
return Array.ofAll(bulkheads.values());
65+
return Array.ofAll(targetMap.values());
6066
}
6167

68+
/**
69+
* {@inheritDoc}
70+
*/
6271
@Override
6372
public Bulkhead bulkhead(String name) {
64-
return bulkhead(name, defaultBulkheadConfig);
73+
return bulkhead(name, getDefaultConfig());
6574
}
6675

76+
/**
77+
* {@inheritDoc}
78+
*/
6779
@Override
68-
public Bulkhead bulkhead(String name, BulkheadConfig bulkheadConfig) {
69-
return bulkheads.computeIfAbsent(
70-
Objects.requireNonNull(name, "Name must not be null"),
71-
k -> notifyPostCreationConsumers(Bulkhead.of(name, bulkheadConfig))
72-
);
80+
public Bulkhead bulkhead(String name, BulkheadConfig config) {
81+
return computeIfAbsent(name, () -> Bulkhead.of(name, Objects.requireNonNull(config, CONFIG_MUST_NOT_BE_NULL)));
7382
}
7483

84+
/**
85+
* {@inheritDoc}
86+
*/
7587
@Override
7688
public Bulkhead bulkhead(String name, Supplier<BulkheadConfig> bulkheadConfigSupplier) {
77-
return bulkheads.computeIfAbsent(
78-
Objects.requireNonNull(name, "Name must not be null"),
79-
k -> notifyPostCreationConsumers(Bulkhead.of(name, bulkheadConfigSupplier.get()))
80-
);
89+
return computeIfAbsent(name, () -> Bulkhead.of(name, Objects.requireNonNull(Objects.requireNonNull(bulkheadConfigSupplier, SUPPLIER_MUST_NOT_BE_NULL).get(), CONFIG_MUST_NOT_BE_NULL)));
90+
}
91+
92+
/**
93+
* {@inheritDoc}
94+
*/
95+
@Override
96+
public Bulkhead bulkhead(String name, String configName) {
97+
return computeIfAbsent(name, () -> Bulkhead.of(name, getConfiguration(configName)
98+
.orElseThrow(() -> new ConfigurationNotFoundException(configName))));
8199
}
82100

83101
@Override
84102
public BulkheadConfig getDefaultBulkheadConfig() {
85-
return defaultBulkheadConfig;
103+
return getDefaultConfig();
86104
}
87105
}

0 commit comments

Comments
 (0)