You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@curator.apache.org by ra...@apache.org on 2016/05/19 19:02:18 UTC
[03/35] curator git commit: Further implementation of schema support
Further implementation of schema support
Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/f25a8126
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/f25a8126
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/f25a8126
Branch: refs/heads/CURATOR-3.0
Commit: f25a81263a5cfb4895f4aa147eec8374dbbb510e
Parents: da760f9
Author: randgalt <ra...@apache.org>
Authored: Mon May 2 16:07:26 2016 -0500
Committer: randgalt <ra...@apache.org>
Committed: Mon May 2 16:07:26 2016 -0500
----------------------------------------------------------------------
.../imps/CuratorMultiTransactionImpl.java | 22 +++++++++++++-
.../framework/imps/DeleteBuilderImpl.java | 2 ++
.../framework/imps/ExistsBuilderImpl.java | 2 ++
.../framework/imps/GetChildrenBuilderImpl.java | 2 ++
.../framework/imps/GetDataBuilderImpl.java | 2 ++
.../framework/imps/SetDataBuilderImpl.java | 2 ++
.../apache/curator/framework/imps/Watching.java | 5 +++
.../apache/curator/framework/schema/Schema.java | 32 +++++++++++++++++---
.../curator/framework/schema/SchemaBuilder.java | 21 ++++++++-----
9 files changed, 78 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/curator/blob/f25a8126/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorMultiTransactionImpl.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorMultiTransactionImpl.java b/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorMultiTransactionImpl.java
index da37a06..49824da 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorMultiTransactionImpl.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorMultiTransactionImpl.java
@@ -32,13 +32,17 @@ import org.apache.curator.framework.api.transaction.CuratorMultiTransaction;
import org.apache.curator.framework.api.transaction.CuratorMultiTransactionMain;
import org.apache.curator.framework.api.transaction.CuratorOp;
import org.apache.curator.framework.api.transaction.CuratorTransactionResult;
+import org.apache.curator.framework.schema.Schema;
import org.apache.zookeeper.AsyncCallback;
+import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.OpResult;
+import org.apache.zookeeper.ZooDefs;
+import org.apache.zookeeper.proto.CreateRequest;
+import org.apache.zookeeper.proto.SetDataRequest;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.Executor;
-import java.util.concurrent.ThreadFactory;
public class CuratorMultiTransactionImpl implements
CuratorMultiTransaction,
@@ -119,7 +123,23 @@ public class CuratorMultiTransactionImpl implements
CuratorMultiTransactionRecord record = new CuratorMultiTransactionRecord();
for ( CuratorOp curatorOp : operations )
{
+ Schema schema = client.getSchemaSet().getSchema(curatorOp.getTypeAndPath().getForPath());
record.add(curatorOp.get(), curatorOp.getTypeAndPath().getType(), curatorOp.getTypeAndPath().getForPath());
+ if ( (curatorOp.get().getType() == ZooDefs.OpCode.create) || (curatorOp.get().getType() == ZooDefs.OpCode.createContainer) )
+ {
+ CreateRequest createRequest = (CreateRequest)curatorOp.get().toRequestRecord();
+ CreateMode createMode = CreateMode.fromFlag(createRequest.getFlags(), CreateMode.PERSISTENT);
+ schema.validateCreate(createMode, createRequest.getData());
+ }
+ else if ( (curatorOp.get().getType() == ZooDefs.OpCode.delete) || (curatorOp.get().getType() == ZooDefs.OpCode.deleteContainer) )
+ {
+ schema.validateDeletion();
+ }
+ else if ( curatorOp.get().getType() == ZooDefs.OpCode.setData )
+ {
+ SetDataRequest setDataRequest = (SetDataRequest)curatorOp.get().toRequestRecord();
+ schema.validateData(setDataRequest.getData());
+ }
}
if ( backgrounding.inBackground() )
http://git-wip-us.apache.org/repos/asf/curator/blob/f25a8126/curator-framework/src/main/java/org/apache/curator/framework/imps/DeleteBuilderImpl.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/main/java/org/apache/curator/framework/imps/DeleteBuilderImpl.java b/curator-framework/src/main/java/org/apache/curator/framework/imps/DeleteBuilderImpl.java
index 678b0cb..54aac54 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/imps/DeleteBuilderImpl.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/imps/DeleteBuilderImpl.java
@@ -213,6 +213,8 @@ class DeleteBuilderImpl implements DeleteBuilder, BackgroundOperation<String>, E
@Override
public Void forPath(String path) throws Exception
{
+ client.getSchemaSet().getSchema(path).validateDeletion();
+
final String unfixedPath = path;
path = client.fixForNamespace(path);
http://git-wip-us.apache.org/repos/asf/curator/blob/f25a8126/curator-framework/src/main/java/org/apache/curator/framework/imps/ExistsBuilderImpl.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/main/java/org/apache/curator/framework/imps/ExistsBuilderImpl.java b/curator-framework/src/main/java/org/apache/curator/framework/imps/ExistsBuilderImpl.java
index cead168..11721de 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/imps/ExistsBuilderImpl.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/imps/ExistsBuilderImpl.java
@@ -158,6 +158,8 @@ class ExistsBuilderImpl implements ExistsBuilder, BackgroundOperation<String>, E
{
path = client.fixForNamespace(path);
+ client.getSchemaSet().getSchema(path).validateWatcher(watching.isWatched() || watching.hasWatcher());
+
Stat returnStat = null;
if ( backgrounding.inBackground() )
{
http://git-wip-us.apache.org/repos/asf/curator/blob/f25a8126/curator-framework/src/main/java/org/apache/curator/framework/imps/GetChildrenBuilderImpl.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/main/java/org/apache/curator/framework/imps/GetChildrenBuilderImpl.java b/curator-framework/src/main/java/org/apache/curator/framework/imps/GetChildrenBuilderImpl.java
index 8c7efa4..e88f58f 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/imps/GetChildrenBuilderImpl.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/imps/GetChildrenBuilderImpl.java
@@ -195,6 +195,8 @@ class GetChildrenBuilderImpl implements GetChildrenBuilder, BackgroundOperation<
@Override
public List<String> forPath(String path) throws Exception
{
+ client.getSchemaSet().getSchema(path).validateWatcher(watching.isWatched() || watching.hasWatcher());
+
path = client.fixForNamespace(path);
List<String> children = null;
http://git-wip-us.apache.org/repos/asf/curator/blob/f25a8126/curator-framework/src/main/java/org/apache/curator/framework/imps/GetDataBuilderImpl.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/main/java/org/apache/curator/framework/imps/GetDataBuilderImpl.java b/curator-framework/src/main/java/org/apache/curator/framework/imps/GetDataBuilderImpl.java
index d937d00..78bfd39 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/imps/GetDataBuilderImpl.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/imps/GetDataBuilderImpl.java
@@ -275,6 +275,8 @@ class GetDataBuilderImpl implements GetDataBuilder, BackgroundOperation<String>,
@Override
public byte[] forPath(String path) throws Exception
{
+ client.getSchemaSet().getSchema(path).validateWatcher(watching.isWatched() || watching.hasWatcher());
+
path = client.fixForNamespace(path);
byte[] responseData = null;
http://git-wip-us.apache.org/repos/asf/curator/blob/f25a8126/curator-framework/src/main/java/org/apache/curator/framework/imps/SetDataBuilderImpl.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/main/java/org/apache/curator/framework/imps/SetDataBuilderImpl.java b/curator-framework/src/main/java/org/apache/curator/framework/imps/SetDataBuilderImpl.java
index ee51b9e..1f9b335 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/imps/SetDataBuilderImpl.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/imps/SetDataBuilderImpl.java
@@ -241,6 +241,8 @@ class SetDataBuilderImpl implements SetDataBuilder, BackgroundOperation<PathAndB
@Override
public Stat forPath(String path, byte[] data) throws Exception
{
+ client.getSchemaSet().getSchema(path).validateData(data);
+
if ( compress )
{
data = client.getCompressionProvider().compress(path, data);
http://git-wip-us.apache.org/repos/asf/curator/blob/f25a8126/curator-framework/src/main/java/org/apache/curator/framework/imps/Watching.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/main/java/org/apache/curator/framework/imps/Watching.java b/curator-framework/src/main/java/org/apache/curator/framework/imps/Watching.java
index 2058c3b..568f308 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/imps/Watching.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/imps/Watching.java
@@ -88,6 +88,11 @@ class Watching
return namespaceWatcher;
}
+ boolean hasWatcher()
+ {
+ return (watcher != null) || (curatorWatcher != null);
+ }
+
boolean isWatched()
{
return watched;
http://git-wip-us.apache.org/repos/asf/curator/blob/f25a8126/curator-framework/src/main/java/org/apache/curator/framework/schema/Schema.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/main/java/org/apache/curator/framework/schema/Schema.java b/curator-framework/src/main/java/org/apache/curator/framework/schema/Schema.java
index 7b8f1d5..ed8fecb 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/schema/Schema.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/schema/Schema.java
@@ -13,6 +13,7 @@ public class Schema
private final Allowance sequential;
private final boolean canBeWatched;
private final boolean canHaveChildren;
+ private final boolean canBeDeleted;
public enum Allowance
{
@@ -26,7 +27,7 @@ public class Schema
return new SchemaBuilder(Pattern.compile(path));
}
- public Schema(Pattern path, String documentation, DataValidator dataValidator, Allowance ephemeral, Allowance sequential, boolean canBeWatched, boolean canHaveChildren)
+ public Schema(Pattern path, String documentation, DataValidator dataValidator, Allowance ephemeral, Allowance sequential, boolean canBeWatched, boolean canHaveChildren, boolean canBeDeleted)
{
this.path = Preconditions.checkNotNull(path, "path cannot be null");
this.documentation = Preconditions.checkNotNull(documentation, "documentation cannot be null");
@@ -35,6 +36,23 @@ public class Schema
this.sequential = Preconditions.checkNotNull(sequential, "sequential cannot be null");
this.canBeWatched = canBeWatched;
this.canHaveChildren = canHaveChildren;
+ this.canBeDeleted = canBeDeleted;
+ }
+
+ public void validateDeletion()
+ {
+ if ( !canBeDeleted )
+ {
+ throw new SchemaViolation(this, "Cannot be deleted");
+ }
+ }
+
+ public void validateWatcher(boolean isWatching)
+ {
+ if ( isWatching && !canBeWatched )
+ {
+ throw new SchemaViolation(this, "Cannot be watched");
+ }
}
public void validateCreate(CreateMode mode, byte[] data)
@@ -95,16 +113,21 @@ public class Schema
return sequential;
}
- public boolean isCanBeWatched()
+ public boolean canBeWatched()
{
return canBeWatched;
}
- public boolean isCanHaveChildren()
+ public boolean canHaveChildren()
{
return canHaveChildren;
}
+ public boolean canBeDeleted()
+ {
+ return canBeDeleted;
+ }
+
@Override
public boolean equals(Object o)
{
@@ -140,6 +163,7 @@ public class Schema
", isSequential=" + sequential +
", canBeWatched=" + canBeWatched +
", canHaveChildren=" + canHaveChildren +
+ ", canBeDeleted=" + canBeDeleted +
'}';
}
@@ -148,7 +172,7 @@ public class Schema
return path.pattern() + '\n'
+ documentation + '\n'
+ "Validator: " + dataValidator.getClass().getSimpleName() + '\n'
- + String.format("ephemeral: %s | sequential: %s | canBeWatched: %s | canHaveChildren: %s", ephemeral, sequential, canBeWatched, canHaveChildren) + '\n'
+ + String.format("ephemeral: %s | sequential: %s | canBeWatched: %s | canHaveChildren: %s | canBeDeleted: %s", ephemeral, sequential, canBeWatched, canHaveChildren, canBeDeleted) + '\n'
;
}
}
http://git-wip-us.apache.org/repos/asf/curator/blob/f25a8126/curator-framework/src/main/java/org/apache/curator/framework/schema/SchemaBuilder.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/main/java/org/apache/curator/framework/schema/SchemaBuilder.java b/curator-framework/src/main/java/org/apache/curator/framework/schema/SchemaBuilder.java
index 053ccfc..383a16b 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/schema/SchemaBuilder.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/schema/SchemaBuilder.java
@@ -8,14 +8,15 @@ public class SchemaBuilder
private Pattern path;
private String documentation = "";
private DataValidator dataValidator = new DefaultDataValidator();
- private boolean isEphemeral = false;
- private boolean isSequential = false;
+ private Schema.Allowance ephemeral = Schema.Allowance.CAN;
+ private Schema.Allowance sequential = Schema.Allowance.CAN;
private boolean canBeWatched = true;
private boolean canHaveChildren = true;
+ private boolean canBeDeleted = true;
public Schema build()
{
- return new Schema(path, documentation, dataValidator, isEphemeral, isSequential, canBeWatched, canHaveChildren);
+ return new Schema(path, documentation, dataValidator, ephemeral, sequential, canBeWatched, canHaveChildren, canBeDeleted);
}
public SchemaBuilder documentation(String documentation)
@@ -30,15 +31,15 @@ public class SchemaBuilder
return this;
}
- public SchemaBuilder isEphemeral(boolean isEphemeral)
+ public SchemaBuilder ephemeral(Schema.Allowance ephemeral)
{
- this.isEphemeral = isEphemeral;
+ this.ephemeral = ephemeral;
return this;
}
- public SchemaBuilder isSequential(boolean isSequential)
+ public SchemaBuilder sequential(Schema.Allowance sequential)
{
- this.isSequential = isSequential;
+ this.sequential = sequential;
return this;
}
@@ -54,6 +55,12 @@ public class SchemaBuilder
return this;
}
+ public SchemaBuilder canBeDeleted(boolean canBeDeleted)
+ {
+ this.canBeDeleted = canBeDeleted;
+ return this;
+ }
+
SchemaBuilder(Pattern path)
{
this.path = Preconditions.checkNotNull(path, "path cannot be null");