tahoe-lafs/tahoe-lafs.git
12 years agoDisplay serverids consistently as 8-char pubkey, or 6-char tubid.
Brian Warner [Tue, 12 Jun 2012 21:01:24 +0000 (14:01 -0700)]
Display serverids consistently as 8-char pubkey, or 6-char tubid.

This makes it easy to distinguish between old V1-Introducer
nodes (identified by their Foolscap TubID) and new V2 nodes (identified
by their ed25519 pubkey).

This fixes a few places where we used to display a tubid even if we had
a pubkey, making it hard to visually correlate servers in two different
displays. It also cleans up the way we pass serverids to the JS-based
download timeline.

The "introweb" subscribed-clients list still shows tubids.

12 years agotest_system.py: wait for the Helper connection properly before uploading
Brian Warner [Tue, 12 Jun 2012 06:19:30 +0000 (23:19 -0700)]
test_system.py: wait for the Helper connection properly before uploading

12 years agotest_system.py: clean up control flow, reduce use of stall()
Brian Warner [Tue, 12 Jun 2012 01:22:35 +0000 (18:22 -0700)]
test_system.py: clean up control flow, reduce use of stall()

The _upload_resumable() test interrupts a Helper upload partway
through (by shutting down the Helper), then restarts the Helper and
resumes the upload. The control flow is kind of tricky: to do anything
"partway through" requires adding a hook to the Uploadable. The previous
flow depended upon a (fragile) call to self.stall(), which waits a fixed
number of seconds.

