Pivotal Knowledge Base

关注

使用函数在系统运行中分配bucket

适用于

各GemFire版本

目的

描述系统启动后,如何在运行中的系统内分配bucket。

描述

gfsh命令中没有可用于分配bucket的命令。“start server”命令在启动服务时可以选择--assign-bucket参数,但是无法用于已经启动的运行中系统。

一个办法是使用函数并且在需要分配bucket的服务器上运行。

下面的函数使用了一个列表,包括所有需要分配bucket的region名。使用Execution方法来选择运行的位置:

public class AssignBucketsFunction implements Function, Declarable {
public void execute(FunctionContext context) {
Set<String> regionNames = (Set<String>) context.getArguments();
System.out.println(Thread.currentThread().getName() + ": Function " + getId() + ": Assigning buckets for " + regionNames);
Cache cache = CacheFactory.getAnyInstance();
for (String regionName : regionNames) {
Region region = cache.getRegion(regionName);
PartitionRegionHelper.assignBucketsToPartitions(region);
}
context.getResultSender().lastResult(regionNames);
}

public String getId() {
return getClass().getSimpleName();
}
public boolean optimizeForWrite() {
return true;
}
public boolean hasResult() {
return true;
}
public boolean isHA() {
return true;
}
public void init(Properties properties) {
}
}

评论

由 Zendesk 提供技术支持