docs: private static byte[] getRowKey(final long start_time, final byte[] tsuid) {
      if (start_time < 1) {
        throw new IllegalArgumentException("The start timestamp has not been set");
      }
      
      final long base_time;
      if ((start_time & Const.SECOND_MASK) != 0) {
        // drop the ms timestamp to seconds to calculate the base timestamp
        base_time = ((start_time / 1000) - 
            ((start_time / 1000) % Const.MAX_TIMESPAN));
      } else {
        base_time = (start_time - (start_time % Const.MAX_TIMESPAN));
      }
      
      // if the TSUID is empty, then we're a global annotation. The row key will 
      // just be an empty byte array of metric width plus the timestamp. We also 
      // don't salt the global row key (though it has space for salts)
      if (tsuid == null || tsuid.length < 1) {
        final byte[] row = new byte[Const.SALT_WIDTH() + 
                                    TSDB.metrics_width() + Const.TIMESTAMP_BYTES];
        Bytes.setInt(row, (int) base_time, Const.SALT_WIDTH() + TSDB.metrics_width());
        return row;
      }
      
      // otherwise we need to build the row key from the TSUID and start time
      final byte[] row = new byte[Const.SALT_WIDTH() + Const.TIMESTAMP_BYTES + 
                                  tsuid.length];
      System.arraycopy(tsuid, 0, row, Const.SALT_WIDTH(), TSDB.metrics_width());
      Bytes.setInt(row, (int) base_time, Const.SALT_WIDTH() + TSDB.metrics_width());
      System.arraycopy(tsuid, TSDB.metrics_width(), row, 
          Const.SALT_WIDTH() + TSDB.metrics_width() + Const.TIMESTAMP_BYTES, 
          (tsuid.length - TSDB.metrics_width()));
      RowKey.prefixKeyWithSalt(row);
      return row;
    }