From d73d756a80b3983febb738a1ac82db998d42ca2a Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Thu, 4 Mar 2021 14:27:38 -0800 Subject: [PATCH] fix: incorrect errors thrown by lint (#11699) fixes #11698 --- .github/workflows/go.yml | 11 +++-- .golangci.yml | 2 + Makefile | 14 +----- cmd/http/dial_others.go | 1 + mint/build/minio-java/install.sh | 8 +++- mint/install-packages.list | 1 - mint/preinstall.sh | 2 +- mint/run/core/minio-go/go.sum | 80 ++++++++++++++++++++++++++++++++ pkg/disk/stat_bsd.go | 14 +++--- pkg/disk/stat_freebsd.go | 46 ++++++++++++++++++ pkg/smart/types.go | 5 +- pkg/sys/stats_darwin.go | 6 +-- 12 files changed, 159 insertions(+), 31 deletions(-) create mode 100644 mint/run/core/minio-go/go.sum create mode 100644 pkg/disk/stat_freebsd.go diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 93b97cb79..249b78a97 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: go-version: [1.16.x] - os: [ubuntu-latest, windows-latest] + os: [ubuntu-latest, windows-latest, macos-latest] steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 @@ -21,6 +21,13 @@ jobs: - uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} + - name: Build on ${{ matrix.os }} + if: matrix.os == 'macos-latest' + env: + CGO_ENABLED: 0 + GO111MODULE: on + run: | + make test - name: Build on ${{ matrix.os }} if: matrix.os == 'windows-latest' env: @@ -42,8 +49,6 @@ jobs: curl -L -o nancy https://github.com/sonatype-nexus-community/nancy/releases/download/${nancy_version}/nancy-${nancy_version}-linux-amd64 && chmod +x nancy go list -m all | ./nancy sleuth make - diff -au <(gofmt -s -d cmd) <(printf "") - diff -au <(gofmt -s -d pkg) <(printf "") make test-race make crosscompile make verify diff --git a/.golangci.yml b/.golangci.yml index eb5cd76ec..5648022e9 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -17,6 +17,8 @@ linters: - gosimple - deadcode - structcheck + - gomodguard + - gofmt issues: exclude-use-default: false diff --git a/Makefile b/Makefile index 52ebf4766..71b4437d7 100644 --- a/Makefile +++ b/Makefile @@ -17,32 +17,22 @@ checks: getdeps: @mkdir -p ${GOPATH}/bin @which golangci-lint 1>/dev/null || (echo "Installing golangci-lint" && curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GOPATH)/bin v1.27.0) - @which ruleguard 1>/dev/null || (echo "Installing ruleguard" && go get github.com/quasilyte/go-ruleguard/cmd/ruleguard@v0.2.1) @which msgp 1>/dev/null || (echo "Installing msgp" && go get github.com/tinylib/msgp@v1.1.3) @which stringer 1>/dev/null || (echo "Installing stringer" && go get golang.org/x/tools/cmd/stringer) crosscompile: @(env bash $(PWD)/buildscripts/cross-compile.sh) -verifiers: getdeps fmt lint ruleguard check-gen +verifiers: getdeps lint check-gen check-gen: @go generate ./... >/dev/null @(! git diff --name-only | grep '_gen.go$$') || (echo "Non-committed changes in auto-generated code is detected, please commit them to proceed." && false) -fmt: - @echo "Running $@ check" - @GO111MODULE=on gofmt -d cmd/ - @GO111MODULE=on gofmt -d pkg/ - lint: @echo "Running $@ check" @GO111MODULE=on ${GOPATH}/bin/golangci-lint cache clean - @GO111MODULE=on ${GOPATH}/bin/golangci-lint run --timeout=10m --config ./.golangci.yml - -ruleguard: - @echo "Running $@ check" - @${GOPATH}/bin/ruleguard -rules ruleguard.rules.go github.com/minio/minio/... + @GO111MODULE=on ${GOPATH}/bin/golangci-lint run --build-tags kqueue --timeout=10m --config ./.golangci.yml # Builds minio, runs the verifiers then runs the tests. check: test diff --git a/cmd/http/dial_others.go b/cmd/http/dial_others.go index ebdf8e912..0943fdd47 100644 --- a/cmd/http/dial_others.go +++ b/cmd/http/dial_others.go @@ -26,6 +26,7 @@ import ( ) // TODO: if possible implement for non-linux platforms, not a priority at the moment +//nolint:deadcode func setInternalTCPParameters(c syscall.RawConn) error { return nil } diff --git a/mint/build/minio-java/install.sh b/mint/build/minio-java/install.sh index 361c36792..35b8de4f1 100755 --- a/mint/build/minio-java/install.sh +++ b/mint/build/minio-java/install.sh @@ -15,7 +15,9 @@ # limitations under the License. # -SPOTBUGS_VERSION="4.1.2" ## needed since 8.0.2 release +set -x +SPOTBUGS_VERSION="4.2.2" ## needed since 8.0.2 release +JUNIT_VERSION="4.12" ## JUNIT version MINIO_JAVA_VERSION=$(curl --retry 10 -s "https://repo1.maven.org/maven2/io/minio/minio/maven-metadata.xml" | sed -n "//{s/<.[^>]*>//g;p;q}" | sed "s/ *//g") if [ -z "$MINIO_JAVA_VERSION" ]; then echo "unable to get latest minio-java version from maven" @@ -23,10 +25,12 @@ if [ -z "$MINIO_JAVA_VERSION" ]; then fi test_run_dir="$MINT_RUN_CORE_DIR/minio-java" +mkdir -p ${test_run_dir} git clone --quiet https://github.com/minio/minio-java.git "$test_run_dir/minio-java.git" (cd "$test_run_dir/minio-java.git"; git checkout --quiet "tags/${MINIO_JAVA_VERSION}") $WGET --output-document="$test_run_dir/minio-${MINIO_JAVA_VERSION}-all.jar" "https://repo1.maven.org/maven2/io/minio/minio/${MINIO_JAVA_VERSION}/minio-${MINIO_JAVA_VERSION}-all.jar" $WGET --output-document="$test_run_dir/spotbugs-annotations-${SPOTBUGS_VERSION}.jar" "https://repo1.maven.org/maven2/com/github/spotbugs/spotbugs-annotations/${SPOTBUGS_VERSION}/spotbugs-annotations-${SPOTBUGS_VERSION}.jar" -javac -cp "$test_run_dir/minio-${MINIO_JAVA_VERSION}-all.jar:$test_run_dir/spotbugs-annotations-${SPOTBUGS_VERSION}.jar" "${test_run_dir}/minio-java.git/functional"/*.java +$WGET --output-document="$test_run_dir/junit-${JUNIT_VERSION}.jar" "https://repo1.maven.org/maven2/junit/junit/${JUNIT_VERSION}/junit-${JUNIT_VERSION}.jar" +javac -cp "$test_run_dir/minio-${MINIO_JAVA_VERSION}-all.jar:$test_run_dir/spotbugs-annotations-${SPOTBUGS_VERSION}.jar:$test_run_dir/junit-${JUNIT_VERSION}.jar" "${test_run_dir}/minio-java.git/functional"/*.java cp -a "${test_run_dir}/minio-java.git/functional"/*.class "$test_run_dir/" rm -fr "$test_run_dir/minio-java.git" diff --git a/mint/install-packages.list b/mint/install-packages.list index 6af4ef66d..c65815268 100644 --- a/mint/install-packages.list +++ b/mint/install-packages.list @@ -2,7 +2,6 @@ git python3-pip nodejs openjdk-8-jdk -openjdk-8-jre dirmngr apt-transport-https dotnet-sdk-2.1 diff --git a/mint/preinstall.sh b/mint/preinstall.sh index c2403c742..ef8d446cb 100755 --- a/mint/preinstall.sh +++ b/mint/preinstall.sh @@ -38,7 +38,7 @@ $APT update $APT install gnupg ca-certificates # download and install golang -GO_VERSION="1.15.2" +GO_VERSION="1.16" GO_INSTALL_PATH="/usr/local" download_url="https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" if ! $WGET --output-document=- "$download_url" | tar -C "${GO_INSTALL_PATH}" -zxf -; then diff --git a/mint/run/core/minio-go/go.sum b/mint/run/core/minio-go/go.sum new file mode 100644 index 000000000..1e3b87a77 --- /dev/null +++ b/mint/run/core/minio-go/go.sum @@ -0,0 +1,80 @@ +github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= +github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4= +github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= +github.com/minio/minio-go/v7 v7.0.7 h1:Qld/xb8C1Pwbu0jU46xAceyn9xXKCMW+3XfNbpmTB70= +github.com/minio/minio-go/v7 v7.0.7/go.mod h1:pEZBUa+L2m9oECoIA6IcSK8bv/qggtQVLovjeKK5jYc= +github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= +github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/minio/sio v0.2.1 h1:NjzKiIMSMcHediVQR0AFVx2tp7Wxh9tKPfDI3kH7aHQ= +github.com/minio/sio v0.2.1/go.mod h1:8b0yPp2avGThviy/+OCJBI6OMpvxoUuiLvE6F1lebhw= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= +github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a h1:pa8hGb/2YqsZKovtsgrwcDH1RZhVbTKCjLp47XpqCDs= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 h1:DZhuSZLsGlFL4CmhA8BcRA0mnthyA/nZ00AqCUo7vHg= +golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/ini.v1 v1.57.0 h1:9unxIsFcTt4I55uWluz+UmL95q4kdJ0buvQ1ZIqVQww= +gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/pkg/disk/stat_bsd.go b/pkg/disk/stat_bsd.go index 9d0305ec0..601695c0c 100644 --- a/pkg/disk/stat_bsd.go +++ b/pkg/disk/stat_bsd.go @@ -1,7 +1,7 @@ -// +build darwin freebsd dragonfly +// +build darwin dragonfly /* - * MinIO Cloud Storage, (C) 2015, 2016, 2017 MinIO, Inc. + * MinIO Cloud Storage, (C) 2015-2021 MinIO, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,12 +30,12 @@ func GetInfo(path string) (info Info, err error) { if err != nil { return Info{}, err } - reservedBlocks := uint64(s.Bfree) - uint64(s.Bavail) + reservedBlocks := s.Bfree - s.Bavail info = Info{ - Total: uint64(s.Bsize) * (uint64(s.Blocks) - reservedBlocks), - Free: uint64(s.Bsize) * uint64(s.Bavail), - Files: uint64(s.Files), - Ffree: uint64(s.Ffree), + Total: uint64(s.Bsize) * (s.Blocks - reservedBlocks), + Free: uint64(s.Bsize) * s.Bavail, + Files: s.Files, + Ffree: s.Ffree, FSType: getFSType(s.Fstypename[:]), } if info.Free > info.Total { diff --git a/pkg/disk/stat_freebsd.go b/pkg/disk/stat_freebsd.go new file mode 100644 index 000000000..2488e9f9b --- /dev/null +++ b/pkg/disk/stat_freebsd.go @@ -0,0 +1,46 @@ +// +build freebsd + +/* + * MinIO Cloud Storage, (C) 2021 MinIO, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package disk + +import ( + "fmt" + "syscall" +) + +// GetInfo returns total and free bytes available in a directory, e.g. `/`. +func GetInfo(path string) (info Info, err error) { + s := syscall.Statfs_t{} + err = syscall.Statfs(path, &s) + if err != nil { + return Info{}, err + } + reservedBlocks := s.Bfree - uint64(s.Bavail) + info = Info{ + Total: uint64(s.Bsize) * (s.Blocks - reservedBlocks), + Free: uint64(s.Bsize) * uint64(s.Bavail), + Files: s.Files, + Ffree: uint64(s.Ffree), + FSType: getFSType(s.Fstypename[:]), + } + if info.Free > info.Total { + return info, fmt.Errorf("detected free space (%d) > total disk space (%d), fs corruption at (%s). please run 'fsck'", info.Free, info.Total, path) + } + info.Used = info.Total - info.Free + return info, nil +} diff --git a/pkg/smart/types.go b/pkg/smart/types.go index 2d8f6a5b0..6a379f91e 100644 --- a/pkg/smart/types.go +++ b/pkg/smart/types.go @@ -19,7 +19,7 @@ package smart import "math/big" // Defined in -//nolint:structcheck +//nolint:structcheck,deadcode type nvmePassthruCommand struct { opcode uint8 flags uint8 @@ -59,6 +59,7 @@ type nvmeIdentPowerState struct { Rsvd23 [9]byte } +//nolint:deadcode type nvmeIdentController struct { VendorID uint16 // PCI Vendor ID Ssvid uint16 // PCI Subsystem Vendor ID @@ -150,6 +151,7 @@ type nvmeIdentNamespace struct { Vs [3712]byte } // 4096 bytes +//nolint:deadcode type nvmeSMARTLog struct { CritWarning uint8 Temperature [2]uint8 @@ -174,6 +176,7 @@ type nvmeSMARTLog struct { } // 512 bytes // NVMeDevice represents drive data about NVMe drives +//nolint:structcheck type NVMeDevice struct { Name string fd int diff --git a/pkg/sys/stats_darwin.go b/pkg/sys/stats_darwin.go index 33c283385..681b14b5b 100644 --- a/pkg/sys/stats_darwin.go +++ b/pkg/sys/stats_darwin.go @@ -1,7 +1,7 @@ // +build darwin /* - * MinIO Cloud Storage, (C) 2016,2017 MinIO, Inc. + * MinIO Cloud Storage, (C) 2016-2021 MinIO, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,9 +33,7 @@ func getHwMemsize() (uint64, error) { // removes the last byte of the result if it's 0 :/ totalString += "\x00" - total := uint64(binary.LittleEndian.Uint64([]byte(totalString))) - - return total, nil + return binary.LittleEndian.Uint64([]byte(totalString)), nil } // GetStats - return system statistics for macOS.