xds: Fix TestV2ClientBackoffAfterRecvError (#3815)

The failure seems to have been because of the following:
* After the stream failure, and after the backoff, the client tries to
  register all its existing watches. And there seems to have been a race
  between the re-register and the client close. Hence a log message was
  getting printing saying "send failed because of EOF".

I've fixed this by making sure that the test waits for the xDS request
corresponding to the re-registered watch. I've also tried running it a
1000 times without a failure.
This commit is contained in:
Easwar Swaminathan 2020-08-13 12:40:42 -07:00 committed by GitHub
parent 9310253e11
commit 6768e33c1f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 7 additions and 3 deletions

View File

@ -508,14 +508,14 @@ func newV2Client(p xdsclient.UpdateHandler, cc *grpc.ClientConn, n *basepb.Node,
return c.(*client), nil
}
// TestV2ClientBackoffAfterRecvError verifies if the v2Client backoffs when it
// TestV2ClientBackoffAfterRecvError verifies if the v2Client backs off when it
// encounters a Recv error while receiving an LDS response.
func (s) TestV2ClientBackoffAfterRecvError(t *testing.T) {
fakeServer, cc, cleanup := startServerAndGetCC(t)
defer cleanup()
// Override the v2Client backoff function with this, so that we can verify
// that a backoff actually was triggerred.
// that a backoff actually was triggered.
boCh := make(chan int, 1)
clientBackoff := func(v int) time.Duration {
boCh <- v
@ -532,7 +532,6 @@ func (s) TestV2ClientBackoffAfterRecvError(t *testing.T) {
defer v2c.Close()
t.Log("Started xds v2Client...")
// v2c.watchLDS(goodLDSTarget1, func(u ldsUpdate, err error) {})
v2c.AddWatch(version.V2ListenerURL, goodLDSTarget1)
if _, err := fakeServer.XDSRequestChan.Receive(); err != nil {
t.Fatalf("Timeout expired when expecting an LDS request")
@ -552,6 +551,11 @@ func (s) TestV2ClientBackoffAfterRecvError(t *testing.T) {
case <-callbackCh:
t.Fatal("Received unexpected LDS callback")
}
if _, err := fakeServer.XDSRequestChan.Receive(); err != nil {
t.Fatalf("Timeout expired when expecting an LDS request")
}
t.Log("FakeServer received request after backoff...")
}
// TestV2ClientRetriesAfterBrokenStream verifies the case where a stream