This removes one of those stall() calls (the remainder is in
test/common.py and I'll try removing it in a subsequent revision). It
also removes some now-redundant wait_for_connections() calls, since
bounce_client() doesn't fire its Deferred until the client has finished
coming back up (and uses wait_for_connections() internally to do so).

12 years agotest_system.py: fix minor typo
Brian Warner [Tue, 12 Jun 2012 01:16:36 +0000 (18:16 -0700)]
test_system.py: fix minor typo

12 years agooffloaded.py: don't drop the Deferred
Brian Warner [Tue, 12 Jun 2012 01:16:02 +0000 (18:16 -0700)]
offloaded.py: don't drop the Deferred

There was one corner case (where the client disconnects at just the
wrong time) that could have dropped a Deferred, leading to an Unhandled
Error. Clean up the control flow to avoid this case.

12 years agosetup.py and bin/tahoe-script.template: the error when we try to use Python 3 should...
david-sarah [Mon, 11 Jun 2012 03:52:16 +0000 (03:52 +0000)]
setup.py and bin/tahoe-script.template: the error when we try to use Python 3 should give the correct minimum Python version (now 2.5). refs #1658

12 years agointroducer: add sequence-numbers to announcements, ignore replays
Brian Warner [Mon, 11 Jun 2012 02:10:22 +0000 (19:10 -0700)]
introducer: add sequence-numbers to announcements, ignore replays

This will support revocation of Accounting recommendation records,
assuming the gossip-based broadcast channel isn't easily jammed.

12 years agoclient.py: rename "server key" to "node key", use old name if present
Brian Warner [Mon, 11 Jun 2012 01:14:55 +0000 (18:14 -0700)]
client.py: rename "server key" to "node key", use old name if present

This prepares for invitation-based reciprocal-permission Accounting. In
the scheme I'm developing, nodes publish "I accept shares from Y"
messages, which are assembled into a graph, and server will accept
shares from any client node reachable in this graph. For this to work,
the serverX->clientY edge must be connectable to the serverY->clientZ
edge, which means "clientY" and "serverY" must be connected. If clientY
and serverY are two distinct keys, they must be cross-signed. Life is
easier if there's just one key "Y", rather than distinct client- and
server- keys. Calling this one key "server.privkey" would be confusing.
"node.privkey" and "node.pubkey" makes more sense.

One-server-per-node is a pretty easy restriction. Originally I was
thinking that the client.key should be provided in each webapi call,
just like a filecap is, making a single node useable by multiple users
(Accounting principals), and not providing any ambient storage
authority. But I've been unable to think of a comfortable WUI for
that (at least without requiring javascript), nor a friendly way to
transfer account authority (e.g. writecaps that include storage
authority). So I'm more willing to have one-client-per-node these days.

(and note that this rename doesn't seriously preclude
many-clients-per-node or zero-clients-per-node anyways, it just makes
one-client-per-node less awkward)

12 years agonode.py: add get_private_config()
Brian Warner [Mon, 11 Jun 2012 00:46:38 +0000 (17:46 -0700)]
node.py: add get_private_config()

Also add tests for this and the pre-existing private-config methods.

12 years agoAdded docs/specifications/backends/raic.rst for ticket #1760
Patrick R McDonald [Wed, 6 Jun 2012 02:35:23 +0000 (21:35 -0500)]
Added docs/specifications/backends/raic.rst for ticket #1760

12 years agoFix text in Publish Status results. Closes #1762.
Brian Warner [Fri, 8 Jun 2012 22:21:46 +0000 (15:21 -0700)]
Fix text in Publish Status results. Closes #1762.

12 years agoCheckResults corrupt/incompatible shares now return IServers 10/head
Brian Warner [Fri, 25 May 2012 19:58:28 +0000 (12:58 -0700)]
CheckResults corrupt/incompatible shares now return IServers

DeepResultsBase also has a get_corrupt_shares(), and it is populated
from CheckResults.get_corrupt_shares(). It has been updated too, along
with get_remaining_corrupt_shares().

Remove temporary get_new_corrupt_shares() and
get_new_incompatible_shares().

12 years agoCheckResults.get_servers_responding() now returns IServers
Brian Warner [Fri, 25 May 2012 19:58:18 +0000 (12:58 -0700)]
CheckResults.get_servers_responding() now returns IServers

Remove temporary get_new_servers_responding().

12 years agoCheckResults.get_sharemap() now returns IServers
Brian Warner [Fri, 25 May 2012 19:58:02 +0000 (12:58 -0700)]
CheckResults.get_sharemap() now returns IServers

Remove temporary get_new_sharemap().

12 years agoCheckResults: pass IServer to corrupt/incompatible share locators
Brian Warner [Fri, 25 May 2012 19:57:53 +0000 (12:57 -0700)]
CheckResults: pass IServer to corrupt/incompatible share locators

Getters still return serverid. Adds temporary get_new_corrupt_shares()
and get_new_incompatible_shares().

12 years agoCheckResults: pass IServer to servers_responding=, getter returns serverid
Brian Warner [Fri, 25 May 2012 19:56:20 +0000 (12:56 -0700)]
CheckResults: pass IServer to servers_responding=, getter returns serverid

Add temporary get_new_servers_responding().

12 years agoCheckResults: pass IServer to sharemap=, but get_sharemap() returns serverids
Brian Warner [Fri, 25 May 2012 19:56:03 +0000 (12:56 -0700)]
CheckResults: pass IServer to sharemap=, but get_sharemap() returns serverids

This changes all code which feeds CheckResults(sharemap=) to provide
IServer instances, but CheckResults converts these to old-style
serverids during output, so downstream code doesn't have to change yet.

It adds a temporary get_new_sharemap(), which *does* return IServer
instances, so the immutable repairer can build new CheckResults from an
old one. This will go away when get_sharemap() is updated to return
IServer (and downstream code is updated too).

12 years agoCheckResults: internal cleanup
Brian Warner [Fri, 25 May 2012 19:55:48 +0000 (12:55 -0700)]
CheckResults: internal cleanup

replace the one-big-dictionary with normal private attributes

12 years agoCheckResults: privatize remaining attributes
Brian Warner [Fri, 25 May 2012 19:29:10 +0000 (12:29 -0700)]
CheckResults: privatize remaining attributes

12 years agoCheckResults: use fat init, add type-checking assertions
Brian Warner [Fri, 25 May 2012 07:14:46 +0000 (00:14 -0700)]
CheckResults: use fat init, add type-checking assertions

Added assertions for sharemap, servermap, servers_responding,
list_corrupt_shares, and list_incompatible_shares.

12 years agomutable/checker: refactor to make CheckResults easier to change
Brian Warner [Fri, 25 May 2012 07:14:18 +0000 (00:14 -0700)]
mutable/checker: refactor to make CheckResults easier to change

12 years agoCheckResults: replace get_data() with as_dict(), use getters in web status
Brian Warner [Fri, 25 May 2012 07:14:08 +0000 (00:14 -0700)]
CheckResults: replace get_data() with as_dict(), use getters in web status

12 years agouse the new CheckResult getters almost everywhere
Brian Warner [Fri, 25 May 2012 07:13:48 +0000 (00:13 -0700)]
use the new CheckResult getters almost everywhere

The remaining get_data() calls are either in
web.check_results.json_check_results(), or functioning as repr()s in
various unit test failure cases.

12 years agoCheckResults: replace get_data() with a bunch of individual getters
Brian Warner [Fri, 25 May 2012 07:13:32 +0000 (00:13 -0700)]
CheckResults: replace get_data() with a bunch of individual getters

12 years agochange CheckResults to use a fat set_data()
Brian Warner [Fri, 25 May 2012 07:13:23 +0000 (00:13 -0700)]
change CheckResults to use a fat set_data()

i.e. change set_data() to accept lots of parameters, instead of taking
a single dictionary with lots of keys. Also Convert all CheckResults
creators to use it.

12 years agoCheckResults: simplify self._data
Brian Warner [Fri, 25 May 2012 07:13:13 +0000 (00:13 -0700)]
CheckResults: simplify self._data

12 years agoCheckResults: start hiding .data, first step to clean it up
Brian Warner [Tue, 15 May 2012 04:57:43 +0000 (21:57 -0700)]
CheckResults: start hiding .data, first step to clean it up

The goal is to make CheckResults more strongly typed, and remove the
ambiguous ".data" field in favor of a bunch of specific counters and
sharelists, so I can changes .sharemap and .servermap to use IServer
instances instead of string serverids. By cleaning this up first, I hope
to get that task done with less debugging.

12 years agoimmutable.CiphertextFileNode.check_and_repair: simplify for refactoring
Brian Warner [Tue, 15 May 2012 04:53:49 +0000 (21:53 -0700)]
immutable.CiphertextFileNode.check_and_repair: simplify for refactoring

There were too many nested functions here, making some upcoming changes
too difficult, so let's refactor it first.

12 years agodocs/quickstart.rst: fix rst warning.
david-sarah [Fri, 1 Jun 2012 21:01:04 +0000 (21:01 +0000)]
docs/quickstart.rst: fix rst warning.

12 years agoRestore --rterrors option to 'setup.py test' and 'setup.py trial' to keep buildbots...
david-sarah [Thu, 31 May 2012 22:23:07 +0000 (22:23 +0000)]
Restore --rterrors option to 'setup.py test' and 'setup.py trial' to keep buildbots happy. refs #1699

12 years agoChange 'setup.py test' and 'setup.py trial' to pass --rterrors to trial by default...
david-sarah [Thu, 31 May 2012 22:00:00 +0000 (22:00 +0000)]
Change 'setup.py test' and 'setup.py trial' to pass --rterrors to trial by default. Suppress using --no-rterrors. Also pass --until-failure/-u to trial. fixes #1699

12 years agoCatch exceptions from CLI in order to prevent the Ubuntu crash monolog from triggerin...
david-sarah [Sun, 20 May 2012 15:35:29 +0000 (15:35 +0000)]
Catch exceptions from CLI in order to prevent the Ubuntu crash monolog from triggering. refs #1746

12 years agonode.py: stop stripping whitespace in write_private_config()
Brian Warner [Wed, 30 May 2012 07:17:55 +0000 (00:17 -0700)]
node.py: stop stripping whitespace in write_private_config()

It's nice to add newlines to the saved file, so 'cat' is easy to use. We
still strip on the input side, in get_or_create_private_config().

12 years agotest_web.py: fix memory leak when run with --until-failure
Brian Warner [Tue, 22 May 2012 22:18:26 +0000 (15:18 -0700)]
test_web.py: fix memory leak when run with --until-failure

The Fake*Node classes in test/common.py were accumulating share data in
a class-level dictionary, which persisted from one test run to the next.
As a result, running test_web.py over and over (with trial's
--until-failure feature) made this dictionary grow without bound,
eventually running out of memory.

This fix moves that dictionary into the FakeClient built fresh for each
test, so it doesn't build up. It does the same thing for "file_types",
which was much smaller but still lived at the class level.

Closes #1729

12 years agotest/check_memory.py: oops, fix one last ur.uri -> ur.get_uri()
Brian Warner [Tue, 22 May 2012 15:50:36 +0000 (08:50 -0700)]
test/check_memory.py: oops, fix one last ur.uri -> ur.get_uri()

12 years agochange UploadResults to return IServers, update users to match 8/head
Brian Warner [Tue, 22 May 2012 04:18:37 +0000 (21:18 -0700)]
change UploadResults to return IServers, update users to match

This finally changes all callers of get_servermap()/get_sharemap() to
accept IServers, and changes UploadResults to provide them.

12 years agoUploadResults: store IServers internally, but still return serverids
Brian Warner [Tue, 22 May 2012 04:18:25 +0000 (21:18 -0700)]
UploadResults: store IServers internally, but still return serverids

This stores IDisplayableServer-providing instances (StubServers or
NativeStorageServers) in the .servermap and .sharemap dictionaries. But
get_servermap()/get_sharemap() still return data structures with
serverids, not IServers, by translating their data on the way out. This
lets us put off changing the callers for a little bit longer.

12 years agosplit IDisplayableServer from IServer, add sb.get_stub_server()
Brian Warner [Tue, 22 May 2012 04:17:27 +0000 (21:17 -0700)]
split IDisplayableServer from IServer, add sb.get_stub_server()

IDisplayableServer includes just enough functionality to call
.get_name() and friends, which is all that the UploadResults really
need. IServer is a superset that includes actual share-manipulation
methods. StubServer instances provide only IDisplayableServer, while
actual NativeStorageServer instances provide the full IServer interface.

When the Helper sends a serverid (so we know what to call the server but
nothing else about it, and have no corresponding NativeStorageServer
object to reference), but we want to store an IDisplayableServer in the
UploadResults, we create a synthetic StubServer "server" and store that
instead.

12 years agoswitch UploadResults to use get_uri(), hide internal ._uri
Brian Warner [Tue, 22 May 2012 04:14:44 +0000 (21:14 -0700)]
switch UploadResults to use get_uri(), hide internal ._uri

Complete the getter-based transformation, by hiding ".uri" and updating
callers to use get_uri(). Also don't set a dummy self._uri, leave it
undefined until someone calls set_uri().

12 years agoswitch UploadResults to use getters, hide internal data, for all but .uri
Brian Warner [Tue, 22 May 2012 04:14:28 +0000 (21:14 -0700)]
switch UploadResults to use getters, hide internal data, for all but .uri

This hides attributes with e.g. _sharemap, and creates getters like
get_sharemap() to access them, for every field except .uri . This will
make it easier to modify the internal representation of .sharemap
without requiring callers to adjust quite yet.

".uri" has so many users that it seemed better to update it in a
subsequent patch.

12 years agoconvert UploadResults to a fat init
Brian Warner [Tue, 22 May 2012 04:14:14 +0000 (21:14 -0700)]
convert UploadResults to a fat init

Populate most of UploadResults (except .uri, which is learned later when
using a Helper) in the constructor, instead of allowing creators to
write to attributes later. This will help isolate the fields that we
want to change to use IServers.

12 years agoadd HelperUploadResults
Brian Warner [Tue, 22 May 2012 04:14:00 +0000 (21:14 -0700)]
add HelperUploadResults

This splits the pb.Copyable on-wire object (HelperUploadResults) out
from the local results object (UploadResults). To maintain compatibility
with older Helpers, we have to leave pb.Copyable classes alone and
unmodified, but we want to change UploadResults to use IServers instead
of serverids. So by using a different class on the wire, and translating
to/from it on either end, we can accomplish both.

12 years agoUploader cleanup: create results at end, not beginning
Brian Warner [Tue, 22 May 2012 04:13:47 +0000 (21:13 -0700)]
Uploader cleanup: create results at end, not beginning

This will make it easier to populate the UploadResults during __init__,
instead of doing it one-field-at-a-time later.

12 years agoclean up Helper to make later changes easier
Brian Warner [Tue, 22 May 2012 04:13:32 +0000 (21:13 -0700)]
clean up Helper to make later changes easier

Fix up control flow inside the Helper, to make it more friendly for
later refactoring.

12 years agohelper: remove timings["existence_check"], aka "Already-In-Grid Check"
Brian Warner [Tue, 22 May 2012 04:13:11 +0000 (21:13 -0700)]
helper: remove timings["existence_check"], aka "Already-In-Grid Check"

This measured how long the Helper took to do a filecheck before asking
for ciphertext. The "Contacting Helper" report includes both
existence_check and the client-helper RTT.

For non-overlapping uploads, it was being returned correctly. But when
multiple upload requests overlapped, and the file was not already in the
grid, the filecheck would only run once, and its existence_check time
would be reported for all uploaders (even if they didn't have to wait
for that time). Cleaning that up proved too difficult: the only correct
place to report this time is from the initial remote_upload_chk() call,
but the return value of that is too constrained to accomodate it in the
needs-upload case.

So I'm removing it altogether. Eventually I plan to add a proper
events/times field and record more data, including this check, in a form
that can be drawn on a nice zoomable timeline view.

Old clients talking to a new Helper (which doesn't supply the value)
will tolerate the loss (they'll just display an empty field on the web
view).

12 years agotest_checker: minor improvement in fake-server setup
Brian Warner [Thu, 17 May 2012 17:50:16 +0000 (10:50 -0700)]
test_checker: minor improvement in fake-server setup

This prepares for testing the differences between tubid and pubkey-based
name/longname.

12 years agodocs/frontends/FTP-and-SFTP.rst: remove outdated allmydata.com reference. fixes ...
david-sarah [Fri, 18 May 2012 22:56:18 +0000 (22:56 +0000)]
docs/frontends/FTP-and-SFTP.rst: remove outdated allmydata.com reference. fixes #1743

12 years agoSince we now require Python 2.5, we can use os.SEEK_END.
david-sarah [Wed, 16 May 2012 21:39:48 +0000 (21:39 +0000)]
Since we now require Python 2.5, we can use os.SEEK_END.

12 years agoSimplifications resulting from requiring Python 2.5 and therefore being able to use...
david-sarah [Wed, 16 May 2012 02:47:25 +0000 (02:47 +0000)]
Simplifications resulting from requiring Python 2.5 and therefore being able to use sqlite3 from the standard library. This also drops sqlite3 from the set of versions and paths we report.

12 years agoRequire Python 2.5.
david-sarah [Wed, 16 May 2012 02:41:49 +0000 (02:41 +0000)]
Require Python 2.5.

12 years agomisc/build_helpers/check-interfaces.py: avoid spurious warnings about ignored excepti...
david-sarah [Fri, 18 May 2012 02:12:52 +0000 (02:12 +0000)]
misc/build_helpers/check-interfaces.py: avoid spurious warnings about ignored exceptions on shutdown. Also make the check function able to write errors to an arbitrary stream.

12 years agodictutil.DictOfSets: remove .union() method, it was misleading
Brian Warner [Wed, 16 May 2012 23:50:57 +0000 (16:50 -0700)]
dictutil.DictOfSets: remove .union() method, it was misleading

Unlike set.union(), which returns a new set, DictOfSets.union() modified
the DictOfSets in-place. The name collision bit me when I changed some
code from using DictOfSets to a normal set, and expected that
set.union() would modify the set in-place. Since there was only one user
of DictOfSets.union, I figured it was safer to just get rid of it.

12 years agoimmutable repairer: populate servers-responding properly
Brian Warner [Wed, 16 May 2012 23:50:43 +0000 (16:50 -0700)]
immutable repairer: populate servers-responding properly

If a server did not respond to the pre-repair filecheck, but did respond
to the repair, that server was not correctly added to the
RepairResults.data["servers-responding"] list. (This resulted from a
buggy usage of DictOfSets.union() in filenode.py).

In addition, servers to which filecheck queries were sent, but did not
respond, were incorrectly added to the servers-responding list
anyawys. (This resulted from code in the checker.py not paying attention
to the 'responded' flag).

The first bug was neatly masked by the second: it's pretty rare to have
a server suddenly start responding in the one-second window between a
filecheck and a subsequent repair, and if the server was around for the
filecheck, you'd never notice the problem. I only spotted the smelly
code while I was changing it for IServer cleanup purposes.

I added coverage to test_repairer.py for this. Trying to get that test
to fail before fixing the first bug is what led me to discover the
second bug. I also had to update test_corrupt_file_verno, since it was
incorrectly asserting that 10 servers responded, when in fact one of
them throws an error (but the second bug was causing it to be reported
anyways).

12 years agoUpdate my (davidsarah) gpg fingerprint in CREDITS. Mwahaha! :-)
david-sarah [Wed, 16 May 2012 23:15:26 +0000 (23:15 +0000)]
Update my (davidsarah) gpg fingerprint in CREDITS. Mwahaha! :-)

