Revert #1238 SQL ReturnlessQuery()
This commit is contained in:
Razgriz
2021-02-07 17:34:25 -07:00
parent 7313c4c3de
commit 9760ad2b36
4 changed files with 82 additions and 112 deletions

View File

@@ -1,11 +1,7 @@
#define RQUERY_NOTSTARTED -1
//I ported most of this subsystem directly from TGstation, however ReturnlessQueries are my own little creation, and SQL logging is also my baby, so come screech at me if shit is breaking -- Cadyn 2/4/2021
SUBSYSTEM_DEF(dbcore)
name = "Database"
flags = SS_BACKGROUND
wait = 2 SECONDS
wait = 1 MINUTES
init_order = INIT_ORDER_DBCORE
var/failed_connection_timeout = 0
@@ -15,90 +11,14 @@ SUBSYSTEM_DEF(dbcore)
var/failed_connections = 0
var/last_error
var/rquery_count = 0
var/running_rqueries = 0
var/list/active_queries = list()
var/list/returnless_queries = list()
var/list/currentrun = list()
var/connection // Arbitrary handle returned from rust_g.
/datum/controller/subsystem/dbcore/Initialize()
return ..()
/datum/controller/subsystem/dbcore/stat_entry(msg_prefix)
var/list/msg = list(msg_prefix)
msg += "A:[active_queries.len]|"
msg += "R:[returnless_queries.len]"
..(msg.Join())
/datum/controller/subsystem/dbcore/proc/ReturnlessQuery(sql_query, arguments) //Adding this for logging, pretty much it allows queries that don't need to have anything returned handled in the background.
returnless_queries["[rquery_count]"] = list("sql_query" = sql_query, "arguments" = arguments, "status" = RQUERY_NOTSTARTED)
rquery_count++
/datum/controller/subsystem/dbcore/fire(resumed = 0)
if(!resumed)
src.currentrun = returnless_queries.Copy()
var/list/currentrun = src.currentrun
for(var/rquery_id in currentrun)
var/list/query = returnless_queries[rquery_id]
if(!SSdbcore.IsConnected())
last_error = "No connection!"
log_debug(ErrorMsg())
return
if(MC_TICK_CHECK)
return
if(query["status"] == RQUERY_NOTSTARTED)
if(running_rqueries + active_queries.len < 45)
query["status"] = rustg_sql_query_async(connection, query["sql_query"], json_encode(query["arguments"]))
running_rqueries++
currentrun -= rquery_id
continue
var/job_result_str = rustg_sql_check_query(query["status"])
if(job_result_str != RUSTG_JOB_NO_RESULTS_YET)
if (job_result_str == RUSTG_JOB_ERROR)
last_error = job_result_str
log_debug("SQL JOB ERROR: [job_result_str] | Query used: [query["sql_query"]] | Arguments: [json_encode(query["arguments"])]")
returnless_queries -= rquery_id
currentrun -= rquery_id
running_rqueries--
del(query)
continue
var/result = json_decode(job_result_str)
switch (result["status"])
if ("ok")
returnless_queries -= rquery_id
currentrun -= rquery_id
running_rqueries--
del(query)
continue
if ("err")
last_error = result["data"]
log_debug("SQL QUERY ERROR: [last_error] | Query used: [query["sql_query"]] | Arguments: [json_encode(query["arguments"])]")
returnless_queries -= rquery_id
currentrun -= rquery_id
running_rqueries--
del(query)
continue
if ("offline")
last_error = "offline"
log_debug("SQL QUERY OFFLINE: Query used: [query["sql_query"]] | Arguments: [json_encode(query["arguments"])]")
returnless_queries -= rquery_id
currentrun -= rquery_id
running_rqueries--
del(query)
continue
else
log_debug("SQL QUERY UNKNOWN STATUS: [result["status"]] | [last_error] | [result["data"]] | Query used: [query["sql_query"]] | Arguments: [json_encode(query["arguments"])]")
returnless_queries -= rquery_id
currentrun -= rquery_id
running_rqueries--
del(query)
continue
currentrun -= rquery_id
continue
/datum/controller/subsystem/dbcore/fire()
for(var/I in active_queries)
var/DBQuery/Q = I
if(world.time - Q.last_activity_time > (5 MINUTES))
@@ -108,8 +28,6 @@ SUBSYSTEM_DEF(dbcore)
if(MC_TICK_CHECK)
return
/datum/controller/subsystem/dbcore/Recover()
connection = SSdbcore.connection
@@ -224,7 +142,7 @@ SUBSYSTEM_DEF(dbcore)
/datum/controller/subsystem/dbcore/proc/ErrorMsg()
if(!config.sql_enabled)
return "Database disabled by configuration"
return "SQL SUBSYSTEM ERROR: [last_error]"
return last_error
/datum/controller/subsystem/dbcore/proc/ReportError(error)
last_error = error