mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-17 09:59:55 +01:00
# 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.
86 lines
3.1 KiB
Plaintext
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
|