12 years agofileutil.py: use try/finally to close file in write_atomically.
david-sarah [Wed, 16 May 2012 23:08:39 +0000 (23:08 +0000)]
fileutil.py: use try/finally to close file in write_atomically.

12 years agoChange logging.rst to address warner's review comment. refs #1693
david-sarah [Wed, 16 May 2012 22:13:29 +0000 (22:13 +0000)]
Change logging.rst to address warner's review comment. refs #1693

12 years agowrite node.url and portnum files atomically, to fix race in test_runner
Brian Warner [Mon, 14 May 2012 20:32:03 +0000 (13:32 -0700)]
write node.url and portnum files atomically, to fix race in test_runner

Previously, test_runner sometimes fails because the _node_has_started()
poller fires after the portnum file has been opened, but before it has
actually been filled, allowing the test process to observe an empty file,
which flunks the test.

This adds a new fileutil.write_atomically() function (using the usual
write-to-.tmp-then-rename approach), and uses it for both node.url and
client.port . These files are written a bit before the node is really up and
running, but they're late enough for test_runner's purposes, which is to know
when it's safe to read client.port and use 'tahoe restart' (and therefore
SIGINT) to restart the node.

The current node/client code doesn't offer any better "are you really done
with startup" indicator.. the ideal approach would be to either watch the
logfile, or connect to its flogport, but both are a hassle. Changing the node
to write out a new "all done" file would be intrusive for regular
operations.

12 years agoImprove a comment in __init__.py.
david-sarah [Mon, 14 May 2012 16:34:31 +0000 (16:34 +0000)]
Improve a comment in __init__.py.

12 years agoSuppress the PowmInsecureWarning from PyCrypto. refs #1586
david-sarah [Mon, 14 May 2012 03:23:52 +0000 (03:23 +0000)]
Suppress the PowmInsecureWarning from PyCrypto. refs #1586

12 years agoClarify an ambiguity about which version number is meant in quickstart.rst.
david-sarah [Mon, 14 May 2012 00:26:37 +0000 (00:26 +0000)]
Clarify an ambiguity about which version number is meant in quickstart.rst.

12 years agoperformance.rst: small updates, mention (lack of) MDMF
Brian Warner [Sun, 13 May 2012 21:07:39 +0000 (14:07 -0700)]
performance.rst: small updates, mention (lack of) MDMF

refs #1398

12 years agoCREDITS: add amiller, zooko, rearrange a bit
Brian Warner [Sun, 13 May 2012 17:32:17 +0000 (10:32 -0700)]
CREDITS: add amiller, zooko, rearrange a bit

12 years agoDoc updates and cosmetic fixes for #1115 patch.
Brian Warner [Sun, 13 May 2012 08:12:22 +0000 (01:12 -0700)]
Doc updates and cosmetic fixes for #1115 patch.

