From 3a63a83ab2b90e55cd9d0983444f6f8e9cd8ccb4 Mon Sep 17 00:00:00 2001 From: Gyu-Ho Lee Date: Mon, 20 Mar 2017 15:01:01 -0700 Subject: [PATCH] *: use 'time.Until', 'io.Seek*' for go1.7 and 1.8 For https://github.com/coreos/etcd/issues/6174. Signed-off-by: Gyu-Ho Lee --- README.md | 4 ++-- etcdctl/ctlv3/command/snapshot_command.go | 8 ++++---- integration/v3_lease_test.go | 2 +- pkg/fileutil/fileutil.go | 7 ++++--- pkg/fileutil/fileutil_test.go | 5 +++-- pkg/fileutil/lock_linux.go | 3 ++- pkg/fileutil/preallocate.go | 11 +++++++---- wal/encoder.go | 2 +- wal/repair.go | 2 +- wal/repair_test.go | 2 +- wal/wal.go | 12 ++++++------ wal/wal_test.go | 8 ++++---- 12 files changed, 36 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index e042337ae760..8a49824036c7 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ See [etcdctl][etcdctl] for a simple command line client. The easiest way to get etcd is to use one of the pre-built release binaries which are available for OSX, Linux, Windows, [rkt][rkt], and Docker. Instructions for using these binaries are on the [GitHub releases page][github-release]. -For those wanting to try the very latest version, [build the latest version of etcd][dl-build] from the `master` branch. This first needs [*Go*](https://golang.org/) installed (version 1.7+ is required). All development occurs on `master`, including new features and bug fixes. Bug fixes are first targeted at `master` and subsequently ported to release branches, as described in the [branch management][branch-management] guide. +For those wanting to try the very latest version, [build the latest version of etcd][dl-build] from the `master` branch. This first needs [*Go*](https://golang.org/) installed (version 1.8+ is required). All development occurs on `master`, including new features and bug fixes. Bug fixes are first targeted at `master` and subsequently ported to release branches, as described in the [branch management][branch-management] guide. [rkt]: https://github.com/coreos/rkt/releases/ [github-release]: https://github.com/coreos/etcd/releases/ @@ -73,7 +73,7 @@ That's it! etcd is now running and serving client requests. For more ### etcd TCP ports -The [official etcd ports][iana-ports] are 2379 for client requests, and 2380 for peer communication. +The [official etcd ports][iana-ports] are 2379 for client requests, and 2380 for peer communication. [iana-ports]: https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=etcd diff --git a/etcdctl/ctlv3/command/snapshot_command.go b/etcdctl/ctlv3/command/snapshot_command.go index 3a168b97680f..eb8630fd132c 100644 --- a/etcdctl/ctlv3/command/snapshot_command.go +++ b/etcdctl/ctlv3/command/snapshot_command.go @@ -310,14 +310,14 @@ func makeDB(snapdir, dbfile string, commit int) { defer f.Close() // get snapshot integrity hash - if _, err := f.Seek(-sha256.Size, os.SEEK_END); err != nil { + if _, err := f.Seek(-sha256.Size, io.SeekEnd); err != nil { ExitWithError(ExitIO, err) } sha := make([]byte, sha256.Size) if _, err := f.Read(sha); err != nil { ExitWithError(ExitIO, err) } - if _, err := f.Seek(0, os.SEEK_SET); err != nil { + if _, err := f.Seek(0, io.SeekStart); err != nil { ExitWithError(ExitIO, err) } @@ -335,7 +335,7 @@ func makeDB(snapdir, dbfile string, commit int) { } // truncate away integrity hash, if any. - off, serr := db.Seek(0, os.SEEK_END) + off, serr := db.Seek(0, io.SeekEnd) if serr != nil { ExitWithError(ExitIO, serr) } @@ -353,7 +353,7 @@ func makeDB(snapdir, dbfile string, commit int) { if hasHash && !skipHashCheck { // check for match - if _, err := db.Seek(0, os.SEEK_SET); err != nil { + if _, err := db.Seek(0, io.SeekStart); err != nil { ExitWithError(ExitIO, err) } h := sha256.New() diff --git a/integration/v3_lease_test.go b/integration/v3_lease_test.go index 9281df78a34a..1a0d9f61f149 100644 --- a/integration/v3_lease_test.go +++ b/integration/v3_lease_test.go @@ -483,7 +483,7 @@ func TestV3LeaseFailover(t *testing.T) { clus.waitLeader(t, clus.Members) // lease should not expire at the last received expire deadline. - time.Sleep(expectedExp.Sub(time.Now()) - 500*time.Millisecond) + time.Sleep(time.Until(expectedExp) - 500*time.Millisecond) if !leaseExist(t, clus, lresp.ID) { t.Error("unexpected lease not exists") diff --git a/pkg/fileutil/fileutil.go b/pkg/fileutil/fileutil.go index aad40b75904c..fce5126c6956 100644 --- a/pkg/fileutil/fileutil.go +++ b/pkg/fileutil/fileutil.go @@ -17,6 +17,7 @@ package fileutil import ( "fmt" + "io" "io/ioutil" "os" "path/filepath" @@ -101,11 +102,11 @@ func Exist(name string) bool { // shorten the length of the file. func ZeroToEnd(f *os.File) error { // TODO: support FALLOC_FL_ZERO_RANGE - off, err := f.Seek(0, os.SEEK_CUR) + off, err := f.Seek(0, io.SeekCurrent) if err != nil { return err } - lenf, lerr := f.Seek(0, os.SEEK_END) + lenf, lerr := f.Seek(0, io.SeekEnd) if lerr != nil { return lerr } @@ -116,6 +117,6 @@ func ZeroToEnd(f *os.File) error { if err = Preallocate(f, lenf, true); err != nil { return err } - _, err = f.Seek(off, os.SEEK_SET) + _, err = f.Seek(off, io.SeekStart) return err } diff --git a/pkg/fileutil/fileutil_test.go b/pkg/fileutil/fileutil_test.go index 28fe4007cce0..35f9ac5aceef 100644 --- a/pkg/fileutil/fileutil_test.go +++ b/pkg/fileutil/fileutil_test.go @@ -15,6 +15,7 @@ package fileutil import ( + "io" "io/ioutil" "os" "os/user" @@ -133,13 +134,13 @@ func TestZeroToEnd(t *testing.T) { if _, err = f.Write(b); err != nil { t.Fatal(err) } - if _, err = f.Seek(512, os.SEEK_SET); err != nil { + if _, err = f.Seek(512, io.SeekStart); err != nil { t.Fatal(err) } if err = ZeroToEnd(f); err != nil { t.Fatal(err) } - off, serr := f.Seek(0, os.SEEK_CUR) + off, serr := f.Seek(0, io.SeekCurrent) if serr != nil { t.Fatal(serr) } diff --git a/pkg/fileutil/lock_linux.go b/pkg/fileutil/lock_linux.go index dec25a1af44d..939fea623818 100644 --- a/pkg/fileutil/lock_linux.go +++ b/pkg/fileutil/lock_linux.go @@ -17,6 +17,7 @@ package fileutil import ( + "io" "os" "syscall" ) @@ -36,7 +37,7 @@ const ( var ( wrlck = syscall.Flock_t{ Type: syscall.F_WRLCK, - Whence: int16(os.SEEK_SET), + Whence: int16(io.SeekStart), Start: 0, Len: 0, } diff --git a/pkg/fileutil/preallocate.go b/pkg/fileutil/preallocate.go index bb7f02812393..3270a32986c8 100644 --- a/pkg/fileutil/preallocate.go +++ b/pkg/fileutil/preallocate.go @@ -14,7 +14,10 @@ package fileutil -import "os" +import ( + "io" + "os" +) // Preallocate tries to allocate the space for given // file. This operation is only supported on linux by a @@ -29,15 +32,15 @@ func Preallocate(f *os.File, sizeInBytes int64, extendFile bool) error { } func preallocExtendTrunc(f *os.File, sizeInBytes int64) error { - curOff, err := f.Seek(0, os.SEEK_CUR) + curOff, err := f.Seek(0, io.SeekCurrent) if err != nil { return err } - size, err := f.Seek(sizeInBytes, os.SEEK_END) + size, err := f.Seek(sizeInBytes, io.SeekEnd) if err != nil { return err } - if _, err = f.Seek(curOff, os.SEEK_SET); err != nil { + if _, err = f.Seek(curOff, io.SeekStart); err != nil { return err } if sizeInBytes > size { diff --git a/wal/encoder.go b/wal/encoder.go index efe58928cc8c..aac1e197e590 100644 --- a/wal/encoder.go +++ b/wal/encoder.go @@ -52,7 +52,7 @@ func newEncoder(w io.Writer, prevCrc uint32, pageOffset int) *encoder { // newFileEncoder creates a new encoder with current file offset for the page writer. func newFileEncoder(f *os.File, prevCrc uint32) (*encoder, error) { - offset, err := f.Seek(0, os.SEEK_CUR) + offset, err := f.Seek(0, io.SeekCurrent) if err != nil { return nil, err } diff --git a/wal/repair.go b/wal/repair.go index ffb141616826..091036b57b9a 100644 --- a/wal/repair.go +++ b/wal/repair.go @@ -62,7 +62,7 @@ func Repair(dirpath string) bool { } defer bf.Close() - if _, err = f.Seek(0, os.SEEK_SET); err != nil { + if _, err = f.Seek(0, io.SeekStart); err != nil { plog.Errorf("could not repair %v, failed to read file", f.Name()) return false } diff --git a/wal/repair_test.go b/wal/repair_test.go index f72faae496d3..be9c016cb4f2 100644 --- a/wal/repair_test.go +++ b/wal/repair_test.go @@ -64,7 +64,7 @@ func testRepair(t *testing.T, ents [][]raftpb.Entry, corrupt corruptFunc, expect } } - offset, err := w.tail().Seek(0, os.SEEK_CUR) + offset, err := w.tail().Seek(0, io.SeekCurrent) if err != nil { t.Fatal(err) } diff --git a/wal/wal.go b/wal/wal.go index 943427eabff6..2cac25c1c904 100644 --- a/wal/wal.go +++ b/wal/wal.go @@ -112,7 +112,7 @@ func Create(dirpath string, metadata []byte) (*WAL, error) { if err != nil { return nil, err } - if _, err = f.Seek(0, os.SEEK_END); err != nil { + if _, err = f.Seek(0, io.SeekEnd); err != nil { return nil, err } if err = fileutil.Preallocate(f.File, SegmentSizeBytes, true); err != nil { @@ -322,7 +322,7 @@ func (w *WAL) ReadAll() (metadata []byte, state raftpb.HardState, ents []raftpb. // not all, will cause CRC errors on WAL open. Since the records // were never fully synced to disk in the first place, it's safe // to zero them out to avoid any CRC errors from new writes. - if _, err = w.tail().Seek(w.decoder.lastOffset(), os.SEEK_SET); err != nil { + if _, err = w.tail().Seek(w.decoder.lastOffset(), io.SeekStart); err != nil { return nil, state, nil, err } if err = fileutil.ZeroToEnd(w.tail().File); err != nil { @@ -361,7 +361,7 @@ func (w *WAL) ReadAll() (metadata []byte, state raftpb.HardState, ents []raftpb. // Then cut atomically rename temp wal file to a wal file. func (w *WAL) cut() error { // close old wal file; truncate to avoid wasting space if an early cut - off, serr := w.tail().Seek(0, os.SEEK_CUR) + off, serr := w.tail().Seek(0, io.SeekCurrent) if serr != nil { return serr } @@ -401,7 +401,7 @@ func (w *WAL) cut() error { return err } - off, err = w.tail().Seek(0, os.SEEK_CUR) + off, err = w.tail().Seek(0, io.SeekCurrent) if err != nil { return err } @@ -418,7 +418,7 @@ func (w *WAL) cut() error { if newTail, err = fileutil.LockFile(fpath, os.O_WRONLY, fileutil.PrivateFileMode); err != nil { return err } - if _, err = newTail.Seek(off, os.SEEK_SET); err != nil { + if _, err = newTail.Seek(off, io.SeekStart); err != nil { return err } @@ -564,7 +564,7 @@ func (w *WAL) Save(st raftpb.HardState, ents []raftpb.Entry) error { return err } - curOff, err := w.tail().Seek(0, os.SEEK_CUR) + curOff, err := w.tail().Seek(0, io.SeekCurrent) if err != nil { return err } diff --git a/wal/wal_test.go b/wal/wal_test.go index c3574abee79e..4528e22977c9 100644 --- a/wal/wal_test.go +++ b/wal/wal_test.go @@ -46,7 +46,7 @@ func TestNew(t *testing.T) { defer w.Close() // file is preallocated to segment size; only read data written by wal - off, err := w.tail().Seek(0, os.SEEK_CUR) + off, err := w.tail().Seek(0, io.SeekCurrent) if err != nil { t.Fatal(err) } @@ -623,7 +623,7 @@ func TestTailWriteNoSlackSpace(t *testing.T) { } } // get rid of slack space by truncating file - off, serr := w.tail().Seek(0, os.SEEK_CUR) + off, serr := w.tail().Seek(0, io.SeekCurrent) if serr != nil { t.Fatal(serr) } @@ -732,7 +732,7 @@ func TestOpenOnTornWrite(t *testing.T) { if err = w.Save(raftpb.HardState{}, es); err != nil { t.Fatal(err) } - if offsets[i], err = w.tail().Seek(0, os.SEEK_CUR); err != nil { + if offsets[i], err = w.tail().Seek(0, io.SeekCurrent); err != nil { t.Fatal(err) } } @@ -746,7 +746,7 @@ func TestOpenOnTornWrite(t *testing.T) { t.Fatal(ferr) } defer f.Close() - _, err = f.Seek(offsets[clobberIdx], os.SEEK_SET) + _, err = f.Seek(offsets[clobberIdx], io.SeekStart) if err != nil { t.Fatal(err) }