@@ -322,14 +322,27 @@ private double getAverageRegionSizeMb(final List<RegionInfo> tableRegions,
322
322
avgRegionSize = targetRegionSize ;
323
323
} else {
324
324
final int regionCount = tableRegions .size ();
325
- final long totalSizeMb = tableRegions .stream ().mapToLong (this ::getRegionSizeMB ).sum ();
325
+ // Count of regions whose size is known
326
+ int regionCountKnownSize = 0 ;
327
+ long totalSizeMb = 0 ;
328
+ for (RegionInfo regionInfo : tableRegions ) {
329
+ long regionSize = getRegionSizeMB (regionInfo );
330
+ if (regionSize != -1 ) {
331
+ totalSizeMb += regionSize ;
332
+ regionCountKnownSize ++;
333
+ }
334
+ }
326
335
if (targetRegionCount > 0 ) {
327
- avgRegionSize = totalSizeMb / (double ) targetRegionCount ;
336
+ avgRegionSize =
337
+ totalSizeMb / (double ) targetRegionCount - (regionCount - regionCountKnownSize );
328
338
} else {
329
- avgRegionSize = totalSizeMb / (double ) regionCount ;
339
+ avgRegionSize = totalSizeMb / (double ) regionCountKnownSize ;
330
340
}
331
- LOG .debug ("Table {}, total aggregated regions size: {} MB and average region size {} MB" ,
332
- table , totalSizeMb , String .format ("%.3f" , avgRegionSize ));
341
+ LOG .debug (
342
+ "Table {}, total aggregated regions size: {} MB and average region size {} MB, "
343
+ + "number of regions with unknown size {}" ,
344
+ table , totalSizeMb , String .format ("%.3f" , avgRegionSize ),
345
+ regionCount - regionCountKnownSize );
333
346
}
334
347
335
348
return avgRegionSize ;
@@ -393,6 +406,13 @@ private List<NormalizationPlan> computeMergeNormalizationPlans(final NormalizeCo
393
406
for (current = rangeStart ; current < ctx .getTableRegions ().size (); current ++) {
394
407
final RegionInfo regionInfo = ctx .getTableRegions ().get (current );
395
408
final long regionSizeMb = getRegionSizeMB (regionInfo );
409
+ if (regionSizeMb == -1 ) {
410
+ LOG .debug (
411
+ "For region {} in table {} cannot determine size, skipping check merging region" ,
412
+ regionInfo .getRegionNameAsString (), ctx .getTableName ());
413
+ rangeStart = Math .max (current , rangeStart + 1 );
414
+ continue ;
415
+ }
396
416
if (skipForMerge (configuration , ctx , regionInfo )) {
397
417
// this region cannot participate in a range. resume the outer loop.
398
418
rangeStart = Math .max (current , rangeStart + 1 );
@@ -457,6 +477,12 @@ private List<NormalizationPlan> computeSplitNormalizationPlans(final NormalizeCo
457
477
continue ;
458
478
}
459
479
final long regionSizeMb = getRegionSizeMB (hri );
480
+ if (regionSizeMb == -1 ) {
481
+ LOG .debug (
482
+ "For region {} in table {} cannot determine size, skipping check splitting region" ,
483
+ hri .getRegionNameAsString (), ctx .getTableName ());
484
+ continue ;
485
+ }
460
486
if (regionSizeMb > 2 * avgRegionSize ) {
461
487
LOG .info (
462
488
"Table {}, large region {} has size {} MB, more than twice avg size {} MB, "
@@ -490,7 +516,12 @@ private static boolean isOldEnoughForMerge(final NormalizerConfiguration normali
490
516
*/
491
517
private boolean isLargeEnoughForMerge (final NormalizerConfiguration normalizerConfiguration ,
492
518
final NormalizeContext ctx , final RegionInfo regionInfo ) {
493
- return getRegionSizeMB (regionInfo ) >= normalizerConfiguration .getMergeMinRegionSizeMb (ctx );
519
+ long regionSizeMb = getRegionSizeMB (regionInfo );
520
+ if (regionSizeMb == -1 ) {
521
+ return false ;
522
+ } else {
523
+ return regionSizeMb >= normalizerConfiguration .getMergeMinRegionSizeMb (ctx );
524
+ }
494
525
}
495
526
496
527
/**
0 commit comments