Class TestServerManager

java.lang.Object
org.apache.hadoop.hbase.master.TestServerManager

@Tag("org.apache.hadoop.hbase.testclassification.MasterTests") @Tag("org.apache.hadoop.hbase.testclassification.SmallTests") public class TestServerManager extends Object
  • Field Details

    • sm

      private org.apache.hadoop.hbase.master.ServerManager sm
    • region

      private org.apache.hadoop.hbase.client.RegionInfo region
  • Constructor Details

  • Method Details

    • setUp

      @BeforeEach public void setUp()
    • lastFlushed

      private long lastFlushed(org.apache.hadoop.hbase.client.RegionInfo ri)
    • testReportRegionOpenSeedsFlushedSequenceId

    • testReportRegionOpenDoesNotRegressExistingValue

    • testReportRegionOpenIgnoresNoSeqNum

    • testReportRegionOpenIgnoresNegativeSeqNum

    • testConcurrentStaleHeartbeatDoesNotClobberOpenSeed

      HBASE-30335: the OPEN-time seed (ServerManager.reportRegionOpen(org.apache.hadoop.hbase.client.RegionInfo, long), which uses merge(Math::max)) and the heartbeat handler (ServerManager.regionServerReport(org.apache.hadoop.hbase.ServerName, org.apache.hadoop.hbase.ServerMetrics)) both write flushedSequenceIdByRegion. A stale in-flight heartbeat from the soon-to-be-dead source RS carries a lower completedSequenceId. Whatever the interleaving, the watermark must never regress below the seed: if the heartbeat lands first the seed lifts it to openSeqNum; if it lands after, the heartbeat's read-modify-write must refuse to lower it. Only a non-atomic check-then-put in the heartbeat path (the pre-fix bug) could let the stale value clobber the seed. This drives both writers concurrently over many rounds to catch that race.
      Throws:
      Exception
    • await

      private static void await(CyclicBarrier barrier)