|
@@ -25,6 +25,7 @@ import (
|
|
|
"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
|
|
"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
|
|
|
"github.com/coreos/etcd/integration"
|
|
"github.com/coreos/etcd/integration"
|
|
|
"github.com/coreos/etcd/pkg/testutil"
|
|
"github.com/coreos/etcd/pkg/testutil"
|
|
|
|
|
+ "google.golang.org/grpc"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
// TestBalancerUnderBlackholeKeepAliveWatch tests when watch discovers it cannot talk to
|
|
// TestBalancerUnderBlackholeKeepAliveWatch tests when watch discovers it cannot talk to
|
|
@@ -44,6 +45,7 @@ func TestBalancerUnderBlackholeKeepAliveWatch(t *testing.T) {
|
|
|
ccfg := clientv3.Config{
|
|
ccfg := clientv3.Config{
|
|
|
Endpoints: []string{eps[0]},
|
|
Endpoints: []string{eps[0]},
|
|
|
DialTimeout: 1 * time.Second,
|
|
DialTimeout: 1 * time.Second,
|
|
|
|
|
+ DialOptions: []grpc.DialOption{grpc.WithBlock()},
|
|
|
DialKeepAliveTime: 1 * time.Second,
|
|
DialKeepAliveTime: 1 * time.Second,
|
|
|
DialKeepAliveTimeout: 500 * time.Millisecond,
|
|
DialKeepAliveTimeout: 500 * time.Millisecond,
|
|
|
}
|
|
}
|
|
@@ -106,7 +108,7 @@ func TestBalancerUnderBlackholeKeepAliveWatch(t *testing.T) {
|
|
|
func TestBalancerUnderBlackholeNoKeepAlivePut(t *testing.T) {
|
|
func TestBalancerUnderBlackholeNoKeepAlivePut(t *testing.T) {
|
|
|
testBalancerUnderBlackholeNoKeepAlive(t, func(cli *clientv3.Client, ctx context.Context) error {
|
|
testBalancerUnderBlackholeNoKeepAlive(t, func(cli *clientv3.Client, ctx context.Context) error {
|
|
|
_, err := cli.Put(ctx, "foo", "bar")
|
|
_, err := cli.Put(ctx, "foo", "bar")
|
|
|
- if err == context.DeadlineExceeded || isServerCtxTimeout(err) || err == rpctypes.ErrTimeout {
|
|
|
|
|
|
|
+ if isClientTimeout(err) || isServerCtxTimeout(err) || err == rpctypes.ErrTimeout {
|
|
|
return errExpected
|
|
return errExpected
|
|
|
}
|
|
}
|
|
|
return err
|
|
return err
|
|
@@ -116,7 +118,7 @@ func TestBalancerUnderBlackholeNoKeepAlivePut(t *testing.T) {
|
|
|
func TestBalancerUnderBlackholeNoKeepAliveDelete(t *testing.T) {
|
|
func TestBalancerUnderBlackholeNoKeepAliveDelete(t *testing.T) {
|
|
|
testBalancerUnderBlackholeNoKeepAlive(t, func(cli *clientv3.Client, ctx context.Context) error {
|
|
testBalancerUnderBlackholeNoKeepAlive(t, func(cli *clientv3.Client, ctx context.Context) error {
|
|
|
_, err := cli.Delete(ctx, "foo")
|
|
_, err := cli.Delete(ctx, "foo")
|
|
|
- if err == context.DeadlineExceeded || isServerCtxTimeout(err) || err == rpctypes.ErrTimeout {
|
|
|
|
|
|
|
+ if isClientTimeout(err) || isServerCtxTimeout(err) || err == rpctypes.ErrTimeout {
|
|
|
return errExpected
|
|
return errExpected
|
|
|
}
|
|
}
|
|
|
return err
|
|
return err
|
|
@@ -129,7 +131,7 @@ func TestBalancerUnderBlackholeNoKeepAliveTxn(t *testing.T) {
|
|
|
If(clientv3.Compare(clientv3.Version("foo"), "=", 0)).
|
|
If(clientv3.Compare(clientv3.Version("foo"), "=", 0)).
|
|
|
Then(clientv3.OpPut("foo", "bar")).
|
|
Then(clientv3.OpPut("foo", "bar")).
|
|
|
Else(clientv3.OpPut("foo", "baz")).Commit()
|
|
Else(clientv3.OpPut("foo", "baz")).Commit()
|
|
|
- if err == context.DeadlineExceeded || isServerCtxTimeout(err) || err == rpctypes.ErrTimeout {
|
|
|
|
|
|
|
+ if isClientTimeout(err) || isServerCtxTimeout(err) || err == rpctypes.ErrTimeout {
|
|
|
return errExpected
|
|
return errExpected
|
|
|
}
|
|
}
|
|
|
return err
|
|
return err
|
|
@@ -139,7 +141,7 @@ func TestBalancerUnderBlackholeNoKeepAliveTxn(t *testing.T) {
|
|
|
func TestBalancerUnderBlackholeNoKeepAliveLinearizableGet(t *testing.T) {
|
|
func TestBalancerUnderBlackholeNoKeepAliveLinearizableGet(t *testing.T) {
|
|
|
testBalancerUnderBlackholeNoKeepAlive(t, func(cli *clientv3.Client, ctx context.Context) error {
|
|
testBalancerUnderBlackholeNoKeepAlive(t, func(cli *clientv3.Client, ctx context.Context) error {
|
|
|
_, err := cli.Get(ctx, "a")
|
|
_, err := cli.Get(ctx, "a")
|
|
|
- if err == context.DeadlineExceeded || isServerCtxTimeout(err) || err == rpctypes.ErrTimeout {
|
|
|
|
|
|
|
+ if isClientTimeout(err) || isServerCtxTimeout(err) || err == rpctypes.ErrTimeout {
|
|
|
return errExpected
|
|
return errExpected
|
|
|
}
|
|
}
|
|
|
return err
|
|
return err
|
|
@@ -149,7 +151,7 @@ func TestBalancerUnderBlackholeNoKeepAliveLinearizableGet(t *testing.T) {
|
|
|
func TestBalancerUnderBlackholeNoKeepAliveSerializableGet(t *testing.T) {
|
|
func TestBalancerUnderBlackholeNoKeepAliveSerializableGet(t *testing.T) {
|
|
|
testBalancerUnderBlackholeNoKeepAlive(t, func(cli *clientv3.Client, ctx context.Context) error {
|
|
testBalancerUnderBlackholeNoKeepAlive(t, func(cli *clientv3.Client, ctx context.Context) error {
|
|
|
_, err := cli.Get(ctx, "a", clientv3.WithSerializable())
|
|
_, err := cli.Get(ctx, "a", clientv3.WithSerializable())
|
|
|
- if err == context.DeadlineExceeded || isServerCtxTimeout(err) {
|
|
|
|
|
|
|
+ if isClientTimeout(err) || isServerCtxTimeout(err) {
|
|
|
return errExpected
|
|
return errExpected
|
|
|
}
|
|
}
|
|
|
return err
|
|
return err
|
|
@@ -172,6 +174,7 @@ func testBalancerUnderBlackholeNoKeepAlive(t *testing.T, op func(*clientv3.Clien
|
|
|
ccfg := clientv3.Config{
|
|
ccfg := clientv3.Config{
|
|
|
Endpoints: []string{eps[0]},
|
|
Endpoints: []string{eps[0]},
|
|
|
DialTimeout: 1 * time.Second,
|
|
DialTimeout: 1 * time.Second,
|
|
|
|
|
+ DialOptions: []grpc.DialOption{grpc.WithBlock()},
|
|
|
}
|
|
}
|
|
|
cli, err := clientv3.New(ccfg)
|
|
cli, err := clientv3.New(ccfg)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -193,7 +196,7 @@ func testBalancerUnderBlackholeNoKeepAlive(t *testing.T, op func(*clientv3.Clien
|
|
|
// TODO: first operation can succeed
|
|
// TODO: first operation can succeed
|
|
|
// when gRPC supports better retry on non-delivered request
|
|
// when gRPC supports better retry on non-delivered request
|
|
|
for i := 0; i < 2; i++ {
|
|
for i := 0; i < 2; i++ {
|
|
|
- ctx, cancel := context.WithTimeout(context.Background(), time.Second)
|
|
|
|
|
|
|
+ ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
|
|
|
err = op(cli, ctx)
|
|
err = op(cli, ctx)
|
|
|
cancel()
|
|
cancel()
|
|
|
if err == nil {
|
|
if err == nil {
|