Последний выпуск сборки вызвал проблему, когда некоторые регионы оставались в автономном состоянии.HBase не переназначил их автоматически, и человеческое вмешательство было необходимо, чтобы привести их.Я пытаюсь исследовать эту проблему, и мне нужно было воспроизвести ситуацию, в которой мне нужно принудительно назначить некоторые регионы в автономном режиме без автоматического запуска HBase Master.
Используемая версия HBase - 0,98.Я знаю, что есть метод offline
, который я пробовал, но регион все еще остается активным.По сути, я хочу перевести его в автономный режим, а затем использовать функцию unassign
, чтобы мастер узнал об этом и назначил ему регион случайным образом.
private void bringRegionOffline(HBaseAdmin admin, HRegionInfo hri) {
Random rand = new Random();
if (rand.nextBoolean()) {
try {
admin.offline(hri.getRegionName());
} catch (IOException e) {}
}
}
// The following code snippet is what gets executed on a daemon thread every 30 seconds. I set it up so it only runs once.
for (TableName tn : admin.listTableNames()) {
for (HRegionInfo hri : admin.getTableRegions(tn)) {
bringRegionOffline(admin, hri);
LOGGER.info("{} bought offline. Status now is: {}", hri.getRegionNameAsString(), hri.isOffline());
}
}
Я проверил вывод из журналов, и он принеснесколько регионов в автономном режиме, но значение hri.isOffline()
всегда ложно.