예제 #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);
        }
예제 #2
0
 public WatcherImpl(ByteSequence key, WatchOption watchOption, WatchImpl owner)
 {
     this.key         = key;
     this.watchOption = watchOption;
     this.revision    = watchOption.getRevision();
     this.owner       = owner;
 }
예제 #3
0
 public WatcherImpl(ByteSequence key, WatchOption watchOption, WatchImpl owner)
 {
     this.key         = key;
     this.watchOption = watchOption;
     this.revision    = watchOption.Revision;
     this.owner       = owner;
     this.watchClient = owner.watchClient;
 }
예제 #4
0
        public IWatcher Watch(ByteSequence key, WatchOption watchOption)
        {
            if (closed)
            {
                throw new ClosedWatchClientException();
            }
            WatcherImpl watcher = null;

            lock (this)
            {
                watcher = new WatcherImpl(key, watchOption, this);
                watcher.Resume();
                pendingWatchers.Enqueue(watcher);
            }
            return(watcher);
        }
예제 #5
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);
        }