diff --git a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java index e83e89c75f8d7f39c54447f7848f9644ca72d9f2..9b5b6fc1cff325415c1fd8bc15886629a9a8c52c 100644 --- a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java +++ b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java @@ -470,6 +470,13 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa return Integer.parseInt(id); } + /** + * Handle read-only transactions. + * + * @param request + * @return + * @throws Exception + */ public MultiTransactionResponse retrieve(final MultiTransactionRequest request) throws Exception { final MultiTransactionResponse.Builder builder = MultiTransactionResponse.newBuilder(); final RetrieveContainer container = @@ -570,14 +577,25 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa return System.currentTimeMillis(); } + /** + * Handle all entity transactions. + * + * @param request + * @return + * @throws Exception + */ public MultiTransactionResponse transaction(final MultiTransactionRequest request) throws Exception { if (request.getRequestsCount() > 0) { + // we only test the first request and raise errors when subsequent sub-transactions do not + // fit. final WrappedRequestsCase requestCase = request.getRequests(0).getWrappedRequestsCase(); switch (requestCase) { case RETRIEVE_REQUEST: + // Handle read-only transactions. return retrieve(request); default: + // Handle mixed-writed transactions. return write(request); } } else { @@ -586,6 +604,13 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa } } + /** + * Handle mixed-write transactions. + * + * @param requests + * @return + * @throws Exception + */ private MultiTransactionResponse write(final MultiTransactionRequest requests) throws Exception { final MultiTransactionResponse.Builder builder = MultiTransactionResponse.newBuilder(); final WritableContainer container =