Merge pull request #11744 from hashicorp/b-node-copy

Fix Node.Copy()
This commit is contained in:
Michael Schurter 2022-01-05 17:01:53 -08:00 committed by GitHub
commit 1af8d47de2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 55 additions and 10 deletions

3
.changelog/11744.txt Normal file
View File

@ -0,0 +1,3 @@
```release-note:bug
core: Fix missing fields in Node.Copy()
```

View File

@ -1531,9 +1531,7 @@ func TestClientEndpoint_GetNode(t *testing.T) {
node.StatusUpdatedAt = resp2.Node.StatusUpdatedAt
node.SecretID = ""
node.Events = resp2.Node.Events
if !reflect.DeepEqual(node, resp2.Node) {
t.Fatalf("bad: %#v \n %#v", node, resp2.Node)
}
require.Equal(t, node, resp2.Node)
// assert that the node register event was set correctly
if len(resp2.Node.Events) != 1 {

View File

@ -2025,20 +2025,20 @@ func (n *Node) Copy() *Node {
nn := new(Node)
*nn = *n
nn.Attributes = helper.CopyMapStringString(nn.Attributes)
nn.Resources = nn.Resources.Copy()
nn.Reserved = nn.Reserved.Copy()
nn.NodeResources = nn.NodeResources.Copy()
nn.ReservedResources = nn.ReservedResources.Copy()
nn.Resources = nn.Resources.Copy()
nn.Reserved = nn.Reserved.Copy()
nn.Links = helper.CopyMapStringString(nn.Links)
nn.Meta = helper.CopyMapStringString(nn.Meta)
nn.Events = copyNodeEvents(n.Events)
nn.DrainStrategy = nn.DrainStrategy.Copy()
nn.LastDrain = nn.LastDrain.Copy()
nn.Events = copyNodeEvents(n.Events)
nn.Drivers = copyNodeDrivers(n.Drivers)
nn.CSIControllerPlugins = copyNodeCSI(nn.CSIControllerPlugins)
nn.CSINodePlugins = copyNodeCSI(nn.CSINodePlugins)
nn.Drivers = copyNodeDrivers(n.Drivers)
nn.HostVolumes = copyNodeHostVolumes(n.HostVolumes)
nn.HostNetworks = copyNodeHostNetworks(n.HostNetworks)
nn.LastDrain = nn.LastDrain.Copy()
return nn
}
@ -2657,6 +2657,7 @@ func (n *NetworkResource) Copy() *NetworkResource {
}
newR := new(NetworkResource)
*newR = *n
newR.DNS = n.DNS.Copy()
if n.ReservedPorts != nil {
newR.ReservedPorts = make([]Port, len(n.ReservedPorts))
copy(newR.ReservedPorts, n.ReservedPorts)
@ -2874,8 +2875,7 @@ func (n *NodeResources) Copy() *NodeResources {
newN := new(NodeResources)
*newN = *n
// Copy the networks
newN.Cpu = n.Cpu.Copy()
newN.Networks = n.Networks.Copy()
// Copy the devices
@ -3062,6 +3062,16 @@ type NodeCpuResources struct {
ReservableCpuCores []uint16
}
func (n NodeCpuResources) Copy() NodeCpuResources {
newN := n
if n.ReservableCpuCores != nil {
newN.ReservableCpuCores = make([]uint16, len(n.ReservableCpuCores))
copy(newN.ReservableCpuCores, n.ReservableCpuCores)
}
return newN
}
func (n *NodeCpuResources) Merge(o *NodeCpuResources) {
if o == nil {
return

View File

@ -1672,6 +1672,15 @@ func TestNetworkResource_Copy(t *testing.T) {
t.Run(tc.name, func(t *testing.T) {
output := tc.inputNetworkResource.Copy()
assert.Equal(t, tc.inputNetworkResource, output, tc.name)
if output == nil {
return
}
// Assert changes to the copy aren't propagated to the
// original
output.DNS.Servers[1] = "foo"
assert.NotEqual(t, tc.inputNetworkResource, output, tc.name)
})
}
}
@ -5971,6 +5980,31 @@ func TestMultiregion_CopyCanonicalize(t *testing.T) {
require.False(old.Diff(nonEmptyOld))
}
func TestNodeResources_Copy(t *testing.T) {
orig := &NodeResources{
Cpu: NodeCpuResources{
CpuShares: int64(32000),
TotalCpuCores: 32,
ReservableCpuCores: []uint16{1, 2, 3, 9},
},
Memory: NodeMemoryResources{
MemoryMB: int64(64000),
},
Networks: Networks{
{
Device: "foo",
},
},
}
kopy := orig.Copy()
assert.Equal(t, orig, kopy)
// Make sure slices aren't shared
kopy.Cpu.ReservableCpuCores[1] = 9000
assert.NotEqual(t, orig, kopy)
}
func TestNodeResources_Merge(t *testing.T) {
res := &NodeResources{
Cpu: NodeCpuResources{