DatabaseStateMachine: return value on conditional failure
Change-Id: I579652659ea7281013c341c6ea9df2003b90bcdd
Showing
1 changed file
with
12 additions
and
13 deletions
... | @@ -155,8 +155,7 @@ public class DatabaseStateMachine implements StateMachine { | ... | @@ -155,8 +155,7 @@ public class DatabaseStateMachine implements StateMachine { |
155 | } | 155 | } |
156 | 156 | ||
157 | 157 | ||
158 | - WriteStatus checkIfApplicable(WriteRequest request, | 158 | + WriteStatus checkIfApplicable(WriteRequest request, VersionedValue value) { |
159 | - VersionedValue value) { | ||
160 | 159 | ||
161 | switch (request.type()) { | 160 | switch (request.type()) { |
162 | case PUT: | 161 | case PUT: |
... | @@ -167,20 +166,24 @@ public class DatabaseStateMachine implements StateMachine { | ... | @@ -167,20 +166,24 @@ public class DatabaseStateMachine implements StateMachine { |
167 | return WriteStatus.OK; | 166 | return WriteStatus.OK; |
168 | } | 167 | } |
169 | return WriteStatus.PRECONDITION_VIOLATION; | 168 | return WriteStatus.PRECONDITION_VIOLATION; |
169 | + | ||
170 | case PUT_IF_VALUE: | 170 | case PUT_IF_VALUE: |
171 | case REMOVE_IF_VALUE: | 171 | case REMOVE_IF_VALUE: |
172 | if (value != null && Arrays.equals(value.value(), request.oldValue())) { | 172 | if (value != null && Arrays.equals(value.value(), request.oldValue())) { |
173 | return WriteStatus.OK; | 173 | return WriteStatus.OK; |
174 | } | 174 | } |
175 | return WriteStatus.PRECONDITION_VIOLATION; | 175 | return WriteStatus.PRECONDITION_VIOLATION; |
176 | + | ||
176 | case PUT_IF_VERSION: | 177 | case PUT_IF_VERSION: |
177 | case REMOVE_IF_VERSION: | 178 | case REMOVE_IF_VERSION: |
178 | if (value != null && request.previousVersion() == value.version()) { | 179 | if (value != null && request.previousVersion() == value.version()) { |
179 | return WriteStatus.OK; | 180 | return WriteStatus.OK; |
180 | } | 181 | } |
181 | return WriteStatus.PRECONDITION_VIOLATION; | 182 | return WriteStatus.PRECONDITION_VIOLATION; |
183 | + | ||
182 | case REMOVE: | 184 | case REMOVE: |
183 | return WriteStatus.OK; | 185 | return WriteStatus.OK; |
186 | + | ||
184 | default: | 187 | default: |
185 | break; | 188 | break; |
186 | } | 189 | } |
... | @@ -193,31 +196,27 @@ public class DatabaseStateMachine implements StateMachine { | ... | @@ -193,31 +196,27 @@ public class DatabaseStateMachine implements StateMachine { |
193 | 196 | ||
194 | // applicability check | 197 | // applicability check |
195 | boolean abort = false; | 198 | boolean abort = false; |
196 | - List<WriteStatus> validationResults = new ArrayList<>(batchRequest.batchSize()); | 199 | + List<WriteResult> results = new ArrayList<>(batchRequest.batchSize()); |
200 | + | ||
197 | for (WriteRequest request : batchRequest.getAsList()) { | 201 | for (WriteRequest request : batchRequest.getAsList()) { |
198 | Map<String, VersionedValue> table = state.getTable(request.tableName()); | 202 | Map<String, VersionedValue> table = state.getTable(request.tableName()); |
199 | if (table == null) { | 203 | if (table == null) { |
200 | - validationResults.add(WriteStatus.NO_SUCH_TABLE); | 204 | + results.add(new WriteResult(WriteStatus.NO_SUCH_TABLE, null)); |
201 | abort = true; | 205 | abort = true; |
202 | continue; | 206 | continue; |
203 | } | 207 | } |
204 | final VersionedValue value = table.get(request.key()); | 208 | final VersionedValue value = table.get(request.key()); |
205 | WriteStatus result = checkIfApplicable(request, value); | 209 | WriteStatus result = checkIfApplicable(request, value); |
206 | - validationResults.add(result); | 210 | + results.add(new WriteResult(result, value)); |
207 | if (result != WriteStatus.OK) { | 211 | if (result != WriteStatus.OK) { |
208 | abort = true; | 212 | abort = true; |
209 | } | 213 | } |
210 | } | 214 | } |
211 | 215 | ||
212 | - List<WriteResult> results = new ArrayList<>(batchRequest.batchSize()); | ||
213 | - | ||
214 | if (abort) { | 216 | if (abort) { |
215 | - for (WriteStatus validationResult : validationResults) { | 217 | + for (int i = 0; i < results.size(); ++i) { |
216 | - if (validationResult == WriteStatus.OK) { | 218 | + if (results.get(i).status() == WriteStatus.OK) { |
217 | - // aborted due to applicability check failure on other request | 219 | + results.set(i, new WriteResult(WriteStatus.ABORTED, null)); |
218 | - results.add(new WriteResult(WriteStatus.ABORTED, null)); | ||
219 | - } else { | ||
220 | - results.add(new WriteResult(validationResult, null)); | ||
221 | } | 220 | } |
222 | } | 221 | } |
223 | return results; | 222 | return results; | ... | ... |
-
Please register or login to post a comment