Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
dms3
go-dms3
Commits
6ad200e8
Commit
6ad200e8
authored
Nov 08, 2015
by
Jeromy Johnson
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1951 from ipfs/fix/api-check-timeout
add another error to the isConnRefused check
parents
0b3e0373
a23609fc
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
34 additions
and
15 deletions
+34
-15
cmd/ipfs/main.go
cmd/ipfs/main.go
+13
-2
repo/fsrepo/fsrepo.go
repo/fsrepo/fsrepo.go
+21
-13
No files found.
cmd/ipfs/main.go
View file @
6ad200e8
...
@@ -6,6 +6,8 @@ import (
...
@@ -6,6 +6,8 @@ import (
"fmt"
"fmt"
"io"
"io"
"math/rand"
"math/rand"
"net"
"net/url"
"os"
"os"
"os/signal"
"os/signal"
"runtime"
"runtime"
...
@@ -671,6 +673,15 @@ func apiClientForAddr(addr ma.Multiaddr) (cmdsHttp.Client, error) {
...
@@ -671,6 +673,15 @@ func apiClientForAddr(addr ma.Multiaddr) (cmdsHttp.Client, error) {
}
}
func
isConnRefused
(
err
error
)
bool
{
func
isConnRefused
(
err
error
)
bool
{
return
strings
.
Contains
(
err
.
Error
(),
"connection refused"
)
||
// unwrap url errors from http calls
strings
.
Contains
(
err
.
Error
(),
"target machine actively refused it"
)
if
urlerr
,
ok
:=
err
.
(
*
url
.
Error
);
ok
{
err
=
urlerr
.
Err
}
netoperr
,
ok
:=
err
.
(
*
net
.
OpError
)
if
!
ok
{
return
false
}
return
netoperr
.
Op
==
"dial"
}
}
repo/fsrepo/fsrepo.go
View file @
6ad200e8
...
@@ -5,7 +5,7 @@ import (
...
@@ -5,7 +5,7 @@ import (
"fmt"
"fmt"
"io"
"io"
"os"
"os"
"path"
"path
/filepath
"
"strconv"
"strconv"
"strings"
"strings"
"sync"
"sync"
...
@@ -26,8 +26,11 @@ import (
...
@@ -26,8 +26,11 @@ import (
u
"github.com/ipfs/go-ipfs/util"
u
"github.com/ipfs/go-ipfs/util"
util
"github.com/ipfs/go-ipfs/util"
util
"github.com/ipfs/go-ipfs/util"
ds2
"github.com/ipfs/go-ipfs/util/datastore2"
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
// version number that we are currently expecting to see
var
RepoVersion
=
"2"
var
RepoVersion
=
"2"
...
@@ -163,7 +166,7 @@ func open(repoPath string) (repo.Repo, error) {
...
@@ -163,7 +166,7 @@ func open(repoPath string) (repo.Repo, error) {
}
}
func
newFSRepo
(
rpath
string
)
(
*
FSRepo
,
error
)
{
func
newFSRepo
(
rpath
string
)
(
*
FSRepo
,
error
)
{
expPath
,
err
:=
u
.
TildeExpansion
(
path
.
Clean
(
rpath
))
expPath
,
err
:=
u
.
TildeExpansion
(
file
path
.
Clean
(
rpath
))
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
@@ -247,17 +250,17 @@ func Init(repoPath string, conf *config.Config) error {
...
@@ -247,17 +250,17 @@ func Init(repoPath string, conf *config.Config) error {
// The actual datastore contents are initialized lazily when Opened.
// The actual datastore contents are initialized lazily when Opened.
// During Init, we merely check that the directory is writeable.
// During Init, we merely check that the directory is writeable.
leveldbPath
:=
path
.
Join
(
repoPath
,
leveldbDirectory
)
leveldbPath
:=
file
path
.
Join
(
repoPath
,
leveldbDirectory
)
if
err
:=
dir
.
Writable
(
leveldbPath
);
err
!=
nil
{
if
err
:=
dir
.
Writable
(
leveldbPath
);
err
!=
nil
{
return
fmt
.
Errorf
(
"datastore: %s"
,
err
)
return
fmt
.
Errorf
(
"datastore: %s"
,
err
)
}
}
flatfsPath
:=
path
.
Join
(
repoPath
,
flatfsDirectory
)
flatfsPath
:=
file
path
.
Join
(
repoPath
,
flatfsDirectory
)
if
err
:=
dir
.
Writable
(
flatfsPath
);
err
!=
nil
{
if
err
:=
dir
.
Writable
(
flatfsPath
);
err
!=
nil
{
return
fmt
.
Errorf
(
"datastore: %s"
,
err
)
return
fmt
.
Errorf
(
"datastore: %s"
,
err
)
}
}
if
err
:=
dir
.
Writable
(
path
.
Join
(
repoPath
,
"logs"
));
err
!=
nil
{
if
err
:=
dir
.
Writable
(
file
path
.
Join
(
repoPath
,
"logs"
));
err
!=
nil
{
return
err
return
err
}
}
...
@@ -270,14 +273,14 @@ func Init(repoPath string, conf *config.Config) error {
...
@@ -270,14 +273,14 @@ func Init(repoPath string, conf *config.Config) error {
// Remove recursively removes the FSRepo at |path|.
// Remove recursively removes the FSRepo at |path|.
func
Remove
(
repoPath
string
)
error
{
func
Remove
(
repoPath
string
)
error
{
repoPath
=
path
.
Clean
(
repoPath
)
repoPath
=
file
path
.
Clean
(
repoPath
)
return
os
.
RemoveAll
(
repoPath
)
return
os
.
RemoveAll
(
repoPath
)
}
}
// LockedByOtherProcess returns true if the FSRepo is locked by another
// LockedByOtherProcess returns true if the FSRepo is locked by another
// process. If true, then the repo cannot be opened by this process.
// process. If true, then the repo cannot be opened by this process.
func
LockedByOtherProcess
(
repoPath
string
)
(
bool
,
error
)
{
func
LockedByOtherProcess
(
repoPath
string
)
(
bool
,
error
)
{
repoPath
=
path
.
Clean
(
repoPath
)
repoPath
=
file
path
.
Clean
(
repoPath
)
// NB: the lock is only held when repos are Open
// NB: the lock is only held when repos are Open
return
lockfile
.
Locked
(
repoPath
)
return
lockfile
.
Locked
(
repoPath
)
}
}
...
@@ -287,8 +290,8 @@ func LockedByOtherProcess(repoPath string) (bool, error) {
...
@@ -287,8 +290,8 @@ func LockedByOtherProcess(repoPath string) (bool, error) {
// process may read this file. modifying this file, therefore, should
// process may read this file. modifying this file, therefore, should
// use "mv" to replace the whole file and avoid interleaved read/writes.
// use "mv" to replace the whole file and avoid interleaved read/writes.
func
APIAddr
(
repoPath
string
)
(
string
,
error
)
{
func
APIAddr
(
repoPath
string
)
(
string
,
error
)
{
repoPath
=
path
.
Clean
(
repoPath
)
repoPath
=
file
path
.
Clean
(
repoPath
)
apiFilePath
:=
path
.
Join
(
repoPath
,
apiFile
)
apiFilePath
:=
file
path
.
Join
(
repoPath
,
apiFile
)
// if there is no file, assume there is no api addr.
// if there is no file, assume there is no api addr.
f
,
err
:=
os
.
Open
(
apiFilePath
)
f
,
err
:=
os
.
Open
(
apiFilePath
)
...
@@ -315,7 +318,7 @@ func APIAddr(repoPath string) (string, error) {
...
@@ -315,7 +318,7 @@ func APIAddr(repoPath string) (string, error) {
// SetAPIAddr writes the API Addr to the /api file.
// SetAPIAddr writes the API Addr to the /api file.
func
(
r
*
FSRepo
)
SetAPIAddr
(
addr
string
)
error
{
func
(
r
*
FSRepo
)
SetAPIAddr
(
addr
string
)
error
{
f
,
err
:=
os
.
Create
(
path
.
Join
(
r
.
path
,
apiFile
))
f
,
err
:=
os
.
Create
(
file
path
.
Join
(
r
.
path
,
apiFile
))
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -341,7 +344,7 @@ func (r *FSRepo) openConfig() error {
...
@@ -341,7 +344,7 @@ func (r *FSRepo) openConfig() error {
// openDatastore returns an error if the config file is not present.
// openDatastore returns an error if the config file is not present.
func
(
r
*
FSRepo
)
openDatastore
()
error
{
func
(
r
*
FSRepo
)
openDatastore
()
error
{
leveldbPath
:=
path
.
Join
(
r
.
path
,
leveldbDirectory
)
leveldbPath
:=
file
path
.
Join
(
r
.
path
,
leveldbDirectory
)
var
err
error
var
err
error
// save leveldb reference so it can be neatly closed afterward
// save leveldb reference so it can be neatly closed afterward
leveldbDS
,
err
:=
levelds
.
NewDatastore
(
leveldbPath
,
&
levelds
.
Options
{
leveldbDS
,
err
:=
levelds
.
NewDatastore
(
leveldbPath
,
&
levelds
.
Options
{
...
@@ -359,7 +362,7 @@ func (r *FSRepo) openDatastore() error {
...
@@ -359,7 +362,7 @@ func (r *FSRepo) openDatastore() error {
// including "/" from datastore.Key and 2 bytes from multihash. To
// including "/" from datastore.Key and 2 bytes from multihash. To
// reach a uniform 256-way split, we need approximately 4 bytes of
// reach a uniform 256-way split, we need approximately 4 bytes of
// prefix.
// prefix.
blocksDS
,
err
:=
flatfs
.
New
(
path
.
Join
(
r
.
path
,
flatfsDirectory
),
4
)
blocksDS
,
err
:=
flatfs
.
New
(
file
path
.
Join
(
r
.
path
,
flatfsDirectory
),
4
)
if
err
!=
nil
{
if
err
!=
nil
{
return
errors
.
New
(
"unable to open flatfs datastore"
)
return
errors
.
New
(
"unable to open flatfs datastore"
)
}
}
...
@@ -410,6 +413,11 @@ func (r *FSRepo) Close() error {
...
@@ -410,6 +413,11 @@ func (r *FSRepo) Close() error {
return
err
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
// This code existed in the previous versions, but
// EventlogComponent.Close was never called. Preserving here
// EventlogComponent.Close was never called. Preserving here
// pending further discussion.
// pending further discussion.
...
@@ -600,7 +608,7 @@ func isInitializedUnsynced(repoPath string) bool {
...
@@ -600,7 +608,7 @@ func isInitializedUnsynced(repoPath string) bool {
if
!
configIsInitialized
(
repoPath
)
{
if
!
configIsInitialized
(
repoPath
)
{
return
false
return
false
}
}
if
!
util
.
FileExists
(
path
.
Join
(
repoPath
,
leveldbDirectory
))
{
if
!
util
.
FileExists
(
file
path
.
Join
(
repoPath
,
leveldbDirectory
))
{
return
false
return
false
}
}
return
true
return
true
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment