Gyuho Lee
8a518b01c4
*: revert "internal/mvcc" change
...
Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
2018-02-26 17:11:40 -08:00
Gyuho Lee
80d15948bc
*: move "mvcc" to "internal/mvcc"
...
Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
2018-01-26 11:14:41 -08:00
Gyuho Lee
31c2d4b0a2
clientv3: document possible memory pile-up in Watch
...
Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
2018-01-08 10:37:47 -08:00
Gyuho Lee
10522f88f5
clientv3: handle non -1 watch ID on cancellation
...
Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
2017-12-31 17:43:28 -08:00
Gyuho Lee
f6f3a9ca69
clientv3: document context to "Watch" API
...
Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
2017-12-21 12:59:15 -08:00
Gyuho Lee
497412c588
clientv3: call other APIs with default gRPC call options
...
Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
2017-12-20 10:58:05 -08:00
Gyu-Ho Lee
5d98710b2e
api/v3rpc: deprecate grpc.Errorf
...
It's been deprecated as of grpc/grpc-go v1.6.x.
Signed-off-by: Gyu-Ho Lee <gyuhox@gmail.com>
2017-11-04 22:08:17 -07:00
Gyu-Ho Lee
1fa60c9882
clientv3: add TODO for watch retry
...
Later we can do:
```diff
+// RetryWatchClient implements a WatchClient.
+func RetryWatchClient(c *Client) pb.WatchClient {
+ readRetry := c.newRetryWrapper(isReadStopError)
+ wc := pb.NewWatchClient(c.conn)
+ return &retryWatchClient{wc, readRetry}
+}
+
+type retryWatchClient struct {
+ pb.WatchClient
+ readRetry retryRPCFunc
+}
+
+func (rwc *retryWatchClient) Watch(ctx context.Context, opts ...grpc.CallOption) (stream pb.Watch_WatchClient, err error) {
+ err = rwc.readRetry(ctx, func(rctx context.Context) error {
+ stream, err = rwc.WatchClient.Watch(rctx, opts...)
+ return err
+ })
+ return stream, err
+}
- return NewWatchFromWatchClient(pb.NewWatchClient(c.conn))
+ return NewWatchFromWatchClient(RetryWatchClient(c))
```
Signed-off-by: Gyu-Ho Lee <gyuhox@gmail.com>
2017-10-19 16:02:01 -07:00
Gyu-Ho Lee
f65aee0759
*: replace 'golang.org/x/net/context' with 'context'
...
Signed-off-by: Gyu-Ho Lee <gyuhox@gmail.com>
2017-09-07 13:39:42 -07:00
Anthony Romano
2d0eec0b35
clientv3: goword spelling check
2017-09-06 22:11:33 -07:00
Anthony Romano
1c75c383a1
clientv3: use FromOutgoingContext to bucket watches
...
Watches were bucketed on string(ctx) for historical reasons;
metadata.FromOutgoingContext should be enough to key watches now.
Fixes #8338
2017-08-01 09:26:07 -07:00
Anthony Romano
318caeee7e
clientv3: return CompactRevision wresp when set with Canceled
2017-07-25 12:36:01 -07:00
Anthony Romano
13d9438cf9
clientv3: clarify Watch close conditions
...
The "too slow" comment is rather vague. If the server closes
the watch for being too slow (it doesn't seem to any more), the
watch client should gracefully resume instead of forcing the
user to handle it.
Also removed the 'opts' comment since it wasn't being maintained.
2017-06-15 09:34:00 -07:00
fanmin shi
762b2c625c
clientv3: change watchGrpcStream Close() to close()
...
private struct shouldn't have public method.
2017-06-08 12:11:06 -07:00
Hitoshi Mitake
939912c425
clientv3, etcdserver: support auth in Watch()
2017-05-20 11:34:45 +09:00
Anthony Romano
ca4acceb1e
clientv3: set current revision to create rev regardless of CreateNotify
...
Turns out the optimization to ignore setting the init rev for
current revision watches breaks some ordering assumptions. Since
Watch only returns a channel once it gets a response, it should
bind the revision at the time of the first create response.
Was causing TestWatchReconnInit to fail.
2017-04-22 13:04:38 -07:00
Anthony Romano
4ab818a856
clientv3: only update initReq.rev == 0 with creation watch revision
...
Always updating the initReq.rev on watch create will resume from the wrong
revision if initReq is ever nonzero.
2017-04-21 20:22:51 -07:00
Anthony Romano
aab2eda7df
clientv3: register waitCancelSubstreams closingc goroutine with waitgroup
...
Fixes #7598
2017-04-05 16:06:53 -07:00
Anthony Romano
a39107a3b8
clientv3: use waitgroup to wait for substream goroutine teardown
...
When a grpc watch stream is torn down, it will join on its logical substream
goroutines by waiting for each to close a channel. This doesn't guarantee
the substream is fully exited, though, but only about to exit and can be
waiting to resume even after Watch.Close finishes. Instead, use a
waitgroup.Done at the very end of the substream defer.
Fixes #7573
2017-03-22 23:27:26 -07:00
Anthony Romano
a087325452
clientv3: close open watch channel if substream is closing on reconnect
...
If substream is closing but outc is still open while reconnecting, then outc
would only be closed once the watch client would connect or once the watch
client is closed. This was leading to deadlocks in the proxy tests. Instead,
close immediately if the context is canceled.
Fixes #7503
2017-03-14 17:25:18 -07:00
Anthony Romano
1aeeb38459
clientv3: let watchers cancel when reconnecting
2016-11-08 12:02:17 -08:00
Gyu-Ho Lee
0a3d45a307
clientv3: send create event over outc
2016-10-27 11:11:16 -07:00
Anthony Romano
c100e40715
clientv3: only receive from closing streams in Watcher close
...
Was overcounting the number of expected closing messages; the resuming
list may have nil entries. Also the full client wasn't closing the watcher
client, only canceling its context, so client closes weren't joining with
the watcher shutdown.
Fixes #6605
2016-10-20 15:33:11 -07:00
Anthony Romano
b980ab0c67
Merge pull request #6582 from heyitsanthony/fix-cancel-close
...
clientv3: only return closing error to watcher if context is not canceled
2016-10-05 13:37:29 -07:00
Anthony Romano
06d5cf2d52
clientv3: fix race on watch initial revision
...
The initial revision was being updated in the substream goroutine defer;
this was racing with the resume path fetching the initial revision when
the substream closes during resume. Instead, update the initial revision
whenever the substream processes a new watch response. Since the substream
cannot receive a watch response while it is resuming, the write to the
initial revision is ordered to always happen after the resume read.
Fixes #6586
2016-10-05 09:36:06 -07:00
Anthony Romano
e285f599e2
clientv3: only return closing error to watcher if context is not canceled
...
Fixes #6503
2016-10-04 16:09:50 -07:00
Anthony Romano
5b50658118
clientv3: simplify watch synchronization
...
Was more complicated than it needed to be and didn't really work in the
first place. Restructured watcher registation to use a queue.
2016-10-03 16:56:14 -07:00
Anthony Romano
bf2581390d
clientv3: make IsProgressNotify() false on compact event and closed channel
...
Fixes #6549
2016-09-28 16:49:39 -07:00
Anthony Romano
a32518006c
clientv3: process closed watcherStreams in watcherGrpcStream run loop
...
Was racing with Watch() when closing the grpc stream on no watchers.
Fixes #6476
2016-09-21 13:28:00 -07:00
Anthony Romano
ad318ee891
clientv3: drain buffered WatchResponses before resuming
...
Otherwise, the watcherStream can receive WatchResponses in the
middle of a resume, corrupting the stream.
Fixes #6364
2016-09-06 17:15:39 -07:00
Anthony Romano
7b2f769643
clientv3: only resume watcher if error is non-halting
2016-09-01 15:22:35 -07:00
Anthony Romano
1c83a46c6d
clientv3: handle watchGrpcStream shutdown if prior to goroutine start
...
Fixes #6141
2016-08-09 19:59:04 -07:00
Anthony Romano
5e651a0d0d
clientv3: close watcher stream once all watchers detach
...
Fixes #6134
2016-08-09 00:10:57 -07:00
Xiang Li
57c68ab1db
grpcproxy: handle create event
2016-08-02 20:51:30 -07:00
Xiang Li
33c3583b50
clientv3: add send created notification
2016-08-02 20:08:11 -07:00
Anthony Romano
943fe70178
clientv3: support watch filters
2016-07-27 21:24:52 -07:00
Anthony Romano
ac96963003
clientv3: support creating a Watch from a WatchClient
2016-07-25 09:34:36 -07:00
Anthony Romano
d8f0ef0e80
clientv3: use grpc.FailFast(false) for all calls
2016-07-14 17:58:58 -07:00
Xiang Li
c853704ac9
*: support get-old-kv in watch
2016-07-05 16:17:09 -07:00
Anthony Romano
1db4ee8c61
clientv3: only use closeErr on watch when donec is closed
...
Fixes #5800
2016-06-28 16:14:09 -07:00
Anthony Romano
722f5b2a8c
clientv3: watch with arbitrary ctx values
...
Sets up a new watch stream for every unique set of ctx values.
Fixes #5354
2016-06-20 12:44:51 -07:00
Anthony Romano
62f8ec25c0
clientv3: use grpc reconnection logic
2016-06-08 01:04:59 -07:00
Anthony Romano
267d1cb16f
clientv3: fix watch to reconnect on failure
...
It was spinning before.
2016-06-03 10:25:20 -07:00
Gyu-Ho Lee
75dc10574a
clientv3: watch resp with error when client close
2016-06-01 10:39:48 -07:00
Gyu-Ho Lee
f9306fb817
clientv3: preallocate watch streams slice
...
To avoid slice growth when appending
2016-05-19 12:55:55 -07:00
Gyu-Ho Lee
86c85b88ad
Merge pull request #5377 from purpleidea/bug/typos
...
clientv3: fix typos
2016-05-17 12:51:13 -07:00
James Shubin
42f3b4964f
clientv3: fix typos
2016-05-17 15:39:56 -04:00
Gyu-Ho Lee
fd9e07a529
clientv3: update LICENSE header
2016-05-12 20:50:58 -07:00
Anthony Romano
712090fc09
clientv3: keep watcher client active if reconnect has network error
...
Otherwise watchers created after a long disconnect period will always
close immediately.
2016-05-05 19:30:11 -07:00
Anthony Romano
cdc8f99658
clientv3: rework reconnection logic
...
Avoids go routine flood for tight loops with a dead connection.
Now uses request ctx when reconnecting for immediate retry.
2016-05-05 19:30:11 -07:00