class Task::CollectGarbage

Overview

Garbage collection task for ActivityPub objects.

Garbage collection identifies and removes objects that are not connected to the user through preservation rules, described below.

How It Works

  1. Identification: Identifies objects that should be preserved based on preservation rules, described below.

  2. Deletion: Deletes objects and all associated records (tags, activities, relationships, translations).

  3. Optimization: Runs SQLite VACUUM and OPTIMIZE to reclaim freed space.

Preservation Rules

Objects are preserved if they meet any of the following criteria:

Of Note

Included Modules

Defined in:

models/task/collect_garbage.cr

Constant Summary

DEFAULT_MAX_AGE_DAYS = 365
DEFAULT_MAX_DELETE_COUNT = 1000
Log = ::Log.for(self)

Constructors

Class Method Summary

Instance Method Summary

Instance methods inherited from class Task

backtrace : Array(String) | Nil backtrace, backtrace=(backtrace : Array(String) | Nil) backtrace=, complete : Bool complete, complete=(complete : Bool) complete=, gone? gone?, last_attempt_at : Time | Nil last_attempt_at, last_attempt_at=(last_attempt_at : Time | Nil) last_attempt_at=, next_attempt_at : Time | Nil next_attempt_at, next_attempt_at=(next_attempt_at : Time | Nil) next_attempt_at=, past_due?(now = Time.utc) past_due?, perform perform, runnable? runnable?, running : Bool running, running=(running : Bool) running=, schedule(next_attempt_at : Time | Nil = nil) schedule, source_iri : String source_iri, source_iri=(source_iri : String) source_iri=, subject_iri : String subject_iri, subject_iri=(subject_iri : String) subject_iri=

Class methods inherited from class Task

clean_up_running_tasks clean_up_running_tasks, destroy_old_tasks destroy_old_tasks, priority priority, priority=(priority : Int32) priority=, scheduled(now = Time.utc, reserve = false) scheduled

Instance methods inherited from module Ktistec::Model::Polymorphic

as_a(as _as : T.class) : T forall T as_a, type : String type, type=(type : String) type=

Macros inherited from module Ktistec::Model::Polymorphic

find(_id id, *, as _as)
find(*, as _as, **options)
find

Instance methods inherited from module Ktistec::Model::Common

created_at : Time created_at, created_at=(created_at : Time) created_at=, updated_at : Time updated_at, updated_at=(updated_at : Time) updated_at=

Instance methods inherited from module Ktistec::Model

==(other : self)
==(other)
==
, _run_validations _run_validations, _save_model(skip_validation = false) _save_model, _serialize_graph(nodes, association = nil, index = nil, skip_associated = false) _serialize_graph, assign(properties : Hash(String, Any), *, _strict : Bool = false) forall Any
assign(*, _strict : Bool = false, **properties)
assign
, changed!(*properties : Symbol) changed!, changed?
changed?(*properties : Symbol)
changed?
, clear!
clear!(*properties : Symbol)
clear!
, destroy destroy, destroyed? destroyed?, errors errors, hash(hasher) hash, id : Int64 | Nil id, id=(id : Int64 | Nil) id=, inspect(io : IO) inspect, new_record? new_record?, reload! reload!, save(skip_validation = false, skip_associated = false) save, serialize_graph(skip_associated = false) serialize_graph, table_name table_name, to_h to_h, to_json(json : JSON::Builder) to_json, to_s(io : IO) to_s, update_property(property, value) update_property, valid?(skip_associated = false) valid?, validate(skip_associated = false) validate

Constructor methods inherited from module Ktistec::Model

new(properties : Hash(String, Any), *, _strict : Bool = false) forall Any
new(*, _strict : Bool = false, **properties)
new

Macros inherited from module Ktistec::Model

belongs_to(name, primary_key = id, foreign_key = nil, class_name = nil, inverse_of = nil) belongs_to, derived(decl, *, aliased_to) derived, has_many(name, primary_key = id, foreign_key = nil, class_name = nil, inverse_of = nil) has_many, has_one(name, primary_key = id, foreign_key = nil, class_name = nil, inverse_of = nil) has_one, validates(property, &block) validates

Constructor Detail

def self.instance : self #

Class Method Detail

def self.followed_hashtags #

[View source]
def self.followed_mentions #

[View source]
def self.followed_or_following_actors #

[View source]
def self.followed_threads #

[View source]
def self.get_max_age_days : Int32 #

[View source]
def self.get_max_age_days=(get_max_age_days : Int32) #

[View source]
def self.get_max_delete_count : Int32 #

[View source]
def self.get_max_delete_count=(get_max_delete_count : Int32) #

[View source]
def self.instance=(instance : self) #

def self.objects_associated_with_followed_actor_activities #

[View source]
def self.objects_associated_with_followed_content #

[View source]
def self.objects_associated_with_user_activities #

[View source]
def self.objects_attributed_to_followed_actors #

[View source]
def self.objects_attributed_to_user #

[View source]
def self.objects_in_threads #

[View source]
def self.objects_in_user_relationships #

[View source]
def self.objects_to_preserve #

[View source]
def self.objects_too_recent_to_delete #

[View source]
def self.schedule_unless_exists #

[View source]

Instance Method Detail

def delete_object_and_associations(object_iri : String) #

Deletes an object and associated records.

This method deletes the object and all records (except other objects via the in_reply_to association) that reference that object.

Returns the number of objects deleted.

Parameters

  • object_iri - The IRI of the object to delete

[View source]
def perform(max_age_days = self.class.get_max_age_days, max_delete_count = self.class.get_max_delete_count) #

Performs garbage collection when scheduled.


[View source]
def perform_on_demand(max_age_days = self.class.get_max_age_days, max_delete_count = Int32::MAX) #

Performs garbage collection on-demand.


[View source]