@@ -322,14 +322,24 @@ 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 = totalSizeMb / (double ) targetRegionCount - ( regionCount - regionCountKnownSize ) ;
328
337
} else {
329
- avgRegionSize = totalSizeMb / (double ) regionCount ;
338
+ avgRegionSize = totalSizeMb / (double ) regionCountKnownSize ;
330
339
}
331
- LOG .debug ("Table {}, total aggregated regions size: {} MB and average region size {} MB" ,
332
- table , totalSizeMb , String .format ("%.3f" , avgRegionSize ));
340
+ LOG .debug ("Table {}, total aggregated regions size: {} MB and average region size {} MB, "
341
+ + "number of regions with unknown size {}" ,
342
+ table , totalSizeMb , String .format ("%.3f" , avgRegionSize ), regionCount - regionCountKnownSize );
333
343
}
334
344
335
345
return avgRegionSize ;
@@ -393,6 +403,12 @@ private List<NormalizationPlan> computeMergeNormalizationPlans(final NormalizeCo
393
403
for (current = rangeStart ; current < ctx .getTableRegions ().size (); current ++) {
394
404
final RegionInfo regionInfo = ctx .getTableRegions ().get (current );
395
405
final long regionSizeMb = getRegionSizeMB (regionInfo );
406
+ if (regionSizeMb == -1 ) {
407
+ LOG .debug ("For region {} in table {} cannot determine size, skipping check merging region" ,
408
+ regionInfo .getRegionNameAsString (), ctx .getTableName ());
409
+ rangeStart = Math .max (current , rangeStart + 1 );
410
+ continue ;
411
+ }
396
412
if (skipForMerge (configuration , ctx , regionInfo )) {
397
413
// this region cannot participate in a range. resume the outer loop.
398
414
rangeStart = Math .max (current , rangeStart + 1 );
@@ -457,6 +473,11 @@ private List<NormalizationPlan> computeSplitNormalizationPlans(final NormalizeCo
457
473
continue ;
458
474
}
459
475
final long regionSizeMb = getRegionSizeMB (hri );
476
+ if (regionSizeMb == -1 ) {
477
+ LOG .debug ("For region {} in table {} cannot determine size, skipping check splitting region" ,
478
+ hri .getRegionNameAsString (), ctx .getTableName ());
479
+ continue ;
480
+ }
460
481
if (regionSizeMb > 2 * avgRegionSize ) {
461
482
LOG .info (
462
483
"Table {}, large region {} has size {} MB, more than twice avg size {} MB, "
@@ -490,7 +511,12 @@ private static boolean isOldEnoughForMerge(final NormalizerConfiguration normali
490
511
*/
491
512
private boolean isLargeEnoughForMerge (final NormalizerConfiguration normalizerConfiguration ,
492
513
final NormalizeContext ctx , final RegionInfo regionInfo ) {
493
- return getRegionSizeMB (regionInfo ) >= normalizerConfiguration .getMergeMinRegionSizeMb (ctx );
514
+ long regionSizeMb = getRegionSizeMB (regionInfo );
515
+ if ( regionSizeMb ==-1 ) {
516
+ return false ;
517
+ } else {
518
+ return regionSizeMb >= normalizerConfiguration .getMergeMinRegionSizeMb (ctx );
519
+ }
494
520
}
495
521
496
522
/**
0 commit comments