code: boolean isCompactionRequired(SegmentProperties info) {
          long startOffset = getCompactionStartOffset(info);
          long lastIndexOffset = this.indexReader.getLastIndexedOffset(info);
          if (startOffset + this.connector.getMaxCompactionSize() >= lastIndexOffset) {
              // Either:
              // 1. Nothing was indexed
              // 2. Compaction has already reached the indexed limit.
              // 3. Not enough "uncompacted" data - at least this.maxCompactLength must be accumulated to trigger a compaction.
              return false;
          }
  
          long totalEntryCount = this.indexReader.getTotalEntryCount(info);
          long entryCount = this.indexReader.getEntryCount(info);
          long utilization = totalEntryCount == 0 ? 100 : MathHelpers.minMax(Math.round(100.0 * entryCount / totalEntryCount), 0, 100);
          long utilizationThreshold = (int) MathHelpers.minMax(this.indexReader.getCompactionUtilizationThreshold(info), 0, 100);
          return utilization < utilizationThreshold;
      }
docs: Determines if Table Compaction is required on a Table Segment.
  
  @param info The {@link SegmentProperties} associated with the Table Segment to inquire about.
  @return True if compaction is required, false otherwise.