use of javax.enterprise.inject.Instance in project stackgres by ongres.
the class DbOpLauncherImpl method launchDbOp.
@Override
public void launchDbOp(String dbOpName, String namespace) {
StackGresDbOps dbOps = dbOpsFinder.findByNameAndNamespace(dbOpName, namespace).orElseThrow(() -> new IllegalArgumentException(StackGresDbOps.KIND + " " + dbOpName + " does not exists in namespace " + namespace));
Instance<DatabaseOperationJob> jobImpl = instance.select(new DatabaseOperationLiteral(dbOps.getSpec().getOp()));
if (jobImpl.isResolvable()) {
LOGGER.info("Initializing conditions for SgDbOps {}", dbOps.getMetadata().getName());
var status = Optional.ofNullable(dbOps.getStatus()).or(() -> Optional.of(new StackGresDbOpsStatus())).map(dbOpsStatus -> {
dbOpsStatus.setOpStarted(Instant.now().toString());
dbOpsStatus.setOpRetries(Optional.ofNullable(dbOpsStatus.getOpRetries()).map(opRetries -> opRetries + 1).orElse(0));
dbOpsStatus.setConditions(getStartingConditions());
return dbOpsStatus;
}).orElseThrow();
dbOps.setStatus(status);
final StackGresDbOps initializedDbOps = dbOpsScheduler.update(dbOps);
try {
final int lockPollInterval = Integer.parseInt(DBOPS_LOCK_POLL_INTERVAL.getString());
final int timeout = Integer.parseInt(DBOPS_LOCK_TIMEOUT.getString());
LockRequest lockRequest = ImmutableLockRequest.builder().namespace(initializedDbOps.getMetadata().getNamespace()).serviceAccount(JobsProperty.SERVICE_ACCOUNT.getString()).podName(JobsProperty.POD_NAME.getString()).pollInterval(lockPollInterval).timeout(timeout).lockResourceName(initializedDbOps.getSpec().getSgCluster()).build();
Infrastructure.setDroppedExceptionHandler(err -> LOGGER.error("Dropped exception ", err));
lockAcquirer.lockRun(lockRequest, (targetCluster) -> {
databaseOperationEventEmitter.operationStarted(dbOpName, namespace);
final DatabaseOperationJob databaseOperationJob = jobImpl.get();
Uni<ClusterRestartState> jobUni = databaseOperationJob.runJob(initializedDbOps, targetCluster);
if (initializedDbOps.getSpec().getTimeout() != null) {
jobUni.await().atMost(Duration.parse(initializedDbOps.getSpec().getTimeout()));
} else {
jobUni.await().indefinitely();
}
databaseOperationEventEmitter.operationCompleted(dbOpName, namespace);
});
LOGGER.info("Operation completed for SgDbOp {}", dbOpName);
updateToCompletedConditions(dbOpName, namespace);
} catch (TimeoutException timeoutEx) {
updateToTimeoutConditions(dbOpName, namespace);
databaseOperationEventEmitter.operationTimedOut(dbOpName, namespace);
throw timeoutEx;
} catch (Exception e) {
updateToFailedConditions(dbOpName, namespace);
databaseOperationEventEmitter.operationFailed(dbOpName, namespace);
throw e;
}
} else if (jobImpl.isAmbiguous()) {
throw new IllegalStateException("Multiple implementations of the operation " + dbOps.getSpec().getOp() + " found");
} else {
throw new IllegalStateException("Implementation of operation " + dbOps.getSpec().getOp() + " not found");
}
}
use of javax.enterprise.inject.Instance in project stackgres by ongres.
the class ClusterDeployedResourceScanner method getDeployedResources.
@Override
public List<HasMetadata> getDeployedResources(StackGresCluster config) {
try (KubernetesClient client = clientFactory.create()) {
final Map<String, String> genericClusterLabels = labelFactory.genericLabels(config);
Stream<HasMetadata> inNamespace = IN_NAMESPACE_RESOURCE_OPERATIONS.values().stream().flatMap(resourceOperationGetter -> resourceOperationGetter.apply(client).inNamespace(config.getMetadata().getNamespace()).withLabels(genericClusterLabels).list().getItems().stream());
Stream<HasMetadata> anyNamespace = ANY_NAMESPACE_RESOURCE_OPERATIONS.values().stream().flatMap(resourceOperationGetter -> resourceOperationGetter.apply(client, genericClusterLabels).stream());
List<HasMetadata> deployedResources = Stream.concat(inNamespace, anyNamespace).filter(resource1 -> resource1.getMetadata().getOwnerReferences().stream().anyMatch(ownerReference -> ownerReference.getKind().equals(StackGresCluster.KIND) && ownerReference.getName().equals(config.getMetadata().getName()) && ownerReference.getUid().equals(config.getMetadata().getUid()))).collect(Collectors.toUnmodifiableList());
deployedResources.forEach(resource -> {
Instance<DeployedResourceDecorator> decorator = decorators.select(new ReconciliationScopeLiteral(StackGresCluster.class, resource.getKind()));
if (decorator.isResolvable()) {
decorator.get().decorate(resource);
}
});
return deployedResources;
}
}
use of javax.enterprise.inject.Instance in project openwebbeans by apache.
the class OwbCDI method instance.
protected Instance<Object> instance() {
WebBeansContext webBeansContext = getWebBeansContext();
BeanManagerImpl bm = webBeansContext.getBeanManagerImpl();
CreationalContextImpl<Instance<Object>> creationalContext = bm.createCreationalContext(null);
return webBeansContext.getWebBeansUtil().getInstanceBean().create(creationalContext);
}
use of javax.enterprise.inject.Instance in project openwebbeans by apache.
the class TypeLiteralTest method testTypeLiteralInInstance.
@Test
public void testTypeLiteralInInstance() {
startContainer(StringOrder.class, IntegerOrder.class, InstanceTypeLiteralBean.class);
InstanceTypeLiteralBean beaninstance = getInstance(InstanceTypeLiteralBean.class);
Object produce = beaninstance.produce(0);
Assert.assertTrue(produce instanceof Instance);
Instance<IntegerOrder> order = (Instance<IntegerOrder>) produce;
Assert.assertTrue(order.get() instanceof IntegerOrder);
produce = beaninstance.produce(1);
Assert.assertTrue(produce instanceof Instance);
Instance<StringOrder> order2 = (Instance<StringOrder>) produce;
Assert.assertTrue(order2.get() instanceof StringOrder);
}
Aggregations