Files
Aurora.3/code/controllers/subsystems/persistence/persistence.dm
T
FabianK3andGitHub aff736cda2 Persistence code refactoring (#22044)
# Summary

This PR refactores code and structure of the current persistence
subsystem, in preparation for Persistency: Circles, Squares and
Triangles.

This should not contain any user facing changes.

~~This PR is based of branch #21925 and **needs** to be merged in order.
The files changed display will be meaningless until then.~~ *Done.*

## Changes

- Split subsystem in partial files.
- Refactored proc names, added "persistentObject" format for current
code.
- Renamed SQL table.
- Refactored logging and call hiearachy.
- Fix CI labeler adding DB label on non-SQL files.
2026-03-24 19:53:37 +01:00

86 lines
3.1 KiB
Plaintext

/*
* Persistence subsystem
* Subsytem for managing any form of persistent content across rounds.
*
* This subsystem consists of multiple partial files, following the structure:
* - persistence.dm - Subsystem definition and generic code.
* - persistence_objects.dm - Persistent objects related code.
* - persistence_objects_sql.dm - Persistent objects database code.
* - persistence_objects_public.dm - Persistent objects public procs.
*/
SUBSYSTEM_DEF(persistence)
name = "Persistence"
init_order = INIT_ORDER_PERSISTENCE // The order is tied with the init and maploading subsystem.
flags = SS_NO_FIRE // This subsystem has no continues workload, it's init and shutdown only.
/**
* Subsystem info stub message generation.
*/
/datum/controller/subsystem/persistence/stat_entry(msg)
msg = ("Tracked object register: [length(GLOB.persistence_object_track_register)]")
return ..()
/**
* Helper method to check and log database connection.
* RETURN: True if connection is scuccessful, false if not.
* PARAMS:
* action = Custom string of the action being performed written to log.
*/
/datum/controller/subsystem/persistence/proc/databaseCheckConnection(action = "unlabeled action")
PRIVATE_PROC(TRUE)
if(!SSdbcore.Connect())
log_subsystem_persistence_error("SQL error during [action], connection failed.")
return FALSE
return TRUE
/**
* Helper method to check the SQL query result and log possible errors.
* RETURN: True if no error occured, false if an error was found.
*/
/datum/controller/subsystem/persistence/proc/databaseCheckQueryResult(datum/db_query/query, action = "unlabeled action")
PRIVATE_PROC(TRUE)
if (!query)
log_subsystem_persistence_error("SQL error during [action], in addition query object provided to check was null.")
return FALSE
if (query.ErrorMsg())
log_subsystem_persistence_error("SQL error during [action]. " + query.ErrorMsg())
return FALSE
return TRUE
/**
* Initialization of the persistence subsystem.
* Includes generic startup checks and init of the different persistent data types.
*/
/datum/controller/subsystem/persistence/Initialize()
. = ..()
if(!GLOB.config.sql_enabled)
log_subsystem_persistence_warning("SQL configuration not enabled. Persistence subsystem requires SQL. Skipping init.")
return SS_INIT_SUCCESS
if(!databaseCheckConnection("subsystem init"))
return SS_INIT_FAILURE
try
objectsInitialize()
catch(var/exception/e)
log_subsystem_persistence_panic("Unhandled exception during persistent objects initialization: [e]")
return SS_INIT_FAILURE
return SS_INIT_SUCCESS
/**
* Shutdown of the persistence subsystem.
* The shutdown consists of finalization steps for each persistent data type.
*/
/datum/controller/subsystem/persistence/Shutdown()
if(!databaseCheckConnection("subsystem shutdown"))
log_subsystem_persistence_panic("SQL error during persistence subsystem shutdown. Cannot finalise persistence of the round.")
return
try
objectsFinalize()
catch(var/exception/e)
log_subsystem_persistence_panic("Unhandled exception during persistent objects finalization: [e]")
return