Merge pull request #2956 from xiang90/log

all pkgs use leveled log
This commit is contained in:
Xiang Li 2015-06-11 15:29:44 -07:00
commit 1c19eb47b5
14 changed files with 90 additions and 62 deletions

View File

@ -17,7 +17,6 @@ package discovery
import ( import (
"errors" "errors"
"fmt" "fmt"
"log"
"math" "math"
"net/http" "net/http"
"net/url" "net/url"
@ -27,6 +26,7 @@ import (
"strings" "strings"
"time" "time"
"github.com/coreos/etcd/Godeps/_workspace/src/github.com/coreos/pkg/capnslog"
"github.com/coreos/etcd/Godeps/_workspace/src/github.com/jonboulle/clockwork" "github.com/coreos/etcd/Godeps/_workspace/src/github.com/jonboulle/clockwork"
"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context" "github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
"github.com/coreos/etcd/client" "github.com/coreos/etcd/client"
@ -34,6 +34,8 @@ import (
) )
var ( var (
plog = capnslog.NewPackageLogger("github.com/coreos/etcd", "discovery")
ErrInvalidURL = errors.New("discovery: invalid URL") ErrInvalidURL = errors.New("discovery: invalid URL")
ErrBadSizeKey = errors.New("discovery: size key is bad") ErrBadSizeKey = errors.New("discovery: size key is bad")
ErrSizeNotFound = errors.New("discovery: size key not found") ErrSizeNotFound = errors.New("discovery: size key not found")
@ -102,7 +104,7 @@ func newProxyFunc(proxy string) (func(*http.Request) (*url.URL, error), error) {
return nil, fmt.Errorf("invalid proxy address %q: %v", proxy, err) return nil, fmt.Errorf("invalid proxy address %q: %v", proxy, err)
} }
log.Printf("discovery: using proxy %q", proxyURL.String()) plog.Infof("using proxy %q", proxyURL.String())
return http.ProxyURL(proxyURL), nil return http.ProxyURL(proxyURL), nil
} }
@ -250,7 +252,7 @@ func (d *discovery) checkCluster() ([]*client.Node, int, uint64, error) {
func (d *discovery) logAndBackoffForRetry(step string) { func (d *discovery) logAndBackoffForRetry(step string) {
d.retries++ d.retries++
retryTime := time.Second * (0x1 << d.retries) retryTime := time.Second * (0x1 << d.retries)
log.Println("discovery: during", step, "connection to", d.url, "timed out, retrying in", retryTime) plog.Info("during", step, "connection to", d.url, "timed out, retrying in", retryTime)
d.clock.Sleep(retryTime) d.clock.Sleep(retryTime)
} }
@ -284,15 +286,15 @@ func (d *discovery) waitNodes(nodes []*client.Node, size int, index uint64) ([]*
copy(all, nodes) copy(all, nodes)
for _, n := range all { for _, n := range all {
if path.Base(n.Key) == path.Base(d.selfKey()) { if path.Base(n.Key) == path.Base(d.selfKey()) {
log.Printf("discovery: found self %s in the cluster", path.Base(d.selfKey())) plog.Noticef("found self %s in the cluster", path.Base(d.selfKey()))
} else { } else {
log.Printf("discovery: found peer %s in the cluster", path.Base(n.Key)) plog.Noticef("found peer %s in the cluster", path.Base(n.Key))
} }
} }
// wait for others // wait for others
for len(all) < size { for len(all) < size {
log.Printf("discovery: found %d peer(s), waiting for %d more", len(all), size-len(all)) plog.Noticef("found %d peer(s), waiting for %d more", len(all), size-len(all))
resp, err := w.Next(context.Background()) resp, err := w.Next(context.Background())
if err != nil { if err != nil {
if err == context.DeadlineExceeded { if err == context.DeadlineExceeded {
@ -300,10 +302,10 @@ func (d *discovery) waitNodes(nodes []*client.Node, size int, index uint64) ([]*
} }
return nil, err return nil, err
} }
log.Printf("discovery: found peer %s in the cluster", path.Base(resp.Node.Key)) plog.Noticef("found peer %s in the cluster", path.Base(resp.Node.Key))
all = append(all, resp.Node) all = append(all, resp.Node)
} }
log.Printf("discovery: found %d needed peer(s)", len(all)) plog.Noticef("found %d needed peer(s)", len(all))
return all, nil return all, nil
} }

View File

@ -16,7 +16,6 @@ package discovery
import ( import (
"fmt" "fmt"
"log"
"net" "net"
"strings" "strings"
@ -41,7 +40,7 @@ func SRVGetCluster(name, dns string, defaultToken string, apurls types.URLs) (st
for _, url := range apurls { for _, url := range apurls {
tcpAddr, err := resolveTCPAddr("tcp", url.Host) tcpAddr, err := resolveTCPAddr("tcp", url.Host)
if err != nil { if err != nil {
log.Printf("discovery: Couldn't resolve host %s during SRV discovery", url.Host) plog.Errorf("couldn't resolve host %s during SRV discovery", url.Host)
return "", "", err return "", "", err
} }
tcpAPUrls = append(tcpAPUrls, tcpAddr.String()) tcpAPUrls = append(tcpAPUrls, tcpAddr.String())
@ -57,7 +56,7 @@ func SRVGetCluster(name, dns string, defaultToken string, apurls types.URLs) (st
host := net.JoinHostPort(target, fmt.Sprintf("%d", srv.Port)) host := net.JoinHostPort(target, fmt.Sprintf("%d", srv.Port))
tcpAddr, err := resolveTCPAddr("tcp", host) tcpAddr, err := resolveTCPAddr("tcp", host)
if err != nil { if err != nil {
log.Printf("discovery: Couldn't resolve host %s during SRV discovery", host) plog.Warningf("couldn't resolve host %s during SRV discovery", host)
continue continue
} }
n := "" n := ""
@ -71,7 +70,7 @@ func SRVGetCluster(name, dns string, defaultToken string, apurls types.URLs) (st
tempName += 1 tempName += 1
} }
stringParts = append(stringParts, fmt.Sprintf("%s=%s%s", n, prefix, host)) stringParts = append(stringParts, fmt.Sprintf("%s=%s%s", n, prefix, host))
log.Printf("discovery: Got bootstrap from DNS for %s at %s%s", service, prefix, host) plog.Noticef("got bootstrap from DNS for %s at %s%s", service, prefix, host)
} }
return nil return nil
} }
@ -79,16 +78,16 @@ func SRVGetCluster(name, dns string, defaultToken string, apurls types.URLs) (st
failCount := 0 failCount := 0
err := updateNodeMap("etcd-server-ssl", "https://") err := updateNodeMap("etcd-server-ssl", "https://")
if err != nil { if err != nil {
log.Printf("discovery: Error querying DNS SRV records for _etcd-server-ssl %s", err) plog.Warningf("error querying DNS SRV records for _etcd-server-ssl %s", err)
failCount += 1 failCount += 1
} }
err = updateNodeMap("etcd-server", "http://") err = updateNodeMap("etcd-server", "http://")
if err != nil { if err != nil {
log.Printf("discovery: Error querying DNS SRV records for _etcd-server %s", err) plog.Warningf("discovery: error querying DNS SRV records for _etcd-server %s", err)
failCount += 1 failCount += 1
} }
if failCount == 2 { if failCount == 2 {
log.Printf("discovery: SRV discovery failed: too many errors querying DNS SRV records") plog.Errorf("SRV discovery failed: too many errors querying DNS SRV records")
return "", "", err return "", "", err
} }
return strings.Join(stringParts, ","), defaultToken, nil return strings.Join(stringParts, ","), defaultToken, nil

View File

@ -16,8 +16,13 @@ package httptypes
import ( import (
"encoding/json" "encoding/json"
"log"
"net/http" "net/http"
"github.com/coreos/etcd/Godeps/_workspace/src/github.com/coreos/pkg/capnslog"
)
var (
plog = capnslog.NewPackageLogger("github.com/coreos/etcd/etcdserver/etcdhttp", "httptypes")
) )
type HTTPError struct { type HTTPError struct {
@ -36,7 +41,7 @@ func (e HTTPError) WriteTo(w http.ResponseWriter) {
w.WriteHeader(e.Code) w.WriteHeader(e.Code)
b, err := json.Marshal(e) b, err := json.Marshal(e)
if err != nil { if err != nil {
log.Panicf("marshal HTTPError should never fail: %v", err) plog.Panicf("marshal HTTPError should never fail (%v)", err)
} }
w.Write(b) w.Write(b)
} }

View File

@ -17,13 +17,13 @@ package security
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"log"
"path" "path"
"reflect" "reflect"
"sort" "sort"
"strings" "strings"
"time" "time"
"github.com/coreos/etcd/Godeps/_workspace/src/github.com/coreos/pkg/capnslog"
"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/crypto/bcrypt" "github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/crypto/bcrypt"
"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context" "github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
etcderr "github.com/coreos/etcd/error" etcderr "github.com/coreos/etcd/error"
@ -43,6 +43,10 @@ const (
GuestRoleName = "guest" GuestRoleName = "guest"
) )
var (
plog = capnslog.NewPackageLogger("github.com/coreos/etcd/etcdserver", "security")
)
var rootRole = Role{ var rootRole = Role{
Role: RootRoleName, Role: RootRoleName,
Permissions: Permissions{ Permissions: Permissions{
@ -186,7 +190,7 @@ func (s *Store) CreateOrUpdateUser(user User) (out User, created bool, err error
func (s *Store) CreateUser(user User) (User, error) { func (s *Store) CreateUser(user User) (User, error) {
u, err := s.createUserInternal(user) u, err := s.createUserInternal(user)
if err == nil { if err == nil {
log.Printf("security: created user %s", user.User) plog.Noticef("created user %s", user.User)
} }
return u, err return u, err
} }
@ -225,7 +229,7 @@ func (s *Store) DeleteUser(name string) error {
} }
return err return err
} }
log.Printf("security: deleted user %s", name) plog.Noticef("deleted user %s", name)
return nil return nil
} }
@ -251,7 +255,7 @@ func (s *Store) UpdateUser(user User) (User, error) {
} }
_, err = s.updateResource("/users/"+user.User, newUser) _, err = s.updateResource("/users/"+user.User, newUser)
if err == nil { if err == nil {
log.Printf("security: updated user %s", user.User) plog.Noticef("updated user %s", user.User)
} }
return newUser, err return newUser, err
} }
@ -320,7 +324,7 @@ func (s *Store) CreateRole(role Role) error {
} }
} }
if err == nil { if err == nil {
log.Printf("security: created new role %s", role.Role) plog.Noticef("created new role %s", role.Role)
} }
return err return err
} }
@ -338,7 +342,7 @@ func (s *Store) DeleteRole(name string) error {
} }
} }
if err == nil { if err == nil {
log.Printf("security: deleted role %s", name) plog.Noticef("deleted role %s", name)
} }
return err return err
} }
@ -365,7 +369,7 @@ func (s *Store) UpdateRole(role Role) (Role, error) {
} }
_, err = s.updateResource("/roles/"+role.Role, newRole) _, err = s.updateResource("/roles/"+role.Role, newRole)
if err == nil { if err == nil {
log.Printf("security: updated role %s", role.Role) plog.Noticef("updated role %s", role.Role)
} }
return newRole, err return newRole, err
} }
@ -384,18 +388,18 @@ func (s *Store) EnableSecurity() error {
} }
_, err = s.GetRole(GuestRoleName) _, err = s.GetRole(GuestRoleName)
if err != nil { if err != nil {
log.Printf("security: no guest role access found, creating default") plog.Printf("no guest role access found, creating default")
err := s.CreateRole(guestRole) err := s.CreateRole(guestRole)
if err != nil { if err != nil {
log.Printf("security: error creating guest role. aborting security enable.") plog.Errorf("error creating guest role. aborting security enable.")
return err return err
} }
} }
err = s.enableSecurity() err = s.enableSecurity()
if err == nil { if err == nil {
log.Printf("security: enabled security") plog.Noticef("security: enabled security")
} else { } else {
log.Printf("error enabling security: %v", err) plog.Errorf("error enabling security (%v)", err)
} }
return err return err
} }
@ -406,9 +410,9 @@ func (s *Store) DisableSecurity() error {
} }
err := s.disableSecurity() err := s.disableSecurity()
if err == nil { if err == nil {
log.Printf("security: disabled security") plog.Noticef("security: disabled security")
} else { } else {
log.Printf("error disabling security: %v", err) plog.Errorf("error disabling security (%v)", err)
} }
return err return err
} }
@ -435,14 +439,14 @@ func (u User) Merge(n User) (User, error) {
currentRoles := types.NewUnsafeSet(u.Roles...) currentRoles := types.NewUnsafeSet(u.Roles...)
for _, g := range n.Grant { for _, g := range n.Grant {
if currentRoles.Contains(g) { if currentRoles.Contains(g) {
log.Printf("Granting duplicate role %s for user %s", g, n.User) plog.Noticef("granting duplicate role %s for user %s", g, n.User)
continue continue
} }
currentRoles.Add(g) currentRoles.Add(g)
} }
for _, r := range n.Revoke { for _, r := range n.Revoke {
if !currentRoles.Contains(r) { if !currentRoles.Contains(r) {
log.Printf("Revoking ungranted role %s for user %s", r, n.User) plog.Noticef("revoking ungranted role %s for user %s", r, n.User)
continue continue
} }
currentRoles.Remove(r) currentRoles.Remove(r)
@ -544,7 +548,7 @@ func (rw rwPermission) Revoke(n rwPermission) (rwPermission, error) {
currentRead := types.NewUnsafeSet(rw.Read...) currentRead := types.NewUnsafeSet(rw.Read...)
for _, r := range n.Read { for _, r := range n.Read {
if !currentRead.Contains(r) { if !currentRead.Contains(r) {
log.Printf("Revoking ungranted read permission %s", r) plog.Noticef("revoking ungranted read permission %s", r)
continue continue
} }
currentRead.Remove(r) currentRead.Remove(r)
@ -552,7 +556,7 @@ func (rw rwPermission) Revoke(n rwPermission) (rwPermission, error) {
currentWrite := types.NewUnsafeSet(rw.Write...) currentWrite := types.NewUnsafeSet(rw.Write...)
for _, w := range n.Write { for _, w := range n.Write {
if !currentWrite.Contains(w) { if !currentWrite.Contains(w) {
log.Printf("Revoking ungranted write permission %s", w) plog.Noticef("revoking ungranted write permission %s", w)
continue continue
} }
currentWrite.Remove(w) currentWrite.Remove(w)

View File

@ -16,7 +16,6 @@ package security
import ( import (
"encoding/json" "encoding/json"
"log"
"path" "path"
"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context" "github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
@ -46,7 +45,7 @@ func (s *Store) ensureSecurityDirectories() error {
continue continue
} }
} }
log.Println("security: Trying to create security directories in the store; failed:", err) plog.Errorf("failed to create security directories in the store (%v)", err)
return err return err
} }
} }
@ -93,14 +92,14 @@ func (s *Store) detectSecurity() bool {
return false return false
} }
} }
log.Println("security: Trying to detect security settings failed:", err) plog.Errorf("failed to detect security settings (%s)", err)
return false return false
} }
var u bool var u bool
err = json.Unmarshal([]byte(*value.Event.Node.Value), &u) err = json.Unmarshal([]byte(*value.Event.Node.Value), &u)
if err != nil { if err != nil {
log.Println("security: internal bookkeeping value for enabled isn't valid JSON") plog.Errorf("internal bookkeeping value for enabled isn't valid JSON (%v)", err)
return false return false
} }
return u return u

