@Override
  protected boolean swapAndClearCache(String namespaceKey, String cacheKey) {
    final Lock lock = nsLocks.get(namespaceKey);
    lock.lock();
    try {
      Preconditions.checkArgument(
          mmapDB.exists(cacheKey), "Namespace [%s] does not exist", cacheKey);

      final String swapCacheKey = UUID.randomUUID().toString();
      mmapDB.rename(cacheKey, swapCacheKey);

      final String priorCache = currentNamespaceCache.put(namespaceKey, swapCacheKey);
      if (priorCache != null) {
        // TODO: resolve what happens here if query is actively going on
        mmapDB.delete(priorCache);
        dataSize.set(tmpFile.length());
        return true;
      } else {
        dataSize.set(tmpFile.length());
        return false;
      }
    } finally {
      lock.unlock();
    }
  }
예제 #2
0
  public long getQuotaUsage(String username) {
    if (!db.exists(username)) db.createAtomicLong(username, 0);

    return db.getAtomicLong(username).get();
  }