Commit Graph

52 Commits

Author SHA1 Message Date
Hector Sanjuan
2bd401c5c6 Feat: Arbitrary-depth recursive pin levels.
This implements #5133 introducing an option to limit how deep we fetch and store
the DAG associated to a recursive pin ("--max-depth"). This feature
comes motivated by the need to fetch and pin partial DAGs in order to do
DAG sharding with IPFS Cluster.

This means that, when pinning something to --max-depth, the DAG will be
fetched only to that depth and not more.

In order to get this, the PR introduces new recursive pin types: "recursive1"
means: the given CID is pinned along with its direct children (maxDepth=1)

"recursive2" means: the given CID is pinned along with its direct children
and its grandchildren.

And so on...

This required introducing "maxDepth" limits to all the functions walking down
DAGs (in merkledag, pin, core/commands, core/coreapi, exchange/reprovide modules).

maxDepth == -1 effectively acts as no-limit, and all these functions behave like
they did before.

In order to facilitate the task, a new CID Set type has been added:
thirdparty/recpinset. This set carries the MaxDepth associated to every Cid.
This allows to shortcut exploring already explored branches just like the original
cid.Set does. It also allows to store the Recursive pinset (and replaces cid.Set).
recpinset should be moved outside to a different repo eventually.

TODO: tests
TODO: refs -r with --max-depth

License: MIT
Signed-off-by: Hector Sanjuan <code@hector.link>
2018-06-21 14:35:42 +02:00
Steven Allen
85acad9a01 gx update go-log, sys, go-crypto
* go-log
* sys
* go-crypto

License: MIT
Signed-off-by: Steven Allen <steven@stebalien.com>
2018-06-08 22:36:24 -07:00
Łukasz Magiera
b290286dd7 misc: Fix a few typos
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-03-30 09:47:22 +02:00
Łukasz Magiera
12c3179614 coreapi: don't use underscores in opt reciever funcs
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-03-25 14:09:59 +02:00
Łukasz Magiera
c354e19628 coreapi: use defined functions for pin type option
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-03-25 13:58:29 +02:00
Łukasz Magiera
79f56c1831 coreapi: remove options from interfaces
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-03-24 23:25:11 +01:00
Łukasz Magiera
e54a4f8dd5 coreapi: var block for errors
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-03-10 22:17:27 +01:00
Łukasz Magiera
fa0fef336d coreapi: minor doc fixes
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-03-10 18:52:10 +01:00
Łukasz Magiera
f218b69e47 coreapi: split the interface into multiple files
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-03-10 18:46:45 +01:00
Łukasz Magiera
eff69bbf37 coreapi: don't alias ipld types
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-03-10 18:31:28 +01:00
Łukasz Magiera
20b59ec1ec coreapi: move unixfs errors to the top
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-03-10 18:27:21 +01:00
Łukasz Magiera
c8cfed5c84 coreapi: implement pin api
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-02-04 15:29:50 +01:00
Łukasz Magiera
064c194b4f coreapi: pin draft
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-02-04 15:29:50 +01:00
Łukasz Magiera
e77b938161 coreapi: update block after update
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-02-02 22:57:54 +01:00
Łukasz Magiera
b125c89ac7 corapi: block docs
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-01-31 00:31:08 +01:00
Łukasz Magiera
bdc9f6a96a coreapi: implement block API
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-01-31 00:31:08 +01:00
Łukasz Magiera
219eae7614 coreapi: draft block API
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-01-31 00:31:08 +01:00
Whyrusleeping
4d8b3c9bce
Merge pull request #4492 from ipfs/feat/coreapi/object
coreapi: Basic object API implementation
2018-01-30 13:14:06 -08:00
Łukasz Magiera
0377e49590 coreapi: object API tests
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-01-25 18:26:57 +01:00
Łukasz Magiera
f6663bd05d coreapi: implement object.Put
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-01-25 18:25:05 +01:00
Łukasz Magiera
64e2327e22 coreapi: object docs
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-01-25 18:25:05 +01:00
Łukasz Magiera
ae949e3a93 coreapi: Object api review
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-01-25 18:25:05 +01:00
Łukasz Magiera
529f84726e coreapi: Basic object API implementation
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-01-25 18:25:05 +01:00
Steven Allen
fe8846fcd7 gx: mass update
License: MIT
Signed-off-by: Steven Allen <steven@stebalien.com>
2018-01-24 15:58:44 -08:00
ForrestWeston
132c939d24 interface docs for coreapi interface
License: MIT
Signed-off-by: ForrestWeston <forrest@protocol.ai>
2018-01-22 16:25:00 -08:00
Łukasz Magiera
2109cbc172 coreapi: Name tests
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-01-02 21:01:03 +01:00
Łukasz Magiera
396c34b4e1 coreapi: key tests
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-01-01 19:00:56 +01:00
Łukasz Magiera
8df2d1a92e coreapi: name/key review suggestions
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-01-01 17:38:12 +01:00
Łukasz Magiera
587dc187c6 coreapi: Documentation for Name/Key
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-01-01 17:38:12 +01:00
Łukasz Magiera
1c73d48e5b coreapi: name/key functional options
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-01-01 17:35:37 +01:00
Łukasz Magiera
1b5fbb09b5 coreapi: Keystore API proposal
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-01-01 17:35:37 +01:00
Łukasz Magiera
027f498bc9 coreapi: Name API proposal
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2018-01-01 17:35:37 +01:00
Łukasz Magiera
db318333ab coreapi: dag review
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2017-12-23 04:49:00 +01:00
Łukasz Magiera
f153c01dfa coreapi: functional options for DagAPI
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2017-12-20 15:03:13 +01:00
Łukasz Magiera
b40a6f88eb coreapi: add tests for dag
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2017-12-20 13:47:32 +01:00
Łukasz Magiera
82924fbedf coreapi: DAG API proposal
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2017-12-20 13:44:06 +01:00
Whyrusleeping
9db5471e72
Merge pull request #4453 from ipfs/gx/update-5osgb9
gx: update go-multihash
2017-12-14 17:59:26 -08:00
Łukasz Magiera
eb537a7c8b docs/coreapi: Add some documentation to CoreAPI
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2017-12-15 01:34:49 +01:00
Steven Allen
dfe7ef4fcf gx: update go-multihash
License: MIT
Signed-off-by: Steven Allen <steven@stebalien.com>
2017-12-14 13:09:51 -08:00
Steven Allen
70d6629940 gx: update go-cid, go-multibase, base32
License: MIT
Signed-off-by: Steven Allen <steven@stebalien.com>
2017-09-01 17:46:49 -07:00
Jeromy
cccc6a94a3 update go-multihash and bubble up changes
License: MIT
Signed-off-by: Jeromy <jeromyj@gmail.com>
2017-07-11 19:27:43 -07:00
Łukasz Magiera
8ab93aaeb2 Update go-datastore to 1.2.2, go-cid to 0.7.16
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2017-07-04 20:18:57 +02:00
Steven Allen
13636bef50 blocks: gx import go-block-format
And updated related dependencies.