View File

@ -16,7 +16,6 @@ package stats
import ( import (
"encoding/json" "encoding/json"
"log"
"math" "math"
"sync" "sync"
"time" "time"
@ -47,7 +46,7 @@ func (ls *LeaderStats) JSON() []byte {
b, err := json.Marshal(stats) b, err := json.Marshal(stats)
// TODO(jonboulle): appropriate error handling? // TODO(jonboulle): appropriate error handling?
if err != nil { if err != nil {
log.Printf("stats: error marshalling leader stats: %v", err) plog.Errorf("error marshalling leader stats (%v)", err)
} }
return b return b
} }

View File

@ -14,6 +14,12 @@
package stats package stats
import "github.com/coreos/etcd/Godeps/_workspace/src/github.com/coreos/pkg/capnslog"
var (
plog = capnslog.NewPackageLogger("github.com/coreos/etcd/etcdserver", "stats")
)
type Stats interface { type Stats interface {
// SelfStats returns the struct representing statistics of this server // SelfStats returns the struct representing statistics of this server
SelfStats() []byte SelfStats() []byte

View File

@ -17,14 +17,18 @@ package flags
import ( import (
"flag" "flag"
"fmt" "fmt"
"log"
"net/url" "net/url"
"os" "os"
"strings" "strings"
"github.com/coreos/etcd/Godeps/_workspace/src/github.com/coreos/pkg/capnslog"
"github.com/coreos/etcd/pkg/transport" "github.com/coreos/etcd/pkg/transport"
) )
var (
plog = capnslog.NewPackageLogger("github.com/coreos/etcd/pkg", "flags")
)
// DeprecatedFlag encapsulates a flag that may have been previously valid but // DeprecatedFlag encapsulates a flag that may have been previously valid but
// is now deprecated. If a DeprecatedFlag is set, an error occurs. // is now deprecated. If a DeprecatedFlag is set, an error occurs.
type DeprecatedFlag struct { type DeprecatedFlag struct {
@ -52,7 +56,7 @@ func (f *IgnoredFlag) IsBoolFlag() bool {
} }
func (f *IgnoredFlag) Set(s string) error { func (f *IgnoredFlag) Set(s string) error {
log.Printf(`WARNING: flag "-%s" is no longer supported - ignoring.`, f.Name) plog.Warningf(`flag "-%s" is no longer supported - ignoring.`, f.Name)
return nil return nil
} }
@ -96,7 +100,7 @@ func SetBindAddrFromAddr(fs *flag.FlagSet, bindAddrFlagName, addrFlagName string
addr := *fs.Lookup(addrFlagName).Value.(*IPAddressPort) addr := *fs.Lookup(addrFlagName).Value.(*IPAddressPort)
addr.IP = "::" addr.IP = "::"
if err := fs.Set(bindAddrFlagName, addr.String()); err != nil { if err := fs.Set(bindAddrFlagName, addr.String()); err != nil {
log.Panicf("etcdmain: unexpected flags set error: %v", err) plog.Panicf("unexpected flags set error: %v", err)
} }
} }

View File

@ -15,7 +15,6 @@
package flags package flags
import ( import (
"log"
"strings" "strings"
"github.com/coreos/etcd/pkg/types" "github.com/coreos/etcd/pkg/types"
@ -47,7 +46,7 @@ func (us *URLsValue) String() string {
func NewURLsValue(init string) *URLsValue { func NewURLsValue(init string) *URLsValue {
v := &URLsValue{} v := &URLsValue{}
if err := v.Set(init); err != nil { if err := v.Set(init); err != nil {
log.Panicf("new URLsValue should never fail: %v", err) plog.Panicf("new URLsValue should never fail: %v", err)
} }
return v return v
} }

View File

@ -16,14 +16,17 @@ package netutil
import ( import (
"encoding/base64" "encoding/base64"
"log"
"net" "net"
"net/http" "net/http"
"net/url" "net/url"
"strings" "strings"
"github.com/coreos/etcd/Godeps/_workspace/src/github.com/coreos/pkg/capnslog"
) )
var ( var (
plog = capnslog.NewPackageLogger("github.com/coreos/etcd/pkg", "netutil")
// indirection for testing // indirection for testing
resolveTCPAddr = net.ResolveTCPAddr resolveTCPAddr = net.ResolveTCPAddr
) )
@ -36,7 +39,7 @@ func ResolveTCPAddrs(urls ...[]url.URL) error {
for i, u := range us { for i, u := range us {
host, _, err := net.SplitHostPort(u.Host) host, _, err := net.SplitHostPort(u.Host)
if err != nil { if err != nil {
log.Printf("netutil: Could not parse url %s during tcp resolving.", u.Host) plog.Errorf("could not parse url %s during tcp resolving", u.Host)
return err return err
} }
if host == "localhost" { if host == "localhost" {
@ -47,10 +50,10 @@ func ResolveTCPAddrs(urls ...[]url.URL) error {
} }
tcpAddr, err := resolveTCPAddr("tcp", u.Host) tcpAddr, err := resolveTCPAddr("tcp", u.Host)
if err != nil { if err != nil {
log.Printf("netutil: Could not resolve host: %s", u.Host) plog.Errorf("could not resolve host %s", u.Host)
return err return err
} }
log.Printf("netutil: Resolving %s to %s", u.Host, tcpAddr.String()) plog.Infof("resolving %s to %s", u.Host, tcpAddr.String())
us[i].Host = tcpAddr.String() us[i].Host = tcpAddr.String()
} }
} }

View File

@ -17,7 +17,6 @@
package osutil package osutil
import ( import (
"log"
"os" "os"
"os/signal" "os/signal"
"sync" "sync"
@ -58,7 +57,7 @@ func HandleInterrupts() {
interruptExitMu.Lock() interruptExitMu.Lock()
log.Printf("received %v signal, shutting down...", sig) plog.Noticef("received %v signal, shutting down...", sig)
for _, h := range ihs { for _, h := range ihs {
h() h()

View File

@ -17,6 +17,12 @@ package osutil
import ( import (
"os" "os"
"strings" "strings"
"github.com/coreos/etcd/Godeps/_workspace/src/github.com/coreos/pkg/capnslog"
)
var (
plog = capnslog.NewPackageLogger("github.com/coreos/etcd/pkg", "osutil")
) )
func Unsetenv(key string) error { func Unsetenv(key string) error {

View File

@ -14,7 +14,11 @@
package pbutil package pbutil
import "log" import "github.com/coreos/etcd/Godeps/_workspace/src/github.com/coreos/pkg/capnslog"
var (
plog = capnslog.NewPackageLogger("github.com/coreos/etcd/pkg", "flags")
)
type Marshaler interface { type Marshaler interface {
Marshal() (data []byte, err error) Marshal() (data []byte, err error)
@ -27,14 +31,14 @@ type Unmarshaler interface {
func MustMarshal(m Marshaler) []byte { func MustMarshal(m Marshaler) []byte {
d, err := m.Marshal() d, err := m.Marshal()
if err != nil { if err != nil {
log.Panicf("marshal protobuf type should never fail: %v", err) plog.Panicf("marshal should never fail (%v)", err)
} }
return d return d
} }
func MustUnmarshal(um Unmarshaler, data []byte) { func MustUnmarshal(um Unmarshaler, data []byte) {
if err := um.Unmarshal(data); err != nil { if err := um.Unmarshal(data); err != nil {
log.Panicf("unmarshal protobuf type should never fail: %v", err) plog.Panicf("unmarshal should never fail (%v)", err)
} }
} }

View File

@ -16,7 +16,6 @@ package wal
import ( import (
"io" "io"
"log"
"os" "os"
"path" "path"
@ -58,35 +57,35 @@ func Repair(dirpath string) bool {
case io.EOF: case io.EOF:
return true return true
case io.ErrUnexpectedEOF: case io.ErrUnexpectedEOF:
log.Printf("wal: repairing %v", f.Name()) plog.Noticef("repairing %v", f.Name())
bf, bferr := os.Create(f.Name() + ".broken") bf, bferr := os.Create(f.Name() + ".broken")
if bferr != nil { if bferr != nil {
log.Printf("wal: could not repair %v, failed to create backup file", f.Name()) plog.Errorf("could not repair %v, failed to create backup file", f.Name())
return false return false
} }
defer bf.Close() defer bf.Close()
if _, err = f.Seek(0, os.SEEK_SET); err != nil { if _, err = f.Seek(0, os.SEEK_SET); err != nil {
log.Printf("wal: could not repair %v, failed to read file", f.Name()) plog.Errorf("could not repair %v, failed to read file", f.Name())
return false return false
} }
if _, err = io.Copy(bf, f); err != nil { if _, err = io.Copy(bf, f); err != nil {
log.Printf("wal: could not repair %v, failed to copy file", f.Name()) plog.Errorf("could not repair %v, failed to copy file", f.Name())
return false return false
} }
if err = f.Truncate(int64(n)); err != nil { if err = f.Truncate(int64(n)); err != nil {
log.Printf("wal: could not repair %v, failed to truncate file", f.Name()) plog.Errorf("could not repair %v, failed to truncate file", f.Name())
return false return false
} }
if err = f.Sync(); err != nil { if err = f.Sync(); err != nil {
log.Printf("wal: could not repair %v, failed to sync file", f.Name()) plog.Errorf("could not repair %v, failed to sync file", f.Name())
return false return false
} }
return true return true
default: default:
log.Printf("wal: could not repair error (%v)", err) plog.Errorf("could not repair error (%v)", err)
return false return false
} }
} }