From e43bc36226692fc128b5be38802efdd049e9db4a Mon Sep 17 00:00:00 2001 From: Samuel Marks Date: Tue, 26 Feb 2019 15:12:13 +1100 Subject: [PATCH 1/2] travis, appveyor, Dockerfile: upgrade to Go 1.12 --- .travis.yml | 31 +++++++++++++++++++--------- Dockerfile | 2 +- Dockerfile.alltools | 2 +- appveyor.yml | 4 ++-- core/tx_pool_test.go | 2 +- crypto/bn256/cloudflare/main_test.go | 2 +- crypto/bn256/google/main_test.go | 2 +- internal/build/util.go | 4 ++-- 8 files changed, 30 insertions(+), 19 deletions(-) diff --git a/.travis.yml b/.travis.yml index b09bd7ce04..7d0777fee9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,7 +14,6 @@ matrix: - go run build/ci.go install - go run build/ci.go test -coverage $TEST_PACKAGES - # These are the latest Go versions. - os: linux dist: trusty sudo: required @@ -26,8 +25,20 @@ matrix: - go run build/ci.go install - go run build/ci.go test -coverage $TEST_PACKAGES + # These are the latest Go versions. + - os: linux + dist: trusty + sudo: required + go: 1.12.x + script: + - sudo modprobe fuse + - sudo chmod 666 /dev/fuse + - sudo chown root:$USER /etc/fuse.conf + - go run build/ci.go install + - go run build/ci.go test -coverage $TEST_PACKAGES + - os: osx - go: 1.11.x + go: 1.12.x script: - echo "Increase the maximum number of open file descriptors on macOS" - NOFILE=20480 @@ -44,7 +55,7 @@ matrix: # This builder only tests code linters on latest version of Go - os: linux dist: trusty - go: 1.11.x + go: 1.12.x env: - lint git: @@ -56,7 +67,7 @@ matrix: - if: repo = ethereum/go-ethereum AND type = push os: linux dist: trusty - go: 1.11.x + go: 1.12.x env: - ubuntu-ppa git: @@ -79,7 +90,7 @@ matrix: os: linux dist: trusty sudo: required - go: 1.11.x + go: 1.12.x env: - azure-linux git: @@ -114,7 +125,7 @@ matrix: dist: trusty services: - docker - go: 1.11.x + go: 1.12.x env: - azure-linux-mips git: @@ -159,7 +170,7 @@ matrix: git: submodules: false # avoid cloning ethereum/tests before_install: - - curl https://storage.googleapis.com/golang/go1.11.5.linux-amd64.tar.gz | tar -xz + - curl https://dl.google.com/go/go1.12.linux-amd64.tar.gz | tar -xz - export PATH=`pwd`/go/bin:$PATH - export GOROOT=`pwd`/go - export GOPATH=$HOME/go @@ -176,7 +187,7 @@ matrix: # This builder does the OSX Azure, iOS CocoaPods and iOS Azure uploads - if: repo = ethereum/go-ethereum AND type = push os: osx - go: 1.11.x + go: 1.12.x env: - azure-osx - azure-ios @@ -206,7 +217,7 @@ matrix: - if: repo = ethereum/go-ethereum AND type = cron os: linux dist: trusty - go: 1.11.x + go: 1.12.x env: - azure-purge git: @@ -218,7 +229,7 @@ matrix: if: repo = ethersphere/go-ethereum os: linux dist: trusty - go: 1.11.x + go: 1.12.x git: submodules: false # avoid cloning ethereum/tests script: ./build/travis_keepalive.sh go test -v -timeout 20m -race ./swarm... diff --git a/Dockerfile b/Dockerfile index e87dd35d32..4b205d6492 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Build Geth in a stock Go builder container -FROM golang:1.11-alpine as builder +FROM golang:1.12-alpine as builder RUN apk add --no-cache make gcc musl-dev linux-headers diff --git a/Dockerfile.alltools b/Dockerfile.alltools index e984a1b092..4a4a26f8bc 100644 --- a/Dockerfile.alltools +++ b/Dockerfile.alltools @@ -1,5 +1,5 @@ # Build Geth in a stock Go builder container -FROM golang:1.11-alpine as builder +FROM golang:1.12-alpine as builder RUN apk add --no-cache make gcc musl-dev linux-headers diff --git a/appveyor.yml b/appveyor.yml index 9ed4f114e3..515f3d9fbe 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -23,8 +23,8 @@ environment: install: - git submodule update --init - rmdir C:\go /s /q - - appveyor DownloadFile https://storage.googleapis.com/golang/go1.11.5.windows-%GETH_ARCH%.zip - - 7z x go1.11.5.windows-%GETH_ARCH%.zip -y -oC:\ > NUL + - appveyor DownloadFile https://dl.google.com/go/go1.12.windows-%GETH_ARCH%.zip + - 7z x go1.12.windows-%GETH_ARCH%.zip -y -oC:\ > NUL - go version - gcc --version diff --git a/core/tx_pool_test.go b/core/tx_pool_test.go index 7177ae9ce7..e1c2e06696 100644 --- a/core/tx_pool_test.go +++ b/core/tx_pool_test.go @@ -126,7 +126,7 @@ func validateEvents(events chan NewTxsEvent, count int) error { case ev := <-events: received = append(received, ev.Txs...) case <-time.After(time.Second): - return fmt.Errorf("event #%d not fired", received) + return fmt.Errorf("event #%d not fired", len(received)) } } if len(received) > count { diff --git a/crypto/bn256/cloudflare/main_test.go b/crypto/bn256/cloudflare/main_test.go index 0230f1b199..c0c85457be 100644 --- a/crypto/bn256/cloudflare/main_test.go +++ b/crypto/bn256/cloudflare/main_test.go @@ -13,7 +13,7 @@ func TestRandomG2Marshal(t *testing.T) { t.Error(err) continue } - t.Logf("%d: %x\n", n, g2.Marshal()) + t.Logf("%v: %x\n", n, g2.Marshal()) } } diff --git a/crypto/bn256/google/main_test.go b/crypto/bn256/google/main_test.go index 0230f1b199..c0c85457be 100644 --- a/crypto/bn256/google/main_test.go +++ b/crypto/bn256/google/main_test.go @@ -13,7 +13,7 @@ func TestRandomG2Marshal(t *testing.T) { t.Error(err) continue } - t.Logf("%d: %x\n", n, g2.Marshal()) + t.Logf("%v: %x\n", n, g2.Marshal()) } } diff --git a/internal/build/util.go b/internal/build/util.go index a41ecfbed3..b34371c2dd 100644 --- a/internal/build/util.go +++ b/internal/build/util.go @@ -143,9 +143,9 @@ func CopyFile(dst, src string, mode os.FileMode) { // so that go commands executed by build use the same version of Go as the 'host' that runs // build code. e.g. // -// /usr/lib/go-1.11/bin/go run build/ci.go ... +// /usr/lib/go-1.12/bin/go run build/ci.go ... // -// runs using go 1.11 and invokes go 1.11 tools from the same GOROOT. This is also important +// runs using go 1.12 and invokes go 1.12 tools from the same GOROOT. This is also important // because runtime.Version checks on the host should match the tools that are run. func GoTool(tool string, args ...string) *exec.Cmd { args = append([]string{tool}, args...) From 2b6158a51e4b4660ed4093880ed1e0a368aecce4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Wed, 27 Feb 2019 14:20:29 +0200 Subject: [PATCH 2/2] common/fdlimit: fix macos file descriptors for Go 1.12 --- common/fdlimit/fdlimit_darwin.go | 71 +++++++++++++++++++++++++++++++ common/fdlimit/fdlimit_unix.go | 2 +- common/fdlimit/fdlimit_windows.go | 1 + 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 common/fdlimit/fdlimit_darwin.go diff --git a/common/fdlimit/fdlimit_darwin.go b/common/fdlimit/fdlimit_darwin.go new file mode 100644 index 0000000000..88dd0f56cb --- /dev/null +++ b/common/fdlimit/fdlimit_darwin.go @@ -0,0 +1,71 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package fdlimit + +import "syscall" + +// hardlimit is the number of file descriptors allowed at max by the kernel. +const hardlimit = 10240 + +// Raise tries to maximize the file descriptor allowance of this process +// to the maximum hard-limit allowed by the OS. +// Returns the size it was set to (may differ from the desired 'max') +func Raise(max uint64) (uint64, error) { + // Get the current limit + var limit syscall.Rlimit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return 0, err + } + // Try to update the limit to the max allowance + limit.Cur = limit.Max + if limit.Cur > max { + limit.Cur = max + } + if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return 0, err + } + // MacOS can silently apply further caps, so retrieve the actually set limit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return 0, err + } + return limit.Cur, nil +} + +// Current retrieves the number of file descriptors allowed to be opened by this +// process. +func Current() (int, error) { + var limit syscall.Rlimit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return 0, err + } + return int(limit.Cur), nil +} + +// Maximum retrieves the maximum number of file descriptors this process is +// allowed to request for itself. +func Maximum() (int, error) { + // Retrieve the maximum allowed by dynamic OS limits + var limit syscall.Rlimit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return 0, err + } + // Cap it to OPEN_MAX (10240) because macos is a special snowflake + if limit.Max > hardlimit { + limit.Max = hardlimit + } + return int(limit.Max), nil +} diff --git a/common/fdlimit/fdlimit_unix.go b/common/fdlimit/fdlimit_unix.go index 6701127515..e5a575f7a7 100644 --- a/common/fdlimit/fdlimit_unix.go +++ b/common/fdlimit/fdlimit_unix.go @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build linux darwin netbsd openbsd solaris +// +build linux netbsd openbsd solaris package fdlimit diff --git a/common/fdlimit/fdlimit_windows.go b/common/fdlimit/fdlimit_windows.go index 63a44e0de0..f472153662 100644 --- a/common/fdlimit/fdlimit_windows.go +++ b/common/fdlimit/fdlimit_windows.go @@ -18,6 +18,7 @@ package fdlimit import "fmt" +// hardlimit is the number of file descriptors allowed at max by the kernel. const hardlimit = 16384 // Raise tries to maximize the file descriptor allowance of this process