public long incr(String key, int by) { return client.incr(key, by, 0); }
@Override public long incr(String key, int by) { return client.incr(key, by, 0); }
@Override public void clear() { this.memcachedClient.incr(this.memcacheCacheMetadata.namespaceKey(), 1); }
/** * Changing namespace by incrementing it's version results in (virtally) removing all entries means * because namespace is part of key - all keys became invalid */ @Override public void removeAll() throws IllegalStateException { if (namespaceVersioning) { String nsVersionKey = getNsVersionKey(); long incr = client.incr(nsVersionKey, 1); if (incr == -1) {//nsVersion entry does not not exist -> create it try { Future<Boolean> future = client.set(nsVersionKey, DAY, VERSION_IN); future.get(operationTimeout, TimeUnit.MILLISECONDS); } catch (Exception x) { logger.warn("Failed to removeAll", x); } } logger.debug("Namespace version set to " + getName() + ":" + incr); } else { throw new IllegalStateException("Cannot remove all. Namespace versioning is not enabled."); } }
@Test public void whenClearThenMemcachedClientIncrNamespace() { memcachedCache.clear(); verify(memcachedClient).incr(namespaceKey, 1); } }
@JRubyMethod(name = { "increment", "incr" }, required = 1, optional = 2) public IRubyObject incr(ThreadContext context, IRubyObject[] args) { Ruby ruby = context.getRuntime(); String key = getFullKey(args[0].toString()); int by = getIncrDecrBy(args); int expiry = getExpiry(args); int retry = 0; while (true) { try { long result = client.incr(key, by, 1, expiry); return ruby.newFixnum(result); } catch (OperationTimeoutException e) { if (retry == exceptionRetryLimit) { throw Error.newATimeoutOccurred(ruby, e.getLocalizedMessage()); } retry++; } } }