Below is our implementation of LoadOnlyCacheStore inputIterator method.
As we tested many times there is no issue on uniqueness of generated cache
keys.
But still after loading high number of records into IgniteCache, records
count doesn't match, and few 10s of keys were missing out of million
records. Also if we use the Java cache populated just before serializing
this cache into IgniteCache, all number of records are matching.
In short, after several days of try-outs and debugging, we narrowed down the
root cause of issue to LoadOnlyCacheStore base class. So, at this point, we
need Ignite core team support to resolve this bug.
Thanks
Yes, we checked uniqueness of key several times. Below is representative
snippet of our code, how we generate cache key inside inputIterator method.
@Override
protected Iterator<Tuple2<Long,ArrayList<MyDTO>>>*
inputIterator*(Object... args) throws CacheLoaderException {
Iterator<Tuple2<Long,ArrayList<MyDTO>>> iterator = null;
ResultSetExtractor<ArrayList<Tuple2<Long,ArrayList<MyDTO>>>>
extOrRepMapResultSetExtractor = new
ResultSetExtractor<ArrayList<Tuple2<Long,ArrayList<MyDTO>>>>() {
@Override
public ArrayList<Tuple2<Long,ArrayList<MyDTO>>>
extractData(ResultSet rs)
throws SQLException, DataAccessException {
ArrayList<Tuple2<Long,ArrayList<MyDTO>>>
extOrRepList = new
ArrayList<Tuple2<Long,ArrayList<MyDTO>>>(startSize);
*final AtomicLong entryCnt = new AtomicLong(0);*
while (rs.next()) {
extOrRepList.add(new Tuple2<Long,
ArrayList<MyDTO>>(*entryCnt.incrementAndGet()*,prevDTOList));
}
return extOrRepList;
}
};
jdbcTemplate.setFetchSize(SQL_FETCH_SIZE);
ArrayList<Tuple2<Long,ArrayList<MyDTO>>> extOrRepList = null;
extOrRepList = jdbcTemplate.query(sql,
extOrRepMapResultSetExtractor);
if (extOrRepList != null) {
iterator = extOrRepList.iterator();
}
return iterator;
}
--
View this message in context:
http://apache-ignite-users.70518.x6.nabble.com/Missing-records-Ignite-cache-size-grows-tp10809p10966.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.