|
@@ -12,6 +12,8 @@ import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.log4j.Log4j2;
|
|
|
import org.apache.kafka.common.Node;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import reactor.core.publisher.Flux;
|
|
|
+import reactor.core.publisher.Mono;
|
|
|
|
|
|
@Service
|
|
|
@RequiredArgsConstructor
|
|
@@ -21,31 +23,32 @@ public class FeatureServiceImpl implements FeatureService {
|
|
|
private final BrokerService brokerService;
|
|
|
|
|
|
@Override
|
|
|
- public List<Feature> getAvailableFeatures(KafkaCluster cluster) {
|
|
|
- List<Feature> features = new ArrayList<>();
|
|
|
+ public Flux<Feature> getAvailableFeatures(KafkaCluster cluster) {
|
|
|
+ List<Mono<Feature>> features = new ArrayList<>();
|
|
|
|
|
|
if (Optional.ofNullable(cluster.getKafkaConnect())
|
|
|
.filter(Predicate.not(List::isEmpty))
|
|
|
.isPresent()) {
|
|
|
- features.add(Feature.KAFKA_CONNECT);
|
|
|
+ features.add(Mono.just(Feature.KAFKA_CONNECT));
|
|
|
}
|
|
|
|
|
|
if (cluster.getKsqldbServer() != null) {
|
|
|
- features.add(Feature.KSQL_DB);
|
|
|
+ features.add(Mono.just(Feature.KSQL_DB));
|
|
|
}
|
|
|
|
|
|
if (cluster.getSchemaRegistry() != null) {
|
|
|
- features.add(Feature.SCHEMA_REGISTRY);
|
|
|
+ features.add(Mono.just(Feature.SCHEMA_REGISTRY));
|
|
|
}
|
|
|
|
|
|
- if (topicDeletionCheck(cluster)) {
|
|
|
- features.add(Feature.TOPIC_DELETION);
|
|
|
- }
|
|
|
+ features.add(
|
|
|
+ topicDeletionCheck(cluster)
|
|
|
+ .flatMap(r -> r ? Mono.just(Feature.TOPIC_DELETION) : Mono.empty())
|
|
|
+ );
|
|
|
|
|
|
- return features;
|
|
|
+ return Flux.fromIterable(features).flatMap(m -> m);
|
|
|
}
|
|
|
|
|
|
- private boolean topicDeletionCheck(KafkaCluster cluster) {
|
|
|
+ private Mono<Boolean> topicDeletionCheck(KafkaCluster cluster) {
|
|
|
return brokerService.getController(cluster)
|
|
|
.map(Node::id)
|
|
|
.flatMap(broker -> brokerService.getBrokerConfigMap(cluster, broker))
|
|
@@ -54,6 +57,6 @@ public class FeatureServiceImpl implements FeatureService {
|
|
|
return Boolean.parseBoolean(config.get(DELETE_TOPIC_ENABLE).getValue());
|
|
|
}
|
|
|
return false;
|
|
|
- }).blockOptional().orElse(false);
|
|
|
+ });
|
|
|
}
|
|
|
}
|