summaryrefslogtreecommitdiff
path: root/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java')
-rw-r--r--nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java10
1 files changed, 8 insertions, 2 deletions
diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java b/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java
index ddc7c3f7f..f662780bb 100644
--- a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java
+++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java
@@ -125,8 +125,13 @@ public final class IndexManager implements Managed {
}
}
- public void create(final String name, IndexDefinition indexDefinition) throws IOException {
+ public void create(final String name, IndexDefinition newIndexDefinition) throws IOException {
if (exists(name)) {
+ final IndexDefinition currentIndexDefinition = loadIndexDefinition(name);
+ if (newIndexDefinition.equals(currentIndexDefinition)) {
+ // Idempotent success.
+ return;
+ }
throw new WebApplicationException("Index already exists", Status.EXPECTATION_FAILED);
}
// Validate index definiton
@@ -134,11 +139,12 @@ public final class IndexManager implements Managed {
// Persist definition
final Path path = indexDefinitionPath(name);
+
if (Files.exists(path)) {
throw new FileAlreadyExistsException(name + " already exists");
}
Files.createDirectories(path.getParent());
- objectMapper.writeValue(path.toFile(), indexDefinition);
+ objectMapper.writeValue(path.toFile(), newIndexDefinition);
}
public boolean exists(final String name) {