refactor: clean coreos/etcd dependency.
This commit is contained in:
parent
37ec7d0505
commit
a457392ec3
10 changed files with 0 additions and 645 deletions
6
glide.lock
generated
6
glide.lock
generated
|
@ -93,15 +93,9 @@ imports:
|
||||||
- name: github.com/coreos/etcd
|
- name: github.com/coreos/etcd
|
||||||
version: c400d05d0aa73e21e431c16145e558d624098018
|
version: c400d05d0aa73e21e431c16145e558d624098018
|
||||||
subpackages:
|
subpackages:
|
||||||
- Godeps/_workspace/src/github.com/coreos/go-systemd/journal
|
|
||||||
- Godeps/_workspace/src/github.com/coreos/pkg/capnslog
|
|
||||||
- Godeps/_workspace/src/github.com/ugorji/go/codec
|
|
||||||
- Godeps/_workspace/src/golang.org/x/net/context
|
|
||||||
- client
|
- client
|
||||||
- pkg/fileutil
|
|
||||||
- pkg/pathutil
|
- pkg/pathutil
|
||||||
- pkg/types
|
- pkg/types
|
||||||
- version
|
|
||||||
- name: github.com/coreos/go-oidc
|
- name: github.com/coreos/go-oidc
|
||||||
version: 5644a2f50e2d2d5ba0b474bc5bc55fea1925936d
|
version: 5644a2f50e2d2d5ba0b474bc5bc55fea1925936d
|
||||||
subpackages:
|
subpackages:
|
||||||
|
|
63
vendor/github.com/coreos/etcd/pkg/fileutil/fileutil.go
generated
vendored
63
vendor/github.com/coreos/etcd/pkg/fileutil/fileutil.go
generated
vendored
|
@ -1,63 +0,0 @@
|
||||||
// Copyright 2015 CoreOS, 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 fileutil implements utility functions related to files and paths.
|
|
||||||
package fileutil
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"path"
|
|
||||||
"sort"
|
|
||||||
|
|
||||||
"github.com/coreos/pkg/capnslog"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
privateFileMode = 0600
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
plog = capnslog.NewPackageLogger("github.com/coreos/etcd/pkg", "fileutil")
|
|
||||||
)
|
|
||||||
|
|
||||||
// IsDirWriteable checks if dir is writable by writing and removing a file
|
|
||||||
// to dir. It returns nil if dir is writable.
|
|
||||||
func IsDirWriteable(dir string) error {
|
|
||||||
f := path.Join(dir, ".touch")
|
|
||||||
if err := ioutil.WriteFile(f, []byte(""), privateFileMode); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return os.Remove(f)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ReadDir returns the filenames in the given directory in sorted order.
|
|
||||||
func ReadDir(dirpath string) ([]string, error) {
|
|
||||||
dir, err := os.Open(dirpath)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
defer dir.Close()
|
|
||||||
names, err := dir.Readdirnames(-1)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
sort.Strings(names)
|
|
||||||
return names, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func Exist(name string) bool {
|
|
||||||
_, err := os.Stat(name)
|
|
||||||
return err == nil
|
|
||||||
}
|
|
90
vendor/github.com/coreos/etcd/pkg/fileutil/lock_plan9.go
generated
vendored
90
vendor/github.com/coreos/etcd/pkg/fileutil/lock_plan9.go
generated
vendored
|
@ -1,90 +0,0 @@
|
||||||
// Copyright 2015 CoreOS, 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 fileutil
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"os"
|
|
||||||
"syscall"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
ErrLocked = errors.New("file already locked")
|
|
||||||
)
|
|
||||||
|
|
||||||
type Lock interface {
|
|
||||||
Name() string
|
|
||||||
TryLock() error
|
|
||||||
Lock() error
|
|
||||||
Unlock() error
|
|
||||||
Destroy() error
|
|
||||||
}
|
|
||||||
|
|
||||||
type lock struct {
|
|
||||||
fname string
|
|
||||||
file *os.File
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *lock) Name() string {
|
|
||||||
return l.fname
|
|
||||||
}
|
|
||||||
|
|
||||||
// TryLock acquires exclusivity on the lock without blocking
|
|
||||||
func (l *lock) TryLock() error {
|
|
||||||
err := os.Chmod(l.fname, syscall.DMEXCL|0600)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
f, err := os.Open(l.fname)
|
|
||||||
if err != nil {
|
|
||||||
return ErrLocked
|
|
||||||
}
|
|
||||||
|
|
||||||
l.file = f
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lock acquires exclusivity on the lock with blocking
|
|
||||||
func (l *lock) Lock() error {
|
|
||||||
err := os.Chmod(l.fname, syscall.DMEXCL|0600)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
for {
|
|
||||||
f, err := os.Open(l.fname)
|
|
||||||
if err == nil {
|
|
||||||
l.file = f
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
time.Sleep(10 * time.Millisecond)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unlock unlocks the lock
|
|
||||||
func (l *lock) Unlock() error {
|
|
||||||
return l.file.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *lock) Destroy() error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewLock(file string) (Lock, error) {
|
|
||||||
l := &lock{fname: file}
|
|
||||||
return l, nil
|
|
||||||
}
|
|
98
vendor/github.com/coreos/etcd/pkg/fileutil/lock_solaris.go
generated
vendored
98
vendor/github.com/coreos/etcd/pkg/fileutil/lock_solaris.go
generated
vendored
|
@ -1,98 +0,0 @@
|
||||||
// Copyright 2015 CoreOS, 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.
|
|
||||||
|
|
||||||
// +build solaris
|
|
||||||
|
|
||||||
package fileutil
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"os"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
ErrLocked = errors.New("file already locked")
|
|
||||||
)
|
|
||||||
|
|
||||||
type Lock interface {
|
|
||||||
Name() string
|
|
||||||
TryLock() error
|
|
||||||
Lock() error
|
|
||||||
Unlock() error
|
|
||||||
Destroy() error
|
|
||||||
}
|
|
||||||
|
|
||||||
type lock struct {
|
|
||||||
fd int
|
|
||||||
file *os.File
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *lock) Name() string {
|
|
||||||
return l.file.Name()
|
|
||||||
}
|
|
||||||
|
|
||||||
// TryLock acquires exclusivity on the lock without blocking
|
|
||||||
func (l *lock) TryLock() error {
|
|
||||||
var lock syscall.Flock_t
|
|
||||||
lock.Start = 0
|
|
||||||
lock.Len = 0
|
|
||||||
lock.Pid = 0
|
|
||||||
lock.Type = syscall.F_WRLCK
|
|
||||||
lock.Whence = 0
|
|
||||||
lock.Pid = 0
|
|
||||||
err := syscall.FcntlFlock(uintptr(l.fd), syscall.F_SETLK, &lock)
|
|
||||||
if err != nil && err == syscall.EAGAIN {
|
|
||||||
return ErrLocked
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lock acquires exclusivity on the lock without blocking
|
|
||||||
func (l *lock) Lock() error {
|
|
||||||
var lock syscall.Flock_t
|
|
||||||
lock.Start = 0
|
|
||||||
lock.Len = 0
|
|
||||||
lock.Type = syscall.F_WRLCK
|
|
||||||
lock.Whence = 0
|
|
||||||
lock.Pid = 0
|
|
||||||
return syscall.FcntlFlock(uintptr(l.fd), syscall.F_SETLK, &lock)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unlock unlocks the lock
|
|
||||||
func (l *lock) Unlock() error {
|
|
||||||
var lock syscall.Flock_t
|
|
||||||
lock.Start = 0
|
|
||||||
lock.Len = 0
|
|
||||||
lock.Type = syscall.F_UNLCK
|
|
||||||
lock.Whence = 0
|
|
||||||
err := syscall.FcntlFlock(uintptr(l.fd), syscall.F_SETLK, &lock)
|
|
||||||
if err != nil && err == syscall.EAGAIN {
|
|
||||||
return ErrLocked
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *lock) Destroy() error {
|
|
||||||
return l.file.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewLock(file string) (Lock, error) {
|
|
||||||
f, err := os.OpenFile(file, os.O_WRONLY, 0600)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
l := &lock{int(f.Fd()), f}
|
|
||||||
return l, nil
|
|
||||||
}
|
|
76
vendor/github.com/coreos/etcd/pkg/fileutil/lock_unix.go
generated
vendored
76
vendor/github.com/coreos/etcd/pkg/fileutil/lock_unix.go
generated
vendored
|
@ -1,76 +0,0 @@
|
||||||
// Copyright 2015 CoreOS, 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.
|
|
||||||
|
|
||||||
// +build !windows,!plan9,!solaris
|
|
||||||
|
|
||||||
package fileutil
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"os"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
ErrLocked = errors.New("file already locked")
|
|
||||||
)
|
|
||||||
|
|
||||||
type Lock interface {
|
|
||||||
Name() string
|
|
||||||
TryLock() error
|
|
||||||
Lock() error
|
|
||||||
Unlock() error
|
|
||||||
Destroy() error
|
|
||||||
}
|
|
||||||
|
|
||||||
type lock struct {
|
|
||||||
fd int
|
|
||||||
file *os.File
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *lock) Name() string {
|
|
||||||
return l.file.Name()
|
|
||||||
}
|
|
||||||
|
|
||||||
// TryLock acquires exclusivity on the lock without blocking
|
|
||||||
func (l *lock) TryLock() error {
|
|
||||||
err := syscall.Flock(l.fd, syscall.LOCK_EX|syscall.LOCK_NB)
|
|
||||||
if err != nil && err == syscall.EWOULDBLOCK {
|
|
||||||
return ErrLocked
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lock acquires exclusivity on the lock without blocking
|
|
||||||
func (l *lock) Lock() error {
|
|
||||||
return syscall.Flock(l.fd, syscall.LOCK_EX)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unlock unlocks the lock
|
|
||||||
func (l *lock) Unlock() error {
|
|
||||||
return syscall.Flock(l.fd, syscall.LOCK_UN)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *lock) Destroy() error {
|
|
||||||
return l.file.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewLock(file string) (Lock, error) {
|
|
||||||
f, err := os.Open(file)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
l := &lock{int(f.Fd()), f}
|
|
||||||
return l, nil
|
|
||||||
}
|
|
71
vendor/github.com/coreos/etcd/pkg/fileutil/lock_windows.go
generated
vendored
71
vendor/github.com/coreos/etcd/pkg/fileutil/lock_windows.go
generated
vendored
|
@ -1,71 +0,0 @@
|
||||||
// Copyright 2015 CoreOS, 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.
|
|
||||||
|
|
||||||
// +build windows
|
|
||||||
|
|
||||||
package fileutil
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"os"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
ErrLocked = errors.New("file already locked")
|
|
||||||
)
|
|
||||||
|
|
||||||
type Lock interface {
|
|
||||||
Name() string
|
|
||||||
TryLock() error
|
|
||||||
Lock() error
|
|
||||||
Unlock() error
|
|
||||||
Destroy() error
|
|
||||||
}
|
|
||||||
|
|
||||||
type lock struct {
|
|
||||||
fd int
|
|
||||||
file *os.File
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *lock) Name() string {
|
|
||||||
return l.file.Name()
|
|
||||||
}
|
|
||||||
|
|
||||||
// TryLock acquires exclusivity on the lock without blocking
|
|
||||||
func (l *lock) TryLock() error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lock acquires exclusivity on the lock without blocking
|
|
||||||
func (l *lock) Lock() error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unlock unlocks the lock
|
|
||||||
func (l *lock) Unlock() error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *lock) Destroy() error {
|
|
||||||
return l.file.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewLock(file string) (Lock, error) {
|
|
||||||
f, err := os.Open(file)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
l := &lock{int(f.Fd()), f}
|
|
||||||
return l, nil
|
|
||||||
}
|
|
28
vendor/github.com/coreos/etcd/pkg/fileutil/perallocate_unsupported.go
generated
vendored
28
vendor/github.com/coreos/etcd/pkg/fileutil/perallocate_unsupported.go
generated
vendored
|
@ -1,28 +0,0 @@
|
||||||
// Copyright 2015 CoreOS, 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.
|
|
||||||
|
|
||||||
// +build !linux
|
|
||||||
|
|
||||||
package fileutil
|
|
||||||
|
|
||||||
import "os"
|
|
||||||
|
|
||||||
// Preallocate tries to allocate the space for given
|
|
||||||
// file. This operation is only supported on linux by a
|
|
||||||
// few filesystems (btrfs, ext4, etc.).
|
|
||||||
// If the operation is unsupported, no error will be returned.
|
|
||||||
// Otherwise, the error encountered will be returned.
|
|
||||||
func Preallocate(f *os.File, sizeInBytes int) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
42
vendor/github.com/coreos/etcd/pkg/fileutil/preallocate.go
generated
vendored
42
vendor/github.com/coreos/etcd/pkg/fileutil/preallocate.go
generated
vendored
|
@ -1,42 +0,0 @@
|
||||||
// Copyright 2015 CoreOS, 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.
|
|
||||||
|
|
||||||
// +build linux
|
|
||||||
|
|
||||||
package fileutil
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Preallocate tries to allocate the space for given
|
|
||||||
// file. This operation is only supported on linux by a
|
|
||||||
// few filesystems (btrfs, ext4, etc.).
|
|
||||||
// If the operation is unsupported, no error will be returned.
|
|
||||||
// Otherwise, the error encountered will be returned.
|
|
||||||
func Preallocate(f *os.File, sizeInBytes int) error {
|
|
||||||
// use mode = 1 to keep size
|
|
||||||
// see FALLOC_FL_KEEP_SIZE
|
|
||||||
err := syscall.Fallocate(int(f.Fd()), 1, 0, int64(sizeInBytes))
|
|
||||||
if err != nil {
|
|
||||||
errno, ok := err.(syscall.Errno)
|
|
||||||
// treat not support as nil error
|
|
||||||
if ok && errno == syscall.ENOTSUP {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
80
vendor/github.com/coreos/etcd/pkg/fileutil/purge.go
generated
vendored
80
vendor/github.com/coreos/etcd/pkg/fileutil/purge.go
generated
vendored
|
@ -1,80 +0,0 @@
|
||||||
// Copyright 2015 CoreOS, 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 fileutil
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"path"
|
|
||||||
"sort"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
func PurgeFile(dirname string, suffix string, max uint, interval time.Duration, stop <-chan struct{}) <-chan error {
|
|
||||||
errC := make(chan error, 1)
|
|
||||||
go func() {
|
|
||||||
for {
|
|
||||||
fnames, err := ReadDir(dirname)
|
|
||||||
if err != nil {
|
|
||||||
errC <- err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
newfnames := make([]string, 0)
|
|
||||||
for _, fname := range fnames {
|
|
||||||
if strings.HasSuffix(fname, suffix) {
|
|
||||||
newfnames = append(newfnames, fname)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sort.Strings(newfnames)
|
|
||||||
for len(newfnames) > int(max) {
|
|
||||||
f := path.Join(dirname, newfnames[0])
|
|
||||||
l, err := NewLock(f)
|
|
||||||
if err != nil {
|
|
||||||
errC <- err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
err = l.TryLock()
|
|
||||||
if err != nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
err = os.Remove(f)
|
|
||||||
if err != nil {
|
|
||||||
errC <- err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
err = l.Unlock()
|
|
||||||
if err != nil {
|
|
||||||
plog.Errorf("error unlocking %s when purging file (%v)", l.Name(), err)
|
|
||||||
errC <- err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
err = l.Destroy()
|
|
||||||
if err != nil {
|
|
||||||
plog.Errorf("error destroying lock %s when purging file (%v)", l.Name(), err)
|
|
||||||
errC <- err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
plog.Infof("purged file %s successfully", f)
|
|
||||||
newfnames = newfnames[1:]
|
|
||||||
}
|
|
||||||
select {
|
|
||||||
case <-time.After(interval):
|
|
||||||
case <-stop:
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
return errC
|
|
||||||
}
|
|
91
vendor/github.com/coreos/etcd/version/version.go
generated
vendored
91
vendor/github.com/coreos/etcd/version/version.go
generated
vendored
|
@ -1,91 +0,0 @@
|
||||||
// Copyright 2015 CoreOS, 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 version implements etcd version parsing and contains latest version
|
|
||||||
// information.
|
|
||||||
package version
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"path"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/coreos/etcd/pkg/fileutil"
|
|
||||||
"github.com/coreos/etcd/pkg/types"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// MinClusterVersion is the min cluster version this etcd binary is compatible with.
|
|
||||||
MinClusterVersion = "2.2.0"
|
|
||||||
Version = "2.3.0-alpha.0+git"
|
|
||||||
|
|
||||||
// Git SHA Value will be set during build
|
|
||||||
GitSHA = "Not provided (use ./build instead of go build)"
|
|
||||||
)
|
|
||||||
|
|
||||||
// WalVersion is an enum for versions of etcd logs.
|
|
||||||
type DataDirVersion string
|
|
||||||
|
|
||||||
const (
|
|
||||||
DataDirUnknown DataDirVersion = "Unknown WAL"
|
|
||||||
DataDir2_0 DataDirVersion = "2.0.0"
|
|
||||||
DataDir2_0Proxy DataDirVersion = "2.0 proxy"
|
|
||||||
DataDir2_0_1 DataDirVersion = "2.0.1"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Versions struct {
|
|
||||||
Server string `json:"etcdserver"`
|
|
||||||
Cluster string `json:"etcdcluster"`
|
|
||||||
// TODO: raft state machine version
|
|
||||||
}
|
|
||||||
|
|
||||||
func DetectDataDir(dirpath string) (DataDirVersion, error) {
|
|
||||||
names, err := fileutil.ReadDir(dirpath)
|
|
||||||
if err != nil {
|
|
||||||
if os.IsNotExist(err) {
|
|
||||||
err = nil
|
|
||||||
}
|
|
||||||
// Error reading the directory
|
|
||||||
return DataDirUnknown, err
|
|
||||||
}
|
|
||||||
nameSet := types.NewUnsafeSet(names...)
|
|
||||||
if nameSet.Contains("member") {
|
|
||||||
ver, err := DetectDataDir(path.Join(dirpath, "member"))
|
|
||||||
if ver == DataDir2_0 {
|
|
||||||
return DataDir2_0_1, nil
|
|
||||||
}
|
|
||||||
return ver, err
|
|
||||||
}
|
|
||||||
if nameSet.ContainsAll([]string{"snap", "wal"}) {
|
|
||||||
// .../wal cannot be empty to exist.
|
|
||||||
walnames, err := fileutil.ReadDir(path.Join(dirpath, "wal"))
|
|
||||||
if err == nil && len(walnames) > 0 {
|
|
||||||
return DataDir2_0, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if nameSet.ContainsAll([]string{"proxy"}) {
|
|
||||||
return DataDir2_0Proxy, nil
|
|
||||||
}
|
|
||||||
return DataDirUnknown, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cluster only keeps the major.minor.
|
|
||||||
func Cluster(v string) string {
|
|
||||||
vs := strings.Split(v, ".")
|
|
||||||
if len(vs) <= 2 {
|
|
||||||
return v
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("%s.%s", vs[0], vs[1])
|
|
||||||
}
|
|
Loading…
Reference in a new issue