Skip to content

Commit c1d7dbf

Browse files
committedJan 4, 2019
Fix various player save issues (performance penalty on sql backends + bugs)
* PostgreSQL & SQLite3 doesn't setModified(false) on RemotePlayer, then player is saved on each server save call. This results in heavy useless writes. * PostgreSQL & SQLite3 ack engine meta write whereas db commit hasn't been performed. If commit failed write has failed. We mustn't notify engine write is done. * serializing player meta must not setModified(false) because it didn't ensure write has been done * add RemotePlayer::on_successfull_save callback to do the flag update on a successful save
1 parent 0717719 commit c1d7dbf

File tree

5 files changed

+15
-5
lines changed

5 files changed

+15
-5
lines changed
 

Diff for: ‎src/database/database-files.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@ void PlayerDatabaseFiles::savePlayer(RemotePlayer *player)
105105
if (!fs::safeWriteToFile(path, ss.str())) {
106106
infostream << "Failed to write " << path << std::endl;
107107
}
108-
player->setModified(false);
108+
109+
player->on_successful_save();
109110
}
110111

111112
bool PlayerDatabaseFiles::removePlayer(const std::string &name)

Diff for: ‎src/database/database-postgresql.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -527,8 +527,9 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player)
527527
};
528528
execPrepared("save_player_metadata", 3, meta_values);
529529
}
530-
sao->getMeta().setModified(false);
531530
endSave();
531+
532+
player->on_successful_save();
532533
}
533534

534535
bool PlayerDatabasePostgreSQL::loadPlayer(RemotePlayer *player, PlayerSAO *sao)

Diff for: ‎src/database/database-sqlite3.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -528,9 +528,10 @@ void PlayerDatabaseSQLite3::savePlayer(RemotePlayer *player)
528528
sqlite3_vrfy(sqlite3_step(m_stmt_player_metadata_add), SQLITE_DONE);
529529
sqlite3_reset(m_stmt_player_metadata_add);
530530
}
531-
sao->getMeta().setModified(false);
532531

533532
endSave();
533+
534+
player->on_successful_save();
534535
}
535536

536537
bool PlayerDatabaseSQLite3::loadPlayer(RemotePlayer *player, PlayerSAO *sao)

Diff for: ‎src/remoteplayer.cpp

+7-2
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,6 @@ void RemotePlayer::serializeExtraAttributes(std::string &output)
7979
}
8080

8181
output = fastWriteJson(json_root);
82-
83-
m_sao->getMeta().setModified(false);
8482
}
8583

8684

@@ -225,3 +223,10 @@ const RemotePlayerChatResult RemotePlayer::canSendChatMessage()
225223
m_chat_message_allowance -= 1.0f;
226224
return RPLAYER_CHATRESULT_OK;
227225
}
226+
227+
void RemotePlayer::on_successful_save()
228+
{
229+
setModified(false);
230+
if (m_sao)
231+
m_sao->getMeta().setModified(false);
232+
}

Diff for: ‎src/remoteplayer.h

+2
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ class RemotePlayer : public Player
139139

140140
void setPeerId(session_t peer_id) { m_peer_id = peer_id; }
141141

142+
void on_successful_save();
143+
142144
private:
143145
/*
144146
serialize() writes a bunch of text that can contain

0 commit comments

Comments
 (0)
Please sign in to comment.