Removes the caveat from webapi.txt about count-good-share-hosts being wrong.

This series should close #1115.

12 years agoFixed an error in previous commit where an empty servermap would throw an exception...
Andrew Miller [Sun, 1 Apr 2012 23:31:53 +0000 (19:31 -0400)]
Fixed an error in previous commit where an empty servermap would throw an exception in 'count-good-share-hosts'. Augmented unit test.

Signed-off-by: Andrew Miller <amiller@dappervision.com>
12 years agoAdded tests for count-good-share-hosts under check and repair conditions. Patched...
Andrew Miller [Sun, 1 Apr 2012 05:55:19 +0000 (01:55 -0400)]
Added tests for count-good-share-hosts under check and repair conditions. Patched the incorrect computation in immutable/filenode.py

Signed-off-by: Andrew Miller <amiller@dappervision.com>
Fixed missing import statements

Signed-off-by: Andrew Miller <amiller@dappervision.com>
12 years agotest_web: fix use of headers= that's been wrong for a while
Brian Warner [Sun, 13 May 2012 07:42:24 +0000 (00:42 -0700)]
test_web: fix use of headers= that's been wrong for a while

12 years agowebapi: don't allow ETags in t=info or t=rename-form, both are variable
Brian Warner [Sun, 13 May 2012 07:41:53 +0000 (00:41 -0700)]
webapi: don't allow ETags in t=info or t=rename-form, both are variable

