Merge pull request #6239 from hashicorp/b-32bitmem
Fix memory fingerprinting on 32bit
This commit is contained in:
commit
2564a1dabd
|
@ -54,6 +54,13 @@ workflows:
|
|||
name: "test-shared-exec"
|
||||
test_packages: "./drivers/shared/executor"
|
||||
<<: *IGNORE_FOR_UI_BRANCHES
|
||||
- test-machine:
|
||||
name: "test-32bit"
|
||||
# Currently we only explicitly test fingerprinting on 32bit
|
||||
# architectures.
|
||||
test_packages: "./client/fingerprint"
|
||||
goarch: "386"
|
||||
<<: *IGNORE_FOR_UI_BRANCHES
|
||||
- test-rkt:
|
||||
<<: *IGNORE_FOR_UI_BRANCHES
|
||||
- test-e2e:
|
||||
|
@ -118,11 +125,15 @@ jobs:
|
|||
exclude_packages:
|
||||
type: string
|
||||
default: ""
|
||||
goarch:
|
||||
type: string
|
||||
default: "amd64"
|
||||
environment:
|
||||
<<: *COMMON_ENVS
|
||||
GOTEST_PKGS: "<< parameters.test_packages >>"
|
||||
GOTEST_PKGS_EXCLUDE: "<< parameters.exclude_packages >>"
|
||||
GOPATH: /go
|
||||
GOTESTARCH: "<< parameters.goarch >>"
|
||||
steps:
|
||||
- checkout
|
||||
- run: make deps
|
||||
|
@ -191,17 +202,30 @@ jobs:
|
|||
executor:
|
||||
type: string
|
||||
default: "go-machine-recent"
|
||||
goarch:
|
||||
type: string
|
||||
default: "amd64"
|
||||
environment:
|
||||
<<: *COMMON_ENVS
|
||||
GOTEST_PKGS_EXCLUDE: "<< parameters.exclude_packages >>"
|
||||
GOTEST_PKGS: "<< parameters.test_packages >>"
|
||||
GOPATH: /home/circleci/go
|
||||
GOTESTARCH: "<< parameters.goarch >>"
|
||||
steps:
|
||||
- checkout
|
||||
- install-golang
|
||||
- install-protoc
|
||||
- install-consul
|
||||
- install-vault
|
||||
- run:
|
||||
name: Install 32bit gcc libs
|
||||
command: |
|
||||
if [ ! -z $GOTESTARCH ] && [ $GOTESTARCH == "386" ]; then
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y gcc-multilib
|
||||
else
|
||||
echo "Skipping 32bit lib installation while building for not 386"
|
||||
fi
|
||||
- run: PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make bootstrap
|
||||
- run-tests
|
||||
- store_test_results:
|
||||
|
@ -330,6 +354,10 @@ commands:
|
|||
unset GOTEST_PKGS
|
||||
fi
|
||||
|
||||
if [ ! -z $GOTESTARCH ]; then
|
||||
export GOARCH="$GOTESTARCH";
|
||||
fi
|
||||
|
||||
mkdir -p /tmp/test-reports
|
||||
sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make generate-structs
|
||||
sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make test-nomad
|
||||
|
|
|
@ -8,7 +8,7 @@ import (
|
|||
"github.com/shirou/gopsutil/mem"
|
||||
)
|
||||
|
||||
const bytesInMB = 1024 * 1024
|
||||
const bytesInMB int64 = 1024 * 1024
|
||||
|
||||
// MemoryFingerprint is used to fingerprint the available memory on the node
|
||||
type MemoryFingerprint struct {
|
||||
|
@ -25,10 +25,10 @@ func NewMemoryFingerprint(logger log.Logger) Fingerprint {
|
|||
}
|
||||
|
||||
func (f *MemoryFingerprint) Fingerprint(req *FingerprintRequest, resp *FingerprintResponse) error {
|
||||
var totalMemory int
|
||||
var totalMemory int64
|
||||
cfg := req.Config
|
||||
if cfg.MemoryMB != 0 {
|
||||
totalMemory = cfg.MemoryMB * bytesInMB
|
||||
totalMemory = int64(cfg.MemoryMB) * bytesInMB
|
||||
} else {
|
||||
memInfo, err := mem.VirtualMemory()
|
||||
if err != nil {
|
||||
|
@ -36,21 +36,23 @@ func (f *MemoryFingerprint) Fingerprint(req *FingerprintRequest, resp *Fingerpri
|
|||
return err
|
||||
}
|
||||
if memInfo.Total > 0 {
|
||||
totalMemory = int(memInfo.Total)
|
||||
totalMemory = int64(memInfo.Total)
|
||||
}
|
||||
}
|
||||
|
||||
if totalMemory > 0 {
|
||||
resp.AddAttribute("memory.totalbytes", fmt.Sprintf("%d", totalMemory))
|
||||
|
||||
// COMPAT(0.10): Remove in 0.10
|
||||
memoryMB := totalMemory / bytesInMB
|
||||
|
||||
// COMPAT(0.10): Unused since 0.9.
|
||||
resp.Resources = &structs.Resources{
|
||||
MemoryMB: totalMemory / bytesInMB,
|
||||
MemoryMB: int(memoryMB),
|
||||
}
|
||||
|
||||
resp.NodeResources = &structs.NodeResources{
|
||||
Memory: structs.NodeMemoryResources{
|
||||
MemoryMB: int64(totalMemory / bytesInMB),
|
||||
MemoryMB: memoryMB,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,8 @@ import (
|
|||
)
|
||||
|
||||
func TestMemoryFingerprint(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
f := NewMemoryFingerprint(testlog.HCLogger(t))
|
||||
node := &structs.Node{
|
||||
Attributes: make(map[string]string),
|
||||
|
@ -19,24 +21,13 @@ func TestMemoryFingerprint(t *testing.T) {
|
|||
request := &FingerprintRequest{Config: &config.Config{}, Node: node}
|
||||
var response FingerprintResponse
|
||||
err := f.Fingerprint(request, &response)
|
||||
if err != nil {
|
||||
t.Fatalf("err: %v", err)
|
||||
}
|
||||
require.NoError(err)
|
||||
|
||||
assertNodeAttributeContains(t, response.Attributes, "memory.totalbytes")
|
||||
|
||||
if response.Resources == nil {
|
||||
t.Fatalf("response resources should not be nil")
|
||||
}
|
||||
|
||||
// COMPAT(0.10): Remove in 0.10
|
||||
if response.Resources.MemoryMB == 0 {
|
||||
t.Fatalf("Expected node.Resources.MemoryMB to be non-zero")
|
||||
}
|
||||
|
||||
if response.NodeResources.Memory.MemoryMB == 0 {
|
||||
t.Fatalf("Expected node.Resources.MemoryMB to be non-zero")
|
||||
}
|
||||
require.NotNil(response.Resources, "expected response Resources to not be nil")
|
||||
require.NotZero(response.Resources.MemoryMB, "expected memory to be non-zero")
|
||||
require.NotNil(response.NodeResources, "expected response NodeResources to not be nil")
|
||||
require.NotZero(response.NodeResources.Memory.MemoryMB, "expected memory to be non-zero")
|
||||
}
|
||||
|
||||
func TestMemoryFingerprint_Override(t *testing.T) {
|
||||
|
@ -56,6 +47,7 @@ func TestMemoryFingerprint_Override(t *testing.T) {
|
|||
assertNodeAttributeContains(t, response.Attributes, "memory.totalbytes")
|
||||
require := require.New(t)
|
||||
require.NotNil(response.Resources)
|
||||
require.Equal(response.Resources.MemoryMB, memoryMB)
|
||||
require.EqualValues(response.Resources.MemoryMB, memoryMB)
|
||||
require.NotNil(response.NodeResources)
|
||||
require.EqualValues(response.NodeResources.Memory.MemoryMB, memoryMB)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue