From f0c6394c6102320ae6f9e6f4001b04f4750c2fa9 Mon Sep 17 00:00:00 2001 From: Cody Soyland Date: Tue, 27 Nov 2018 11:00:55 -0600 Subject: [PATCH 1/2] Use syscall.Dup3 on ARM64 as Dup2 is unsupported --- server/server.go | 24 ------------------------ server/setup_logger.go | 35 +++++++++++++++++++++++++++++++++++ server/setup_logger_arm64.go | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 24 deletions(-) create mode 100644 server/setup_logger.go create mode 100644 server/setup_logger_arm64.go diff --git a/server/server.go b/server/server.go index c6b69a7f5..c80f8268e 100644 --- a/server/server.go +++ b/server/server.go @@ -174,30 +174,6 @@ func (m *Command) Wait() error { } } -// setupLogger sets up the logger based on the configuration. -func (m *Command) setupLogger() error { - if m.Config.LogPath == "" { - m.logOutput = m.Stderr - } else { - f, err := os.OpenFile(m.Config.LogPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0600) - if err != nil { - return errors.Wrap(err, "opening file") - } - m.logOutput = f - err = syscall.Dup2(int(f.Fd()), int(os.Stderr.Fd())) - if err != nil { - return errors.Wrap(err, "dup2ing stderr onto logfile") - } - } - - if m.Config.Verbose { - m.logger = logger.NewVerboseLogger(m.logOutput) - } else { - m.logger = logger.NewStandardLogger(m.logOutput) - } - return nil -} - // SetupServer uses the cluster configuration to set up this server. func (m *Command) SetupServer() error { err := m.setupLogger() diff --git a/server/setup_logger.go b/server/setup_logger.go new file mode 100644 index 000000000..06d61eced --- /dev/null +++ b/server/setup_logger.go @@ -0,0 +1,35 @@ +// +build !arm64 + +package server + +import ( + "os" + "syscall" + + "github.com/pilosa/pilosa/logger" + "github.com/pkg/errors" +) + +// setupLogger sets up the logger based on the configuration. +func (m *Command) setupLogger() error { + if m.Config.LogPath == "" { + m.logOutput = m.Stderr + } else { + f, err := os.OpenFile(m.Config.LogPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0600) + if err != nil { + return errors.Wrap(err, "opening file") + } + m.logOutput = f + err = syscall.Dup2(int(f.Fd()), int(os.Stderr.Fd())) + if err != nil { + return errors.Wrap(err, "dup2ing stderr onto logfile") + } + } + + if m.Config.Verbose { + m.logger = logger.NewVerboseLogger(m.logOutput) + } else { + m.logger = logger.NewStandardLogger(m.logOutput) + } + return nil +} diff --git a/server/setup_logger_arm64.go b/server/setup_logger_arm64.go new file mode 100644 index 000000000..dd6718741 --- /dev/null +++ b/server/setup_logger_arm64.go @@ -0,0 +1,33 @@ +package server + +import ( + "os" + "syscall" + + "github.com/pilosa/pilosa/logger" + "github.com/pkg/errors" +) + +// setupLogger sets up the logger based on the configuration. +func (m *Command) setupLogger() error { + if m.Config.LogPath == "" { + m.logOutput = m.Stderr + } else { + f, err := os.OpenFile(m.Config.LogPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0600) + if err != nil { + return errors.Wrap(err, "opening file") + } + m.logOutput = f + err = syscall.Dup3(int(f.Fd()), int(os.Stderr.Fd()), 0) + if err != nil { + return errors.Wrap(err, "dup2ing stderr onto logfile") + } + } + + if m.Config.Verbose { + m.logger = logger.NewVerboseLogger(m.logOutput) + } else { + m.logger = logger.NewStandardLogger(m.logOutput) + } + return nil +} From 7330daa2227cc56a69a85483f5ccbe63b4fe806c Mon Sep 17 00:00:00 2001 From: Cody Soyland Date: Tue, 27 Nov 2018 11:09:46 -0600 Subject: [PATCH 2/2] Add ARM build to CI --- .circleci/config.yml | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2ba2868e6..08b615b3b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,7 +7,7 @@ fast-checkout: &fast-checkout attach_workspace: at: . jobs: - build: + setup: <<: *defaults steps: - checkout @@ -30,6 +30,14 @@ jobs: - run: gometalinter --install - run: go get github.com/remyoudompheng/go-misc/deadcode - run: make gometalinter + test-build-arm: + <<: *defaults + steps: + - *fast-checkout + - run: make build GOOS=linux GOARCH=arm GOARM=5 + - run: make build GOOS=linux GOARCH=arm GOARM=6 + - run: make build GOOS=linux GOARCH=arm GOARM=7 + - run: make build GOOS=linux GOARCH=arm64 test-golang-1.11: &base-test <<: *defaults steps: @@ -100,25 +108,28 @@ workflows: version: 2 test: jobs: - - build + - setup - linter: requires: - - build + - setup + - test-build-arm: + requires: + - setup - test-golang-1.11: requires: - - build + - setup - test-golang-1.11-race: requires: - - build + - setup - test-golang-1.11-386: requires: - - build + - setup - test-golang-1.10: requires: - - build + - setup - cluster-tests: requires: - - build + - setup - prerelease: requires: - linter