License: MIT
Signed-off-by: Steven Allen <steven@stebalien.com>
2017-06-29 22:12:14 +02:00
Jeromy
b15470d548
bubble up updates from go-multihash changes
License: MIT
Signed-off-by: Jeromy <jeromyj@gmail.com>
2017-04-20 20:28:04 +02:00
Lars Gierth
ee45b8d32f coreapi: make the interfaces path centric
The new coreiface.Path maps a path to the cid.Cid
resulting from a full path resolution.

The path is internally represented as a go-ipfs/path.Path,
but that doesn't matter to the outside.

Apart from the path-to-CID mapping, it also aims to hold all
resolved segment CIDs of the path. Right now it only exposes
Root(), and only for flat paths a la /ipfs/Qmfoo. In other cases,
the root is nil.

In the future, resolution will internally use
go-ipfs/path.Resolver.ResolvePathComponents and thus always return
the proper resolved segments, via Root(), or a future Segments() func.

- Add coreiface.Path with Cid() and Root().
- Add CoreAPI.ResolvePath() for getting a coreiface.Path.
- All functions now expect and return coreiface.Path.
- Add ParsePath() and ParseCid() for constructing a coreiface.Path.
- Add coreiface.Node and Link which are simply go-ipld-node.Node and Link.
- Add CoreAPI.ResolveNode() for getting a Node from a Path.

License: MIT
Signed-off-by: Lars Gierth <larsg@systemli.org>
2017-03-17 03:47:59 +01:00
Lars Gierth
e260d2fd06 coreapi: smarter way of dealing with the different APIs
License: MIT
Signed-off-by: Lars Gierth <larsg@systemli.org>
2017-03-17 02:35:17 +01:00
Jeromy
b4eeff2d84 update go-multihash and bubble up deps
License: MIT
Signed-off-by: Jeromy <jeromyj@gmail.com>
2017-02-12 12:25:41 -08:00
Jeromy
53d47669da bubble up go-datastore deps
License: MIT
Signed-off-by: Jeromy <why@ipfs.io>
2016-11-28 22:29:38 -08:00
Jeromy
396c629301 update to newer ipld node interface with Copy and better Tree
License: MIT
Signed-off-by: Jeromy <why@ipfs.io>
2016-11-15 18:00:49 -08:00
Lars Gierth
f610e19d3e coreapi: reuse go-ipld-node.Link
License: MIT
Signed-off-by: Lars Gierth <larsg@systemli.org>
2016-11-07 18:25:49 +01:00