Commit Graph

2465 Commits

Author SHA1 Message Date
Adrian Lanzafame
4cc5182502
add tracing to crdt hooks
License: MIT
Signed-off-by: Adrian Lanzafame <adrianlanzafame92@gmail.com>
2019-05-31 12:56:33 +10:00
Kishan Mohanbhai Sagathiya
33602b9188 Remove printing the error
License: MIT
Signed-off-by: Kishan Mohanbhai Sagathiya <kishansagathiya@gmail.com>
2019-05-28 14:08:22 +05:30
Kishan Mohanbhai Sagathiya
96d230a195 Tests to check Timeout is for an update
License: MIT
Signed-off-by: Kishan Mohanbhai Sagathiya <kishansagathiya@gmail.com>
2019-05-28 14:05:04 +05:30
Hector Sanjuan
35860d337f
Merge pull request #792 from ipfs/feat/protect
Fix #787: Connectivity fixes
2019-05-27 13:27:36 +01:00
Hector Sanjuan
d5cef9d518 Fix: sharness: do not use latest master
latest master breaks (see #797)
2019-05-27 14:27:23 +02:00
Hector Sanjuan
2a2f8c0309 CRDT: Fix protecting of nodes before loading the peerstore
Addresses comments from review #792
2019-05-27 14:27:23 +02:00
Hector Sanjuan
99be078548 Fix: ipfsproxy: fix test failing with empty multiaddresses
This is a recent change in the multiaddress library to disallow
empty addresses.
2019-05-27 14:27:23 +02:00
Hector Sanjuan
196aa23f34 Fix #787: Connectivity fixes
Currently, unless doing Join() (--bootstrap), we do not connect to any peers on startup.

We however loaded up the peerstore file and Raft will automatically connect
older peers to figure out who is the leader etc. DHT bootstrap, after Raft
was working, did the rest.

For CRDTs we need to connect to people on a normal boot as otherwise, unless
bootstrapping, this does not happen, even if the peerstore contains known peers.

This introduces a number of changes:

* Move peerstore file management back inside the Cluster component, which was
already in charge of saving the peerstore file.
* We keep saving all "known addresses" but we load them with a non permanent
TTL, so that there will be clean up of peers we're not connected to for long.
* "Bootstrap" (connect) to a small number of peers during Cluster component creation.
* Bootstrap the DHT asap after this, so that other cluster components can
initialize with a working peer discovery mechanism.
* CRDT Trust() method will now:
  * Protect the trusted Peer ID in the conn manager
  * Give top priority in the PeerManager to that Peer (see below)
  * Mark addresses as permanent in the Peerstore

The PeerManager now attaches priorities to peers when importing them and is
able to order them according to that priority. The result is that peers with
high priority are saved first in the peerstore file. When we load the peerstore
file, the first entries in it are given the highest priority.

This means that during startup we will connect to "trusted peers" first
(because they have been tagged with priority in the previous run and saved at
the top of the list). Once connected to a small number of peers, we let the
DHT bootstrap process in the background do the rest and discover the network.

All this makes the peerstore file a "bootstrap" list for CRDTs and we will attempt
to connect to peers on that list until some of those connections succeed.
2019-05-27 14:27:23 +02:00
Hector Sanjuan
501ee7b41c
Merge pull request #795 from ipfs/deps/update2
Deps: update and related fixes
2019-05-26 09:58:48 +01:00
Hector Sanjuan
a1d95f5637 Fix tests with new host lifecycle handling 2019-05-25 00:53:43 +02:00
Hector Sanjuan
ab46f233e7 Dependency update and cleanup to libp2p-0.0.30
This has been horrible and won't even last, but the fixes in libp2p
required it.
2019-05-25 00:30:25 +02:00
Hector Sanjuan
b46f022884 Raft: rewrite logger
New Raft update has changed the type of the logger
2019-05-25 00:24:30 +02:00
Hector Sanjuan
96edbc1ea6 Daemon: handle host and DHT lifecycle outside Cluster
The Host and DHT are created outside of cluster and should be
shutdown outside of it, not inside.
2019-05-25 00:23:46 +02:00
Hector Sanjuan
da6739a375
Merge pull request #791 from ipfs/feat/connmgr
Feat: introduce a ConnectionManager for the libp2p host
2019-05-23 12:49:53 +01:00
Hector Sanjuan
ba5e423f58 Feat: introduce a ConnectionManager for the libp2p host
As follow up to #787, this uses the default libp2p connection manager for the
cluster libp2p host. The connection manager settings can be set in the main
configuration section (but it should be compatible with previous
configurations which have it unset).

This PR is just introducing the connection manager. Peer connection
protection etc will come in additional PRs.
2019-05-23 00:34:47 +02:00
Adrian Lanzafame
fd82463601
remove omitempty
License: MIT
Signed-off-by: Adrian Lanzafame <adrianlanzafame92@gmail.com>
2019-05-21 22:46:28 +10:00
Adrian Lanzafame
a956ec252b
fix panic
License: MIT
Signed-off-by: Adrian Lanzafame <adrianlanzafame92@gmail.com>
2019-05-21 22:45:49 +10:00
Adrian Lanzafame
aa5229008c
revert go.mod dep properly
License: MIT
Signed-off-by: Adrian Lanzafame <adrianlanzafame92@gmail.com>
2019-05-21 22:43:18 +10:00
Adrian Lanzafame
655aef4011
expose entire badger config
License: MIT
Signed-off-by: Adrian Lanzafame <adrianlanzafame92@gmail.com>
2019-05-21 22:43:18 +10:00
Adrian Lanzafame
3d4412ffd4
expose badger loading mode conf
For simplicity, I haven't exposed the entire
badger config. Also, due to go default values and
the badger implementation, I have had to extract the
two loading mode config values so we can determine
whether it has actually has been set by the user in
the json config file.

License: MIT
Signed-off-by: Adrian Lanzafame <adrianlanzafame92@gmail.com>
2019-05-21 22:42:40 +10:00
Hector Sanjuan
e523215ee2
Merge pull request #789 from ipfs/go-ds-crdt-dep
Update go-ds-crdt
2019-05-21 13:29:46 +01:00
Hector Sanjuan
44d93d61e0 fix timeouts in crdt 2019-05-21 11:55:48 +02:00
Hector Sanjuan
c59873e076 update deps 2019-05-21 11:34:33 +02:00
Hector Sanjuan
9ffd08520d Downgrade discovery 2019-05-21 11:05:51 +02:00
Hector Sanjuan
8c8e449bc9 Update go-ds-crdt 2019-05-21 10:38:37 +02:00
Hector Sanjuan
30ba6f82dd
Merge pull request #502 from ipfs/feat/run-tests-with-race
Fix #340: Run tests with -race
2019-05-20 22:56:50 +01:00
Hector Sanjuan
8e6eefb714 Tests: multiple fixes
This fixes multiple issues in and around tests while
increasing ttls and delays in 100ms. Multiple issues, including
races, tests not running with consensus-crdt missing log messages
and better initialization have been fixed.

License: MIT
Signed-off-by: Hector Sanjuan <code@hector.link>
2019-05-20 23:45:04 +02:00
Hector Sanjuan
3e61377f86 Remove some unreachable code 2019-05-17 16:36:30 +02:00
Hector Sanjuan
39481cb613 Issue #497: Better way of handling progress and timeouts for pins & refs 2019-05-17 16:26:27 +02:00
Kishan Mohanbhai Sagathiya
0c31342459 Pin timeouts should start from the last block
Close reset channel
No need for done in checkTimeout

License: MIT
Signed-off-by: Kishan Mohanbhai Sagathiya <kishansagathiya@gmail.com>
2019-05-17 14:17:47 +02:00
Kishan Mohanbhai Sagathiya
aecee5bcaf Use empty struct for channels
License: MIT
Signed-off-by: Kishan Mohanbhai Sagathiya <kishansagathiya@gmail.com>
2019-05-17 14:17:47 +02:00
Kishan Mohanbhai Sagathiya
1b90d871c2 Reset the timer less often 2019-05-17 14:17:47 +02:00
Kishan Mohanbhai Sagathiya
7cc09e0efd Dont reset if timer expired 2019-05-17 14:17:47 +02:00
Kishan Mohanbhai Sagathiya
9db07ea4c1 Avoid racy behaviour while using timer.Reset 2019-05-17 14:17:47 +02:00
Kishan Mohanbhai Sagathiya
c70b77d0bd Remove the data race because of elapsed 2019-05-17 14:17:47 +02:00
Kishan Mohanbhai Sagathiya
4e3eadfcb1 Pin timeouts should start from the last block
- a doPostCtx can happen in Pin and then pass the response reader to
either a handleRefsProgress or handlePinProgress
- fixed timeout in Unpin
2019-05-17 14:17:47 +02:00
Kishan Mohanbhai Sagathiya
2b1c25ea52 Remove redundant annotations 2019-05-17 14:17:47 +02:00
Kishan Mohanbhai Sagathiya
3ce7f5a56a Unnecessary error printing 2019-05-17 14:17:47 +02:00
Kishan Mohanbhai Sagathiya
1d62d8301e Pin timeouts should start from the last block
Parse response and check for errors
2019-05-17 14:17:47 +02:00
Kishan Mohanbhai Sagathiya
3db5e45069 Pin timeouts should start from the last block
Use timer for checking timeouts
2019-05-17 14:17:47 +02:00
Kishan Mohanbhai Sagathiya
9244daabfb Pin timeouts should start from the last block
IPFSConnector Pin operation should not have a timeout since the start
of the operation, but a timeout since the last block was received,
thus only cancelling operations when there are no more blocks provided
in the network
2019-05-17 14:17:47 +02:00
Hector Sanjuan
9692e368f3
Merge pull request #779 from ipfs/feat/failfast
Tests: add failfast, bump to go1.12, adjust codecov
2019-05-17 13:07:48 +01:00
Hector Sanjuan
18e30967a4 Disable some sharness tests adding with cid-version=1
go-ipfs is not publishing new docker containers and therefore
we cannot test with the new base32 output changes.
2019-05-17 13:58:26 +02:00
Hector Sanjuan
c23bb9abb0 Bump deps 2019-05-17 13:58:26 +02:00
Hector Sanjuan
c00b90b86d Fix panic in test 2019-05-17 13:54:13 +02:00
Hector Sanjuan
bfd4b7d3ee Tests: add failfast, bump to go1.12, adjust codecov 2019-05-17 13:54:13 +02:00
Hector Sanjuan
5f7510bd2d
Merge pull request #780 from ipfs/fix/identity-docs
service: multiple fixes around init and identities
2019-05-17 11:57:31 +01:00
Hector Sanjuan
ff92a660d2
Merge pull request #713 from ipfs/feat/monitor-ring
Change the underlying data structure of a metrics.Window
2019-05-17 11:56:47 +01:00
Hector Sanjuan
d51c2a0377 Merge branch 'master' into feat/monitor-ring 2019-05-16 15:46:30 +02:00
Hector Sanjuan
e62d10f83a service: multiple fixes around init and identities
* Fix error messages (they must be in the form "doing something")
* Improve/reword some error messages
* Document the identity.json existance in the cli docs
* Fix a bunch of typos
* Fix missing folder path in the --help
* Fix cluster not locking when configuration is not there but folder is
* Fix force flag not overriding the config overwrite prompt
* Fix deletion of Raft state on re-init (not necessary if identity persists)
* Fix overwriting on identity (should not be overwritten if already exists)

Much of this paves the way to be able to run without service.json:

* Either taking default values (and using env vars) - maybe someday
* Either by getting a configuration template it from somewhere (ipfs, http)
  at runtime - sooner.
2019-05-16 15:31:36 +02:00