def METHOD_NAME(cls, instance, days=30, hours=0, data=None, actor=None):
    model = type(instance)
    silo_mode = SiloMode.get_current_mode()
    if silo_mode not in model._meta.silo_limit.modes and silo_mode != SiloMode.MONOLITH:
        # Pre-empt the fact that our silo protections wouldn't fire for mismatched model <-> silo deletion objects.
        raise model._meta.silo_limit.AvailabilityError(
            f"{model!r} was scheduled for deletion by {cls!r}, but is unavailable in {silo_mode!r}"
        )
    model_name = model.__name__
    record, created = cls.objects.create_or_update(
        app_label=instance._meta.app_label,
        model_name=model_name,
        object_id=instance.pk,
        values={
            "date_scheduled": timezone.now() + timedelta(days=days, hours=hours),
            "data": data or {},
            "actor_id": actor.id if actor else None,
        },
    )
    if not created:
        record = cls.objects.get(
            app_label=instance._meta.app_label,
            model_name=model_name,
            object_id=instance.pk,
        )
    delete_logger.info(
        "object.delete.queued",
        extra={
            "object_id": instance.id,
            "transaction_id": record.guid,
            "model": type(instance).__name__,
        },
    )
    return record