@Test
  public void testModify() throws IOException {
    TableName tn = tableName.getTableName();
    byte[] row = Bytes.toBytes("row");
    byte[] family = Bytes.toBytes("family");
    byte[] qualifier = Bytes.toBytes("qualifier");
    byte[] value = Bytes.toBytes("value");
    TableDescriptor td = TableDescriptorBuilder.newBuilder(tn)
      .setColumnFamily(ColumnFamilyDescriptorBuilder.of(family)).build();
    UTIL.getAdmin().createTable(td);
    try (Table table = UTIL.getConnection().getTable(tn)) {
      table.put(new Put(row).addColumn(family, qualifier, value));
    }
    UTIL.flush(tn);
    String fileName = getStoreFileName(tn, family);

    TableDescriptor newTd = TableDescriptorBuilder.newBuilder(td)
      .setValue(StoreFileTrackerFactory.TRACKER_IMPL,
        StoreFileTrackerFactory.Trackers.MIGRATION.name())
      .setValue(MigrationStoreFileTracker.SRC_IMPL, StoreFileTrackerFactory.Trackers.DEFAULT.name())
      .setValue(MigrationStoreFileTracker.DST_IMPL, StoreFileTrackerFactory.Trackers.FILE.name())
      .build();
    UTIL.getAdmin().modifyTable(newTd);
    assertEquals(fileName, getStoreFileName(tn, family));
    try (Table table = UTIL.getConnection().getTable(tn)) {
      assertArrayEquals(value, table.get(new Get(row)).getValue(family, qualifier));
    }

    TableDescriptor newTd2 = TableDescriptorBuilder.newBuilder(td)
      .setValue(StoreFileTrackerFactory.TRACKER_IMPL, StoreFileTrackerFactory.Trackers.FILE.name())
      .build();
    UTIL.getAdmin().modifyTable(newTd2);
    assertEquals(fileName, getStoreFileName(tn, family));
    try (Table table = UTIL.getConnection().getTable(tn)) {
      assertArrayEquals(value, table.get(new Get(row)).getValue(family, qualifier));
    }
  }
Test changing store file tracker implementation by altering table.
hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/storefiletracker/TestChangeStoreFileTracker.java