summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2010-07-04 17:00:58 +1200
committerLars Wirzenius <liw@liw.fi>2010-07-04 17:00:58 +1200
commit1104da1ffd9091668ab50a808746b92e36d2b86b (patch)
tree1e0514b7ab577974f7ba62c4ca0f8b060f2131f5
parenta577264a8b46c1b8983f45bf1be56d7f74b2dd38 (diff)
downloadobnam-1104da1ffd9091668ab50a808746b92e36d2b86b.tar.gz
Add --chunk-size option to set size of chunks.
Previous hard-coded value is now just the default. Some day the default should be upped for more speed.
-rwxr-xr-xblackboxtest4
-rw-r--r--obnamlib/__init__.py4
-rw-r--r--obnamlib/app.py5
-rw-r--r--obnamlib/plugins/backup_plugin.py5
4 files changed, 13 insertions, 5 deletions
diff --git a/blackboxtest b/blackboxtest
index 61ab18b9..7f09bbf6 100755
--- a/blackboxtest
+++ b/blackboxtest
@@ -401,7 +401,9 @@ class UsesChunkGroups(BlackBoxTest):
def test(self):
data = self.tempdir()
ngroups = 2
- nbytes = obnamlib.CHUNK_SIZE * obnamlib.CHUNK_GROUP_SIZE * ngroups
+ nbytes = (obnamlib.DEFAULT_CHUNK_SIZE *
+ obnamlib.DEFAULT_CHUNK_GROUP_SIZE *
+ ngroups)
self.create_file(data, 'file', 'x' * nbytes)
store = self.tempdir()
self.backup(store, [data])
diff --git a/obnamlib/__init__.py b/obnamlib/__init__.py
index b1952403..1f53237f 100644
--- a/obnamlib/__init__.py
+++ b/obnamlib/__init__.py
@@ -26,8 +26,8 @@ class AppException(Exception):
class Error(Exception):
pass
-CHUNK_SIZE = 4096
-CHUNK_GROUP_SIZE = 16
+DEFAULT_CHUNK_SIZE = 4096
+DEFAULT_CHUNK_GROUP_SIZE = 16
from sizeparse import SizeSyntaxError, UnitNameError, ByteSizeParser
diff --git a/obnamlib/app.py b/obnamlib/app.py
index 8f7401f0..b460bee7 100644
--- a/obnamlib/app.py
+++ b/obnamlib/app.py
@@ -42,6 +42,11 @@ class App(object):
'do not write or remove anything, just '
'pretend to do that')
+ self.config.new_bytesize(['chunk-size'],
+ 'size of chunks of file data backed up '
+ '(default: %default)')
+ self.config['chunk-size'] = '%s' % obnamlib.DEFAULT_CHUNK_SIZE
+
self.pm = obnamlib.PluginManager()
self.pm.locations = [self.plugins_dir()]
self.pm.plugin_arguments = (self,)
diff --git a/obnamlib/plugins/backup_plugin.py b/obnamlib/plugins/backup_plugin.py
index 0f7f4cdc..4d2dbb6c 100644
--- a/obnamlib/plugins/backup_plugin.py
+++ b/obnamlib/plugins/backup_plugin.py
@@ -190,13 +190,14 @@ class BackupPlugin(obnamlib.ObnamPlugin):
cgids = []
groupsum = self.store.new_checksummer()
f = self.fs.open(filename, 'r')
+ chunk_size = int(self.app.config['chunk-size'])
while True:
- data = f.read(obnamlib.CHUNK_SIZE)
+ data = f.read(chunk_size)
if not data:
break
chunkids.append(self.backup_file_chunk(data))
groupsum.update(data)
- if len(chunkids) == obnamlib.CHUNK_GROUP_SIZE:
+ if len(chunkids) == obnamlib.DEFAULT_CHUNK_GROUP_SIZE:
checksum = groupsum.hexdigest()
cgid = self.store.put_chunk_group(chunkids, checksum)
cgids.append(cgid)