in zookeeper-server/src/main/java/org/apache/zookeeper/cli/CreateCommand.java [71:139]
public boolean exec() throws CliException {
boolean hasE = cl.hasOption("e");
boolean hasS = cl.hasOption("s");
boolean hasC = cl.hasOption("c");
boolean hasT = cl.hasOption("t");
if (hasC && (hasE || hasS)) {
throw new MalformedCommandException("-c cannot be combined with -s or -e. Containers cannot be ephemeral or sequential.");
}
long ttl;
try {
ttl = hasT ? Long.parseLong(cl.getOptionValue("t")) : 0;
} catch (NumberFormatException e) {
throw new MalformedCommandException("-t argument must be a long value");
}
if (hasT && hasE) {
throw new MalformedCommandException("TTLs cannot be used with Ephemeral znodes");
}
if (hasT && hasC) {
throw new MalformedCommandException("TTLs cannot be used with Container znodes");
}
CreateMode flags;
if (hasE && hasS) {
flags = CreateMode.EPHEMERAL_SEQUENTIAL;
} else if (hasE) {
flags = CreateMode.EPHEMERAL;
} else if (hasS) {
flags = hasT ? CreateMode.PERSISTENT_SEQUENTIAL_WITH_TTL : CreateMode.PERSISTENT_SEQUENTIAL;
} else if (hasC) {
flags = CreateMode.CONTAINER;
} else {
flags = hasT ? CreateMode.PERSISTENT_WITH_TTL : CreateMode.PERSISTENT;
}
if (hasT) {
try {
EphemeralType.TTL.toEphemeralOwner(ttl);
} catch (IllegalArgumentException e) {
throw new MalformedCommandException(e.getMessage());
}
}
String path = args[1];
byte[] data = null;
if (args.length > 2) {
data = args[2].getBytes(UTF_8);
}
List<ACL> acl = ZooDefs.Ids.OPEN_ACL_UNSAFE;
if (args.length > 3) {
acl = AclParser.parse(args[3]);
}
try {
String newPath = hasT
? zk.create(path, data, acl, flags, new Stat(), ttl)
: zk.create(path, data, acl, flags);
err.println("Created " + newPath);
} catch (IllegalArgumentException ex) {
throw new MalformedPathException(ex.getMessage());
} catch (KeeperException.EphemeralOnLocalSessionException e) {
err.println("Unable to create ephemeral node on a local session");
throw new CliWrapperException(e);
} catch (KeeperException.InvalidACLException ex) {
err.println(ex.getMessage());
throw new CliWrapperException(ex);
} catch (KeeperException | InterruptedException ex) {
throw new CliWrapperException(ex);
}
return true;
}