Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pull] master from ipfs:master #10

Open
wants to merge 36 commits into
base: master
Choose a base branch
from
Open

[pull] master from ipfs:master #10

wants to merge 36 commits into from

Conversation

pull[bot]
Copy link

@pull pull bot commented Oct 29, 2021

See Commits and Changes for more details.


Created by pull[bot]

Can you help keep this open source service alive? 💖 Please sponsor : )

@pull pull bot added the ⤵️ pull label Oct 29, 2021
schomatis and others added 16 commits November 11, 2021 17:12
* Renamed UpgradeableDirectory to DynamicDirectory to indicate that we can switch between Basic and HAMT Directories
* Transition between HAMT directory and Basic Directory based on the global sharding threshold
* Unexported BasicDirectory.SwitchToSharding as an unnecessary exposure point until requested
* NewDirectoryFromNode always returns a DynamicDirectory instead of an UpgradeableDirectory or HAMTDirectory

* Added Swap and Take functions to HAMT Shards
* Fix for the size estimation logic where we were not tracking that replacing an entry with a differently sized CID could trigger switching between being a Basic or HAMT directory
* Use custom parallel DAG traversal to the EnumLinksAsync for HAMTs that is closer to DFS than BFS

* Added lots of comments to the HAMT code
* Exported LogTwo function to make it more accessible within the package

Co-authored-by: Lucas Molas <schomatis@gmail.com>
Co-authored-by: Adin Schmahmann <adin.schmahmann@gmail.com>
- go-blockservice
- go-ipfs-blockstore
- go-ipfs-exchange-offline
- go-merkledag
When automatically switching a BasicDirectory to a HAMTDirectory because it
grew too big, the current code:

* loops every link in the BasicDirectory
* reads each node referenced by those links
* adds the nodes to a new HAMTDirectory shard, which in turn:
  * writes the nodes to the DAG service (they were just read from there!)
  * makes a link out of them (identical to the link in the BasicDirectory!)

This would happen to about (~4000 nodes), which are fully read and written for nothing.

This PR adds a new SetLink method to the HAMT Shard which, instead of taking
an ipld.Node like Set(), takes directly an ipld.Link. Then it updates
switchToSharding() to pass the links in the BasicDirectory directy, rather
than reading all the nodes.

Note that switchToBasic() works like this already, only using the links in the
HAMT directory.
* Fix panic when childer is nil

Signed-off-by: Antonio Navarro Perez <antnavper@gmail.com>

* Apply suggestions from code review

Co-authored-by: Gus Eggert <gus@gus.dev>

Signed-off-by: Antonio Navarro Perez <antnavper@gmail.com>
Co-authored-by: Gus Eggert <gus@gus.dev>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants