Compare commits

..

6 Commits

Author SHA1 Message Date
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
7d7b89b52f Add --no-decim option to nilmtool list 2013-08-12 13:04:25 -04:00
8d249273c6 Change -V option to -v everywhere 2013-08-06 21:38:00 -04:00
abe431c663 Add verify_ssl option to HTTPClient 2013-08-06 12:39:32 -04:00
8 changed files with 29 additions and 12 deletions

View File

@@ -9,7 +9,7 @@ import requests
class HTTPClient(object): class HTTPClient(object):
"""Class to manage and perform HTTP requests from the client""" """Class to manage and perform HTTP requests from the client"""
def __init__(self, baseurl = "", post_json = False): def __init__(self, baseurl = "", post_json = False, verify_ssl = True):
"""If baseurl is supplied, all other functions that take """If baseurl is supplied, all other functions that take
a URL can be given a relative URL instead.""" a URL can be given a relative URL instead."""
# Verify / clean up URL # Verify / clean up URL
@@ -19,6 +19,7 @@ class HTTPClient(object):
self.baseurl = reparsed.rstrip('/') + '/' self.baseurl = reparsed.rstrip('/') + '/'
# Build Requests session object, enable SSL verification # Build Requests session object, enable SSL verification
self.verify_ssl = verify_ssl
self.session = requests.Session() self.session = requests.Session()
self.session.verify = True self.session.verify = True
@@ -67,7 +68,8 @@ class HTTPClient(object):
params = query_data, params = query_data,
data = body_data, data = body_data,
stream = stream, stream = stream,
headers = headers) headers = headers,
verify = self.verify_ssl)
except requests.RequestException as e: except requests.RequestException as e:
raise ServerError(status = "502 Error", url = url, raise ServerError(status = "502 Error", url = url,
message = str(e.message)) message = str(e.message))

View File

@@ -121,7 +121,7 @@ class Cmdline(object):
group = self.parser.add_argument_group("General options") group = self.parser.add_argument_group("General options")
group.add_argument("-h", "--help", action='help', group.add_argument("-h", "--help", action='help',
help='show this help message and exit') help='show this help message and exit')
group.add_argument("-V", "--version", action="version", group.add_argument("-v", "--version", action="version",
version = nilmdb.__version__) version = nilmdb.__version__)
group = self.parser.add_argument_group("Server") group = self.parser.add_argument_group("Server")

View File

@@ -45,6 +45,8 @@ def setup(self, sub):
help="Show raw timestamps when printing times") help="Show raw timestamps when printing times")
group.add_argument("-l", "--layout", action="store_true", group.add_argument("-l", "--layout", action="store_true",
help="Show layout type next to path name") help="Show layout type next to path name")
group.add_argument("-n", "--no-decim", action="store_true",
help="Skip paths containing \"~decim-\"")
return cmd return cmd
@@ -71,6 +73,8 @@ def cmd_list(self):
(path, layout, int_min, int_max, rows, time) = stream[:6] (path, layout, int_min, int_max, rows, time) = stream[:6]
if not fnmatch.fnmatch(path, argpath): if not fnmatch.fnmatch(path, argpath):
continue continue
if self.args.no_decim and "~decim-" in path:
continue
if self.args.layout: if self.args.layout:
printf("%s %s\n", path, layout) printf("%s %s\n", path, layout)

View File

@@ -381,7 +381,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

@@ -10,8 +10,7 @@ def main():
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description = 'Check database consistency', description = 'Check database consistency',
formatter_class = argparse.ArgumentDefaultsHelpFormatter) formatter_class = argparse.ArgumentDefaultsHelpFormatter,
parser.add_argument("-V", "--version", action="version",
version = nilmdb.__version__) version = nilmdb.__version__)
parser.add_argument("-f", "--fix", action="store_true", parser.add_argument("-f", "--fix", action="store_true",
default=False, help = 'Fix errors when possible ' default=False, help = 'Fix errors when possible '

View File

@@ -10,9 +10,7 @@ def main():
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description = 'Run the NilmDB server', description = 'Run the NilmDB server',
formatter_class = argparse.ArgumentDefaultsHelpFormatter) formatter_class = argparse.ArgumentDefaultsHelpFormatter,
parser.add_argument("-V", "--version", action="version",
version = nilmdb.__version__) version = nilmdb.__version__)
group = parser.add_argument_group("Standard options") group = parser.add_argument_group("Standard options")

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

@@ -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")