-
-
Notifications
You must be signed in to change notification settings - Fork 3k
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
Add Files API root as best-effort pin #2872
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
#!/bin/sh | ||
# | ||
# Copyright (c) 2016 Kevin Atkinson | ||
# MIT Licensed; see the LICENSE file in this repository. | ||
# | ||
|
||
test_description="test how the unix files api interacts with the gc" | ||
|
||
. lib/test-lib.sh | ||
|
||
test_init_ipfs | ||
|
||
test_expect_success "object not removed after gc" ' | ||
echo "hello world" | ipfs files write --create /hello.txt && | ||
ipfs repo gc && | ||
ipfs cat QmVib14uvPnCP73XaCDpwugRuwfTsVbGyWbatHAmLSdZUS | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we should also add another There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @whyrusleeping Added. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. So... if this is "best effort", under what conditions should gc remove these, and can we make sure to test that here? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. All "best effort" means is not to abort if a child is unreadable. For the GC to remove the object will need to be detached somehow from the MFS Root. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @kevina want to take this one on and add a few more tests?
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. OK Will do. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
@whyrusleeping See #3151 |
||
' | ||
|
||
test_expect_success "/hello.txt still accessible after gc" ' | ||
ipfs files read /hello.txt | ||
' | ||
|
||
ADIR_HASH=QmbCgoMYVuZq8m1vK31JQx9DorwQdLMF1M3sJ7kygLLqnW | ||
FILE1_HASH=QmX4eaSJz39mNhdu5ACUwTDpyA6y24HmrQNnAape6u3buS | ||
|
||
test_expect_success "gc okay after adding incomplete node -- prep" ' | ||
ipfs files mkdir /adir && | ||
echo "file1" | ipfs files write --create /adir/file1 && | ||
echo "file2" | ipfs files write --create /adir/file2 && | ||
ipfs cat $FILE1_HASH && | ||
ipfs pin add --recursive=false $ADIR_HASH && | ||
ipfs files rm -r /adir && | ||
ipfs repo gc && # will remove /adir/file1 and /adir/file2 but not /adir | ||
test_must_fail ipfs cat $FILE1_HASH && | ||
ipfs files cp /ipfs/$ADIR_HASH /adir && | ||
ipfs pin rm $ADIR_HASH | ||
' | ||
|
||
test_expect_success "gc okay after adding incomplete node" ' | ||
ipfs refs $ADIR_HASH && | ||
ipfs repo gc && | ||
ipfs refs $ADIR_HASH | ||
' | ||
|
||
test_done |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i strongly dislike how this is implemented. Adding
bestEffort
here to this function ruins the whole abstraction. You can implement this "best effort" notion outside of this function, just in the GC function.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jbenet in this function (Descendants) and EnumerateChildren all that bestEffort means is to not abort if a child is unreadable. In order to collect the set of keys to keep on a "best effort" bases I needed a way to to collected all the children of the initial best effort set that are local on the node.
I am not entirely clear what abstraction I am ruining so I am not 100% sure how to fix this. I could create a new function to find the Descendants of a keySet that doesn't abort on an error, but to me it seamed better to extend the functionally of the existing function.
@whyrusleeping I could appreciate any insights you can offer.