docs: def CleanAff4Clients(self):
      """Cleans up old client data from aff4."""
  
      inactive_client_ttl = config.CONFIG["DataRetention.inactive_client_ttl"]
      if not inactive_client_ttl:
        self.Log("TTL not set - nothing to do...")
        return
  
      exception_label = config.CONFIG[
          "DataRetention.inactive_client_ttl_exception_label"]
  
      index = client_index.CreateClientIndex(token=self.token)
  
      client_urns = index.LookupClients(["."])
  
      deadline = rdfvalue.RDFDatetime.Now() - inactive_client_ttl
      deletion_count = 0
  
      for client_group in collection.Batch(client_urns, 1000):
        inactive_client_urns = []
        for client in aff4.FACTORY.MultiOpen(
            client_group,
            mode="r",
            aff4_type=aff4_grr.VFSGRRClient,
            token=self.token):
          if exception_label in client.GetLabelsNames():
            continue
  
          if client.Get(client.Schema.LAST) < deadline:
            inactive_client_urns.append(client.urn)
  
        aff4.FACTORY.MultiDelete(inactive_client_urns, token=self.token)
        deletion_count += len(inactive_client_urns)
        self.HeartBeat()
  
      self.Log("Deleted %d inactive clients." % deletion_count)