Programming to Get Function Results
Geode provides a default result collector. If you need special results handling, code a custom
ResultsCollector implementation to replace the provided default. Use the
Execution::withCollector method to define your custom collector.
Note: This section applies only to functions that return results.
To program your client to get the results from a function, use the result collector returned from the function execution, like this:
ResultCollectorPtr rc = FunctionService::onRegion(region) ->withArgs(args) ->withFilter(keySet) ->withCollector(new MyCustomResultCollector()) .execute(Function); CacheableVectorPtr functionResult = rc.getResult();
getResult methods of the Geode default result collector block until all results are received, then return the full result set.
You can handle the results in a custom manner if you wish. To do this:
Write a class that extends
ResultCollectorand code the methods to handle the results as you need. The methods are of two types: one handles data and information from Geode and populates the results set, while the other returns the compiled results to the calling application:
addResultis called by Geode when results arrive from the
addResultto add a single result to the ResultCollector.
endResultsis called by Geode to signal the end of all results from the function execution.
getResultis available to your executing application (the one that calls
Execution.execute) to retrieve the results. This may block until all results are available.
clearResultsis called by Geode to clear partial results from the results collector. This is used only for highly available
onRegionfunctions where the calling application waits for the results. If the call fails, before Geode retries the execution, it calls
clearResultsto ready the instance for a clean set of results.
Executionobject in your executing member to call
withCollector, passing your custom collector, as shown in the example above.