CA initialization while boostrapping and TestLeader_ChangeServerID fix. (#4493)

* connect: fix an issue with Consul CA bootstrapping being interrupted

* streamline change server id test
This commit is contained in:
Siva Prasad 2018-08-06 16:15:24 -04:00 committed by GitHub
parent f0a8f678c7
commit 29c181f5fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 24 deletions

View File

@ -45,23 +45,18 @@ func NewConsulProvider(rawConfig map[string]interface{}, delegate ConsulProvider
// Check if this configuration of the provider has already been
// initialized in the state store.
state := delegate.State()
_, providerState, err := state.CAProviderState(provider.id)
idx, providerState, err := state.CAProviderState(provider.id)
if err != nil {
return nil, err
}
// Exit early if the state store has already been populated for this config.
if providerState != nil {
return provider, nil
}
newState := structs.CAConsulProviderState{
ID: provider.id,
}
// Write the initial provider state to get the index to use for the
// CA serial number.
{
if providerState == nil {
args := &structs.CARequest{
Op: structs.CAOpSetProviderState,
ProviderState: &newState,
@ -69,11 +64,11 @@ func NewConsulProvider(rawConfig map[string]interface{}, delegate ConsulProvider
if err := delegate.ApplyCARequest(args); err != nil {
return nil, err
}
}
idx, _, err := state.CAProviderState(provider.id)
if err != nil {
return nil, err
idx, _, err = state.CAProviderState(provider.id)
if err != nil {
return nil, err
}
}
// Generate a private key if needed

View File

@ -864,21 +864,16 @@ func TestLeader_RollRaftServer(t *testing.T) {
func TestLeader_ChangeServerID(t *testing.T) {
t.Parallel()
conf := func(c *Config) {
c.Bootstrap = false
c.BootstrapExpect = 3
c.Datacenter = "dc1"
c.RaftConfig.ProtocolVersion = 3
}
dir1, s1 := testServerWithConfig(t, conf)
dir1, s1 := testServerDCBootstrap(t, "dc1", true)
defer os.RemoveAll(dir1)
defer s1.Shutdown()
dir2, s2 := testServerWithConfig(t, conf)
dir2, s2 := testServerDCBootstrap(t, "dc1", false)
defer os.RemoveAll(dir2)
defer s2.Shutdown()
dir3, s3 := testServerWithConfig(t, conf)
dir3, s3 := testServerDCBootstrap(t, "dc1", false)
defer os.RemoveAll(dir3)
defer s3.Shutdown()
@ -891,8 +886,12 @@ func TestLeader_ChangeServerID(t *testing.T) {
retry.Run(t, func(r *retry.R) { r.Check(wantPeers(s, 3)) })
}
testrpc.WaitForLeader(t, s1.RPC, "dc1")
// Shut down a server, freeing up its address/port
s3.Shutdown()
if err := s3.Shutdown(); err != nil {
t.Fatal(err)
}
retry.Run(t, func(r *retry.R) {
alive := 0
@ -909,9 +908,6 @@ func TestLeader_ChangeServerID(t *testing.T) {
// Bring up a new server with s3's address that will get a different ID
dir4, s4 := testServerWithConfig(t, func(c *Config) {
c.Bootstrap = false
c.BootstrapExpect = 3
c.Datacenter = "dc1"
c.RaftConfig.ProtocolVersion = 3
c.SerfLANConfig.MemberlistConfig = s3.config.SerfLANConfig.MemberlistConfig
c.RPCAddr = s3.config.RPCAddr
c.RPCAdvertise = s3.config.RPCAdvertise