t=info contains randomly-generated ophandles, and t=rename-form contains the
name of the child being renamed, so neither is eligible for a
short-circuiting ETag. Enhanced test_web to exercise this. Had to improve
FakeCHKFileNode slightly to let it participate. Refs #443.

12 years agotest_web: improve ETag tests, add If-None-Match test
Brian Warner [Sun, 13 May 2012 07:19:20 +0000 (00:19 -0700)]
test_web: improve ETag tests, add If-None-Match test

12 years agoAdded unit tests covering #466:comment-15. Refactored the 'etag' behavior for immutab...
Andrew Miller [Sat, 31 Mar 2012 20:46:34 +0000 (16:46 -0400)]
Added unit tests covering #466:comment-15. Refactored the 'etag' behavior for immutable files to respond to all GET '?t=' flags, not just t=None

Signed-off-by: Andrew Miller <amiller@dappervision.com>
12 years agoShort circuit GET on ETags match
Jeremy Fitzhardinge [Sun, 13 May 2012 03:42:52 +0000 (20:42 -0700)]
Short circuit GET on ETags match

When client does a conditional GET/HEAD with If-none-match:, if the condition
fails (ie, the client's ETag matches the file's) then we can short-circuit
the whole process and immediately return an empty body.

12 years agoAdd ETags for immutable directories
Jeremy Fitzhardinge [Sun, 13 May 2012 03:42:52 +0000 (20:42 -0700)]
Add ETags for immutable directories

Like immutable files, the ETag is based on the storage index. However, since
a directory is a special interpretation of a file, it is distinguished from
the file by prepending "DIR:" onto the start of the ETag, and adding
-representation on the end (where -representation is the ?t= argument, json,
info, etc).

It also checks the return of setETag and avoids generating a representation
if the client already has it.

12 years agotest-dont-use-too-old-dep.py: fix tarfile timestamps
Brian Warner [Sun, 13 May 2012 06:33:11 +0000 (23:33 -0700)]
test-dont-use-too-old-dep.py: fix tarfile timestamps

