You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@geode.apache.org by Barry Oglesby <bo...@pivotal.io> on 2015/12/01 01:22:53 UTC
Re: Region Changes Reference in Function Scatter-Gather Processing
If the filter set contains 1 element, and the server in which the function
is being executed is the single-hop server, then the function is executed
in-line in the ServerConnection thread itself. Otherwise, the function
execution is handled by the FunctionExecution thread pool.
Also, the PartitionRegionHelper.getLocalDataForContext method returns a
LocalDataSet wrapper on the appropriate buckets. The LocalDataSet keySet
method returns a wrapper on the keys of those buckets. Also, the
LocalDataSet get method returns a value if it is contained in the buckets;
otherwise it returns null.
Barry Oglesby
GemFire Advanced Customer Engineering (ACE)
For immediate support please contact Pivotal Support at
http://support.pivotal.io/
On Fri, Nov 27, 2015 at 10:23 PM, Real Wes Williams <Th...@outlook.com>
wrote:
> The answer to the mysterious number differences is that the client region
> was a co-located region but not the region I was interested in processing.
>
> Notwithstanding, why the difference in processing between “Server
> Connection” and “Function Processor” when one or multiple keys are passed
> in?
>
> Thanks,
> Wes
>
>
> On Nov 27, 2015, at 11:36 PM, Real Wes Williams <Th...@outlook.com>
> wrote:
>
>
> My function returns a different partitioned region depending on if I pass
> a _single_ key into the .withFilter() set or I pass _multiple_ keys into
> .withFilter(). What’s going on?
>
> When I pass in a single key into .onRegion(r).withFilter(one key), the
> region in the local context. In this condition, keySet returns 10,500 keys.
>
> Function:
> Region<String, Trade> tradesRegion =
> PartitionRegionHelper.getLocalDataForContext(context);
> Object object = tradesRegion.get(aKey);
> log.info("keySet returns " + tradesRegion.keySet().size());
>
>
> But when I pass in MULTIPLE keys, the region.get returns a null and there
> are only 53 keys in the region. When I list all 53 keys, they are the
> partition keys and not the actual keys of the region.
>
> Can someone explain what’s going on and what is the optimal way to process
> scatter-gather keys when a partition-resolver is in play? The partition
> resolver is in the classpath on both client and server.
>
> SINGLE KEY: [info 2015/11/27 23:09:48.299 EST server1 <ServerConnection
> on port 50920 Thread 6> tid=0x6b] keySet returns 10614
>
> MULTIPLE KEYS: [info 2015/11/27 22:52:46.969 EST server1 <Function
> Execution Processor1> tid=0x45] keySet returns 53
>
> Thanks,
> Wes
>
> Client:
> Set<String> filter = new HashSet<String>();
> filter.add("161231XYZ|AAB3H 01");
>
> /*
> * calls the function across the nodes
> */
> ResultCollector<?, ?> rc = FunctionService
> .onRegion(region)
> .withFilter(filter)
> .execute(CalculateDurationFunction.ID);
>
>
>
>