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);
            }
        }
Пример #2
0
 public static TimeSpan?GetSessionTimeout(this ZooKeeperNetExClient client)
 {
     try
     {
         return(client?.getSessionTimeout().Milliseconds());
     }
     catch (Exception)
     {
         return(null);
     }
 }
Пример #3
0
 public static long GetSessionId(this ZooKeeperNetExClient client)
 {
     try
     {
         return(client?.getSessionId() ?? 0);
     }
     catch (Exception)
     {
         return(0);
     }
 }
Пример #4
0
 public static byte[] GetSessionPassword(this ZooKeeperNetExClient client)
 {
     try
     {
         return(client?.getSessionPasswd());
     }
     catch (Exception)
     {
         return(null);
     }
 }
Пример #5
0
 public static void Dispose(this ZooKeeperNetExClient client)
 {
     try
     {
         client?.closeAsync().Wait();
     }
     catch (Exception)
     {
         // ignored
     }
 }
Пример #6
0
        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);
Пример #10
0
 public static void Touch(this ZooKeeperNetExClient client)
 {
 }
Пример #11
0
        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()));
        }