This article describes how buckets can be assigned in run-time after servers are started up.
There is no gfsh command to assign buckets. The "start server" command has the option --assign-bucket at start time but that doesn't help if you want to assign buckets after start-up.
A solution is to use a function and run that on the server or servers where buckets should be assigned.
The following function takes a list of region names to assign buckets to. Use the Execution methods to choose where to run:
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) { } }
GemFire