/// <summary> /// Return the ACL and stat of the node of the given path. /// /// A KeeperException with error code KeeperException.NoNode will be thrown /// if no node with the given path exists. /// @param path /// the given path for the node /// @param stat /// the stat of the node will be copied to this parameter. /// @return the ACL array of the given node. /// @throws InterruptedException If the server transaction is interrupted. /// @throws KeeperException If the server signals an error with a non-zero error code. /// @throws IllegalArgumentException if an invalid path is specified /// </summary> public IEnumerable <ACL> GetACL(string path, Stat stat) { string clientPath = path; PathUtils.ValidatePath(clientPath); string serverPath = PrependChroot(clientPath); RequestHeader h = new RequestHeader(); h.Type = (int)OpCode.GetACL; GetACLRequest request = new GetACLRequest(serverPath); GetACLResponse response = new GetACLResponse(); ReplyHeader r = cnxn.SubmitRequest(h, request, response, null); if (r.Err != 0) { throw KeeperException.Create((KeeperException.Code)Enum.ToObject(typeof(KeeperException.Code), r.Err), clientPath); } DataTree.CopyStat(response.Stat, stat); return(response.Acl); }
private async Task <IEnumerable <ACL> > GetACLAsyncInternal(string path, Stat stat, bool sync) { string clientPath = path; PathUtils.ValidatePath(clientPath); string serverPath = PrependChroot(clientPath); RequestHeader h = new RequestHeader(); h.Type = (int)OpCode.GetACL; GetACLRequest request = new GetACLRequest(serverPath); GetACLResponse response = new GetACLResponse(); ReplyHeader r = sync ? cnxn.SubmitRequest(h, request, response, null) : await cnxn.SubmitRequestAsync(h, request, response, null).ConfigureAwait(false); if (r.Err != 0) { throw KeeperException.Create((KeeperException.Code)Enum.ToObject(typeof(KeeperException.Code), r.Err), clientPath); } DataTree.CopyStat(response.Stat, stat); return(response.Acl); }
/// <summary> /// For the given znode path return the stat and children list. /// /// If the watch is non-null and the call is successful (no exception is thrown), /// a watch will be left on the node with the given path. The watch willbe /// triggered by a successful operation that deletes the node of the given /// path or creates/delete a child under the node. /// /// The list of children returned is not sorted and no guarantee is provided /// as to its natural or lexical order. /// /// A KeeperException with error code KeeperException.NoNode will be thrown /// if no node with the given path exists. /// @since 3.3.0 /// /// @param path /// @param watcher explicit watcher /// @param stat stat of the znode designated by path /// @return an unordered array of children of the node with the given path /// @throws InterruptedException If the server transaction is interrupted. /// @throws KeeperException If the server signals an error with a non-zero error code. /// @throws IllegalArgumentException if an invalid path is specified /// </summary> public List <string> GetChildren(string path, IWatcher watcher, Stat stat) { string clientPath = path; PathUtils.ValidatePath(clientPath); // the watch contains the un-chroot path WatchRegistration wcb = null; if (watcher != null) { wcb = new ChildWatchRegistration(watchManager, watcher, clientPath); } string serverPath = PrependChroot(clientPath); RequestHeader h = new RequestHeader(); h.Type = (int)OpCode.GetChildren2; GetChildren2Request request = new GetChildren2Request(); request.Path = serverPath; request.Watch = watcher != null; GetChildren2Response response = new GetChildren2Response(); ReplyHeader r = cnxn.SubmitRequest(h, request, response, wcb); if (r.Err != 0) { throw KeeperException.Create((KeeperException.Code)Enum.ToObject(typeof(KeeperException.Code), r.Err), clientPath); } if (stat != null) { DataTree.CopyStat(response.Stat, stat); } return(response.Children); }