bazil.org/fuse switched from having OpenDirectIO on to having it
off by default. This has the side effect of allowing OS X's kernel
to cache the filesystem's files in its UBC, giving us incorrect
stats from cammount's .camli_fs_stats directory. This change sets
it explicitly to get the correct behaviour again.
Updates #556
Change-Id: Ic6400a550e4874086cf5fb725d423fcfde47fd61
When setting an xattr bazil.org/fuse gives us a byte slice with the
attribute value to set, but it then reuses its backing array and
we end up with garbage values in our xattr maps. This CL makes a
copy of the slice before it stores it.
Bonus edit: fix a debug message typo in muDir.Remove.
Fixes#556
Change-Id: I820d8cde3065f2949ff4c506ede705194a458afb
Unmounting a FUSE volume on Darwin fails if diskutil is not on one's
path. This is not the default on MacOS. Make the path absolute so that
FUSE volumes unmount successfully.
Change-Id: I255be19b5b12e3ebecffc6d29dc77b6504c27f1c
Replace "executeBit" with "n.attr.Mode & 0100" in "0400 & executeBit".
The result is "0400 & n.attr.Mode & 0100" which is always 0. So
"n.attr.Mode" is always 0 after the assignment. The last two "&" should be
"|" in the assignment.
Change-Id: Iaeff864f330b9db07b8a3124b5c28ba1a3469e69
StreamingFetcher is now just Fetcher, and its FetchStreaming is now
just Fetch.
SeekFetcher is gone. Blobs are max 16 MB anyway, so we can slurp to
memory when needed. The main thing that cared about SeekFetcher
was the GET handler, ServeBlobref, because http.ServeContent needed
one for range requests. That's rewritten in an earlier commit, using
the FakeSeeker from another earlier commit.
Lot of code got simpler as a result.
Change-Id: Ib819413e48a8f9b8d97f596d0fbf771dab211f11
import bazil.org/fuse at f6649cd46fb76b1e04ba9eeffb773cb189278d31
remove code.google.com/p/rsc/fuse.
Huge thanks to Tommi Virtanen for the fuse support.
Change-Id: I44b95ac1ea344648593c7376f83ca675a56077b3
The request is unnecessary, and the server doesn't appreciate it.
fix http://camlistore.org/issue/335
Change-Id: Ie37f1d187883dbc86a365f536a12c6b9916bc8d9
This provides a considerably improved experience for from a single FUSE
client, but not for free.
New dirents introduced outside of FUSE will be visible on the normal
refresh interval.
Removals outside of FUSE are tricky because it's not possible to tell
the difference between a file that was locally created and hasn't made
it into the index yet from a file that was deleted remotely.
Specific dirents that change permanodes outside of FUSE are replaced.
Dirents that change properties outside of FUSE without changing
permanodes (e.g. content, etc...) are never picked up.
Change-Id: I7cc8eaea5951644809053fc97c28455e96508bd4
Fixes: http://calistore.org/issue/328
On at least OS X, the stat(2) call will use an existing node without
issuing Lookup. This introduces a filesystem inconsistency where a
delete removes an entry for further requests, but FUSE's cached access
of the node is still used for at least stat.
There's a call to Access directly against the node as retrieved from a
prior Lookup. By invalidating the nodes when they're deleted and
verifying this at Access time, we keep things more consistent.
This isn't exactly camlistore.org/issue/324 as described, but it was
causing one of the tests to fail on OS X
Change-Id: Ib90a1de79d6d3960f96bac5b4fb448c952c4ba66
If we ever return a particular value for a root, we should continue to
return the same value to provide a consistent view.
camlistore.org/issue/324
Change-Id: I7cfad02ad742b0e70e333f70779d64ba163d68a6
This includes read-write support for extended attributes for mutable
files, and enough support on all other filesystem paths to prevent OS X
from falling back to AppleDouble files.
Change-Id: I2b275591f3bc69c25e1e9c8d59a7fa4cf0bb97ff
If a well-timed lookup occurs while a file is being created, after the
permanode is available, but before any attribute claims declaring file
content, the file will be assumed to be a directory.
Ideally, FUSE would only hold on to this mistake for about a minute, or
the duration of the attribute cache, but it's much longer in practice.
Even with cammount effectively disabling all caches and returning fresh
dirents with random inodes, FUSE seemingly never sent in another Lookup
request for the broken entry.
While I wouldn't consider this a fix for the condition at large, I do
believe being explicit about what's a file, symlink, or directory is the
correct thing to do.
See also: http://camlistore.org/issue/293
Change-Id: I64d4afc8dfdb87b9b121d161936dd613139f00e2
This is essentially two things:
1. Trivial changes to fs_test to make it not skip on Linux
2. Move much of the logic that was in *mutFile.Release into *mutFile.Flush
See http://sourceforge.net/apps/mediawiki/fuse/index.php?title=FUSE_tutorial
and the FUSE FAQ for an explanation of Flush vs. Release.
Change-Id: Id63312b3f8ebf12917338b836beb8a7a736d4fe6
Rather than allowing files to be opened read/write an than returning EIO
on actual writes, just don't let them be opened writable.
Change-Id: I73991e535adcde6eb012b28ae01537ffae1621bb
-osutil: PollParent to monitor parent process.
-camlistored: option to kill itself if it has been orphaned.
Change-Id: I87193254d55847e46134439ecd1b04f71718d083