2009-02-16 21:58:44 +00:00
|
|
|
|
|
|
|
# This contains a test harness that creates a full Tahoe grid in a single
|
|
|
|
# process (actually in a single MultiService) which does not use the network.
|
|
|
|
# It does not use an Introducer, and there are no foolscap Tubs. Each storage
|
|
|
|
# server puts real shares on disk, but is accessed through loopback
|
|
|
|
# RemoteReferences instead of over serialized SSL. It is not as complete as
|
|
|
|
# the common.SystemTestMixin framework (which does use the network), but
|
2009-02-17 01:06:43 +00:00
|
|
|
# should be considerably faster: on my laptop, it takes 50-80ms to start up,
|
|
|
|
# whereas SystemTestMixin takes close to 2s.
|
|
|
|
|
|
|
|
# This should be useful for tests which want to examine and/or manipulate the
|
|
|
|
# uploaded shares, checker/verifier/repairer tests, etc. The clients have no
|
2016-04-28 07:05:30 +00:00
|
|
|
# Tubs, so it is not useful for tests that involve a Helper or the
|
|
|
|
# control.furl .
|
2009-02-16 21:58:44 +00:00
|
|
|
|
2013-06-24 22:28:05 +00:00
|
|
|
import os
|
2009-06-21 23:51:19 +00:00
|
|
|
from zope.interface import implements
|
2009-02-16 21:58:44 +00:00
|
|
|
from twisted.application import service
|
2010-01-29 12:38:45 +00:00
|
|
|
from twisted.internet import defer, reactor
|
2009-05-22 00:46:32 +00:00
|
|
|
from twisted.python.failure import Failure
|
|
|
|
from foolscap.api import Referenceable, fireEventually, RemoteException
|
2009-02-16 21:58:44 +00:00
|
|
|
from base64 import b32encode
|
2015-10-01 21:40:10 +00:00
|
|
|
|
|
|
|
from allmydata.util.assertutil import _assert
|
|
|
|
|
2009-02-17 05:12:42 +00:00
|
|
|
from allmydata import uri as tahoe_uri
|
2009-02-16 21:58:44 +00:00
|
|
|
from allmydata.client import Client
|
2009-02-18 21:46:55 +00:00
|
|
|
from allmydata.storage.server import StorageServer, storage_index_to_dir
|
2009-05-22 00:46:32 +00:00
|
|
|
from allmydata.util import fileutil, idlib, hashutil
|
2009-12-15 00:01:47 +00:00
|
|
|
from allmydata.util.hashutil import sha1
|
2009-02-25 01:33:00 +00:00
|
|
|
from allmydata.test.common_web import HTTPClientGETFactory
|
2012-04-04 18:14:09 +00:00
|
|
|
from allmydata.interfaces import IStorageBroker, IServer
|
2011-08-10 20:23:10 +00:00
|
|
|
from allmydata.test.common import TEST_RSA_KEY_SIZE
|
|
|
|
|
2009-02-16 21:58:44 +00:00
|
|
|
|
|
|
|
class IntentionalError(Exception):
|
|
|
|
pass
|
|
|
|
|
|
|
|
class Marker:
|
|
|
|
pass
|
|
|
|
|
|
|
|
class LocalWrapper:
|
|
|
|
def __init__(self, original):
|
|
|
|
self.original = original
|
|
|
|
self.broken = False
|
2010-01-29 12:38:45 +00:00
|
|
|
self.hung_until = None
|
2009-02-16 21:58:44 +00:00
|
|
|
self.post_call_notifier = None
|
|
|
|
self.disconnectors = {}
|
2012-12-27 00:00:17 +00:00
|
|
|
self.counter_by_methname = {}
|
|
|
|
|
|
|
|
def _clear_counters(self):
|
|
|
|
self.counter_by_methname = {}
|
2009-02-16 21:58:44 +00:00
|
|
|
|
2009-02-17 00:19:47 +00:00
|
|
|
def callRemoteOnly(self, methname, *args, **kwargs):
|
|
|
|
d = self.callRemote(methname, *args, **kwargs)
|
2010-01-14 22:17:19 +00:00
|
|
|
del d # explicitly ignored
|
2009-02-17 00:19:47 +00:00
|
|
|
return None
|
|
|
|
|
2009-02-16 21:58:44 +00:00
|
|
|
def callRemote(self, methname, *args, **kwargs):
|
2009-02-17 00:19:47 +00:00
|
|
|
# this is ideally a Membrane, but that's too hard. We do a shallow
|
|
|
|
# wrapping of inbound arguments, and per-methodname wrapping of
|
|
|
|
# selected return values.
|
2009-02-16 21:58:44 +00:00
|
|
|
def wrap(a):
|
|
|
|
if isinstance(a, Referenceable):
|
|
|
|
return LocalWrapper(a)
|
|
|
|
else:
|
|
|
|
return a
|
|
|
|
args = tuple([wrap(a) for a in args])
|
|
|
|
kwargs = dict([(k,wrap(kwargs[k])) for k in kwargs])
|
2010-01-29 12:38:45 +00:00
|
|
|
|
|
|
|
def _really_call():
|
2012-12-27 00:00:17 +00:00
|
|
|
def incr(d, k): d[k] = d.setdefault(k, 0) + 1
|
|
|
|
incr(self.counter_by_methname, methname)
|
2010-01-29 12:38:45 +00:00
|
|
|
meth = getattr(self.original, "remote_" + methname)
|
|
|
|
return meth(*args, **kwargs)
|
|
|
|
|
2009-02-16 21:58:44 +00:00
|
|
|
def _call():
|
|
|
|
if self.broken:
|
2012-05-16 23:50:43 +00:00
|
|
|
if self.broken is not True: # a counter, not boolean
|
|
|
|
self.broken -= 1
|
2009-02-16 21:58:44 +00:00
|
|
|
raise IntentionalError("I was asked to break")
|
2010-01-29 12:38:45 +00:00
|
|
|
if self.hung_until:
|
|
|
|
d2 = defer.Deferred()
|
|
|
|
self.hung_until.addCallback(lambda ign: _really_call())
|
|
|
|
self.hung_until.addCallback(lambda res: d2.callback(res))
|
|
|
|
def _err(res):
|
|
|
|
d2.errback(res)
|
|
|
|
return res
|
|
|
|
self.hung_until.addErrback(_err)
|
|
|
|
return d2
|
|
|
|
return _really_call()
|
|
|
|
|
2009-02-16 21:58:44 +00:00
|
|
|
d = fireEventually()
|
|
|
|
d.addCallback(lambda res: _call())
|
2009-05-22 00:46:32 +00:00
|
|
|
def _wrap_exception(f):
|
|
|
|
return Failure(RemoteException(f))
|
|
|
|
d.addErrback(_wrap_exception)
|
2009-02-16 21:58:44 +00:00
|
|
|
def _return_membrane(res):
|
|
|
|
# rather than complete the difficult task of building a
|
|
|
|
# fully-general Membrane (which would locate all Referenceable
|
|
|
|
# objects that cross the simulated wire and replace them with
|
|
|
|
# wrappers), we special-case certain methods that we happen to
|
|
|
|
# know will return Referenceables.
|
|
|
|
if methname == "allocate_buckets":
|
|
|
|
(alreadygot, allocated) = res
|
|
|
|
for shnum in allocated:
|
|
|
|
allocated[shnum] = LocalWrapper(allocated[shnum])
|
|
|
|
if methname == "get_buckets":
|
|
|
|
for shnum in res:
|
|
|
|
res[shnum] = LocalWrapper(res[shnum])
|
|
|
|
return res
|
|
|
|
d.addCallback(_return_membrane)
|
|
|
|
if self.post_call_notifier:
|
Overhaul IFilesystemNode handling, to simplify tests and use POLA internally.
* stop using IURI as an adapter
* pass cap strings around instead of URI instances
* move filenode/dirnode creation duties from Client to new NodeMaker class
* move other Client duties to KeyGenerator, SecretHolder, History classes
* stop passing Client reference to dirnode/filenode constructors
- pass less-powerful references instead, like StorageBroker or Uploader
* always create DirectoryNodes by wrapping a filenode (mutable for now)
* remove some specialized mock classes from unit tests
Detailed list of changes (done one at a time, then merged together)
always pass a string to create_node_from_uri(), not an IURI instance
always pass a string to IFilesystemNode constructors, not an IURI instance
stop using IURI() as an adapter, switch on cap prefix in create_node_from_uri()
client.py: move SecretHolder code out to a separate class
test_web.py: hush pyflakes
client.py: move NodeMaker functionality out into a separate object
LiteralFileNode: stop storing a Client reference
immutable Checker: remove Client reference, it only needs a SecretHolder
immutable Upload: remove Client reference, leave SecretHolder and StorageBroker
immutable Repairer: replace Client reference with StorageBroker and SecretHolder
immutable FileNode: remove Client reference
mutable.Publish: stop passing Client
mutable.ServermapUpdater: get StorageBroker in constructor, not by peeking into Client reference
MutableChecker: reference StorageBroker and History directly, not through Client
mutable.FileNode: removed unused indirection to checker classes
mutable.FileNode: remove Client reference
client.py: move RSA key generation into a separate class, so it can be passed to the nodemaker
move create_mutable_file() into NodeMaker
test_dirnode.py: stop using FakeClient mockups, use NoNetworkGrid instead. This simplifies the code, but takes longer to run (17s instead of 6s). This should come down later when other cleanups make it possible to use simpler (non-RSA) fake mutable files for dirnode tests.
test_mutable.py: clean up basedir names
client.py: move create_empty_dirnode() into NodeMaker
dirnode.py: get rid of DirectoryNode.create
remove DirectoryNode.init_from_uri, refactor NodeMaker for customization, simplify test_web's mock Client to match
stop passing Client to DirectoryNode, make DirectoryNode.create_with_mutablefile the normal DirectoryNode constructor, start removing client from NodeMaker
remove Client from NodeMaker
move helper status into History, pass History to web.Status instead of Client
test_mutable.py: fix minor typo
2009-08-15 11:02:56 +00:00
|
|
|
d.addCallback(self.post_call_notifier, self, methname)
|
2009-02-16 21:58:44 +00:00
|
|
|
return d
|
|
|
|
|
|
|
|
def notifyOnDisconnect(self, f, *args, **kwargs):
|
|
|
|
m = Marker()
|
|
|
|
self.disconnectors[m] = (f, args, kwargs)
|
|
|
|
return m
|
|
|
|
def dontNotifyOnDisconnect(self, marker):
|
|
|
|
del self.disconnectors[marker]
|
|
|
|
|
2009-06-23 02:10:47 +00:00
|
|
|
def wrap_storage_server(original):
|
2009-05-22 00:46:32 +00:00
|
|
|
# Much of the upload/download code uses rref.version (which normally
|
|
|
|
# comes from rrefutil.add_version_to_remote_reference). To avoid using a
|
|
|
|
# network, we want a LocalWrapper here. Try to satisfy all these
|
|
|
|
# constraints at the same time.
|
|
|
|
wrapper = LocalWrapper(original)
|
2009-06-23 02:10:47 +00:00
|
|
|
wrapper.version = original.remote_get_version()
|
2009-05-22 00:46:32 +00:00
|
|
|
return wrapper
|
2009-02-16 21:58:44 +00:00
|
|
|
|
2011-02-21 01:58:04 +00:00
|
|
|
class NoNetworkServer:
|
2012-04-04 18:14:09 +00:00
|
|
|
implements(IServer)
|
2011-02-21 01:58:04 +00:00
|
|
|
def __init__(self, serverid, rref):
|
|
|
|
self.serverid = serverid
|
|
|
|
self.rref = rref
|
2011-02-27 02:11:32 +00:00
|
|
|
def __repr__(self):
|
2011-08-01 17:44:28 +00:00
|
|
|
return "<NoNetworkServer for %s>" % self.get_name()
|
2012-04-04 18:14:09 +00:00
|
|
|
# Special method used by copy.copy() and copy.deepcopy(). When those are
|
|
|
|
# used in allmydata.immutable.filenode to copy CheckResults during
|
|
|
|
# repair, we want it to treat the IServer instances as singletons.
|
|
|
|
def __copy__(self):
|
|
|
|
return self
|
|
|
|
def __deepcopy__(self, memodict):
|
|
|
|
return self
|
2011-02-21 01:58:04 +00:00
|
|
|
def get_serverid(self):
|
|
|
|
return self.serverid
|
|
|
|
def get_permutation_seed(self):
|
|
|
|
return self.serverid
|
2011-02-27 02:11:32 +00:00
|
|
|
def get_lease_seed(self):
|
|
|
|
return self.serverid
|
IServer refactoring: pass IServer instances around, instead of peerids
refs #1363
This collapses 88 small incremental changes (each of which passes all tests)
into one big patch. The development process for the long path started with
adding some temporary scaffolding, changing one method at a time, then
removing the scaffolding. The individual pieces are as follows, in reverse
chronological order (the first patch is at the end of this comment):
commit 9bbe4174fd0d98a6cf47a8ef96e85d9ef34b2f9a
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 16:05:00 2011 -0400
immutable/downloader/status.py: correct comment
src/allmydata/immutable/downloader/status.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
commit 72146a7c7c91eac2f7c3ceb801eb7a1721376889
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 15:46:20 2011 -0400
remove temporary ServerMap._storage_broker
src/allmydata/mutable/checker.py | 2 +-
src/allmydata/mutable/filenode.py | 2 +-
src/allmydata/mutable/publish.py | 2 +-
src/allmydata/mutable/servermap.py | 5 ++---
src/allmydata/test/test_mutable.py | 8 ++++----
5 files changed, 9 insertions(+), 10 deletions(-)
commit d703096b41632c47d76414b12672e076a422ff5c
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 15:37:05 2011 -0400
remove temporary storage_broker.get_server_for_id()
src/allmydata/storage_client.py | 3 ---
src/allmydata/test/no_network.py | 13 -------------
2 files changed, 0 insertions(+), 16 deletions(-)
commit 620cc5d80882ef6f7decfd26af8a6c7c1ddf80d1
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 12:50:06 2011 -0400
API of Retrieve._try_to_validate_privkey(), trying to remove reader.server
src/allmydata/mutable/retrieve.py | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
commit 92f43f856f4a8b36c207d1b190ed8699b5a4ecb4
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 12:48:08 2011 -0400
API of Retrieve._validate_block(), trying to remove reader.server
src/allmydata/mutable/retrieve.py | 14 +++++++-------
1 files changed, 7 insertions(+), 7 deletions(-)
commit 572d5070761861a2190349d1ed8d85dbc25698a5
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 12:36:58 2011 -0400
API of Retrieve._mark_bad_share(), trying to remove reader.server
src/allmydata/mutable/retrieve.py | 21 +++++++++------------
1 files changed, 9 insertions(+), 12 deletions(-)
commit a793ff00c0de1e2eec7b46288fdf388c7a2bec89
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 12:06:13 2011 -0400
remove now-unused get_rref_for_serverid()
src/allmydata/mutable/servermap.py | 3 ---
1 files changed, 0 insertions(+), 3 deletions(-)
commit 1b9827cc9366bf90b93297fdd6832f2ad0480ce7
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 12:03:09 2011 -0400
Retrieve: stop adding .serverid attributes to readers
src/allmydata/mutable/retrieve.py | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
commit 5d4e9d491b19e49d2e443a1dfff2c672842c36ef
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 12:03:34 2011 -0400
return value of Retrieve(verify=True)
src/allmydata/mutable/checker.py | 11 ++++++-----
src/allmydata/mutable/retrieve.py | 3 +--
2 files changed, 7 insertions(+), 7 deletions(-)
commit e9ab7978c384e1f677cb7779dc449b1044face82
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:54:23 2011 -0400
Retrieve._bad_shares (but not return value, used by Verifier)
src/allmydata/mutable/retrieve.py | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
commit 2d91926de233ec5c881f30e36b4a30ad92ab42a9
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:51:23 2011 -0400
Publish: stop adding .serverid attributes to writers
src/allmydata/mutable/publish.py | 9 ++-------
1 files changed, 2 insertions(+), 7 deletions(-)
commit 47c7a0105dec7cbf4f7e0a3ce800bbb85b15df4a
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:56:33 2011 -0400
API of get_write_enabler()
src/allmydata/mutable/filenode.py | 7 ++++---
src/allmydata/mutable/publish.py | 4 ++--
src/allmydata/test/no_network.py | 3 +++
3 files changed, 9 insertions(+), 5 deletions(-)
commit 9196a5c6590fdbfd660325ea8358b345887d3db0
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:46:24 2011 -0400
API of get_(renewal|cancel)_secret()
src/allmydata/mutable/filenode.py | 14 ++++++++------
src/allmydata/mutable/publish.py | 8 ++++----
src/allmydata/mutable/servermap.py | 5 ++---
3 files changed, 14 insertions(+), 13 deletions(-)
commit de7c1552f8c163eff5b6d820b5fb3b21c1b47cb5
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:41:52 2011 -0400
API of CorruptShareError. Also comment out some related+unused test_web.py code
src/allmydata/mutable/common.py | 13 +++++--------
src/allmydata/mutable/retrieve.py | 10 +++++-----
src/allmydata/mutable/servermap.py | 8 +++-----
src/allmydata/test/common.py | 13 ++++++++-----
4 files changed, 21 insertions(+), 23 deletions(-)
commit 2c1c314046b620c16f1e66d030c150d768b7d01e
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 12:01:46 2011 -0400
API of ServerMap.mark_bad_share()
src/allmydata/mutable/publish.py | 2 +-
src/allmydata/mutable/retrieve.py | 6 +++---
src/allmydata/mutable/servermap.py | 6 ++----
src/allmydata/test/test_mutable.py | 3 +--
4 files changed, 7 insertions(+), 10 deletions(-)
commit 1bed349030779fd0c378ae4e821384f953c6f6ff
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:11:17 2011 -0400
API+name of ServerMap.shares_on_server() : only for tests, so debug_ prefix
src/allmydata/mutable/servermap.py | 7 ++-----
src/allmydata/test/test_mutable.py | 6 +++---
2 files changed, 5 insertions(+), 8 deletions(-)
commit 2d32e448677d6b818692e801045d4115b29abf21
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:07:10 2011 -0400
API of ServerMap.all_servers_for_version()
src/allmydata/mutable/servermap.py | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
commit 48f3204d1889c3e7179578125c4bdef515af3d6a
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:04:50 2011 -0400
internals of ServerMap methods that use make_versionmap(), remove temp copy
src/allmydata/mutable/servermap.py | 28 +++++++++----------------
1 files changed, 10 insertions(+), 18 deletions(-)
commit 5c3da77b6c777a145bd5ddfaa4db849dc9495548
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:01:28 2011 -0400
API of ServerMap.make_versionmap()
src/allmydata/mutable/checker.py | 4 ++--
src/allmydata/mutable/retrieve.py | 5 ++---
src/allmydata/mutable/servermap.py | 4 ++--
src/allmydata/test/test_mutable.py | 7 ++++---
4 files changed, 10 insertions(+), 10 deletions(-)
commit b6882ece49afb4c507d118af2db346fa329209dc
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 10:53:38 2011 -0400
make a copy of ServerMap.make_versionmap() (_make_versionmap2) for internal use
src/allmydata/mutable/servermap.py | 18 +++++++++++++-----
1 files changed, 13 insertions(+), 5 deletions(-)
commit 963f8e63faf32b950eb1b8103cd2ff16fe8f0151
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:45:58 2011 -0400
API of RetrieveStatus.add_problem()
src/allmydata/mutable/retrieve.py | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
commit 4976d29ffae565a048851601c29013bbae2976d8
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:45:05 2011 -0400
API of RetrieveStatus.add_fetch_timing()
src/allmydata/mutable/retrieve.py | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
commit d057d3bbba72663ee148a8b916bc2d52be2e3982
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:44:04 2011 -0400
API of Retrieve.notify_server_corruption()
src/allmydata/mutable/retrieve.py | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
commit 8a2a81e46671c860610e0e96d6add1a57551f22d
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:42:32 2011 -0400
remove unused _outstanding_queries
src/allmydata/mutable/retrieve.py | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
commit 56d12cc9968d03ccd53764455c671122c4f391d1
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:40:57 2011 -0400
change Retrieve.remaining_sharemap
src/allmydata/mutable/retrieve.py | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
commit 4f0b7af4821f43290bfc70f2b1fc30149ad81281
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 10:40:18 2011 -0400
accessor for PublishStatus._problems
src/allmydata/mutable/publish.py | 4 +++-
src/allmydata/web/status.py | 2 +-
2 files changed, 4 insertions(+), 2 deletions(-)
commit 627087cf66d0b8cc519f4d551a967a7bd9b6a741
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 10:36:39 2011 -0400
accessor for RetrieveStatus._problems
src/allmydata/mutable/retrieve.py | 8 ++++++--
src/allmydata/web/status.py | 2 +-
2 files changed, 7 insertions(+), 3 deletions(-)
commit ca7dea81f03801b1c7353fc00ecba689268109cf
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:35:32 2011 -0400
add .server to "reader", so we can get at it later
src/allmydata/mutable/retrieve.py | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
commit 6ef516e24908ec195af084a7550d1921a5e983b0
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:32:32 2011 -0400
temporarily give Retrieve a _storage_broker, so it can map serverids to servers
src/allmydata/mutable/checker.py | 3 ++-
src/allmydata/mutable/filenode.py | 6 ++++--
src/allmydata/mutable/retrieve.py | 5 +++--
src/allmydata/test/test_mutable.py | 4 ++--
4 files changed, 11 insertions(+), 7 deletions(-)
commit afe08e4dd3f4ff9ff7e8a2a8d28b181e3625bcc9
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:21:51 2011 -0400
mutable/retrieve.py: s/peer/server/
src/allmydata/mutable/retrieve.py | 82 +++++++++++++-------------
src/allmydata/test/test_mutable.py | 6 +-
2 files changed, 44 insertions(+), 44 deletions(-)
commit 910afcb5d7f274880f68dd6cdb5b05f2bbc29adc
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:16:01 2011 -0400
web.status.PublishStatusPage: add comment, I think .problems isn't exercised
src/allmydata/web/status.py | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
commit 311466dd8c931bbba40d590ade867704282e7f1a
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:48:16 2011 -0400
API of PublishStatus.add_per_server_time()
src/allmydata/mutable/publish.py | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
commit 2df5faa1b6cbfbaded520d2320305a62fe961118
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:46:37 2011 -0400
more simplifications
src/allmydata/mutable/publish.py | 4 +---
1 files changed, 1 insertions(+), 3 deletions(-)
commit 6ac4544a3da385f2aad9392f906b90192f4f919a
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:44:08 2011 -0400
API of ServerMap.version_on_server()
src/allmydata/mutable/publish.py | 2 +-
src/allmydata/mutable/servermap.py | 4 ++--
src/allmydata/test/test_mutable.py | 5 ++---
3 files changed, 5 insertions(+), 6 deletions(-)
commit 3e187e322511072e4683329df6b2c6c733a66dba
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:16:32 2011 -0400
API of ServerMap.make_sharemap()
src/allmydata/mutable/servermap.py | 4 ++--
src/allmydata/test/test_mutable.py | 7 ++++---
src/allmydata/web/status.py | 4 ++--
3 files changed, 8 insertions(+), 7 deletions(-)
commit 318feed8437bdd8d4943c6569d38f7b54b6313cc
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:36:19 2011 -0400
small cleanups
src/allmydata/mutable/publish.py | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
commit bd459ed5714e1db5a7163935c54b7b0b56db8349
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:33:39 2011 -0400
API of ServerMap.add_new_share()
src/allmydata/mutable/publish.py | 4 ++--
src/allmydata/mutable/servermap.py | 6 ++----
2 files changed, 4 insertions(+), 6 deletions(-)
commit f2804fb6ed11d80088e0da8ed48e6c2922f2ffef
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:30:26 2011 -0400
API of ServerMap.get_bad_shares()
src/allmydata/mutable/publish.py | 3 +--
src/allmydata/mutable/servermap.py | 9 ++++-----
2 files changed, 5 insertions(+), 7 deletions(-)
commit 965074a47b3ce1431cb46d9a233840afcf9105f5
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:26:58 2011 -0400
more small cleanups
src/allmydata/mutable/publish.py | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
commit 38020da34f034f8889947dd3dc05e087ffff7106
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:18:47 2011 -0400
change Publish.bad_share_checkstrings
src/allmydata/mutable/publish.py | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
commit 5efebcbd2ee0c2f299ea86f7591d856c0f265304
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:16:31 2011 -0400
change internals of Publish.update_goal()
src/allmydata/mutable/publish.py | 8 +++-----
1 files changed, 3 insertions(+), 5 deletions(-)
commit e91b55ff4c2a69165b71f2c7b217ac319ff4c527
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:11:42 2011 -0400
get rid of Publish.connections
src/allmydata/mutable/publish.py | 27 +++++----------------------
1 files changed, 5 insertions(+), 22 deletions(-)
commit 64e9a53b3229ebe2f9ebf7ed502d539311d0e037
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:05:32 2011 -0400
change Publish.bad_servers
src/allmydata/mutable/publish.py | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
commit b85a934bef315a06bcfe00c9c12a3627fed2b918
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:03:07 2011 -0400
Publish.bad_servers: fix bug, this should be a set of serverids, not writers
src/allmydata/mutable/publish.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
commit 605ea15ec15ed671513819003ccd211cdb9761e0
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:00:21 2011 -0400
change .placed
src/allmydata/mutable/publish.py | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
commit f7aba37b1b345d5b6d5cb16e3b3f6f3c1afb658e
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 22:59:22 2011 -0400
temporarily stash IServer as .server on the "writer" object
src/allmydata/mutable/publish.py | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
commit f9b551d788e7db1f187fce5ab98ab5d5fe4e1c36
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 22:48:18 2011 -0400
change Publish.goal and API of log_goal() to use IServer, not serverid
src/allmydata/mutable/publish.py | 48 ++++++++++++++--------------
1 files changed, 24 insertions(+), 24 deletions(-)
commit 75f20616558e4900b8b1f685dd99aa838de6d452
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:27:02 2011 -0400
API of ServerMap.get_known_shares()
src/allmydata/mutable/publish.py | 16 ++++++++++------
src/allmydata/mutable/servermap.py | 7 ++-----
2 files changed, 12 insertions(+), 11 deletions(-)
commit 1c38c9d37bb08221b4418762234b1a62397b3b4b
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:20:29 2011 -0400
Publish.full_serverlist
src/allmydata/mutable/publish.py | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
commit b6cbd215a04b9cde31a7d92a97a7f048622b16f1
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:12:31 2011 -0400
API of ServerMap.all_servers()
src/allmydata/mutable/servermap.py | 19 ++++++-------------
1 files changed, 6 insertions(+), 13 deletions(-)
commit e63cd0315fae65357b1727ec6d5ff3c6e0d27c98
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:10:18 2011 -0400
remove ServerMap.connections, set_rref_for_serverid()
src/allmydata/mutable/servermap.py | 11 +----------
1 files changed, 1 insertions(+), 10 deletions(-)
commit 4df52db2f80eb12eefa5d57103c24893cde89553
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:04:06 2011 -0400
API of ServerMap.mark_server_reachable()
src/allmydata/mutable/servermap.py | 7 ++-----
1 files changed, 2 insertions(+), 5 deletions(-)
commit 69c715bde77944dc25181b3dbbeb042c816f9a1b
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:03:21 2011 -0400
API of ServerMap.mark_server_unreachable()
src/allmydata/mutable/servermap.py | 9 +++------
1 files changed, 3 insertions(+), 6 deletions(-)
commit 3d784d60eec1c508858e3a617e4411ffbcc3c1fa
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:02:03 2011 -0400
API of status.set_privkey_from()
src/allmydata/mutable/servermap.py | 7 +++----
1 files changed, 3 insertions(+), 4 deletions(-)
commit 544ed3ea29bed7e66da7fd29ca3f6f076f27a9e6
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:01:15 2011 -0400
API of status.add_per_server_time()
src/allmydata/mutable/servermap.py | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
commit fffe5008b6320bd1e04c3c68389a2bf2ee383fa8
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:59:02 2011 -0400
remove unused .versionmap
src/allmydata/mutable/servermap.py | 7 -------
1 files changed, 0 insertions(+), 7 deletions(-)
commit 2816562e090d2294179db3588dafcca18de1bc2b
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:57:51 2011 -0400
remove serverid from all log messages. Also one unused lambda.
src/allmydata/mutable/servermap.py | 30 +++++++++++++-------------
1 files changed, 15 insertions(+), 15 deletions(-)
commit 28fa6b1a2738fa98c1f1dbd3d0e01ae98912d11f
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:54:30 2011 -0400
removed unused _readers
src/allmydata/mutable/servermap.py | 3 ---
1 files changed, 0 insertions(+), 3 deletions(-)
commit a8e4ed3d645ab592d1add6a1e69b6d1ebfb77817
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:54:16 2011 -0400
remove unused _sharemap
src/allmydata/mutable/servermap.py | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
commit 3f072e55cf1d0700f9fffe23f8f3a475725df588
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:49:03 2011 -0400
_must_query
src/allmydata/mutable/servermap.py | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
commit c599a059b8df3f5785e4bf89fb6ecc6d8dcd708b
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:48:05 2011 -0400
_queries_outstanding
src/allmydata/mutable/servermap.py | 16 +++++++---------
1 files changed, 7 insertions(+), 9 deletions(-)
commit 7743759f98ac2c07926b2fdbd80bf52dfab33085
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:46:17 2011 -0400
_empty_servers
src/allmydata/mutable/servermap.py | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
commit 6bb1825916828a713a32cdf7f7411fa3ea2e1e5d
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:45:39 2011 -0400
_good_servers
src/allmydata/mutable/servermap.py | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
commit 1768fab1b51d8dd93ecabbaaabfadfa20cf6c3d4
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:44:59 2011 -0400
_bad_servers
src/allmydata/mutable/servermap.py | 14 +++++++-------
1 files changed, 7 insertions(+), 7 deletions(-)
commit dccbaef30f0ba714c746bf6d4a1a803c36e17b65
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:41:54 2011 -0400
API of _try_to_set_pubkey()
src/allmydata/mutable/servermap.py | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
commit 0481ea70042ba3575f15eac7fd0780f8ece580cc
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:35:02 2011 -0400
API of notify_server_corruption()
src/allmydata/mutable/servermap.py | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
commit bea9cba18fb3b9c11bb22f18356a263ecec7351e
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:34:09 2011 -0400
API of _got_signature_one_share()
src/allmydata/mutable/servermap.py | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
commit 1520123583cf78650706e114b15bb5b0ac1f4a14
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:32:33 2011 -0400
API of _try_to_validate_privkey()
src/allmydata/mutable/servermap.py | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
commit 938852c9c8519c7a078f58a9b1f4dd8ec8b6715e
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:31:48 2011 -0400
API and internals of _add_lease_failed()
src/allmydata/mutable/servermap.py | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
commit 3843dba367e3c19e176a622ab853cb51d2472ddf
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:30:37 2011 -0400
API of _privkey_query_failed()
src/allmydata/mutable/servermap.py | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
commit 2219a710e1633cd57d0ca0786490de87b3e19ba7
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:29:43 2011 -0400
fix bug in call to _privkey_query_failed, unrelated to refactoring
src/allmydata/mutable/servermap.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
commit ae615bec7d0d1b269710b6902797b12f9592ad62
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:27:17 2011 -0400
API of _got_corrupt_share()
src/allmydata/mutable/servermap.py | 17 +++++++++--------
1 files changed, 9 insertions(+), 8 deletions(-)
commit cb51c95a6f4e077278157a77dab060c8c1ad7a81
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:23:16 2011 -0400
API of _got_results()
src/allmydata/mutable/servermap.py | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
commit bac9154fe0af18f226999a58ffc2362d8cf4b802
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:19:19 2011 -0400
API of _query_failed()
src/allmydata/mutable/servermap.py | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
commit fdc29a8ca95d4b5c503e5382b9e5d4d02141ba12
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:17:20 2011 -0400
API of _do_read()
src/allmydata/mutable/servermap.py | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
commit e7e9e338f28d004aa4d423d11c65f1e271ac7322
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:20:21 2011 -0400
API of _do_query()
src/allmydata/mutable/servermap.py | 15 +++++++--------
1 files changed, 7 insertions(+), 8 deletions(-)
commit 330625b9dac4cdbe72a11464a893065b9aeed453
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:43:05 2011 -0400
next step: first batch of updates to ServermapUpdater
updates:
most method-local variables in update()
API of _build_initial_querylist()
API of _send_initial_requests()
.full_serverlist
.extra_servers
src/allmydata/mutable/servermap.py | 39 ++++++++++++++------------
1 files changed, 21 insertions(+), 18 deletions(-)
commit 4aadc584fa7dcb2daa86b048c81dee0049ba26d9
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:07:00 2011 -0400
internal change: index _bad_shares with IServer
src/allmydata/mutable/servermap.py | 20 ++++++++++----------
1 files changed, 10 insertions(+), 10 deletions(-)
commit 16d4e6fa82a9907dbdc92094213387c6a4164e41
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 18:20:47 2011 +0100
internal change: index _known_shares with IServer instead of serverid
callers are unchanged
src/allmydata/mutable/servermap.py | 42 +++++++++++++++----------
1 files changed, 25 insertions(+), 17 deletions(-)
commit ceeb5f4938cc814a0c75d1b8f4018aed965c2176
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 18:11:43 2011 +0100
accessors and name cleanup for servermap.Servermap.last_update_mode/time
src/allmydata/mutable/filenode.py | 6 +++---
src/allmydata/mutable/publish.py | 4 ++--
src/allmydata/mutable/servermap.py | 17 +++++++++++------
3 files changed, 16 insertions(+), 11 deletions(-)
commit 8d3cbda82661c0a7e5c3d3b65cf7a5d5ab7e32c0
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 18:11:14 2011 +0100
accessors and name cleanup for servermap.Servermap.problems
src/allmydata/mutable/servermap.py | 21 +++++++++++++--------
src/allmydata/test/test_mutable.py | 6 +++---
2 files changed, 16 insertions(+), 11 deletions(-)
commit 348f57988f79389db0aab7672e6eaa9a6d8e3219
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 18:10:41 2011 +0100
accessors and name cleanup for servermap.Servermap.bad_shares
src/allmydata/mutable/publish.py | 2 +-
src/allmydata/mutable/servermap.py | 30 ++++++++++++++-----------
2 files changed, 18 insertions(+), 14 deletions(-)
commit 520c9368134673cdf76c653c5e1bb91c2ab5d51e
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 18:10:05 2011 +0100
accessors and name cleanup for servermap.Servermap.servermap .
src/allmydata/mutable/publish.py | 14 +++++----
src/allmydata/mutable/servermap.py | 38 ++++++++++++++-----------
2 files changed, 29 insertions(+), 23 deletions(-)
commit b8b8dc38287a91dbdf494426ac801d9381ce5841
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 18:08:02 2011 +0100
fix reachable_servers
src/allmydata/mutable/checker.py | 3 ++-
src/allmydata/mutable/publish.py | 4 +++-
src/allmydata/mutable/servermap.py | 12 ++++++++++--
3 files changed, 15 insertions(+), 4 deletions(-)
commit cb0cfd1adfefad357c187aaaf690c3df68b622bc
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 18:06:03 2011 +0100
fix Servermap.unreachable_servers
src/allmydata/mutable/servermap.py | 11 ++++++++---
1 files changed, 8 insertions(+), 3 deletions(-)
commit 2d9ea79b94bd4db674d40386fda90825785ac495
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 18:03:48 2011 +0100
give ServerMap a StorageFarmBroker, temporary
this makes it possible for the ServerMap to accept bare serverids and still
build data structures with IServers
src/allmydata/mutable/checker.py | 2 +-
src/allmydata/mutable/filenode.py | 2 +-
src/allmydata/mutable/publish.py | 2 +-
src/allmydata/mutable/servermap.py | 5 +++--
src/allmydata/test/test_mutable.py | 8 ++++----
5 files changed, 10 insertions(+), 9 deletions(-)
commit 718d1aeff6fded893f65397806d22ece928b0dd4
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 13:43:30 2011 -0400
add StorageFarmBroker.get_server_for_id(), temporary helper
This will go away once we're passing IServers everywhere.
src/allmydata/storage_client.py | 2 ++
src/allmydata/test/no_network.py | 13 +++++++++++++
2 files changed, 15 insertions(+), 0 deletions(-)
commit ece20231d7fda0d503704842a4aa068dfbc2e54e
Author: Brian Warner <warner@lothar.com>
Date: Sun Oct 2 01:11:50 2011 +0100
add proper accessors for Servermap.connections, to make refactoring easier
src/allmydata/mutable/publish.py | 6 +++---
src/allmydata/mutable/retrieve.py | 10 +++++-----
src/allmydata/mutable/servermap.py | 17 +++++++++++------
3 files changed, 19 insertions(+), 14 deletions(-)
commit 3b943d6bf302ff702668081a612fc4fe2604cf9c
Author: Brian Warner <warner@lothar.com>
Date: Fri Sep 23 10:34:30 2011 -0700
mutable/servermap.py and neighbors: s/peer/server/
src/allmydata/mutable/checker.py | 22 +-
src/allmydata/mutable/publish.py | 204 +++++++-------
src/allmydata/mutable/servermap.py | 402 +++++++++++++-------------
src/allmydata/test/test_mutable.py | 18 +-
4 files changed, 323 insertions(+), 323 deletions(-)
IServer refactoring: pass IServer instances around, instead of peerids
refs #1363
This collapses 88 small incremental changes (each of which passes all tests)
into one big patch. The development process for the long path started with
adding some temporary scaffolding, changing one method at a time, then
removing the scaffolding. The individual pieces are as follows, in reverse
chronological order (the first patch is at the end of this comment):
commit 9bbe4174fd0d98a6cf47a8ef96e85d9ef34b2f9a
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 16:05:00 2011 -0400
immutable/downloader/status.py: correct comment
src/allmydata/immutable/downloader/status.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
commit 72146a7c7c91eac2f7c3ceb801eb7a1721376889
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 15:46:20 2011 -0400
remove temporary ServerMap._storage_broker
src/allmydata/mutable/checker.py | 2 +-
src/allmydata/mutable/filenode.py | 2 +-
src/allmydata/mutable/publish.py | 2 +-
src/allmydata/mutable/servermap.py | 5 ++---
src/allmydata/test/test_mutable.py | 8 ++++----
5 files changed, 9 insertions(+), 10 deletions(-)
commit d703096b41632c47d76414b12672e076a422ff5c
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 15:37:05 2011 -0400
remove temporary storage_broker.get_server_for_id()
src/allmydata/storage_client.py | 3 ---
src/allmydata/test/no_network.py | 13 -------------
2 files changed, 0 insertions(+), 16 deletions(-)
commit 620cc5d80882ef6f7decfd26af8a6c7c1ddf80d1
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 12:50:06 2011 -0400
API of Retrieve._try_to_validate_privkey(), trying to remove reader.server
src/allmydata/mutable/retrieve.py | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
commit 92f43f856f4a8b36c207d1b190ed8699b5a4ecb4
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 12:48:08 2011 -0400
API of Retrieve._validate_block(), trying to remove reader.server
src/allmydata/mutable/retrieve.py | 14 +++++++-------
1 files changed, 7 insertions(+), 7 deletions(-)
commit 572d5070761861a2190349d1ed8d85dbc25698a5
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 12:36:58 2011 -0400
API of Retrieve._mark_bad_share(), trying to remove reader.server
src/allmydata/mutable/retrieve.py | 21 +++++++++------------
1 files changed, 9 insertions(+), 12 deletions(-)
commit a793ff00c0de1e2eec7b46288fdf388c7a2bec89
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 12:06:13 2011 -0400
remove now-unused get_rref_for_serverid()
src/allmydata/mutable/servermap.py | 3 ---
1 files changed, 0 insertions(+), 3 deletions(-)
commit 1b9827cc9366bf90b93297fdd6832f2ad0480ce7
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 12:03:09 2011 -0400
Retrieve: stop adding .serverid attributes to readers
src/allmydata/mutable/retrieve.py | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
commit 5d4e9d491b19e49d2e443a1dfff2c672842c36ef
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 12:03:34 2011 -0400
return value of Retrieve(verify=True)
src/allmydata/mutable/checker.py | 11 ++++++-----
src/allmydata/mutable/retrieve.py | 3 +--
2 files changed, 7 insertions(+), 7 deletions(-)
commit e9ab7978c384e1f677cb7779dc449b1044face82
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:54:23 2011 -0400
Retrieve._bad_shares (but not return value, used by Verifier)
src/allmydata/mutable/retrieve.py | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
commit 2d91926de233ec5c881f30e36b4a30ad92ab42a9
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:51:23 2011 -0400
Publish: stop adding .serverid attributes to writers
src/allmydata/mutable/publish.py | 9 ++-------
1 files changed, 2 insertions(+), 7 deletions(-)
commit 47c7a0105dec7cbf4f7e0a3ce800bbb85b15df4a
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:56:33 2011 -0400
API of get_write_enabler()
src/allmydata/mutable/filenode.py | 7 ++++---
src/allmydata/mutable/publish.py | 4 ++--
src/allmydata/test/no_network.py | 3 +++
3 files changed, 9 insertions(+), 5 deletions(-)
commit 9196a5c6590fdbfd660325ea8358b345887d3db0
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:46:24 2011 -0400
API of get_(renewal|cancel)_secret()
src/allmydata/mutable/filenode.py | 14 ++++++++------
src/allmydata/mutable/publish.py | 8 ++++----
src/allmydata/mutable/servermap.py | 5 ++---
3 files changed, 14 insertions(+), 13 deletions(-)
commit de7c1552f8c163eff5b6d820b5fb3b21c1b47cb5
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:41:52 2011 -0400
API of CorruptShareError. Also comment out some related+unused test_web.py code
src/allmydata/mutable/common.py | 13 +++++--------
src/allmydata/mutable/retrieve.py | 10 +++++-----
src/allmydata/mutable/servermap.py | 8 +++-----
src/allmydata/test/common.py | 13 ++++++++-----
4 files changed, 21 insertions(+), 23 deletions(-)
commit 2c1c314046b620c16f1e66d030c150d768b7d01e
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 12:01:46 2011 -0400
API of ServerMap.mark_bad_share()
src/allmydata/mutable/publish.py | 2 +-
src/allmydata/mutable/retrieve.py | 6 +++---
src/allmydata/mutable/servermap.py | 6 ++----
src/allmydata/test/test_mutable.py | 3 +--
4 files changed, 7 insertions(+), 10 deletions(-)
commit 1bed349030779fd0c378ae4e821384f953c6f6ff
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:11:17 2011 -0400
API+name of ServerMap.shares_on_server() : only for tests, so debug_ prefix
src/allmydata/mutable/servermap.py | 7 ++-----
src/allmydata/test/test_mutable.py | 6 +++---
2 files changed, 5 insertions(+), 8 deletions(-)
commit 2d32e448677d6b818692e801045d4115b29abf21
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:07:10 2011 -0400
API of ServerMap.all_servers_for_version()
src/allmydata/mutable/servermap.py | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
commit 48f3204d1889c3e7179578125c4bdef515af3d6a
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:04:50 2011 -0400
internals of ServerMap methods that use make_versionmap(), remove temp copy
src/allmydata/mutable/servermap.py | 28 +++++++++----------------
1 files changed, 10 insertions(+), 18 deletions(-)
commit 5c3da77b6c777a145bd5ddfaa4db849dc9495548
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 11:01:28 2011 -0400
API of ServerMap.make_versionmap()
src/allmydata/mutable/checker.py | 4 ++--
src/allmydata/mutable/retrieve.py | 5 ++---
src/allmydata/mutable/servermap.py | 4 ++--
src/allmydata/test/test_mutable.py | 7 ++++---
4 files changed, 10 insertions(+), 10 deletions(-)
commit b6882ece49afb4c507d118af2db346fa329209dc
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 10:53:38 2011 -0400
make a copy of ServerMap.make_versionmap() (_make_versionmap2) for internal use
src/allmydata/mutable/servermap.py | 18 +++++++++++++-----
1 files changed, 13 insertions(+), 5 deletions(-)
commit 963f8e63faf32b950eb1b8103cd2ff16fe8f0151
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:45:58 2011 -0400
API of RetrieveStatus.add_problem()
src/allmydata/mutable/retrieve.py | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
commit 4976d29ffae565a048851601c29013bbae2976d8
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:45:05 2011 -0400
API of RetrieveStatus.add_fetch_timing()
src/allmydata/mutable/retrieve.py | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
commit d057d3bbba72663ee148a8b916bc2d52be2e3982
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:44:04 2011 -0400
API of Retrieve.notify_server_corruption()
src/allmydata/mutable/retrieve.py | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
commit 8a2a81e46671c860610e0e96d6add1a57551f22d
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:42:32 2011 -0400
remove unused _outstanding_queries
src/allmydata/mutable/retrieve.py | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
commit 56d12cc9968d03ccd53764455c671122c4f391d1
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:40:57 2011 -0400
change Retrieve.remaining_sharemap
src/allmydata/mutable/retrieve.py | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
commit 4f0b7af4821f43290bfc70f2b1fc30149ad81281
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 10:40:18 2011 -0400
accessor for PublishStatus._problems
src/allmydata/mutable/publish.py | 4 +++-
src/allmydata/web/status.py | 2 +-
2 files changed, 4 insertions(+), 2 deletions(-)
commit 627087cf66d0b8cc519f4d551a967a7bd9b6a741
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 10:36:39 2011 -0400
accessor for RetrieveStatus._problems
src/allmydata/mutable/retrieve.py | 8 ++++++--
src/allmydata/web/status.py | 2 +-
2 files changed, 7 insertions(+), 3 deletions(-)
commit ca7dea81f03801b1c7353fc00ecba689268109cf
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:35:32 2011 -0400
add .server to "reader", so we can get at it later
src/allmydata/mutable/retrieve.py | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
commit 6ef516e24908ec195af084a7550d1921a5e983b0
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:32:32 2011 -0400
temporarily give Retrieve a _storage_broker, so it can map serverids to servers
src/allmydata/mutable/checker.py | 3 ++-
src/allmydata/mutable/filenode.py | 6 ++++--
src/allmydata/mutable/retrieve.py | 5 +++--
src/allmydata/test/test_mutable.py | 4 ++--
4 files changed, 11 insertions(+), 7 deletions(-)
commit afe08e4dd3f4ff9ff7e8a2a8d28b181e3625bcc9
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:21:51 2011 -0400
mutable/retrieve.py: s/peer/server/
src/allmydata/mutable/retrieve.py | 82 +++++++++++++-------------
src/allmydata/test/test_mutable.py | 6 +-
2 files changed, 44 insertions(+), 44 deletions(-)
commit 910afcb5d7f274880f68dd6cdb5b05f2bbc29adc
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:16:01 2011 -0400
web.status.PublishStatusPage: add comment, I think .problems isn't exercised
src/allmydata/web/status.py | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
commit 311466dd8c931bbba40d590ade867704282e7f1a
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:48:16 2011 -0400
API of PublishStatus.add_per_server_time()
src/allmydata/mutable/publish.py | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
commit 2df5faa1b6cbfbaded520d2320305a62fe961118
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:46:37 2011 -0400
more simplifications
src/allmydata/mutable/publish.py | 4 +---
1 files changed, 1 insertions(+), 3 deletions(-)
commit 6ac4544a3da385f2aad9392f906b90192f4f919a
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:44:08 2011 -0400
API of ServerMap.version_on_server()
src/allmydata/mutable/publish.py | 2 +-
src/allmydata/mutable/servermap.py | 4 ++--
src/allmydata/test/test_mutable.py | 5 ++---
3 files changed, 5 insertions(+), 6 deletions(-)
commit 3e187e322511072e4683329df6b2c6c733a66dba
Author: Brian Warner <warner@lothar.com>
Date: Tue Oct 4 00:16:32 2011 -0400
API of ServerMap.make_sharemap()
src/allmydata/mutable/servermap.py | 4 ++--
src/allmydata/test/test_mutable.py | 7 ++++---
src/allmydata/web/status.py | 4 ++--
3 files changed, 8 insertions(+), 7 deletions(-)
commit 318feed8437bdd8d4943c6569d38f7b54b6313cc
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:36:19 2011 -0400
small cleanups
src/allmydata/mutable/publish.py | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
commit bd459ed5714e1db5a7163935c54b7b0b56db8349
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:33:39 2011 -0400
API of ServerMap.add_new_share()
src/allmydata/mutable/publish.py | 4 ++--
src/allmydata/mutable/servermap.py | 6 ++----
2 files changed, 4 insertions(+), 6 deletions(-)
commit f2804fb6ed11d80088e0da8ed48e6c2922f2ffef
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:30:26 2011 -0400
API of ServerMap.get_bad_shares()
src/allmydata/mutable/publish.py | 3 +--
src/allmydata/mutable/servermap.py | 9 ++++-----
2 files changed, 5 insertions(+), 7 deletions(-)
commit 965074a47b3ce1431cb46d9a233840afcf9105f5
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:26:58 2011 -0400
more small cleanups
src/allmydata/mutable/publish.py | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
commit 38020da34f034f8889947dd3dc05e087ffff7106
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:18:47 2011 -0400
change Publish.bad_share_checkstrings
src/allmydata/mutable/publish.py | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
commit 5efebcbd2ee0c2f299ea86f7591d856c0f265304
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:16:31 2011 -0400
change internals of Publish.update_goal()
src/allmydata/mutable/publish.py | 8 +++-----
1 files changed, 3 insertions(+), 5 deletions(-)
commit e91b55ff4c2a69165b71f2c7b217ac319ff4c527
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:11:42 2011 -0400
get rid of Publish.connections
src/allmydata/mutable/publish.py | 27 +++++----------------------
1 files changed, 5 insertions(+), 22 deletions(-)
commit 64e9a53b3229ebe2f9ebf7ed502d539311d0e037
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:05:32 2011 -0400
change Publish.bad_servers
src/allmydata/mutable/publish.py | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
commit b85a934bef315a06bcfe00c9c12a3627fed2b918
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:03:07 2011 -0400
Publish.bad_servers: fix bug, this should be a set of serverids, not writers
src/allmydata/mutable/publish.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
commit 605ea15ec15ed671513819003ccd211cdb9761e0
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 23:00:21 2011 -0400
change .placed
src/allmydata/mutable/publish.py | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
commit f7aba37b1b345d5b6d5cb16e3b3f6f3c1afb658e
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 22:59:22 2011 -0400
temporarily stash IServer as .server on the "writer" object
src/allmydata/mutable/publish.py | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
commit f9b551d788e7db1f187fce5ab98ab5d5fe4e1c36
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 22:48:18 2011 -0400
change Publish.goal and API of log_goal() to use IServer, not serverid
src/allmydata/mutable/publish.py | 48 ++++++++++++++--------------
1 files changed, 24 insertions(+), 24 deletions(-)
commit 75f20616558e4900b8b1f685dd99aa838de6d452
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:27:02 2011 -0400
API of ServerMap.get_known_shares()
src/allmydata/mutable/publish.py | 16 ++++++++++------
src/allmydata/mutable/servermap.py | 7 ++-----
2 files changed, 12 insertions(+), 11 deletions(-)
commit 1c38c9d37bb08221b4418762234b1a62397b3b4b
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:20:29 2011 -0400
Publish.full_serverlist
src/allmydata/mutable/publish.py | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
commit b6cbd215a04b9cde31a7d92a97a7f048622b16f1
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:12:31 2011 -0400
API of ServerMap.all_servers()
src/allmydata/mutable/servermap.py | 19 ++++++-------------
1 files changed, 6 insertions(+), 13 deletions(-)
commit e63cd0315fae65357b1727ec6d5ff3c6e0d27c98
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:10:18 2011 -0400
remove ServerMap.connections, set_rref_for_serverid()
src/allmydata/mutable/servermap.py | 11 +----------
1 files changed, 1 insertions(+), 10 deletions(-)
commit 4df52db2f80eb12eefa5d57103c24893cde89553
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:04:06 2011 -0400
API of ServerMap.mark_server_reachable()
src/allmydata/mutable/servermap.py | 7 ++-----
1 files changed, 2 insertions(+), 5 deletions(-)
commit 69c715bde77944dc25181b3dbbeb042c816f9a1b
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:03:21 2011 -0400
API of ServerMap.mark_server_unreachable()
src/allmydata/mutable/servermap.py | 9 +++------
1 files changed, 3 insertions(+), 6 deletions(-)
commit 3d784d60eec1c508858e3a617e4411ffbcc3c1fa
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:02:03 2011 -0400
API of status.set_privkey_from()
src/allmydata/mutable/servermap.py | 7 +++----
1 files changed, 3 insertions(+), 4 deletions(-)
commit 544ed3ea29bed7e66da7fd29ca3f6f076f27a9e6
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:01:15 2011 -0400
API of status.add_per_server_time()
src/allmydata/mutable/servermap.py | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
commit fffe5008b6320bd1e04c3c68389a2bf2ee383fa8
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:59:02 2011 -0400
remove unused .versionmap
src/allmydata/mutable/servermap.py | 7 -------
1 files changed, 0 insertions(+), 7 deletions(-)
commit 2816562e090d2294179db3588dafcca18de1bc2b
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:57:51 2011 -0400
remove serverid from all log messages. Also one unused lambda.
src/allmydata/mutable/servermap.py | 30 +++++++++++++-------------
1 files changed, 15 insertions(+), 15 deletions(-)
commit 28fa6b1a2738fa98c1f1dbd3d0e01ae98912d11f
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:54:30 2011 -0400
removed unused _readers
src/allmydata/mutable/servermap.py | 3 ---
1 files changed, 0 insertions(+), 3 deletions(-)
commit a8e4ed3d645ab592d1add6a1e69b6d1ebfb77817
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:54:16 2011 -0400
remove unused _sharemap
src/allmydata/mutable/servermap.py | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
commit 3f072e55cf1d0700f9fffe23f8f3a475725df588
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:49:03 2011 -0400
_must_query
src/allmydata/mutable/servermap.py | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
commit c599a059b8df3f5785e4bf89fb6ecc6d8dcd708b
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:48:05 2011 -0400
_queries_outstanding
src/allmydata/mutable/servermap.py | 16 +++++++---------
1 files changed, 7 insertions(+), 9 deletions(-)
commit 7743759f98ac2c07926b2fdbd80bf52dfab33085
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:46:17 2011 -0400
_empty_servers
src/allmydata/mutable/servermap.py | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
commit 6bb1825916828a713a32cdf7f7411fa3ea2e1e5d
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:45:39 2011 -0400
_good_servers
src/allmydata/mutable/servermap.py | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
commit 1768fab1b51d8dd93ecabbaaabfadfa20cf6c3d4
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:44:59 2011 -0400
_bad_servers
src/allmydata/mutable/servermap.py | 14 +++++++-------
1 files changed, 7 insertions(+), 7 deletions(-)
commit dccbaef30f0ba714c746bf6d4a1a803c36e17b65
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:41:54 2011 -0400
API of _try_to_set_pubkey()
src/allmydata/mutable/servermap.py | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
commit 0481ea70042ba3575f15eac7fd0780f8ece580cc
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:35:02 2011 -0400
API of notify_server_corruption()
src/allmydata/mutable/servermap.py | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
commit bea9cba18fb3b9c11bb22f18356a263ecec7351e
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:34:09 2011 -0400
API of _got_signature_one_share()
src/allmydata/mutable/servermap.py | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
commit 1520123583cf78650706e114b15bb5b0ac1f4a14
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:32:33 2011 -0400
API of _try_to_validate_privkey()
src/allmydata/mutable/servermap.py | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
commit 938852c9c8519c7a078f58a9b1f4dd8ec8b6715e
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:31:48 2011 -0400
API and internals of _add_lease_failed()
src/allmydata/mutable/servermap.py | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
commit 3843dba367e3c19e176a622ab853cb51d2472ddf
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:30:37 2011 -0400
API of _privkey_query_failed()
src/allmydata/mutable/servermap.py | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
commit 2219a710e1633cd57d0ca0786490de87b3e19ba7
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:29:43 2011 -0400
fix bug in call to _privkey_query_failed, unrelated to refactoring
src/allmydata/mutable/servermap.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
commit ae615bec7d0d1b269710b6902797b12f9592ad62
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:27:17 2011 -0400
API of _got_corrupt_share()
src/allmydata/mutable/servermap.py | 17 +++++++++--------
1 files changed, 9 insertions(+), 8 deletions(-)
commit cb51c95a6f4e077278157a77dab060c8c1ad7a81
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:23:16 2011 -0400
API of _got_results()
src/allmydata/mutable/servermap.py | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
commit bac9154fe0af18f226999a58ffc2362d8cf4b802
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:19:19 2011 -0400
API of _query_failed()
src/allmydata/mutable/servermap.py | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
commit fdc29a8ca95d4b5c503e5382b9e5d4d02141ba12
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:17:20 2011 -0400
API of _do_read()
src/allmydata/mutable/servermap.py | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
commit e7e9e338f28d004aa4d423d11c65f1e271ac7322
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:20:21 2011 -0400
API of _do_query()
src/allmydata/mutable/servermap.py | 15 +++++++--------
1 files changed, 7 insertions(+), 8 deletions(-)
commit 330625b9dac4cdbe72a11464a893065b9aeed453
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 14:43:05 2011 -0400
next step: first batch of updates to ServermapUpdater
updates:
most method-local variables in update()
API of _build_initial_querylist()
API of _send_initial_requests()
.full_serverlist
.extra_servers
src/allmydata/mutable/servermap.py | 39 ++++++++++++++------------
1 files changed, 21 insertions(+), 18 deletions(-)
commit 4aadc584fa7dcb2daa86b048c81dee0049ba26d9
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 15:07:00 2011 -0400
internal change: index _bad_shares with IServer
src/allmydata/mutable/servermap.py | 20 ++++++++++----------
1 files changed, 10 insertions(+), 10 deletions(-)
commit 16d4e6fa82a9907dbdc92094213387c6a4164e41
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 18:20:47 2011 +0100
internal change: index _known_shares with IServer instead of serverid
callers are unchanged
src/allmydata/mutable/servermap.py | 42 +++++++++++++++----------
1 files changed, 25 insertions(+), 17 deletions(-)
commit ceeb5f4938cc814a0c75d1b8f4018aed965c2176
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 18:11:43 2011 +0100
accessors and name cleanup for servermap.Servermap.last_update_mode/time
src/allmydata/mutable/filenode.py | 6 +++---
src/allmydata/mutable/publish.py | 4 ++--
src/allmydata/mutable/servermap.py | 17 +++++++++++------
3 files changed, 16 insertions(+), 11 deletions(-)
commit 8d3cbda82661c0a7e5c3d3b65cf7a5d5ab7e32c0
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 18:11:14 2011 +0100
accessors and name cleanup for servermap.Servermap.problems
src/allmydata/mutable/servermap.py | 21 +++++++++++++--------
src/allmydata/test/test_mutable.py | 6 +++---
2 files changed, 16 insertions(+), 11 deletions(-)
commit 348f57988f79389db0aab7672e6eaa9a6d8e3219
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 18:10:41 2011 +0100
accessors and name cleanup for servermap.Servermap.bad_shares
src/allmydata/mutable/publish.py | 2 +-
src/allmydata/mutable/servermap.py | 30 ++++++++++++++-----------
2 files changed, 18 insertions(+), 14 deletions(-)
commit 520c9368134673cdf76c653c5e1bb91c2ab5d51e
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 18:10:05 2011 +0100
accessors and name cleanup for servermap.Servermap.servermap .
src/allmydata/mutable/publish.py | 14 +++++----
src/allmydata/mutable/servermap.py | 38 ++++++++++++++-----------
2 files changed, 29 insertions(+), 23 deletions(-)
commit b8b8dc38287a91dbdf494426ac801d9381ce5841
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 18:08:02 2011 +0100
fix reachable_servers
src/allmydata/mutable/checker.py | 3 ++-
src/allmydata/mutable/publish.py | 4 +++-
src/allmydata/mutable/servermap.py | 12 ++++++++++--
3 files changed, 15 insertions(+), 4 deletions(-)
commit cb0cfd1adfefad357c187aaaf690c3df68b622bc
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 18:06:03 2011 +0100
fix Servermap.unreachable_servers
src/allmydata/mutable/servermap.py | 11 ++++++++---
1 files changed, 8 insertions(+), 3 deletions(-)
commit 2d9ea79b94bd4db674d40386fda90825785ac495
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 18:03:48 2011 +0100
give ServerMap a StorageFarmBroker, temporary
this makes it possible for the ServerMap to accept bare serverids and still
build data structures with IServers
src/allmydata/mutable/checker.py | 2 +-
src/allmydata/mutable/filenode.py | 2 +-
src/allmydata/mutable/publish.py | 2 +-
src/allmydata/mutable/servermap.py | 5 +++--
src/allmydata/test/test_mutable.py | 8 ++++----
5 files changed, 10 insertions(+), 9 deletions(-)
commit 718d1aeff6fded893f65397806d22ece928b0dd4
Author: Brian Warner <warner@lothar.com>
Date: Mon Oct 3 13:43:30 2011 -0400
add StorageFarmBroker.get_server_for_id(), temporary helper
This will go away once we're passing IServers everywhere.
src/allmydata/storage_client.py | 2 ++
src/allmydata/test/no_network.py | 13 +++++++++++++
2 files changed, 15 insertions(+), 0 deletions(-)
commit ece20231d7fda0d503704842a4aa068dfbc2e54e
Author: Brian Warner <warner@lothar.com>
Date: Sun Oct 2 01:11:50 2011 +0100
add proper accessors for Servermap.connections, to make refactoring easier
src/allmydata/mutable/publish.py | 6 +++---
src/allmydata/mutable/retrieve.py | 10 +++++-----
src/allmydata/mutable/servermap.py | 17 +++++++++++------
3 files changed, 19 insertions(+), 14 deletions(-)
commit 3b943d6bf302ff702668081a612fc4fe2604cf9c
Author: Brian Warner <warner@lothar.com>
Date: Fri Sep 23 10:34:30 2011 -0700
mutable/servermap.py and neighbors: s/peer/server/
src/allmydata/mutable/checker.py | 22 +-
src/allmydata/mutable/publish.py | 204 +++++++-------
src/allmydata/mutable/servermap.py | 402 +++++++++++++-------------
src/allmydata/test/test_mutable.py | 18 +-
4 files changed, 323 insertions(+), 323 deletions(-)
2011-11-01 04:03:19 +00:00
|
|
|
def get_foolscap_write_enabler_seed(self):
|
|
|
|
return self.serverid
|
|
|
|
|
2011-08-01 17:44:28 +00:00
|
|
|
def get_name(self):
|
2011-02-27 02:11:32 +00:00
|
|
|
return idlib.shortnodeid_b2a(self.serverid)
|
2011-08-01 17:44:28 +00:00
|
|
|
def get_longname(self):
|
2011-02-27 02:11:32 +00:00
|
|
|
return idlib.nodeid_b2a(self.serverid)
|
|
|
|
def get_nickname(self):
|
|
|
|
return "nickname"
|
2011-02-21 01:58:04 +00:00
|
|
|
def get_rref(self):
|
|
|
|
return self.rref
|
2011-02-27 02:11:32 +00:00
|
|
|
def get_version(self):
|
|
|
|
return self.rref.version
|
2011-02-21 01:58:04 +00:00
|
|
|
|
2009-06-01 21:06:04 +00:00
|
|
|
class NoNetworkStorageBroker:
|
2009-06-21 23:51:19 +00:00
|
|
|
implements(IStorageBroker)
|
2011-02-21 01:58:04 +00:00
|
|
|
def get_servers_for_psi(self, peer_selection_index):
|
|
|
|
def _permuted(server):
|
|
|
|
seed = server.get_permutation_seed()
|
|
|
|
return sha1(peer_selection_index + seed).digest()
|
|
|
|
return sorted(self.get_connected_servers(), key=_permuted)
|
|
|
|
def get_connected_servers(self):
|
|
|
|
return self.client._servers
|
2009-06-02 03:07:50 +00:00
|
|
|
def get_nickname_for_serverid(self, serverid):
|
|
|
|
return None
|
2009-06-01 21:06:04 +00:00
|
|
|
|
2009-02-16 21:58:44 +00:00
|
|
|
class NoNetworkClient(Client):
|
2015-10-01 21:40:10 +00:00
|
|
|
|
|
|
|
def disownServiceParent(self):
|
|
|
|
self.disownServiceParent()
|
2009-02-16 21:58:44 +00:00
|
|
|
def create_tub(self):
|
|
|
|
pass
|
|
|
|
def init_introducer_client(self):
|
|
|
|
pass
|
|
|
|
def setup_logging(self):
|
|
|
|
pass
|
|
|
|
def startService(self):
|
|
|
|
service.MultiService.startService(self)
|
|
|
|
def stopService(self):
|
|
|
|
service.MultiService.stopService(self)
|
|
|
|
def init_control(self):
|
|
|
|
pass
|
|
|
|
def init_helper(self):
|
|
|
|
pass
|
|
|
|
def init_key_gen(self):
|
|
|
|
pass
|
|
|
|
def init_storage(self):
|
|
|
|
pass
|
2009-06-01 21:06:04 +00:00
|
|
|
def init_client_storage_broker(self):
|
|
|
|
self.storage_broker = NoNetworkStorageBroker()
|
|
|
|
self.storage_broker.client = self
|
2009-02-16 21:58:44 +00:00
|
|
|
def init_stub_client(self):
|
|
|
|
pass
|
2009-06-21 23:51:19 +00:00
|
|
|
#._servers will be set by the NoNetworkGrid which creates us
|
2009-02-16 21:58:44 +00:00
|
|
|
|
2009-02-24 00:39:37 +00:00
|
|
|
class SimpleStats:
|
|
|
|
def __init__(self):
|
|
|
|
self.counters = {}
|
|
|
|
self.stats_producers = []
|
|
|
|
|
|
|
|
def count(self, name, delta=1):
|
|
|
|
val = self.counters.setdefault(name, 0)
|
|
|
|
self.counters[name] = val + delta
|
|
|
|
|
|
|
|
def register_producer(self, stats_producer):
|
|
|
|
self.stats_producers.append(stats_producer)
|
|
|
|
|
|
|
|
def get_stats(self):
|
|
|
|
stats = {}
|
|
|
|
for sp in self.stats_producers:
|
|
|
|
stats.update(sp.get_stats())
|
|
|
|
ret = { 'counters': self.counters, 'stats': stats }
|
|
|
|
return ret
|
2009-02-16 21:58:44 +00:00
|
|
|
|
|
|
|
class NoNetworkGrid(service.MultiService):
|
2009-02-17 00:44:57 +00:00
|
|
|
def __init__(self, basedir, num_clients=1, num_servers=10,
|
|
|
|
client_config_hooks={}):
|
2009-02-16 21:58:44 +00:00
|
|
|
service.MultiService.__init__(self)
|
|
|
|
self.basedir = basedir
|
|
|
|
fileutil.make_dirs(basedir)
|
|
|
|
|
2011-02-21 01:58:04 +00:00
|
|
|
self.servers_by_number = {} # maps to StorageServer instance
|
|
|
|
self.wrappers_by_id = {} # maps to wrapped StorageServer instance
|
|
|
|
self.proxies_by_id = {} # maps to IServer on which .rref is a wrapped
|
|
|
|
# StorageServer
|
2009-02-17 00:19:47 +00:00
|
|
|
self.clients = []
|
2015-10-01 21:40:10 +00:00
|
|
|
self.client_config_hooks = client_config_hooks
|
2009-02-17 00:19:47 +00:00
|
|
|
|
2009-02-16 21:58:44 +00:00
|
|
|
for i in range(num_servers):
|
2009-02-20 03:22:54 +00:00
|
|
|
ss = self.make_server(i)
|
|
|
|
self.add_server(i, ss)
|
Overhaul IFilesystemNode handling, to simplify tests and use POLA internally.
* stop using IURI as an adapter
* pass cap strings around instead of URI instances
* move filenode/dirnode creation duties from Client to new NodeMaker class
* move other Client duties to KeyGenerator, SecretHolder, History classes
* stop passing Client reference to dirnode/filenode constructors
- pass less-powerful references instead, like StorageBroker or Uploader
* always create DirectoryNodes by wrapping a filenode (mutable for now)
* remove some specialized mock classes from unit tests
Detailed list of changes (done one at a time, then merged together)
always pass a string to create_node_from_uri(), not an IURI instance
always pass a string to IFilesystemNode constructors, not an IURI instance
stop using IURI() as an adapter, switch on cap prefix in create_node_from_uri()
client.py: move SecretHolder code out to a separate class
test_web.py: hush pyflakes
client.py: move NodeMaker functionality out into a separate object
LiteralFileNode: stop storing a Client reference
immutable Checker: remove Client reference, it only needs a SecretHolder
immutable Upload: remove Client reference, leave SecretHolder and StorageBroker
immutable Repairer: replace Client reference with StorageBroker and SecretHolder
immutable FileNode: remove Client reference
mutable.Publish: stop passing Client
mutable.ServermapUpdater: get StorageBroker in constructor, not by peeking into Client reference
MutableChecker: reference StorageBroker and History directly, not through Client
mutable.FileNode: removed unused indirection to checker classes
mutable.FileNode: remove Client reference
client.py: move RSA key generation into a separate class, so it can be passed to the nodemaker
move create_mutable_file() into NodeMaker
test_dirnode.py: stop using FakeClient mockups, use NoNetworkGrid instead. This simplifies the code, but takes longer to run (17s instead of 6s). This should come down later when other cleanups make it possible to use simpler (non-RSA) fake mutable files for dirnode tests.
test_mutable.py: clean up basedir names
client.py: move create_empty_dirnode() into NodeMaker
dirnode.py: get rid of DirectoryNode.create
remove DirectoryNode.init_from_uri, refactor NodeMaker for customization, simplify test_web's mock Client to match
stop passing Client to DirectoryNode, make DirectoryNode.create_with_mutablefile the normal DirectoryNode constructor, start removing client from NodeMaker
remove Client from NodeMaker
move helper status into History, pass History to web.Status instead of Client
test_mutable.py: fix minor typo
2009-08-15 11:02:56 +00:00
|
|
|
self.rebuild_serverlist()
|
2009-02-16 21:58:44 +00:00
|
|
|
|
|
|
|
for i in range(num_clients):
|
2015-10-01 21:40:10 +00:00
|
|
|
c = self.make_client(i)
|
|
|
|
self.clients.append(c)
|
|
|
|
|
|
|
|
def make_client(self, i, write_config=True):
|
|
|
|
clientid = hashutil.tagged_hash("clientid", str(i))[:20]
|
|
|
|
clientdir = os.path.join(self.basedir, "clients",
|
|
|
|
idlib.shortnodeid_b2a(clientid))
|
|
|
|
fileutil.make_dirs(clientdir)
|
|
|
|
|
|
|
|
tahoe_cfg_path = os.path.join(clientdir, "tahoe.cfg")
|
|
|
|
if write_config:
|
|
|
|
f = open(tahoe_cfg_path, "w")
|
2009-02-17 00:19:47 +00:00
|
|
|
f.write("[node]\n")
|
|
|
|
f.write("nickname = client-%d\n" % i)
|
|
|
|
f.write("web.port = tcp:0:interface=127.0.0.1\n")
|
|
|
|
f.write("[storage]\n")
|
|
|
|
f.write("enabled = false\n")
|
|
|
|
f.close()
|
2015-10-01 21:40:10 +00:00
|
|
|
else:
|
|
|
|
_assert(os.path.exists(tahoe_cfg_path), tahoe_cfg_path=tahoe_cfg_path)
|
|
|
|
|
|
|
|
c = None
|
|
|
|
if i in self.client_config_hooks:
|
|
|
|
# this hook can either modify tahoe.cfg, or return an
|
|
|
|
# entirely new Client instance
|
|
|
|
c = self.client_config_hooks[i](clientdir)
|
|
|
|
|
|
|
|
if not c:
|
|
|
|
c = NoNetworkClient(clientdir)
|
|
|
|
c.set_default_mutable_keysize(TEST_RSA_KEY_SIZE)
|
|
|
|
|
|
|
|
c.nodeid = clientid
|
|
|
|
c.short_nodeid = b32encode(clientid).lower()[:8]
|
|
|
|
c._servers = self.all_servers # can be updated later
|
|
|
|
c.setServiceParent(self)
|
|
|
|
return c
|
2009-02-16 21:58:44 +00:00
|
|
|
|
2009-10-18 01:30:13 +00:00
|
|
|
def make_server(self, i, readonly=False):
|
2009-02-20 03:22:54 +00:00
|
|
|
serverid = hashutil.tagged_hash("serverid", str(i))[:20]
|
|
|
|
serverdir = os.path.join(self.basedir, "servers",
|
2011-08-28 00:55:42 +00:00
|
|
|
idlib.shortnodeid_b2a(serverid), "storage")
|
2009-02-20 03:22:54 +00:00
|
|
|
fileutil.make_dirs(serverdir)
|
2009-10-18 01:30:13 +00:00
|
|
|
ss = StorageServer(serverdir, serverid, stats_provider=SimpleStats(),
|
|
|
|
readonly_storage=readonly)
|
2010-08-04 07:27:10 +00:00
|
|
|
ss._no_network_server_number = i
|
2009-02-20 03:22:54 +00:00
|
|
|
return ss
|
|
|
|
|
|
|
|
def add_server(self, i, ss):
|
|
|
|
# to deal with the fact that all StorageServers are named 'storage',
|
|
|
|
# we interpose a middleman
|
|
|
|
middleman = service.MultiService()
|
|
|
|
middleman.setServiceParent(self)
|
|
|
|
ss.setServiceParent(middleman)
|
|
|
|
serverid = ss.my_nodeid
|
2009-02-17 00:36:58 +00:00
|
|
|
self.servers_by_number[i] = ss
|
2011-02-21 01:58:04 +00:00
|
|
|
wrapper = wrap_storage_server(ss)
|
|
|
|
self.wrappers_by_id[serverid] = wrapper
|
|
|
|
self.proxies_by_id[serverid] = NoNetworkServer(serverid, wrapper)
|
Overhaul IFilesystemNode handling, to simplify tests and use POLA internally.
* stop using IURI as an adapter
* pass cap strings around instead of URI instances
* move filenode/dirnode creation duties from Client to new NodeMaker class
* move other Client duties to KeyGenerator, SecretHolder, History classes
* stop passing Client reference to dirnode/filenode constructors
- pass less-powerful references instead, like StorageBroker or Uploader
* always create DirectoryNodes by wrapping a filenode (mutable for now)
* remove some specialized mock classes from unit tests
Detailed list of changes (done one at a time, then merged together)
always pass a string to create_node_from_uri(), not an IURI instance
always pass a string to IFilesystemNode constructors, not an IURI instance
stop using IURI() as an adapter, switch on cap prefix in create_node_from_uri()
client.py: move SecretHolder code out to a separate class
test_web.py: hush pyflakes
client.py: move NodeMaker functionality out into a separate object
LiteralFileNode: stop storing a Client reference
immutable Checker: remove Client reference, it only needs a SecretHolder
immutable Upload: remove Client reference, leave SecretHolder and StorageBroker
immutable Repairer: replace Client reference with StorageBroker and SecretHolder
immutable FileNode: remove Client reference
mutable.Publish: stop passing Client
mutable.ServermapUpdater: get StorageBroker in constructor, not by peeking into Client reference
MutableChecker: reference StorageBroker and History directly, not through Client
mutable.FileNode: removed unused indirection to checker classes
mutable.FileNode: remove Client reference
client.py: move RSA key generation into a separate class, so it can be passed to the nodemaker
move create_mutable_file() into NodeMaker
test_dirnode.py: stop using FakeClient mockups, use NoNetworkGrid instead. This simplifies the code, but takes longer to run (17s instead of 6s). This should come down later when other cleanups make it possible to use simpler (non-RSA) fake mutable files for dirnode tests.
test_mutable.py: clean up basedir names
client.py: move create_empty_dirnode() into NodeMaker
dirnode.py: get rid of DirectoryNode.create
remove DirectoryNode.init_from_uri, refactor NodeMaker for customization, simplify test_web's mock Client to match
stop passing Client to DirectoryNode, make DirectoryNode.create_with_mutablefile the normal DirectoryNode constructor, start removing client from NodeMaker
remove Client from NodeMaker
move helper status into History, pass History to web.Status instead of Client
test_mutable.py: fix minor typo
2009-08-15 11:02:56 +00:00
|
|
|
self.rebuild_serverlist()
|
|
|
|
|
2011-02-21 01:58:04 +00:00
|
|
|
def get_all_serverids(self):
|
|
|
|
return self.proxies_by_id.keys()
|
|
|
|
|
Overhaul IFilesystemNode handling, to simplify tests and use POLA internally.
* stop using IURI as an adapter
* pass cap strings around instead of URI instances
* move filenode/dirnode creation duties from Client to new NodeMaker class
* move other Client duties to KeyGenerator, SecretHolder, History classes
* stop passing Client reference to dirnode/filenode constructors
- pass less-powerful references instead, like StorageBroker or Uploader
* always create DirectoryNodes by wrapping a filenode (mutable for now)
* remove some specialized mock classes from unit tests
Detailed list of changes (done one at a time, then merged together)
always pass a string to create_node_from_uri(), not an IURI instance
always pass a string to IFilesystemNode constructors, not an IURI instance
stop using IURI() as an adapter, switch on cap prefix in create_node_from_uri()
client.py: move SecretHolder code out to a separate class
test_web.py: hush pyflakes
client.py: move NodeMaker functionality out into a separate object
LiteralFileNode: stop storing a Client reference
immutable Checker: remove Client reference, it only needs a SecretHolder
immutable Upload: remove Client reference, leave SecretHolder and StorageBroker
immutable Repairer: replace Client reference with StorageBroker and SecretHolder
immutable FileNode: remove Client reference
mutable.Publish: stop passing Client
mutable.ServermapUpdater: get StorageBroker in constructor, not by peeking into Client reference
MutableChecker: reference StorageBroker and History directly, not through Client
mutable.FileNode: removed unused indirection to checker classes
mutable.FileNode: remove Client reference
client.py: move RSA key generation into a separate class, so it can be passed to the nodemaker
move create_mutable_file() into NodeMaker
test_dirnode.py: stop using FakeClient mockups, use NoNetworkGrid instead. This simplifies the code, but takes longer to run (17s instead of 6s). This should come down later when other cleanups make it possible to use simpler (non-RSA) fake mutable files for dirnode tests.
test_mutable.py: clean up basedir names
client.py: move create_empty_dirnode() into NodeMaker
dirnode.py: get rid of DirectoryNode.create
remove DirectoryNode.init_from_uri, refactor NodeMaker for customization, simplify test_web's mock Client to match
stop passing Client to DirectoryNode, make DirectoryNode.create_with_mutablefile the normal DirectoryNode constructor, start removing client from NodeMaker
remove Client from NodeMaker
move helper status into History, pass History to web.Status instead of Client
test_mutable.py: fix minor typo
2009-08-15 11:02:56 +00:00
|
|
|
def rebuild_serverlist(self):
|
2011-02-21 01:58:04 +00:00
|
|
|
self.all_servers = frozenset(self.proxies_by_id.values())
|
2009-02-17 00:19:47 +00:00
|
|
|
for c in self.clients:
|
|
|
|
c._servers = self.all_servers
|
|
|
|
|
Overhaul IFilesystemNode handling, to simplify tests and use POLA internally.
* stop using IURI as an adapter
* pass cap strings around instead of URI instances
* move filenode/dirnode creation duties from Client to new NodeMaker class
* move other Client duties to KeyGenerator, SecretHolder, History classes
* stop passing Client reference to dirnode/filenode constructors
- pass less-powerful references instead, like StorageBroker or Uploader
* always create DirectoryNodes by wrapping a filenode (mutable for now)
* remove some specialized mock classes from unit tests
Detailed list of changes (done one at a time, then merged together)
always pass a string to create_node_from_uri(), not an IURI instance
always pass a string to IFilesystemNode constructors, not an IURI instance
stop using IURI() as an adapter, switch on cap prefix in create_node_from_uri()
client.py: move SecretHolder code out to a separate class
test_web.py: hush pyflakes
client.py: move NodeMaker functionality out into a separate object
LiteralFileNode: stop storing a Client reference
immutable Checker: remove Client reference, it only needs a SecretHolder
immutable Upload: remove Client reference, leave SecretHolder and StorageBroker
immutable Repairer: replace Client reference with StorageBroker and SecretHolder
immutable FileNode: remove Client reference
mutable.Publish: stop passing Client
mutable.ServermapUpdater: get StorageBroker in constructor, not by peeking into Client reference
MutableChecker: reference StorageBroker and History directly, not through Client
mutable.FileNode: removed unused indirection to checker classes
mutable.FileNode: remove Client reference
client.py: move RSA key generation into a separate class, so it can be passed to the nodemaker
move create_mutable_file() into NodeMaker
test_dirnode.py: stop using FakeClient mockups, use NoNetworkGrid instead. This simplifies the code, but takes longer to run (17s instead of 6s). This should come down later when other cleanups make it possible to use simpler (non-RSA) fake mutable files for dirnode tests.
test_mutable.py: clean up basedir names
client.py: move create_empty_dirnode() into NodeMaker
dirnode.py: get rid of DirectoryNode.create
remove DirectoryNode.init_from_uri, refactor NodeMaker for customization, simplify test_web's mock Client to match
stop passing Client to DirectoryNode, make DirectoryNode.create_with_mutablefile the normal DirectoryNode constructor, start removing client from NodeMaker
remove Client from NodeMaker
move helper status into History, pass History to web.Status instead of Client
test_mutable.py: fix minor typo
2009-08-15 11:02:56 +00:00
|
|
|
def remove_server(self, serverid):
|
|
|
|
# it's enough to remove the server from c._servers (we don't actually
|
|
|
|
# have to detach and stopService it)
|
|
|
|
for i,ss in self.servers_by_number.items():
|
|
|
|
if ss.my_nodeid == serverid:
|
|
|
|
del self.servers_by_number[i]
|
|
|
|
break
|
2011-02-21 01:58:04 +00:00
|
|
|
del self.wrappers_by_id[serverid]
|
|
|
|
del self.proxies_by_id[serverid]
|
Overhaul IFilesystemNode handling, to simplify tests and use POLA internally.
* stop using IURI as an adapter
* pass cap strings around instead of URI instances
* move filenode/dirnode creation duties from Client to new NodeMaker class
* move other Client duties to KeyGenerator, SecretHolder, History classes
* stop passing Client reference to dirnode/filenode constructors
- pass less-powerful references instead, like StorageBroker or Uploader
* always create DirectoryNodes by wrapping a filenode (mutable for now)
* remove some specialized mock classes from unit tests
Detailed list of changes (done one at a time, then merged together)
always pass a string to create_node_from_uri(), not an IURI instance
always pass a string to IFilesystemNode constructors, not an IURI instance
stop using IURI() as an adapter, switch on cap prefix in create_node_from_uri()
client.py: move SecretHolder code out to a separate class
test_web.py: hush pyflakes
client.py: move NodeMaker functionality out into a separate object
LiteralFileNode: stop storing a Client reference
immutable Checker: remove Client reference, it only needs a SecretHolder
immutable Upload: remove Client reference, leave SecretHolder and StorageBroker
immutable Repairer: replace Client reference with StorageBroker and SecretHolder
immutable FileNode: remove Client reference
mutable.Publish: stop passing Client
mutable.ServermapUpdater: get StorageBroker in constructor, not by peeking into Client reference
MutableChecker: reference StorageBroker and History directly, not through Client
mutable.FileNode: removed unused indirection to checker classes
mutable.FileNode: remove Client reference
client.py: move RSA key generation into a separate class, so it can be passed to the nodemaker
move create_mutable_file() into NodeMaker
test_dirnode.py: stop using FakeClient mockups, use NoNetworkGrid instead. This simplifies the code, but takes longer to run (17s instead of 6s). This should come down later when other cleanups make it possible to use simpler (non-RSA) fake mutable files for dirnode tests.
test_mutable.py: clean up basedir names
client.py: move create_empty_dirnode() into NodeMaker
dirnode.py: get rid of DirectoryNode.create
remove DirectoryNode.init_from_uri, refactor NodeMaker for customization, simplify test_web's mock Client to match
stop passing Client to DirectoryNode, make DirectoryNode.create_with_mutablefile the normal DirectoryNode constructor, start removing client from NodeMaker
remove Client from NodeMaker
move helper status into History, pass History to web.Status instead of Client
test_mutable.py: fix minor typo
2009-08-15 11:02:56 +00:00
|
|
|
self.rebuild_serverlist()
|
mutable publish: track multiple servers-per-share. Fixes some of #1628.
The remaining work is to write additional tests.
src/allmydata/test/no_network.py:
This supports tests in which servers leave the grid only to return with
their shares intact at a later time.
src/allmydata/test/test_mutable.py:
The UCWEs in the incident reports associated with #1628 all seem to be
associated with shares that the servermap knows about, but which aren't
accounted for during the publish process for whatever reason. Specifically,
it looks like the publisher is only capable of keeping track of a single
storage server for a given share. This makes the repair process worse than
it was pre-MDMF at updating all of the shares of a particular file to the
newest version, and can also cause spurious UCWEs. This test simulates such
a layout and fails if an UCWE is thrown. We need to write another test to
ensure that all copies of a share are updated to the latest version (or
alter this test to do that), so that the test suite doesn't pass unless both
regressions are fixed.
We want the publisher to follow the existing share placement when uploading
a new version of a mutable file, and we don't want this test to pass unless
it does.
src/allmydata/mutable/publish.py:
Before this commit, the publisher only kept track of a single writer for
each share. This is insufficient to handle updates in which a single share
may live on multiple servers. In the best case, an update will only update
one of the existing shares instead of all of them. In some cases, the update
will encounter the existing shares when publishing some other share,
interpret it as a sign of an uncoordinated update, and fail. Keeping track
of all of the writers helps ensure that all existing shares are updated, and
helps avoid spurious uncoordinated write errors.
2011-12-28 05:33:58 +00:00
|
|
|
return ss
|
Overhaul IFilesystemNode handling, to simplify tests and use POLA internally.
* stop using IURI as an adapter
* pass cap strings around instead of URI instances
* move filenode/dirnode creation duties from Client to new NodeMaker class
* move other Client duties to KeyGenerator, SecretHolder, History classes
* stop passing Client reference to dirnode/filenode constructors
- pass less-powerful references instead, like StorageBroker or Uploader
* always create DirectoryNodes by wrapping a filenode (mutable for now)
* remove some specialized mock classes from unit tests
Detailed list of changes (done one at a time, then merged together)
always pass a string to create_node_from_uri(), not an IURI instance
always pass a string to IFilesystemNode constructors, not an IURI instance
stop using IURI() as an adapter, switch on cap prefix in create_node_from_uri()
client.py: move SecretHolder code out to a separate class
test_web.py: hush pyflakes
client.py: move NodeMaker functionality out into a separate object
LiteralFileNode: stop storing a Client reference
immutable Checker: remove Client reference, it only needs a SecretHolder
immutable Upload: remove Client reference, leave SecretHolder and StorageBroker
immutable Repairer: replace Client reference with StorageBroker and SecretHolder
immutable FileNode: remove Client reference
mutable.Publish: stop passing Client
mutable.ServermapUpdater: get StorageBroker in constructor, not by peeking into Client reference
MutableChecker: reference StorageBroker and History directly, not through Client
mutable.FileNode: removed unused indirection to checker classes
mutable.FileNode: remove Client reference
client.py: move RSA key generation into a separate class, so it can be passed to the nodemaker
move create_mutable_file() into NodeMaker
test_dirnode.py: stop using FakeClient mockups, use NoNetworkGrid instead. This simplifies the code, but takes longer to run (17s instead of 6s). This should come down later when other cleanups make it possible to use simpler (non-RSA) fake mutable files for dirnode tests.
test_mutable.py: clean up basedir names
client.py: move create_empty_dirnode() into NodeMaker
dirnode.py: get rid of DirectoryNode.create
remove DirectoryNode.init_from_uri, refactor NodeMaker for customization, simplify test_web's mock Client to match
stop passing Client to DirectoryNode, make DirectoryNode.create_with_mutablefile the normal DirectoryNode constructor, start removing client from NodeMaker
remove Client from NodeMaker
move helper status into History, pass History to web.Status instead of Client
test_mutable.py: fix minor typo
2009-08-15 11:02:56 +00:00
|
|
|
|
2012-05-16 23:50:43 +00:00
|
|
|
def break_server(self, serverid, count=True):
|
Overhaul IFilesystemNode handling, to simplify tests and use POLA internally.
* stop using IURI as an adapter
* pass cap strings around instead of URI instances
* move filenode/dirnode creation duties from Client to new NodeMaker class
* move other Client duties to KeyGenerator, SecretHolder, History classes
* stop passing Client reference to dirnode/filenode constructors
- pass less-powerful references instead, like StorageBroker or Uploader
* always create DirectoryNodes by wrapping a filenode (mutable for now)
* remove some specialized mock classes from unit tests
Detailed list of changes (done one at a time, then merged together)
always pass a string to create_node_from_uri(), not an IURI instance
always pass a string to IFilesystemNode constructors, not an IURI instance
stop using IURI() as an adapter, switch on cap prefix in create_node_from_uri()
client.py: move SecretHolder code out to a separate class
test_web.py: hush pyflakes
client.py: move NodeMaker functionality out into a separate object
LiteralFileNode: stop storing a Client reference
immutable Checker: remove Client reference, it only needs a SecretHolder
immutable Upload: remove Client reference, leave SecretHolder and StorageBroker
immutable Repairer: replace Client reference with StorageBroker and SecretHolder
immutable FileNode: remove Client reference
mutable.Publish: stop passing Client
mutable.ServermapUpdater: get StorageBroker in constructor, not by peeking into Client reference
MutableChecker: reference StorageBroker and History directly, not through Client
mutable.FileNode: removed unused indirection to checker classes
mutable.FileNode: remove Client reference
client.py: move RSA key generation into a separate class, so it can be passed to the nodemaker
move create_mutable_file() into NodeMaker
test_dirnode.py: stop using FakeClient mockups, use NoNetworkGrid instead. This simplifies the code, but takes longer to run (17s instead of 6s). This should come down later when other cleanups make it possible to use simpler (non-RSA) fake mutable files for dirnode tests.
test_mutable.py: clean up basedir names
client.py: move create_empty_dirnode() into NodeMaker
dirnode.py: get rid of DirectoryNode.create
remove DirectoryNode.init_from_uri, refactor NodeMaker for customization, simplify test_web's mock Client to match
stop passing Client to DirectoryNode, make DirectoryNode.create_with_mutablefile the normal DirectoryNode constructor, start removing client from NodeMaker
remove Client from NodeMaker
move helper status into History, pass History to web.Status instead of Client
test_mutable.py: fix minor typo
2009-08-15 11:02:56 +00:00
|
|
|
# mark the given server as broken, so it will throw exceptions when
|
2012-05-16 23:50:43 +00:00
|
|
|
# asked to hold a share or serve a share. If count= is a number,
|
|
|
|
# throw that many exceptions before starting to work again.
|
|
|
|
self.wrappers_by_id[serverid].broken = count
|
Overhaul IFilesystemNode handling, to simplify tests and use POLA internally.
* stop using IURI as an adapter
* pass cap strings around instead of URI instances
* move filenode/dirnode creation duties from Client to new NodeMaker class
* move other Client duties to KeyGenerator, SecretHolder, History classes
* stop passing Client reference to dirnode/filenode constructors
- pass less-powerful references instead, like StorageBroker or Uploader
* always create DirectoryNodes by wrapping a filenode (mutable for now)
* remove some specialized mock classes from unit tests
Detailed list of changes (done one at a time, then merged together)
always pass a string to create_node_from_uri(), not an IURI instance
always pass a string to IFilesystemNode constructors, not an IURI instance
stop using IURI() as an adapter, switch on cap prefix in create_node_from_uri()
client.py: move SecretHolder code out to a separate class
test_web.py: hush pyflakes
client.py: move NodeMaker functionality out into a separate object
LiteralFileNode: stop storing a Client reference
immutable Checker: remove Client reference, it only needs a SecretHolder
immutable Upload: remove Client reference, leave SecretHolder and StorageBroker
immutable Repairer: replace Client reference with StorageBroker and SecretHolder
immutable FileNode: remove Client reference
mutable.Publish: stop passing Client
mutable.ServermapUpdater: get StorageBroker in constructor, not by peeking into Client reference
MutableChecker: reference StorageBroker and History directly, not through Client
mutable.FileNode: removed unused indirection to checker classes
mutable.FileNode: remove Client reference
client.py: move RSA key generation into a separate class, so it can be passed to the nodemaker
move create_mutable_file() into NodeMaker
test_dirnode.py: stop using FakeClient mockups, use NoNetworkGrid instead. This simplifies the code, but takes longer to run (17s instead of 6s). This should come down later when other cleanups make it possible to use simpler (non-RSA) fake mutable files for dirnode tests.
test_mutable.py: clean up basedir names
client.py: move create_empty_dirnode() into NodeMaker
dirnode.py: get rid of DirectoryNode.create
remove DirectoryNode.init_from_uri, refactor NodeMaker for customization, simplify test_web's mock Client to match
stop passing Client to DirectoryNode, make DirectoryNode.create_with_mutablefile the normal DirectoryNode constructor, start removing client from NodeMaker
remove Client from NodeMaker
move helper status into History, pass History to web.Status instead of Client
test_mutable.py: fix minor typo
2009-08-15 11:02:56 +00:00
|
|
|
|
2010-02-01 06:16:10 +00:00
|
|
|
def hang_server(self, serverid):
|
|
|
|
# hang the given server
|
2011-02-21 01:58:04 +00:00
|
|
|
ss = self.wrappers_by_id[serverid]
|
2010-02-01 06:16:10 +00:00
|
|
|
assert ss.hung_until is None
|
|
|
|
ss.hung_until = defer.Deferred()
|
|
|
|
|
|
|
|
def unhang_server(self, serverid):
|
|
|
|
# unhang the given server
|
2011-02-21 01:58:04 +00:00
|
|
|
ss = self.wrappers_by_id[serverid]
|
2010-02-01 06:16:10 +00:00
|
|
|
assert ss.hung_until is not None
|
|
|
|
ss.hung_until.callback(None)
|
|
|
|
ss.hung_until = None
|
2010-01-29 12:38:45 +00:00
|
|
|
|
2013-03-19 05:37:02 +00:00
|
|
|
def nuke_from_orbit(self):
|
|
|
|
""" Empty all share directories in this grid. It's the only way to be sure ;-) """
|
|
|
|
for server in self.servers_by_number.values():
|
|
|
|
for prefixdir in os.listdir(server.sharedir):
|
|
|
|
if prefixdir != 'incoming':
|
|
|
|
fileutil.rm_dir(os.path.join(server.sharedir, prefixdir))
|
|
|
|
|
2010-01-29 12:38:45 +00:00
|
|
|
|
2009-02-17 00:19:47 +00:00
|
|
|
class GridTestMixin:
|
|
|
|
def setUp(self):
|
|
|
|
self.s = service.MultiService()
|
|
|
|
self.s.startService()
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
return self.s.stopService()
|
|
|
|
|
2009-02-20 03:22:54 +00:00
|
|
|
def set_up_grid(self, num_clients=1, num_servers=10,
|
|
|
|
client_config_hooks={}):
|
2009-02-17 00:19:47 +00:00
|
|
|
# self.basedir must be set
|
2009-02-20 03:22:54 +00:00
|
|
|
self.g = NoNetworkGrid(self.basedir,
|
|
|
|
num_clients=num_clients,
|
|
|
|
num_servers=num_servers,
|
2009-02-17 00:44:57 +00:00
|
|
|
client_config_hooks=client_config_hooks)
|
2009-02-17 00:19:47 +00:00
|
|
|
self.g.setServiceParent(self.s)
|
2015-10-01 21:40:10 +00:00
|
|
|
self._record_webports_and_baseurls()
|
|
|
|
|
|
|
|
def _record_webports_and_baseurls(self):
|
2011-01-17 07:47:51 +00:00
|
|
|
self.client_webports = [c.getServiceNamed("webish").getPortnum()
|
|
|
|
for c in self.g.clients]
|
|
|
|
self.client_baseurls = [c.getServiceNamed("webish").getURL()
|
2009-02-17 05:12:42 +00:00
|
|
|
for c in self.g.clients]
|
2009-02-17 00:19:47 +00:00
|
|
|
|
|
|
|
def get_clientdir(self, i=0):
|
|
|
|
return self.g.clients[i].basedir
|
2009-02-17 00:36:58 +00:00
|
|
|
|
2015-10-01 21:40:10 +00:00
|
|
|
def set_clientdir(self, basedir, i=0):
|
|
|
|
self.g.clients[i].basedir = basedir
|
|
|
|
|
|
|
|
def get_client(self, i=0):
|
|
|
|
return self.g.clients[i]
|
|
|
|
|
|
|
|
def restart_client(self, i=0):
|
|
|
|
client = self.g.clients[i]
|
|
|
|
d = defer.succeed(None)
|
|
|
|
d.addCallback(lambda ign: self.g.removeService(client))
|
|
|
|
def _make_client(ign):
|
|
|
|
c = self.g.make_client(i, write_config=False)
|
|
|
|
self.g.clients[i] = c
|
|
|
|
self._record_webports_and_baseurls()
|
|
|
|
d.addCallback(_make_client)
|
|
|
|
return d
|
|
|
|
|
2009-02-17 00:36:58 +00:00
|
|
|
def get_serverdir(self, i):
|
|
|
|
return self.g.servers_by_number[i].storedir
|
|
|
|
|
|
|
|
def iterate_servers(self):
|
|
|
|
for i in sorted(self.g.servers_by_number.keys()):
|
|
|
|
ss = self.g.servers_by_number[i]
|
|
|
|
yield (i, ss, ss.storedir)
|
2009-02-17 05:12:42 +00:00
|
|
|
|
2010-07-19 04:50:47 +00:00
|
|
|
def find_uri_shares(self, uri):
|
2009-02-17 05:12:42 +00:00
|
|
|
si = tahoe_uri.from_string(uri).get_storage_index()
|
|
|
|
prefixdir = storage_index_to_dir(si)
|
|
|
|
shares = []
|
|
|
|
for i,ss in self.g.servers_by_number.items():
|
|
|
|
serverid = ss.my_nodeid
|
2011-08-28 00:55:42 +00:00
|
|
|
basedir = os.path.join(ss.sharedir, prefixdir)
|
2009-02-17 05:12:42 +00:00
|
|
|
if not os.path.exists(basedir):
|
|
|
|
continue
|
|
|
|
for f in os.listdir(basedir):
|
|
|
|
try:
|
|
|
|
shnum = int(f)
|
|
|
|
shares.append((shnum, serverid, os.path.join(basedir, f)))
|
|
|
|
except ValueError:
|
|
|
|
pass
|
|
|
|
return sorted(shares)
|
|
|
|
|
2010-08-04 07:27:10 +00:00
|
|
|
def copy_shares(self, uri):
|
|
|
|
shares = {}
|
|
|
|
for (shnum, serverid, sharefile) in self.find_uri_shares(uri):
|
|
|
|
shares[sharefile] = open(sharefile, "rb").read()
|
|
|
|
return shares
|
|
|
|
|
|
|
|
def restore_all_shares(self, shares):
|
|
|
|
for sharefile, data in shares.items():
|
|
|
|
open(sharefile, "wb").write(data)
|
|
|
|
|
2009-02-24 00:42:27 +00:00
|
|
|
def delete_share(self, (shnum, serverid, sharefile)):
|
|
|
|
os.unlink(sharefile)
|
|
|
|
|
|
|
|
def delete_shares_numbered(self, uri, shnums):
|
2010-07-19 04:50:47 +00:00
|
|
|
for (i_shnum, i_serverid, i_sharefile) in self.find_uri_shares(uri):
|
2009-02-24 00:42:27 +00:00
|
|
|
if i_shnum in shnums:
|
|
|
|
os.unlink(i_sharefile)
|
|
|
|
|
2013-06-24 22:28:05 +00:00
|
|
|
def delete_all_shares(self, serverdir):
|
|
|
|
sharedir = os.path.join(serverdir, "shares")
|
|
|
|
for prefixdir in os.listdir(sharedir):
|
|
|
|
if prefixdir != 'incoming':
|
|
|
|
fileutil.rm_dir(os.path.join(sharedir, prefixdir))
|
|
|
|
|
2009-02-24 00:42:27 +00:00
|
|
|
def corrupt_share(self, (shnum, serverid, sharefile), corruptor_function):
|
|
|
|
sharedata = open(sharefile, "rb").read()
|
|
|
|
corruptdata = corruptor_function(sharedata)
|
|
|
|
open(sharefile, "wb").write(corruptdata)
|
2009-02-24 05:15:06 +00:00
|
|
|
|
2010-01-10 01:36:19 +00:00
|
|
|
def corrupt_shares_numbered(self, uri, shnums, corruptor, debug=False):
|
2010-07-19 04:50:47 +00:00
|
|
|
for (i_shnum, i_serverid, i_sharefile) in self.find_uri_shares(uri):
|
2009-02-24 05:15:06 +00:00
|
|
|
if i_shnum in shnums:
|
|
|
|
sharedata = open(i_sharefile, "rb").read()
|
2010-01-10 01:36:19 +00:00
|
|
|
corruptdata = corruptor(sharedata, debug=debug)
|
2009-02-24 05:15:06 +00:00
|
|
|
open(i_sharefile, "wb").write(corruptdata)
|
2009-02-25 01:33:00 +00:00
|
|
|
|
2010-08-04 07:27:10 +00:00
|
|
|
def corrupt_all_shares(self, uri, corruptor, debug=False):
|
|
|
|
for (i_shnum, i_serverid, i_sharefile) in self.find_uri_shares(uri):
|
|
|
|
sharedata = open(i_sharefile, "rb").read()
|
|
|
|
corruptdata = corruptor(sharedata, debug=debug)
|
|
|
|
open(i_sharefile, "wb").write(corruptdata)
|
|
|
|
|
2009-02-25 01:33:00 +00:00
|
|
|
def GET(self, urlpath, followRedirect=False, return_response=False,
|
|
|
|
method="GET", clientnum=0, **kwargs):
|
|
|
|
# if return_response=True, this fires with (data, statuscode,
|
|
|
|
# respheaders) instead of just data.
|
|
|
|
assert not isinstance(urlpath, unicode)
|
|
|
|
url = self.client_baseurls[clientnum] + urlpath
|
|
|
|
factory = HTTPClientGETFactory(url, method=method,
|
|
|
|
followRedirect=followRedirect, **kwargs)
|
|
|
|
reactor.connectTCP("localhost", self.client_webports[clientnum],factory)
|
|
|
|
d = factory.deferred
|
|
|
|
def _got_data(data):
|
|
|
|
return (data, factory.status, factory.response_headers)
|
|
|
|
if return_response:
|
|
|
|
d.addCallback(_got_data)
|
|
|
|
return factory.deferred
|
2011-08-23 01:15:32 +00:00
|
|
|
|
|
|
|
def PUT(self, urlpath, **kwargs):
|
|
|
|
return self.GET(urlpath, method="PUT", **kwargs)
|