Example #1
0
        public IWatcher Watch(ByteSequence key, WatchOption watchOption)
        {
            if (IsClosed())
            {
                throw new ClosedWatchClientException();
            }
            WatcherImpl watcher = new WatcherImpl(key, watchOption, this);

            // this.pendingWatchers.Enqueue(watcher);

            Etcdserverpb.WatchRequest       request       = new Etcdserverpb.WatchRequest();
            Etcdserverpb.WatchCreateRequest createRequest = new Etcdserverpb.WatchCreateRequest();
            createRequest.Key            = key.GetByteString();
            createRequest.PrevKv         = watchOption.isPrevKV();
            createRequest.ProgressNotify = watchOption.isProgressNotify();
            createRequest.RangeEnd       = watchOption.getEndKey().GetByteString();
            createRequest.StartRevision  = watchOption.getRevision();
            request.CreateRequest        = createRequest;
            Grpc.Core.CallOptions callOptions = new Grpc.Core.CallOptions();
            watchClient.Watch(callOptions);
            // watchClient.Watch()
            // watchClient.Watch()

            //  if (this.pendingWatchers.Count == 1) {
            // head of the queue send watchCreate request.
            //  WatchRequest request = this.toWatchCreateRequest(watcher);
            // this.getGrpcWatchStreamObserver().onNext(request);
            // }

            return(watcher);
        }
Example #2
0
            public void Resume()
            {
                if (closed)
                {
                    return;
                }

                if (stream == null)
                {
                    // id is not really useful today but it may be in etcd 3.4
                    watchID = -1;
                    Etcdserverpb.WatchCreateRequest createRequest = new Etcdserverpb.WatchCreateRequest
                    {
                        Key            = key.GetByteString(),
                        PrevKv         = watchOption.IsPrevKV,
                        ProgressNotify = watchOption.IsProgressNotify,
                        RangeEnd       = watchOption.EndKey.GetByteString(),
                        StartRevision  = watchOption.Revision
                    };
                    if (watchOption.EndKey.IsPresent)
                    {
                        createRequest.RangeEnd = watchOption.EndKey.GetByteString();
                    }
                    if (watchOption.IsNoDelete)
                    {
                        createRequest.Filters.Add(Etcdserverpb.WatchCreateRequest.Types.FilterType.Nodelete);
                    }
                    if (watchOption.IsNoPut)
                    {
                        createRequest.Filters.Add(Etcdserverpb.WatchCreateRequest.Types.FilterType.Noput);
                    }
                    Grpc.Core.CallOptions     callOptions = new Grpc.Core.CallOptions();
                    Etcdserverpb.WatchRequest request     = new Etcdserverpb.WatchRequest
                    {
                        CreateRequest = createRequest
                    };
                    var rsp = watchClient.Watch(callOptions);
                    rsp.RequestStream.WriteAsync(request);
                    stream       = rsp;
                    this.watchID = rsp.ResponseStream.Current.WatchId;
                }
            }
Example #3
0
        private static Etcdserverpb.WatchRequest ToWatchCreateRequest(WatcherImpl watcher)
        {
            ByteString  key    = watcher.GetKey().GetByteString();
            WatchOption option = watcher.GetWatchOption();

            Etcdserverpb.WatchCreateRequest watchCreate = new Etcdserverpb.WatchCreateRequest();
            watchCreate.Key            = key;
            watchCreate.PrevKv         = option.isPrevKV();
            watchCreate.ProgressNotify = option.isProgressNotify();
            watchCreate.StartRevision  = watcher.GetRevision();
            watchCreate.RangeEnd       = option.getEndKey().GetByteString();
            if (option.isNoDelete())
            {
                watchCreate.Filters.Add(Etcdserverpb.WatchCreateRequest.Types.FilterType.Nodelete);
            }

            if (option.isNoPut())
            {
                watchCreate.Filters.Add(Etcdserverpb.WatchCreateRequest.Types.FilterType.Noput);
            }
            Etcdserverpb.WatchRequest request = new Etcdserverpb.WatchRequest();
            request.CreateRequest = watchCreate;
            return(request);
        }
Example #4
0
        private void CancelWatcher(long id)
        {
            lock (this)
            {
                if (this.IsClosed())
                {
                    return;
                }

                if (this.cancelSet.Contains(id))
                {
                    return;
                }
                WatcherImpl W;
                this.watchers.TryRemove(id, out W);
                this.cancelSet.Add(id);

                Etcdserverpb.WatchCancelRequest watchCancelRequest = new Etcdserverpb.WatchCancelRequest();
                watchCancelRequest.WatchId = id;
                Etcdserverpb.WatchRequest request = new Etcdserverpb.WatchRequest();
                request.CancelRequest = watchCancelRequest;
                //this.getGrpcWatchStreamObserver().onNext(cancelRequest);
            }
        }