private static int getOpcode(CreateMode createMode) { if (createMode.isTTL()) { return ZooDefs.OpCode.createTTL; } return createMode.isContainer() ? ZooDefs.OpCode.createContainer : ZooDefs.OpCode.create; }
/** * Utility to validate a create mode and a ttl * * @param mode create mode * @param ttl ttl * @throws IllegalArgumentException if the ttl is not valid for the mode */ @SuppressFBWarnings(value = "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", justification = "toEphemeralOwner may throw IllegalArgumentException") public static void validateTTL(CreateMode mode, long ttl) { if (mode.isTTL()) { TTL.toEphemeralOwner(ttl); } else if (ttl >= 0) { throw new IllegalArgumentException("ttl not valid for mode: " + mode); } }
/** * Constructs a create operation. Arguments are as for the ZooKeeper method of the same name * but adding an optional ttl * @see ZooKeeper#create(String, byte[], java.util.List, CreateMode) * * @param path * the path for the node * @param data * the initial data for the node * @param acl * the acl for the node * @param createMode * specifying whether the node to be created is ephemeral * and/or sequential * @param ttl * optional ttl or 0 (createMode must imply a TTL) */ public static Op create(String path, byte[] data, List<ACL> acl, CreateMode createMode, long ttl) { if (createMode.isTTL()) { return new CreateTTL(path, data, acl, createMode, ttl); } return new Create(path, data, acl, createMode); }
private void setCreateHeader(CreateMode createMode, RequestHeader h) { if (createMode.isTTL()) { h.setType(ZooDefs.OpCode.createTTL); } else { h.setType(createMode.isContainer() ? ZooDefs.OpCode.createContainer : ZooDefs.OpCode.create2); } }
/** * Constructs a create operation. Arguments are as for the ZooKeeper method of the same name * but adding an optional ttl * @see ZooKeeper#create(String, byte[], java.util.List, CreateMode) * @see CreateMode#fromFlag(int) * * @param path * the path for the node * @param data * the initial data for the node * @param acl * the acl for the node * @param flags * specifying whether the node to be created is ephemeral * and/or sequential but using the integer encoding. * @param ttl * optional ttl or 0 (flags must imply a TTL creation mode) */ public static Op create(String path, byte[] data, List<ACL> acl, int flags, long ttl) { CreateMode createMode = CreateMode.fromFlag(flags, CreateMode.PERSISTENT); if (createMode.isTTL()) { return new CreateTTL(path, data, acl, createMode, ttl); } return new Create(path, data, acl, flags); }
public boolean isTtl(CreateMode mode) { return mode.isTTL(); } }
private void validateCreateRequest(String path, CreateMode createMode, Request request, long ttl) throws KeeperException { if (createMode.isTTL() && !EphemeralType.extendedEphemeralTypesEnabled()) { throw new KeeperException.UnimplementedException(); } try { EphemeralType.validateTTL(createMode, ttl); } catch (IllegalArgumentException e) { throw new BadArgumentsException(path); } if (createMode.isEphemeral()) { // Exception is set when local session failed to upgrade // so we just need to report the error if (request.getException() != null) { throw request.getException(); } zks.sessionTracker.checkGlobalSession(request.sessionId, request.getOwner()); } else { zks.sessionTracker.checkSession(request.sessionId, request.getOwner()); } }
for ( CreateMode createMode : CreateMode.values() ) { try { zk.create("/foo", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, createMode, new Stat(), createMode.isTTL() ? 0 : 100); Assert.fail("should have thrown IllegalArgumentException"); } catch (IllegalArgumentException dummy) { zk.create("/foo", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, createMode, callback, null, createMode.isTTL() ? 0 : 100); Assert.fail("should have thrown IllegalArgumentException"); } catch (IllegalArgumentException dummy) {
private Record makeCreateRecord(CreateMode createMode, String serverPath, byte[] data, List<ACL> acl, long ttl) { Record record; if (createMode.isTTL()) { CreateTTLRequest request = new CreateTTLRequest(); request.setData(data); request.setFlags(createMode.toFlag()); request.setPath(serverPath); request.setAcl(acl); request.setTtl(ttl); record = request; } else { CreateRequest request = new CreateRequest(); request.setData(data); request.setFlags(createMode.toFlag()); request.setPath(serverPath); request.setAcl(acl); record = request; } return record; }