From: Kevan Carstensen Date: Tue, 2 Aug 2011 02:12:07 +0000 (-0700) Subject: frontends/sftpd: Resolve incompatibilities between SFTP frontend and MDMF changes X-Git-Tag: trac-5200~21 X-Git-Url: https://git.rkrishnan.org/?a=commitdiff_plain;h=a87fc8ffab55dfd23a7df6fad7ee963c463215eb;p=tahoe-lafs%2Ftahoe-lafs.git frontends/sftpd: Resolve incompatibilities between SFTP frontend and MDMF changes --- diff --git a/src/allmydata/frontends/sftpd.py b/src/allmydata/frontends/sftpd.py index 328ed6e9..59952a99 100644 --- a/src/allmydata/frontends/sftpd.py +++ b/src/allmydata/frontends/sftpd.py @@ -30,6 +30,7 @@ from allmydata.util.consumer import download_to_data from allmydata.interfaces import IFileNode, IDirectoryNode, ExistingChildError, \ NoSuchChildError, ChildOfWrongTypeError from allmydata.mutable.common import NotWriteableError +from allmydata.mutable.publish import MutableFileHandle from allmydata.immutable.upload import FileHandle from allmydata.dirnode import update_metadata from allmydata.util.fileutil import EncryptedTemporaryFile @@ -663,22 +664,17 @@ class GeneralSFTPFile(PrefixingLogMixin): else: assert IFileNode.providedBy(filenode), filenode - if filenode.is_mutable(): - self.async.addCallback(lambda ign: filenode.download_best_version()) - def _downloaded(data): - self.consumer = OverwriteableFileConsumer(len(data), tempfile_maker) - self.consumer.write(data) - self.consumer.finish() - return None - self.async.addCallback(_downloaded) - else: - download_size = filenode.get_size() - assert download_size is not None, "download_size is None" + self.async.addCallback(lambda ignored: filenode.get_best_readable_version()) + + def _read(version): + if noisy: self.log("_read", level=NOISY) + download_size = version.get_size() + assert download_size is not None + self.consumer = OverwriteableFileConsumer(download_size, tempfile_maker) - def _read(ign): - if noisy: self.log("_read immutable", level=NOISY) - filenode.read(self.consumer, 0, None) - self.async.addCallback(_read) + + version.read(self.consumer, 0, None) + self.async.addCallback(_read) eventually(self.async.callback, None) @@ -822,9 +818,7 @@ class GeneralSFTPFile(PrefixingLogMixin): assert parent and childname, (parent, childname, self.metadata) d2.addCallback(lambda ign: parent.set_metadata_for(childname, self.metadata)) - d2.addCallback(lambda ign: self.consumer.get_current_size()) - d2.addCallback(lambda size: self.consumer.read(0, size)) - d2.addCallback(lambda new_contents: self.filenode.overwrite(new_contents)) + d2.addCallback(lambda ign: self.filenode.overwrite(MutableFileHandle(self.consumer.get_file()))) else: def _add_file(ign): self.log("_add_file childname=%r" % (childname,), level=OPERATIONAL) diff --git a/src/allmydata/test/test_sftp.py b/src/allmydata/test/test_sftp.py index 48874a85..6095b18f 100644 --- a/src/allmydata/test/test_sftp.py +++ b/src/allmydata/test/test_sftp.py @@ -29,6 +29,7 @@ from allmydata.mutable.common import NotWriteableError from allmydata.util.consumer import download_to_data from allmydata.immutable import upload +from allmydata.mutable import publish from allmydata.test.no_network import GridTestMixin from allmydata.test.common import ShouldFailMixin from allmydata.test.common_util import ReallyEqualMixin @@ -76,7 +77,8 @@ class Handler(GridTestMixin, ShouldFailMixin, ReallyEqualMixin, unittest.TestCas return d def _set_up_tree(self): - d = self.client.create_mutable_file("mutable file contents") + u = publish.MutableData("mutable file contents") + d = self.client.create_mutable_file(u) d.addCallback(lambda node: self.root.set_node(u"mutable", node)) def _created_mutable(n): self.mutable = n