Created
July 27, 2021 19:35
-
-
Save ova2/c1f0b69b538efda5413916d860c76f58 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Service | |
@Slf4j | |
@RequiredArgsConstructor | |
public class TopologyRepository { | |
private final CacheMono<TopologyRef, TopologyDto, TopologyDto> cache; | |
private final TopologyLoader topologyLoader; | |
private final TopologyCreator topologyCreator; | |
@Autowired | |
public UnoTopologyRepository(TopologyLoader topologyLoader, | |
TopologyCreator topologyCreator) { | |
this.topologyLoader = topologyLoader; | |
this.topologyCreator = topologyCreator; | |
cache = CacheMono.fromSupplier(this::retrieveTopology); | |
} | |
/** | |
* Finds a topology from this repository by reference. | |
*/ | |
public Mono<TopologyDto> findUnoTopology(TopologyRef topologyRef) { | |
return cache.lookup(topologyRef) | |
.doOnNext(topology -> | |
log.info("Topology was found by lookup with key {}", topologyRef)) | |
.onErrorResume(err -> { | |
log.error("Error on lookup Topology by key {}, message: {}", | |
topologyRef, err.getMessage()); | |
return Mono.empty(); | |
}); | |
} | |
private Mono<TopologyDto> retrieveTopology(TopologyRef topologyRef) { | |
CompletableFuture<UnoTopologyDto> future = CompletableFuture.supplyAsync(() -> { | |
final var loaderContext = topologyLoader.retrieveTopology(topologyRef); | |
return topologyCreator.createTopology(loaderContext); | |
}); | |
return Mono.fromFuture(future); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment