code: private void scheduleAllDeliveries()
      {
          logger.debug("Started scheduleAllDeliveries");
  
          // Force a major compaction to get rid of the tombstones and expired hints. Do it once, before we schedule any
          // individual replay, to avoid N - 1 redundant individual compactions (when N is the number of nodes with hints
          // to deliver to).
          compact();
  
          IPartitioner p = StorageService.getPartitioner();
          RowPosition minPos = p.getMinimumToken().minKeyBound();
          Range<RowPosition> range = new Range<>(minPos, minPos, p);
          IDiskAtomFilter filter = new NamesQueryFilter(ImmutableSortedSet.<CellName>of());
          List<Row> rows = hintStore.getRangeSlice(range, null, filter, Integer.MAX_VALUE, System.currentTimeMillis());
          for (Row row : rows)
          {
              UUID hostId = UUIDGen.getUUID(row.key.getKey());
              InetAddress target = StorageService.instance.getTokenMetadata().getEndpointForHostId(hostId);
              // token may have since been removed (in which case we have just read back a tombstone)
              if (target != null)
                  scheduleHintDelivery(target, false);
          }
  
          logger.debug("Finished scheduleAllDeliveries");
      }
docs: Attempt delivery to any node for which we have hints.  Necessary since we can generate hints even for
  nodes which are never officially down/failed.