protected void writeCommitThroughCache(final String branchName, final long timestamp, final Map<String, Map<String, Object>> keyspaceToKeyToValue) { // perform the write-through in our cache Map<QualifiedKey, Object> keyValues = Maps.newHashMap(); boolean assumeImmutableValues = this.getOwningDB().getConfiguration().isAssumeCachedValuesAreImmutable(); for (Entry<String, Map<String, Object>> outerEntry : keyspaceToKeyToValue.entrySet()) { String keyspace = outerEntry.getKey(); Map<String, Object> keyToValue = outerEntry.getValue(); for (Entry<String, Object> innerEntry : keyToValue.entrySet()) { String key = innerEntry.getKey(); Object value = innerEntry.getValue(); if (assumeImmutableValues == false) { // values are not immutable, so we add a copy to the cache to prevent modification from outside value = KryoManager.deepCopy(value); } QualifiedKey qKey = QualifiedKey.create(keyspace, key); keyValues.put(qKey, value); } } this.getCache().writeThrough(branchName, timestamp, keyValues); }
@Test public void canDuplicate() { Person johnDoe = new Person("John", "Doe"); Person clone = KryoManager.deepCopy(johnDoe); assertEquals(johnDoe, clone); }
private Object performGet(final String branchName, final QualifiedKey qKey, final long timestamp) { try (AutoLock lock = this.lockNonExclusive()) { // first, try to find the result in our cache CacheGetResult<Object> cacheGetResult = this.getCache().get(branchName, timestamp, qKey); if (cacheGetResult.isHit()) { Object result = cacheGetResult.getValue(); if (result == null) { return null; } // cache hit, return the result immediately if (this.getOwningDB().getConfiguration().isAssumeCachedValuesAreImmutable()) { // return directly return cacheGetResult.getValue(); } else { // return a copy return KryoManager.deepCopy(result); } } // need to contact the backing store. 'performRangedGet' automatically caches the result. GetResult<Object> getResult = this.performRangedGetInternal(branchName, qKey, timestamp); if (getResult.isHit() == false) { return null; } else { return getResult.getValue(); } } }
Object duplicatedValue = KryoManager.deepCopy(deserializedValue); return GetResult.create(qKey, duplicatedValue, range);
Object duplicatedValue = KryoManager.deepCopy(deserializedValue); return GetResult.create(key, duplicatedValue, range);