Commit graph

83 commits

Author SHA1 Message Date
Joey Hess
3e68c1c2fd add remote state logs
This allows a remote to store a piece of arbitrary state associated with a
key. This is needed to support Tahoe, where the file-cap is calculated from
the data stored in it, and used to retrieve a key later. Glacier also would
be much improved by using this.

GETSTATE and SETSTATE are added to the external special remote protocol.

Note that the state is left as-is even when a key is removed from a remote.
It's up to the remote to decide when it wants to clear the state.

The remote state log, $KEY.log.rmt, is a UUID-based log. However,
rather than using the old UUID-based log format, I created a new variant
of that format. The new varient is more space efficient (since it lacks the
"timestamp=" hack, and easier to parse (and the parser doesn't mess with
whitespace in the value), and avoids compatability cruft in the old one.

This seemed worth cleaning up for these new files, since there could be a
lot of them, while before UUID-based logs were only used for a few log
files at the top of the git-annex branch. The transition code has also
been updated to handle these new UUID-based logs.

This commit was sponsored by Daniel Hofer.
2014-01-03 16:35:57 -04:00
Joey Hess
8e3032df2d added GETWANTED, SETWANTED for Tobias's flickr remote
This was unexpectedly difficult because of a depdenency cycle. To parse a
preferred content expression involves several things that need to operate
on the list of remotes. Which needs Remote.External. The only way to avoid
this cycle (I tried breaking it at several points) was to skip parsing the
expression in SETWANTED.

That's sorta ok, because git-annex already has to deal with unparsable
preferred content expressions being stored, in order to handle eg,
upgrades. But I'm still not very happy that I cannot check it.

I feel this is a strong indication that I need to beware of further
bloating the special remote protocol interface.
2014-01-01 20:12:20 -04:00
Joey Hess
ed1fcab6d7 external special remote protocol: Added GETUUID. 2013-12-31 13:50:18 -04:00
Joey Hess
edc662ec20 mention that INITREMOTE is also called by git-annex enableremote 2013-12-29 13:44:39 -04:00
Joey Hess
054e4f17e2 implement PREPARE-FAILURE for Tobias 2013-12-29 13:39:25 -04:00
Joey Hess
8cfaadf55c add webapp support to TODO 2013-12-27 16:37:58 -04:00
Joey Hess
445b7b41b9 add credential storage support for external special remotes & update example 2013-12-27 16:01:43 -04:00
Joey Hess
0014599dd9 hint about PROGRESS throttling 2013-12-27 14:39:56 -04:00
Joey Hess
3cd8f1bb13 todo: url lists 2013-12-27 13:09:35 -04:00
Joey Hess
9125a25738 defer SETSTATE and GETSTATE for now
TAHOE-LAFS may use these eventually, but that's TBD and none of git-annex's
own special remotes need that, except for the web special remote's urls.
2013-12-27 13:07:56 -04:00
Joey Hess
a7f3724e21 implement GETCONFIG and SETCONFIG
Changed protocol spec to make SETCONFIG only store it persistently when run
during INITREMOTE. I see no reason to support storing it persistently at
other times, and doing so would unnecessarily complicate the code.

Also, letting that be done would probably result in use for storing data that
doesn't really belong there, and special remote authors who don't
understand how the union merging works would probably be surprised the
results.
2013-12-27 12:37:23 -04:00
Joey Hess
0c972961bb update 2013-12-27 12:04:51 -04:00
Joey Hess
526a7bb2b4 improve comments 2013-12-27 02:56:52 -04:00
Joey Hess
3289155e28 don't send PREPARE before INITREMOTE
That complicated special remote programs, because they had to avoid making
PREPARE fail if some configuration is missing, because the remote might not
be initialized yet. Instead, complicate git-annex slightly by only sending
PREPARE immediately before some other request other than INITREMOTE (or
PREPARE of course).
2013-12-27 02:49:10 -04:00
Joey Hess
6d504b57e7 make some requests optional, simplify and future-proof protocol more 2013-12-27 02:11:06 -04:00
Joey Hess
0de9135bc0 external special remote documentation and example script 2013-12-26 18:15:18 -04:00
Joey Hess
38694ed582 simplify PROGRESS
Only one transfer will be running at a time, per external special remote.
2013-12-26 16:18:38 -04:00
Joey Hess
8803e36814 future-proofing 2013-12-25 20:04:31 -04:00
Joey Hess
1dc930063a basic data types and serialization for external special remote protocol
This is mostly straightforward, but did turn out quite nicely stronly
typed, and with a quite nice automatic tokenization and parsing of received
messages.

Made a few minor changes to the protocol to clear up ambiguities and make
it easier to parse. Note particularly that setting remote configuration
is moved to a separate command, which allows a remote to set arbitrary data.
2013-12-25 17:54:57 -04:00
Joey Hess
81d051cad5 simplify 2013-12-16 11:36:19 -04:00
Joey Hess
145de01ebe use messages for query responses to allow communicating error 2013-12-16 10:30:28 -04:00
Joey Hess
87662ec14c rename HAS to CHECKPRESENT for consistency with hook special remote 2013-12-13 15:32:06 -04:00
Joey Hess
cb6a703660 refine protocol
More complicated, but less asynchronous, which will make it easier for
special remote programs to use it, at the expense of some added complexity
in git-annex.
2013-12-11 17:26:27 -04:00
Joey Hess
8223066716 update 2013-12-11 14:06:14 -04:00
Joey Hess
05e84b15cc clarify 2013-12-11 14:05:00 -04:00
Joey Hess
f4d847297c update 2013-12-11 14:04:03 -04:00
Joey Hess
d180b8e5af reorder 2013-12-11 14:02:49 -04:00
Joey Hess
37df2e3ebf layout 2013-12-11 14:02:10 -04:00
Joey Hess
22c6fe501d add ERROR 2013-12-11 14:01:33 -04:00
Joey Hess
75fda11f74 update 2013-12-11 13:56:59 -04:00
Joey Hess
e800e04d2d fixfix 2013-12-11 13:53:21 -04:00
Joey Hess
8b6d3ab2b5 fix display of | 2013-12-11 13:52:51 -04:00
Joey Hess
bf0bc0b001 add design document 2013-12-11 13:31:11 -04:00