@Override
  public void postModifyTable(final ObserverContext<MasterCoprocessorEnvironment> ctx,
    final TableName tableName, TableDescriptor oldDescriptor, TableDescriptor currentDescriptor)
    throws IOException {
    Configuration cfg = ctx.getEnvironment().getConfiguration();
    if (!BackupManager.isBackupEnabled(cfg)) {
      LOG.debug("Skipping postModifyTable hook since backup is disabled");
      return;
    }

    Set<String> oldFamilies = Arrays.stream(oldDescriptor.getColumnFamilies())
      .map(ColumnFamilyDescriptor::getNameAsString).collect(Collectors.toSet());
    Set<String> newFamilies = Arrays.stream(currentDescriptor.getColumnFamilies())
      .map(ColumnFamilyDescriptor::getNameAsString).collect(Collectors.toSet());

    Set<String> removedFamilies = Sets.difference(oldFamilies, newFamilies);
    if (!removedFamilies.isEmpty()) {
      Predicate<BulkLoad> filter = bulkload -> removedFamilies.contains(bulkload.getColumnFamily());
      deleteBulkLoads(cfg, tableName, filter);
    }
  }
An Observer to facilitate backup operations
hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/BackupMasterObserver.java