Compare commits

...

5 Commits

Author SHA1 Message Date
8bb8f068de Catch harmless error seen in apache logs during shutdown 2014-02-04 19:50:46 -05:00
416902097d Fix crash in nilmdb-fsck if there are zero intervals, etc. 2014-02-04 19:38:01 -05:00
f5276e9fc8 Test --no-decim 2013-08-16 15:34:35 -04:00
c47f28f93a Fix cache issue in stream_rename
We saw a bug where renamed streams had missing data at the end.  I
think what happened is:

- Write data to /old/path
- Rename to /new/path
- Write data to /new/path
- Cache entry for /old/path gets evicted, file gets truncated

Instead, make sure we evict /old/path right away when renaming.
2013-08-16 15:30:56 -04:00
63b5f99b90 Fix fsck 2013-08-16 15:06:12 -04:00
4 changed files with 23 additions and 4 deletions

View File

@@ -59,6 +59,8 @@ def retry_if_raised(exc, message = None, max_retries = 100):
class Progress(object): class Progress(object):
def __init__(self, maxval): def __init__(self, maxval):
if maxval == 0:
maxval = 1
self.bar = progressbar.ProgressBar( self.bar = progressbar.ProgressBar(
maxval = maxval, maxval = maxval,
widgets = [ progressbar.Percentage(), ' ', widgets = [ progressbar.Percentage(), ' ',
@@ -381,7 +383,7 @@ class Fsck(object):
err("*** Deleting the entire interval from SQL.\n") err("*** Deleting the entire interval from SQL.\n")
err("This may leave stale data on disk. To fix that, copy all\n") err("This may leave stale data on disk. To fix that, copy all\n")
err("data from this stream to a new stream, then remove all data\n") err("data from this stream to a new stream, then remove all data\n")
err("from and destroy %s.\n") err("from and destroy %s.\n", path)
with self.sql: with self.sql:
cur = self.sql.cursor() cur = self.sql.cursor()
cur.execute("DELETE FROM ranges WHERE " cur.execute("DELETE FROM ranges WHERE "

View File

@@ -194,6 +194,9 @@ class BulkData(object):
if oldospath == newospath: if oldospath == newospath:
raise ValueError("old and new paths are the same") raise ValueError("old and new paths are the same")
# Remove Table object at old path from cache
self.getnode.cache_remove(self, oldunicodepath)
# Move the table to a temporary location # Move the table to a temporary location
tmpdir = tempfile.mkdtemp(prefix = "rename-", dir = self.root) tmpdir = tempfile.mkdtemp(prefix = "rename-", dir = self.root)
tmppath = os.path.join(tmpdir, "table") tmppath = os.path.join(tmpdir, "table")

View File

@@ -117,7 +117,10 @@ def serializer_proxy(obj_or_type):
return ret return ret
def __del__(self): def __del__(self):
try:
self.__call_queue.put((None, None, None, None)) self.__call_queue.put((None, None, None, None))
self.__thread.join() self.__thread.join()
except TypeError: # pragma: no cover
pass
return SerializerObjectProxy(obj_or_type) return SerializerObjectProxy(obj_or_type)

View File

@@ -290,6 +290,7 @@ class TestCmdline(object):
self.ok("create /newton/zzz/rawnotch uint16_9") self.ok("create /newton/zzz/rawnotch uint16_9")
self.ok("create /newton/prep float32_8") self.ok("create /newton/prep float32_8")
self.ok("create /newton/raw uint16_6") self.ok("create /newton/raw uint16_6")
self.ok("create /newton/raw~decim-1234 uint16_6")
# Create a stream that already exists # Create a stream that already exists
self.fail("create /newton/raw uint16_6") self.fail("create /newton/raw uint16_6")
@@ -305,13 +306,23 @@ class TestCmdline(object):
self.fail("create /newton/zzz float32_8") self.fail("create /newton/zzz float32_8")
self.contain("subdirs of this path already exist") self.contain("subdirs of this path already exist")
# Verify we got those 3 streams and they're returned in # Verify we got those 4 streams and they're returned in
# alphabetical order. # alphabetical order.
self.ok("list -l") self.ok("list -l")
self.match("/newton/prep float32_8\n" self.match("/newton/prep float32_8\n"
"/newton/raw uint16_6\n" "/newton/raw uint16_6\n"
"/newton/raw~decim-1234 uint16_6\n"
"/newton/zzz/rawnotch uint16_9\n") "/newton/zzz/rawnotch uint16_9\n")
# No decimated streams if -n specified
self.ok("list -n -l")
self.match("/newton/prep float32_8\n"
"/newton/raw uint16_6\n"
"/newton/zzz/rawnotch uint16_9\n")
# Delete that decimated stream
self.ok("destroy /newton/raw~decim-1234")
# Match just one type or one path. Also check # Match just one type or one path. Also check
# that --path is optional # that --path is optional
self.ok("list --layout /newton/raw") self.ok("list --layout /newton/raw")