Commit 6ad200e8 authored by Jeromy Johnson's avatar Jeromy Johnson

Merge pull request #1951 from ipfs/fix/api-check-timeout

add another error to the isConnRefused check
parents 0b3e0373 a23609fc
......@@ -6,6 +6,8 @@ import (
"fmt"
"io"
"math/rand"
"net"
"net/url"
"os"
"os/signal"
"runtime"
......@@ -671,6 +673,15 @@ func apiClientForAddr(addr ma.Multiaddr) (cmdsHttp.Client, error) {
}
func isConnRefused(err error) bool {
return strings.Contains(err.Error(), "connection refused") ||
strings.Contains(err.Error(), "target machine actively refused it")
// unwrap url errors from http calls
if urlerr, ok := err.(*url.Error); ok {
err = urlerr.Err
}
netoperr, ok := err.(*net.OpError)
if !ok {
return false
}
return netoperr.Op == "dial"
}
......@@ -5,7 +5,7 @@ import (
"fmt"
"io"
"os"
"path"
"path/filepath"
"strconv"
"strings"
"sync"
......@@ -26,8 +26,11 @@ import (
u "github.com/ipfs/go-ipfs/util"
util "github.com/ipfs/go-ipfs/util"
ds2 "github.com/ipfs/go-ipfs/util/datastore2"
logging "github.com/ipfs/go-ipfs/vendor/QmQg1J6vikuXF9oDvm4wpdeAUvvkVEKW1EYDw9HhTMnP2b/go-log"
)
var log = logging.Logger("fsrepo")
// version number that we are currently expecting to see
var RepoVersion = "2"
......@@ -163,7 +166,7 @@ func open(repoPath string) (repo.Repo, error) {
}
func newFSRepo(rpath string) (*FSRepo, error) {
expPath, err := u.TildeExpansion(path.Clean(rpath))
expPath, err := u.TildeExpansion(filepath.Clean(rpath))
if err != nil {
return nil, err
}
......@@ -247,17 +250,17 @@ func Init(repoPath string, conf *config.Config) error {
// The actual datastore contents are initialized lazily when Opened.
// During Init, we merely check that the directory is writeable.
leveldbPath := path.Join(repoPath, leveldbDirectory)
leveldbPath := filepath.Join(repoPath, leveldbDirectory)
if err := dir.Writable(leveldbPath); err != nil {
return fmt.Errorf("datastore: %s", err)
}
flatfsPath := path.Join(repoPath, flatfsDirectory)
flatfsPath := filepath.Join(repoPath, flatfsDirectory)
if err := dir.Writable(flatfsPath); err != nil {
return fmt.Errorf("datastore: %s", err)
}
if err := dir.Writable(path.Join(repoPath, "logs")); err != nil {
if err := dir.Writable(filepath.Join(repoPath, "logs")); err != nil {
return err
}
......@@ -270,14 +273,14 @@ func Init(repoPath string, conf *config.Config) error {
// Remove recursively removes the FSRepo at |path|.
func Remove(repoPath string) error {
repoPath = path.Clean(repoPath)
repoPath = filepath.Clean(repoPath)
return os.RemoveAll(repoPath)
}
// LockedByOtherProcess returns true if the FSRepo is locked by another
// process. If true, then the repo cannot be opened by this process.
func LockedByOtherProcess(repoPath string) (bool, error) {
repoPath = path.Clean(repoPath)
repoPath = filepath.Clean(repoPath)
// NB: the lock is only held when repos are Open
return lockfile.Locked(repoPath)
}
......@@ -287,8 +290,8 @@ func LockedByOtherProcess(repoPath string) (bool, error) {
// process may read this file. modifying this file, therefore, should
// use "mv" to replace the whole file and avoid interleaved read/writes.
func APIAddr(repoPath string) (string, error) {
repoPath = path.Clean(repoPath)
apiFilePath := path.Join(repoPath, apiFile)
repoPath = filepath.Clean(repoPath)
apiFilePath := filepath.Join(repoPath, apiFile)
// if there is no file, assume there is no api addr.
f, err := os.Open(apiFilePath)
......@@ -315,7 +318,7 @@ func APIAddr(repoPath string) (string, error) {
// SetAPIAddr writes the API Addr to the /api file.
func (r *FSRepo) SetAPIAddr(addr string) error {
f, err := os.Create(path.Join(r.path, apiFile))
f, err := os.Create(filepath.Join(r.path, apiFile))
if err != nil {
return err
}
......@@ -341,7 +344,7 @@ func (r *FSRepo) openConfig() error {
// openDatastore returns an error if the config file is not present.
func (r *FSRepo) openDatastore() error {
leveldbPath := path.Join(r.path, leveldbDirectory)
leveldbPath := filepath.Join(r.path, leveldbDirectory)
var err error
// save leveldb reference so it can be neatly closed afterward
leveldbDS, err := levelds.NewDatastore(leveldbPath, &levelds.Options{
......@@ -359,7 +362,7 @@ func (r *FSRepo) openDatastore() error {
// including "/" from datastore.Key and 2 bytes from multihash. To
// reach a uniform 256-way split, we need approximately 4 bytes of
// prefix.
blocksDS, err := flatfs.New(path.Join(r.path, flatfsDirectory), 4)
blocksDS, err := flatfs.New(filepath.Join(r.path, flatfsDirectory), 4)
if err != nil {
return errors.New("unable to open flatfs datastore")
}
......@@ -410,6 +413,11 @@ func (r *FSRepo) Close() error {
return err
}
err := os.Remove(filepath.Join(r.path, apiFile))
if err != nil {
log.Warning("error removing api file: ", err)
}
// This code existed in the previous versions, but
// EventlogComponent.Close was never called. Preserving here
// pending further discussion.
......@@ -600,7 +608,7 @@ func isInitializedUnsynced(repoPath string) bool {
if !configIsInitialized(repoPath) {
return false
}
if !util.FileExists(path.Join(repoPath, leveldbDirectory)) {
if !util.FileExists(filepath.Join(repoPath, leveldbDirectory)) {
return false
}
return true
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment