Andrey Novikov created IGNITE-26691:
---------------------------------------
Summary: Get rid from warning: start to process query cancel on
MAP phase.
Key: IGNITE-26691
URL: https://issues.apache.org/jira/browse/IGNITE-26691
Project: Ignite
Issue Type: Bug
Components: extensions, springdata
Reporter: Andrey Novikov
FetchBy is implemented in the following way in Spring Data:
{code:java}
QueryCursorWrapper<Cache.Entry<?, ?>, ?> cWrapper = new QueryCursorWrapper<>(
(QueryCursor<Cache.Entry<?, ?>>)qryCursor,
cWrapperTransformFunction);switch (returnStgy) {
case PAGE_OF_VALUES:
return new PageImpl(cWrapper.getAll(), (Pageable)prmtrs[prmtrs.length -
1], 0);
case LIST_OF_VALUES:
return cWrapper.getAll();
case STREAM_OF_VALUES:
return cWrapper.stream();
case ONE_VALUE:
Iterator<?> iter1 = cWrapper.iterator();
if (iter1.hasNext()) {
Object resp = iter1.next();
U.closeQuiet(cWrapper);
return resp;
}
return null; {code}
returnStgy is ONE_VALUE for this case, and we close the iterator before reading
it fully. That remains cursor state as EXECUTING and the following logic kicks
in QueryCursorImpl
{code:java}
@Override public void close() {
while (state != CLOSED) {
if (STATE_UPDATER.compareAndSet(this, COMPLETED, CLOSED)) {
closeIter(); return;
} if (STATE_UPDATER.compareAndSet(this, EXECUTING, CLOSED)) {
if (cancel != null) {
if (!cancel.multiStatement() || (cancel.multiStatement() &&
cancel.last())) {
cancel.cancel();
}
} {code}
It cancels the query after closing the cursor.
*What to do:*
Fetch all ** data from the cursor or add a hasNext check, which can close the
cursor.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)