From e9ab54f6575ed933c97b6b83aad076f44c3ff099 Mon Sep 17 00:00:00 2001 From: CalDescent Date: Sat, 18 Dec 2021 17:48:58 +0000 Subject: [PATCH] Fixed bug that prevented a resource from being overwritten if the existing data threw an exception when loading it. --- .../qortal/arbitrary/ArbitraryDataTransactionBuilder.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/qortal/arbitrary/ArbitraryDataTransactionBuilder.java b/src/main/java/org/qortal/arbitrary/ArbitraryDataTransactionBuilder.java index 36598730..abf72f54 100644 --- a/src/main/java/org/qortal/arbitrary/ArbitraryDataTransactionBuilder.java +++ b/src/main/java/org/qortal/arbitrary/ArbitraryDataTransactionBuilder.java @@ -97,7 +97,13 @@ public class ArbitraryDataTransactionBuilder { ArbitraryDataReader reader = new ArbitraryDataReader(this.name, ResourceIdType.NAME, this.service, this.identifier); try { reader.loadSynchronously(true); + } catch (Exception e) { + // Catch all exceptions if the existing resource cannot be loaded first time + // In these cases it's simplest to just use a PUT transaction + return Method.PUT; + } + try { // Check layer count int layerCount = reader.getLayerCount(); if (layerCount >= MAX_LAYERS) { @@ -144,7 +150,7 @@ public class ArbitraryDataTransactionBuilder { // State is appropriate for a PATCH transaction return Method.PATCH; } - catch (IOException | DataException | MissingDataException e) { + catch (IOException | DataException e) { // Handle matching states separately, as it's best to block transactions with duplicate states if (e.getMessage().equals("Current state matches previous state. Nothing to do.")) { throw new DataException(e.getMessage());