HI Team, Did you get a chance to look into it ? thanks.
Thanks On 2 May 2017 at 11:19, Anil <[email protected]> wrote: > 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 > >
