Skip to content

Commit

Permalink
cache: Pass through wait query param to the cache.Get
Browse files Browse the repository at this point in the history
This adds a MaxQueryTime field to the connect ca leaf cache request type and populates it via the wait query param. The cache will then do the right thing and timeout the operation as expected if no new leaf cert is available within that time.

Fixes #4462
  • Loading branch information
mkeeler committed Jan 8, 2019
1 parent 0e280b5 commit 49b5d9f
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 0 deletions.
1 change: 1 addition & 0 deletions agent/agent_endpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -1335,6 +1335,7 @@ func (s *HTTPServer) AgentConnectCALeafCert(resp http.ResponseWriter, req *http.
return nil, nil
}
args.MinQueryIndex = qOpts.MinQueryIndex
args.MaxQueryTime = qOpts.MaxQueryTime

// Verify the proxy token. This will check both the local proxy token
// as well as the ACL if the token isn't local. The checks done in
Expand Down
19 changes: 19 additions & 0 deletions agent/agent_endpoint_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4715,6 +4715,25 @@ func TestAgentConnectCALeafCert_goodNotLocal(t *testing.T) {
require.Equal("HIT", resp.Header().Get("X-Cache"))
}

// Test Blocking - see https://github.com/hashicorp/consul/issues/4462
{
// Fetch it again
resp := httptest.NewRecorder()
blockingReq, _ := http.NewRequest("GET", fmt.Sprintf("/v1/agent/connect/ca/leaf/test?wait=125ms&index=%d", issued.ModifyIndex), nil)
doneCh := make(chan struct{})
go func() {
a.srv.AgentConnectCALeafCert(resp, blockingReq)
close(doneCh)
}()

select {
case <-time.After(500 * time.Millisecond):
require.FailNow("Shouldn't block for this long - not respecting wait parameter in the query")

case <-doneCh:
}
}

// Test that caching is updated in the background
{
// Set a new CA
Expand Down
2 changes: 2 additions & 0 deletions agent/cache-types/connect_ca_leaf.go
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,7 @@ type ConnectCALeafRequest struct {
Datacenter string
Service string // Service name, not ID
MinQueryIndex uint64
MaxQueryTime time.Duration
}

func (r *ConnectCALeafRequest) CacheInfo() cache.RequestInfo {
Expand All @@ -271,5 +272,6 @@ func (r *ConnectCALeafRequest) CacheInfo() cache.RequestInfo {
Key: r.Service,
Datacenter: r.Datacenter,
MinIndex: r.MinQueryIndex,
Timeout: r.MaxQueryTime,
}
}

0 comments on commit 49b5d9f

Please sign in to comment.