Hi,

java.lang.ClassCastException:
org.apache.ignite.internal.binary.BinaryObjectImpl cannot be cast to
org.apache.ignite.cache.affinity.Affinity  exception thrown when a field
updated using BinaryObject for a cache entry. and it is intermittent.

Following is the snippet i am using

IgniteCache<Affinity<String>, BinaryObject> cache =
ignite.cache(CacheManager.CACHE).withKeepBinary();
IgniteCache<Affinity<String>, BinaryObject> lCache =
ignite.cache(CacheManager.LOCK_CACHE).withKeepBinary();
ScanQuery<Affinity<String>, BinaryObject> scanQuery = new
ScanQuery<Affinity<String>, BinaryObject>();
scanQuery.setLocal(true);
scanQuery.setPartition(1);

Iterator<Entry<Affinity<String>, BinaryObject>> iterator =
cache.query(scanQuery).iterator();
Integer oldStat = null, newStat = null;
boolean changed = false;
Entry<Affinity<String>, BinaryObject> row = null;
while (iterator.hasNext()) {
try {
row = iterator.next();
BinaryObject itrVal = row.getValue();
String id = itrVal.<String>field("id");
Lock lock = lCache.lock(id);
try {
lock.lock();
BinaryObject val = cache.get(row.getKey());
if (null != val){
BinaryObjectBuilder bldr = val.toBuilder();
oldStat = val.<Integer>field("stat");
Status status = null ; // determine status
if (!CommonUtils.equalsObject(oldStat, newStat)){
changed = true;
bldr.setField("stat", status.getStatus());
bldr.setField("status", status.getDescription());
}

                                                        // update other
fields
if(changed){
cache.put(row.getKey(), bldr.build());
}
}
}catch (Exception ex){
log.error("Failed to update the status of  {}  {} ", id, ex);
}finally {
lock.unlock();
}
}catch (Exception ex){
log.error("Failed to process and update status of  {}  {} ", row, ex);
}
}


Do you see any issue in the above snippet ? thanks.


Thanks

Reply via email to