0
私は、ロケータが1つ、キャッシュサーバが3つ、クライアントが1つのGeodeシステムを持っています。これらのサーバーの中には、私のデータが入っている区画領域があります。私がしようとしているのは、各サーバー上の関数を実行してその特定のサーバー上のデータを取得することです。パーティション化された領域を持つGeodeサーバでのデータの取得
public void execute(FunctionContext fc) {
Cache cache = CacheFactory.getAnyInstance();
// testRegion is a partitioned region
Region<Object, Object> region = cache.getRegion("/testRegion");
Set<Object> keys = region.keySet();
Set keysTillSecondLast = new HashSet();
int setSize = keys.size();
Iterator keysIterator = keys.iterator();
for(int i = 0; i < (setSize -1); i++)
{
keysTillSecondLast.add(keysIterator.next());
}
for (Object k : keysTillSecondLast) {
fc.getResultSender().sendResult((Serializable) region.get(k));
}
Object lastResult = keysIterator.next();
fc.getResultSender().lastResult((Serializable) region.get(lastResult));
}
partitoned領域には30個のエントリがあります。私はこのような上記の関数を呼び出すとき:
public void runFunction() {
MyFunction function = new MyFunction();
FunctionService.registerFunction(function);
Execution execution = FunctionService.onServers(cache);
ResultCollector collector = execution.execute(new MyFunction());
List result = (List) collector.getResult();
System.out.println(result);
}
result
リストのサイズは、60(重複したエントリ)です。代わりにFunctionService.onServer()
メソッドを使用すると、リストサイズが30であり、これは私がプッシュしたすべてのデータです。では、特定のサーバー上のデータのみを取得する方法はありますか?関数を実行すると、次のような結果が返されます。
Data on Server1: ....
Data on Server2: ....
Data on Server3: ....