It turns out that TarFile.addfile() doesn't provide a reasonable default
timestamp, resulting in files dated to 1970 (they're probably wearing
bell-bottoms and listening to disco too). Then, when the bdist_egg command
tries to create a *zip*file with those files, it explodes because zipfiles
cannot handle timestamps before 1980 (it prefers boomboxes and jackets with
straps on the shoulders, thank you very much).

This puts a modern time.time() on the members of the tarfile, allowing future
cryptocoderarchaeologists the opportunity to make fun of fashion trends from
the user's chosen era, rather than an artificially older one.

refs #1342

12 years agoAdd 'tahoe debug flogtool' command, test for --help, and docs. This version gets...
david-sarah [Sat, 31 Mar 2012 22:41:22 +0000 (22:41 +0000)]
Add 'tahoe debug flogtool' command, test for --help, and docs. This version gets the help synopses more correct, and changes the doc to say that this command is added in 1.10.0 rather than 1.9.2. fixes #1693

12 years agomodify build_helpers files
Zooko [Sun, 13 May 2012 03:42:52 +0000 (20:42 -0700)]
modify build_helpers files

Should close #1342. This makes the actual changes to the two test
files (separated from the 'rename' patch to avoid VC complications).

12 years agorename build_helpers files
Zooko [Sun, 13 May 2012 02:59:59 +0000 (19:59 -0700)]
rename build_helpers files

This is from the darcs patch for #1342, which failed to apply on my darcs
tree, so I'm landing it from git. I'm landing the rename-files part
separately from the modify-those-files part to avoid VC complications.

12 years agowebapi: remove undocumented t=mkdir-p operation
Brian Warner [Sun, 13 May 2012 02:19:43 +0000 (19:19 -0700)]
webapi: remove undocumented t=mkdir-p operation

Closes #380

12 years agoImprove webapi t=move docs.
Brian Warner [Wed, 9 May 2012 23:46:53 +0000 (16:46 -0700)]
Improve webapi t=move docs.

12 years agowebui: merge 'move' form with 'rename' form
Brian Warner [Wed, 9 May 2012 21:18:44 +0000 (14:18 -0700)]
webui: merge 'move' form with 'rename' form

12 years agotest_web: improve shouldFail2() error reporting
Brian Warner [Wed, 9 May 2012 21:18:37 +0000 (14:18 -0700)]
test_web: improve shouldFail2() error reporting

12 years agowebapi 'move'-button cleanups
Brian Warner [Wed, 9 May 2012 21:18:27 +0000 (14:18 -0700)]
webapi 'move'-button cleanups

test_web.py: use shouldFail2(), safer than old shouldFail()
directory.py: forbid slashes in from_name=, return BAD_REQUEST instead of
              GONE when trying to move into a non-directory

12 years agoAdd unit test for moving a directory
Marcus Wanner [Thu, 24 Nov 2011 06:51:42 +0000 (01:51 -0500)]
Add unit test for moving a directory

My gut tells me this case sould be tested. The rename suite tests it, so
move's will too.

12 years agoChange the arbitrary URI support from implied to explicit
Marcus Wanner [Sat, 19 Nov 2011 01:42:10 +0000 (20:42 -0500)]
Change the arbitrary URI support from implied to explicit

The move webapi function now takes a target_type argument which lets it
know whether the target is a subdirectory name or URI. This is an
improvement over the old system in which the move handler tried to guess
whether the target was a name or a URI. Also fixed a little docs
copypaste problem and tweaked some line wrapping.

12 years agoAdding 'move' button to web UI, closes #1579
Marcus Wanner [Thu, 10 Nov 2011 08:00:11 +0000 (03:00 -0500)]
Adding 'move' button to web UI, closes #1579

This adds "move file" capability to the web UI's directory display. The
support and test framework is heavily based on the similar "rename file"
feature. Unit tests and documentation are included. Multiple in-progress
versions of this patch may be found in ticket 1579. This version
includes arbitrary URI target support and is compatible with the change
from tahoe_css to tahoe.css.

12 years agoCREDITS: lebek
Zooko O'Whielacronx [Thu, 3 May 2012 17:30:33 +0000 (17:30 +0000)]
CREDITS: lebek

12 years agoMake sure that foolscap.logging.log.setLogDir is called with a str (not unicode)...
david-sarah [Sun, 29 Apr 2012 02:28:44 +0000 (02:28 +0000)]
Make sure that foolscap.logging.log.setLogDir is called with a str (not unicode) path, v2. Includes test. fixes #1725

