import weakref
from zope.interface import implements
from allmydata.util.assertutil import precondition
-from allmydata.interfaces import INodeMaker, SDMF_VERSION
+from allmydata.interfaces import INodeMaker
from allmydata.immutable.literal import LiteralFileNode
from allmydata.immutable.filenode import ImmutableFileNode, CiphertextFileNode
from allmydata.immutable.upload import Data
def __init__(self, storage_broker, secret_holder, history,
uploader, terminator,
- default_encoding_parameters, key_generator,
- blacklist=None):
+ default_encoding_parameters, mutable_file_default,
+ key_generator, blacklist=None):
self.storage_broker = storage_broker
self.secret_holder = secret_holder
self.history = history
self.uploader = uploader
self.terminator = terminator
self.default_encoding_parameters = default_encoding_parameters
+ self.mutable_file_default = mutable_file_default
self.key_generator = key_generator
self.blacklist = blacklist
cap = uri.from_string(bigcap, deep_immutable=deep_immutable,
name=name)
node = self._create_from_single_cap(cap)
- if node:
- self._node_cache[memokey] = node # note: WeakValueDictionary
- else:
+
+ # node is None for an unknown URI, otherwise it is a type for which
+ # is_mutable() is known. We avoid cacheing mutable nodes due to
+ # ticket #1679.
+ if node is None:
# don't cache UnknownNode
node = UnknownNode(writecap, readcap,
deep_immutable=deep_immutable, name=name)
+ elif node.is_mutable():
+ self._node_cache[memokey] = node # note: WeakValueDictionary
if self.blacklist:
si = node.get_storage_index()
def create_mutable_file(self, contents=None, keysize=None, version=None):
if version is None:
- version = SDMF_VERSION
+ version = self.mutable_file_default
n = MutableFileNode(self.storage_broker, self.secret_holder,
self.default_encoding_parameters, self.history)
d = self.key_generator.generate(keysize)
packed = pack_children(children, None, deep_immutable=True)
uploadable = Data(packed, convergence)
d = self.uploader.upload(uploadable)
- d.addCallback(lambda results: self.create_from_cap(None, results.uri))
+ d.addCallback(lambda results:
+ self.create_from_cap(None, results.get_uri()))
d.addCallback(self._create_dirnode)
return d