use of org.eclipse.hono.service.base.jdbc.store.EntityNotFoundException in project hono by eclipse.
the class ManagementStore method update.
/**
* Create a new tenant.
* <p>
* The operation may fail with a {@link org.eclipse.hono.service.base.jdbc.store.EntityNotFoundException} if the
* specified tenant does not exist.
* <p>
* The operation may fail with a {@link org.eclipse.hono.service.base.jdbc.store.DuplicateKeyException} if a
* tenant with the ID or trust anchor already exists.
* <p>
* The operation may fail with an {@link org.eclipse.hono.service.base.jdbc.store.OptimisticLockingException} if
* an expected resource version was provided, but the current version did not match.
*
* @param tenantId The ID of the new tenant.
* @param tenant The tenant information.
* @param resourceVersion An optional resource version.
* @param spanContext The span to contribute to.
* @return A future, tracking the outcome of the operation.
*/
public Future<Versioned<Void>> update(final String tenantId, final Tenant tenant, final Optional<String> resourceVersion, final SpanContext spanContext) {
final var json = tenantToJson(tenant);
final Span span = TracingHelper.buildChildSpan(this.tracer, spanContext, "update tenant", getClass().getSimpleName()).withTag(TracingHelper.TAG_TENANT_ID, tenantId).start();
final var nextVersion = UUID.randomUUID().toString();
resourceVersion.ifPresent(version -> span.setTag("version", version));
final Statement statement = resourceVersion.isPresent() ? this.updateVersionedStatement : this.updateStatement;
return SQL.runTransactionally(this.client, this.tracer, span.context(), (connection, context) -> updateJsonField(connection, tenantId, statement, json, resourceVersion, nextVersion, span).flatMap(r -> {
if (r.getUpdated() <= 0) {
return Future.failedFuture(new EntityNotFoundException());
} else {
return Future.succeededFuture();
}
}).flatMap(x -> deleteAllTrustAnchors(connection, tenantId, span)).flatMap(r -> insertAllTrustAnchors(connection, tenantId, tenant, span))).map(new Versioned<Void>(nextVersion, null)).onComplete(x -> span.finish());
}
use of org.eclipse.hono.service.base.jdbc.store.EntityNotFoundException in project hono by eclipse.
the class TableManagementStore method extractVersionForUpdate.
private static Future<String> extractVersionForUpdate(final ResultSet device, final Optional<String> resourceVersion) {
final Optional<String> version = device.getRows(true).stream().map(o -> o.getString("version")).findAny();
if (version.isEmpty()) {
log.debug("No version or no row found -> entity not found");
return Future.failedFuture(new EntityNotFoundException());
}
final var currentVersion = version.get();
return resourceVersion.<// if we expect a certain version
Future<String>>map(expected -> {
// check ...
if (expected.equals(currentVersion)) {
// version matches, continue with current version
return Future.succeededFuture(currentVersion);
} else {
// version does not match, abort
return Future.failedFuture(new OptimisticLockingException());
}
}).orElseGet(() -> Future.succeededFuture(currentVersion));
}
Aggregations