12 years agointroweb announcements: show serverid, not tubid
Brian Warner [Tue, 24 Apr 2012 05:37:28 +0000 (01:37 -0400)]
introweb announcements: show serverid, not tubid

'serverid' is the pubkey (for V2 clients), falling back to the tubid (for V1
clients). This also required cleaning up the way the index is created for the
old V1 introducer.

12 years agoFix introweb display for mixed V1/V2 clients. Closes #1721.
Brian Warner [Mon, 23 Apr 2012 22:02:22 +0000 (18:02 -0400)]
Fix introweb display for mixed V1/V2 clients. Closes #1721.

This significantly cleans up the IntroducerServer web-status renderers.
Instead of poking around in the introducer's internals, now the web-status
renderers get clean AnnouncementDescriptor and SubscriberDescriptor
objects. They are still somewhat foolscap-centric, but will provide a clean
abstraction boundary for future improvements.

The specific #1721 bug was that old (V1) subscribers were handled by
wrapping their RemoteReference in a special WrapV1SubscriberInV2Interface
object, but the web-status display was trying to peek inside the object to
learn what host+port it was associated with, and the wrapper did not proxy
those extra attributes.

A test was added to test_introducer to make sure the introweb page renders
properly and at least contains the nicknames of both the V1 and V2 clients.

12 years agoUpdated webapi.rst to list /cap as a synonym for /uri
Patrick R McDonald [Wed, 11 Apr 2012 02:36:43 +0000 (21:36 -0500)]
Updated webapi.rst to list /cap as a synonym for /uri

12 years agoAdding jg71 to CREDITS 6/head
markus reichelt [Sat, 14 Apr 2012 14:01:07 +0000 (16:01 +0200)]
Adding jg71 to CREDITS

12 years agoFix for ticket #1662
Patrick R McDonald [Tue, 10 Apr 2012 14:55:25 +0000 (09:55 -0500)]
Fix for ticket #1662

12 years agodocs/frontends/drop-upload.rst: document more known issues and link to new ticket...
david-sarah [Fri, 6 Apr 2012 04:39:46 +0000 (04:39 +0000)]
docs/frontends/drop-upload.rst: document more known issues and link to new ticket for an existing one.

12 years agoChange capitalization of WUI and introducer welcome page headings; add test for intro...
david-sarah [Thu, 5 Apr 2012 23:57:23 +0000 (23:57 +0000)]
Change capitalization of WUI and introducer welcome page headings; add test for introducer welcome page. Also fix a typo in a CSS class name. fixes #1708

12 years agotest/common.py: remove ununsed 'is_bad' mechanism
Brian Warner [Wed, 4 Apr 2012 19:11:03 +0000 (12:11 -0700)]
test/common.py: remove ununsed 'is_bad' mechanism

This was a premature feature addition to the mock filenode, and gets in the
way of the IServer refactoring I'm trying to do. Best to remove it now and
re-introduce it in a better form later when it's actually needed.

12 years agochecker.py: minor simplifications
Brian Warner [Wed, 4 Apr 2012 19:05:31 +0000 (12:05 -0700)]
checker.py: minor simplifications

12 years agomake IServer instances retain identity in copy() and deepcopy()
Brian Warner [Wed, 4 Apr 2012 18:14:09 +0000 (11:14 -0700)]
make IServer instances retain identity in copy() and deepcopy()

12 years agomove IServer from storage_client.py to interfaces.py
Brian Warner [Wed, 4 Apr 2012 18:13:59 +0000 (11:13 -0700)]
move IServer from storage_client.py to interfaces.py

12 years agoRename web CheckResults to -Renderer, to avoid confusion. Closes #1705.
Brian Warner [Tue, 3 Apr 2012 03:02:59 +0000 (20:02 -0700)]
Rename web CheckResults to -Renderer, to avoid confusion. Closes #1705.

This avoids the name collision between the actual results
objects (defined in allmydata.check_results) and the code that renders
these objects into HTML (defined in allmydata.web.check_results). Only
the web-side objects were renamed.

12 years agowebapi.rst: de-tabify
Brian Warner [Mon, 2 Apr 2012 23:32:05 +0000 (16:32 -0700)]
webapi.rst: de-tabify

12 years agoservermap.py: oops, fix _done() condition, good catch by davidsarah
Brian Warner [Sun, 1 Apr 2012 22:08:42 +0000 (15:08 -0700)]
servermap.py: oops, fix _done() condition, good catch by davidsarah

12 years agodoc: cross-link known_issues.rst and cautions.rst with one another
Zooko O'Whielacronx [Sun, 1 Apr 2012 21:40:39 +0000 (21:40 +0000)]
doc: cross-link known_issues.rst and cautions.rst with one another