From 233990f452dc9111cf42a79d2ba7531e5d9b0c01 Mon Sep 17 00:00:00 2001 From: Matthew Date: Fri, 17 Nov 2023 22:18:07 -0500 Subject: [PATCH] refactor: Change event quest updating to use transactions rather than directly commiting --- server/channelserver/handlers_quest.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/server/channelserver/handlers_quest.go b/server/channelserver/handlers_quest.go index df7496f58..edf7f7ae2 100644 --- a/server/channelserver/handlers_quest.go +++ b/server/channelserver/handlers_quest.go @@ -205,11 +205,15 @@ func handleMsgMhfEnumerateQuest(s *Session, p mhfpacket.MHFPacket) { } defer rows.Close() + // Commit event quest changes to a transaction instead of doing it one by one for to help with performance + transaction, _ := s.server.db.Begin() + for rows.Next() { var id, mark uint32 var questId, activeDuration, inactiveDuration int var maxPlayers, questType uint8 var startTime time.Time + err := rows.Scan(&id, &maxPlayers, &questType, &questId, &mark, &startTime, &activeDuration, &inactiveDuration) if err != nil { continue @@ -219,14 +223,14 @@ func handleMsgMhfEnumerateQuest(s *Session, p mhfpacket.MHFPacket) { rotationTime := startTime.Add(time.Duration(activeDuration+inactiveDuration) * 24 * time.Hour) if currentTime.After(rotationTime) { // The rotation time has passed, update the start time and reset the rotation - _, err := s.server.db.Exec("UPDATE event_quests SET start_time = $1 WHERE quest_id = $2", rotationTime, questId) + _, err := transaction.Exec("UPDATE event_quests SET start_time = $1 WHERE quest_id = $2", rotationTime, questId) if err != nil { return } } // Check if the quest is currently active - if currentTime.After(startTime) && currentTime.Sub(startTime) <= time.Duration(activeDuration) * 24 * time.Hour { + if currentTime.After(startTime) && currentTime.Sub(startTime) <= time.Duration(activeDuration)*24*time.Hour { data, err := makeEventQuest(s, rows) if err != nil { continue @@ -245,6 +249,9 @@ func handleMsgMhfEnumerateQuest(s *Session, p mhfpacket.MHFPacket) { } } + // Commit transaction so to write to the database. + transaction.Commit() + type tuneValue struct { ID uint16 Value uint16