public static async Task KillSession(long sessionId, byte[] sessionPassword, IObservable <ConnectionState> onConnectionStateChanged, string connectionString, TimeSpan timeout) { var zooKeeper = new ZooKeeperNetExClient(connectionString, 5000, null, sessionId, sessionPassword); try { var budged = TimeBudget.StartNew(timeout); var observer = new WaitStateObserver(ConnectionState.Expired); onConnectionStateChanged.Subscribe(observer); while (!budged.HasExpired) { if (zooKeeper.getState().Equals(ZooKeeperNetExClient.States.CONNECTED)) { break; } Thread.Sleep(100); } await zooKeeper.closeAsync().ConfigureAwait(false); if (await observer.Signal.Task.TryWaitAsync(budged.Remaining).ConfigureAwait(false)) { return; } throw new TimeoutException($"Expected to kill session within {timeout}, but failed to do so."); } finally { await zooKeeper.closeAsync().ConfigureAwait(false); } }
public static TimeSpan?GetSessionTimeout(this ZooKeeperNetExClient client) { try { return(client?.getSessionTimeout().Milliseconds()); } catch (Exception) { return(null); } }
public static long GetSessionId(this ZooKeeperNetExClient client) { try { return(client?.getSessionId() ?? 0); } catch (Exception) { return(0); } }
public static byte[] GetSessionPassword(this ZooKeeperNetExClient client) { try { return(client?.getSessionPasswd()); } catch (Exception) { return(null); } }
public static void Dispose(this ZooKeeperNetExClient client) { try { client?.closeAsync().Wait(); } catch (Exception) { // ignored } }
public async Task <List <string> > GetStores() { var zooKeeper = new org.apache.zookeeper.ZooKeeper(connectionString, 100000, null, true); org.apache.zookeeper.ZooKeeper.LogToFile = false; org.apache.zookeeper.ZooKeeper.LogToTrace = true; var list = await zooKeeper.getChildrenAsync("/"); var all = list.Children.Select(x => new { Key = x, Exist = zooKeeper.existsAsync("/" + x + "/features") }).ToArray(); await Task.WhenAll(all.Select(x => x.Exist)); return(all.Where(x => x.Exist.Status == TaskStatus.RanToCompletion && x.Exist.Result != null) .Select(x => x.Key) .ToList()); }
public override async Task <GetChildrenResult> Execute(org.apache.zookeeper.ZooKeeper client) { var result = await client.getChildrenAsync(Request.Path, wrapper.Wrap(Request.Watcher, Request.IgnoreWatchersCache)).ConfigureAwait(false); return(GetChildrenResult.Successful(Request.Path, result.Children, result.Stat.ToNodeStat())); }
public override async Task <DeleteResult> Execute(org.apache.zookeeper.ZooKeeper client) { await client.deleteAsync(Request.Path, Request.Version).ConfigureAwait(false); return(DeleteResult.Successful(Request.Path)); }
public abstract Task <TResult> Execute(ZooKeeperNetExClient client);
public static void Touch(this ZooKeeperNetExClient client) { }
public override async Task <SetDataResult> Execute(org.apache.zookeeper.ZooKeeper client) { var result = await client.setDataAsync(Request.Path, Request.Data, Request.Version).ConfigureAwait(false); return(SetDataResult.Successful(Request.Path, result.ToNodeStat())); }