[infinispan-dev] How to get key ID passivated into DB
Vitalii Chepeliuk
vchepeli at redhat.com
Fri Aug 9 09:57:39 EDT 2013
Hi all! I have a question about entry passivation into DB, concretly this class LockSupportCacheStore and method store
@Override
public final void store(InternalCacheEntry ed) throws CacheLoaderException {
if (trace) {
log.tracef("store(%s)", ed);
}
if (ed == null) {
return;
}
if (ed.canExpire() && ed.isExpired(timeService.wallClockTime())) {
if (containsKey(ed.getKey())) {
if (trace) {
log.tracef("Entry %s is expired! Removing!", ed);
}
remove(ed.getKey());
} else {
if (trace) {
log.tracef("Entry %s is expired! Not doing anything.", ed);
}
}
return;
}
L keyHashCode = getLockFromKey(ed.getKey()); <<< here key is generated like ed.getKey().hashCode() & 0xfffffc00;
lockForWriting(keyHashCode);
try {
storeLockSafe(ed, keyHashCode); <<< here it should be stored into Bucket and then stored in DB
} finally {
unlock(keyHashCode);
}
if (trace) {
log.tracef("exit store(%s)", ed);
}
}
When I use RemoteCacheManager and RemoteCache I am putting entries into cache
cache.put("key1", "v1");
cache.put("key2", "v2");
cache.put("key3", "v3");
Then 2 entries are passivated and stored in DB
ID DATA VERSION
183713792 0301fe032a01034c422b21033e286d7942657374506572736f6e616c4b657957686963684861734e657665724265656e426574746572420521033e02763203620003630000000000000002 -1
23486464 0301fe032a01034c420721033e046b657931420521033e02763103620003630000000000000001 -1
IDs are generated from method above and
byte[] keyBytes = marshaller.objectToByteBuffer(key, 64); <<< data are marshalled
long keyID = ByteArrayEquivalence.INSTANCE.hashCode(keyBytes) & 0xfffffc00 //computation taken from BucketBasedCacheStore << this does not work for me
And next step I'd like to retrieve data from DB
SELECT ID, DATA FROM JDBC_BINARY_DEFAULT WHERE ID=keyID
But in method
@Override
public Integer getLockFromKey(Object key) {
return key.hashCode() & 0xfffffc00; <<< here should be used Arrays.hashCode((byte[])key) & 0xfffffc00), if key is represented as byte array, or Used ByteArrayEquivalence instead of simple byte array(byte[]) as argument
}
More information about the infinispan-dev
mailing list