Commits on Mar 19, 2014
  1. Update AsyncHBase to 1.5.0

    committed Mar 19, 2014
Commits on Jan 27, 2014
  1. Stagger the compaction of rows.

    Instead of always flushing all the rows in order, which causes hot spots
    in HBase during heavy flushes, we now randomly skip some rows, so as to
    better stagger the compactions across multiple regions.
    committed Jan 27, 2014
Commits on Oct 31, 2013
Commits on Oct 16, 2013
  1. Use `Cache-Control: max-age=0' instead of `no-cache'.

    Varnish ignores `no-cache', and since `max-age=0' works just as well
    for both Varnish and web browsers, and makes for simpler code, just
    use that instead.
    committed Oct 16, 2013
Commits on Sep 7, 2013
  1. accept HTTP 202 as success

    opentsdb v2 returns 202 when asked for datapoints
    Signed-off-by: Benoit Sigoure <>
    filippog committed with Aug 30, 2013
  2. fix check_tsd -c/-w options logic

    it should fail only if both are None, not the other way around
    Signed-off-by: Benoit Sigoure <>
    filippog committed with Aug 30, 2013
Commits on Aug 22, 2013
  1. Fix #228 introduced by variable length encoding where integer values …

    …stored on
    single bytes in HBase were being cast to unsigned ints in
    RowSeq.extractIntegerValue. Removed the bitmask and now single bytes are
    returned correctly.
    Signed-off-by: Chris Larsen <>
    manolama committed with manolama Aug 22, 2013
Commits on Jul 20, 2013
  1. Don't bother flushing the compaction queue based on time.

    If someone is writing to less than 100 rows ever then compactions
    probably don't actually matter (and can always happen lazily during
    read accesses).
    Thanks to Brent Evans for the suggestion.
    committed Jul 18, 2013
  2. Simplify the condition under which we flush the compaction queue.

    This code is equivalent to what we had before.  Given the constants
    in the code, we were only flushing based on the queue size when one
    of those two conditions was true:
      - The size of the queue is bigger than 100
      - The size of the queue is bigger than 18000
    Which obviously can be simplified as checking only against 100.
    Thanks to Brent Evans for pointing this out.
    committed Jul 18, 2013
  3. Fix compaction bug: flush compaction queue if it's too old.

    The compaction queue needs to be flushed if either it's grown too
    large or it's been too long since the last flush.  That second
    condition wasn't implemented properly because the timestamp that
    tracks the time at which we last flushed was never set and always
    remained 0.  This would only impact very low-traffic TSDs that
    never manage to exceed the threshold on the size of the queue.
    Thanks to Brent Evans for spotting and reporting this bug.
    committed Jul 18, 2013
  4. Encode integer values on a variable number of bytes.

    The design always supported this, and the read-path already supports
    reading those, but the write path never really bothered and always
    wrote all integer values on 8 bytes no matter what.
    committed Jun 17, 2013
Commits on Jun 3, 2013
  1. Fix helper class used in StdDev test, tighten error margins and add t…

    Signed-off-by: Benoit Sigoure <>
    oozie committed with Jun 3, 2013
Commits on May 30, 2013
  1. Remove the need for explicit row locks when allocating UIDs.

    The existing code with explicit row locks exhibited very poor
    performance, and also prevented multiple TSDs from allocating
    UIDs concurrently.
    The new approach consists in:
      1. Performing an atomic increment to grab a new UID.
      2. CAS'ing (CompareAndSet) the reverse mapping (uid => name)
      3. CAS'ing the forward mapping (name => uid)
    If we die after step 1, we waste an UID.  If we die after step 2,
    we just end up with an orphaned reverse mapping (harmless).  When
    two TSDs race to assign a UID to the same name, one of them will
    fail to CAS the forward mapping at step 3, and will retry to find
    the UID assigned by the winning TSD.  When that occurs, the only
    net consequence is that a UID will have been wasted by the losing
    TSD, whereas the previous implementation wouldn't waste one when
    this happened.  The 'uid fsck' command can easily detect orphaned
    or wasted UIDs, and we could conceivably put them on some kind of
    a free list in the future to re-allocate them.
    If two TSDs are running side-by-side, and one uses the old method
    while the other uses the new lock-less method, things still work
    as expected.  There are two possible scenarios:
      - Old TSD goes first, locks the MAXID row, and does its thing.
        The new TSD will have to wait until the row lock is released
        for its atomic increment to go through.
      - The new TSD goes first, atomically increments the MAXID row,
        and does its thing.  The second TSD locks the MAXID row and
        proceeds to allocate its own ID concurrently.
    committed May 30, 2013
  2. Update suasync to 1.3.2.

    committed May 30, 2013
Commits on Mar 8, 2013
  1. Update AUTHORS and THANKS.

    committed Mar 8, 2013
  2. Remove unused imports.

    committed Mar 8, 2013
  3. Add --bind to allow users to specity the address to bind to.

    Defaults to just like before.  This closes #174.
    Signed-off-by: Benoit Sigoure <>
    isavin committed with Feb 27, 2013
  4. Use a 'xtics rotate right' workaround for x-axis label being clipped.

    This closes #107.
    Signed-off-by: Benoit Sigoure <>
    isavin committed with Feb 19, 2013
Commits on Feb 20, 2013
Commits on Feb 19, 2013
  1. Enable TSD compactions by default.

    committed Feb 19, 2013
Commits on Feb 17, 2013
  1. Update NEWS.

    committed Feb 17, 2013
  2. Allow 0 as a threshold value for -w and -c.

    Signed-off-by: Benoit Sigoure <>
    isavin committed with Feb 14, 2013
  3. Update to GWT 2.5.0.

    committed Feb 17, 2013
  4. Update asynchbase to 1.4.1.

    committed Feb 17, 2013
  5. Update most dependencies.

    committed Feb 17, 2013
Commits on Feb 8, 2013
  1. Don't urldecode the components, assume the URL is already decoded.

    This fixes #152.
    Signed-off-by: Benoit Sigoure <>
    isavin committed with Feb 4, 2013
Commits on Feb 7, 2013
  1. Make it easier to build an RPM from source.

    Add an `rpm' target to the Makefile that creates a tarball of the
    current sources, and uses it to build an RPM.  Also fix various
    issues to be able to build on Fedora and neuter various RPM macros
    that are sometimes overridden and make life unnecessarily painful.
    committed Feb 7, 2013
  2. Add an RPM spec file.

    Automatically set the version via configure.
    Signed-off-by: Benoit Sigoure <>
    davidkbainbridge committed with Feb 4, 2013
  3. Upgrade to Junit 4.11.

    Also fix the URL from which it's being downloaded, as the GitHub URL
    unfortunately became invalid.  Fetch from Maven instead, it's safer
    in the long term.
    This closes #158.
    committed Feb 7, 2013
Commits on Feb 4, 2013
  1. Help forward compatibility by ignoring invalid KeyValues.

    Right now all data points are written with 2-byte qualifiers.  When we
    compact data points, we paste together the qualifiers, so we end up with
    a multiple of 2 bytes no matter what.  So when compacting a row, only
    consider those KeyValues that have a qualifier that is even and has 2 or
    more bytes, and silently ignore the rest.
    committed Jan 31, 2013
Commits on Jan 30, 2013
  1. Set the indent style for Emacs users.

    Signed-off-by: Benoit Sigoure <>
    isavin committed with Jan 29, 2013
Commits on Jan 21, 2013
  1. Add a workaround to prevent the graph from being dragged around.

    On mouse-down events we need to prevent the event's default behavior as
    it may make the browser start dragging the image around.  We don't want,
    we want to handle the dragging ourselves for the drag-to-zoom box.
    However preventing the event's default behavior has another obnoxious
    consequence: it doesn't remove the focus from whatever had it previously,
    which may cause the image to not get reloaded if a text field was being
    changed and the user simply "clicked away" on the image.
    committed Jan 21, 2013