Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,23 @@
import java.io.Closeable;
import java.util.Iterator;

/** An Iterator to walk through all results returned from calls to
/**
* An Iterator to walk through all results returned from calls to
* {@link ServerEvaluationCall#eval()}.
*/
public interface EvalResultIterator extends Iterable<EvalResult>, Iterator<EvalResult>, Closeable {
@Override
Iterator<EvalResult> iterator();
@Override
boolean hasNext();
@Override
EvalResult next();
void close();
@Override
Iterator<EvalResult> iterator();

@Override
boolean hasNext();

@Override
EvalResult next();

/**
* As of 7.1.0, this must be called to ensure that the response is closed, as results are now
* streamed from MarkLogic instead of being read entirely into memory first.
*/
void close();
}
Original file line number Diff line number Diff line change
Expand Up @@ -3856,7 +3856,17 @@ private <U extends OkHttpResultIterator> U evalAndStreamResults(RequestLogger re
try {
MultipartReader reader = new MultipartReader(response.body());
PartIterator partIterator = new PartIterator(reader);
return (U) new DefaultOkHttpResultIterator(reqlog, partIterator, response);
return (U) new DefaultOkHttpResultIterator(reqlog, partIterator, () -> {
// Looking at OkHttp source code, it does not appear necessary to call close on the reader; it appears
// sufficient to only call it on the response. But doing both in case this behavior changes in a future
// OkHttp release.
try {
reader.close();
} catch (IOException e) {
// Ignore, the next call should close everything properly.
}
response.close();
});
} catch (IOException e) {
throw new MarkLogicIOException(e);
}
Expand Down