From 21af1f49f10d7890f3b51d5be99efcbb71c33edd Mon Sep 17 00:00:00 2001 From: Agniva De Sarker Date: Fri, 15 May 2020 14:19:46 +0530 Subject: [PATCH] MM-25238: Fix system ping check to read from master (#14580) The code was writing to master and immediately after that reading from a replica causing it to fail intermittently. Since this is not a very high-traffic table, it should be safe to read from master always. --- api4/system.go | 8 ++++---- store/sqlstore/system_store.go | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/api4/system.go b/api4/system.go index fe30399f29..456371e426 100644 --- a/api4/system.go +++ b/api4/system.go @@ -86,23 +86,23 @@ func getSystemPing(c *Context, w http.ResponseWriter, r *http.Request) { Value: currentTime, }) if writeErr != nil { - mlog.Debug("Unable to write to database.", mlog.Err(writeErr)) + mlog.Warn("Unable to write to database.", mlog.Err(writeErr)) s[dbStatusKey] = model.STATUS_UNHEALTHY s[model.STATUS] = model.STATUS_UNHEALTHY } else { healthCheck, readErr := c.App.Srv().Store.System().GetByName(healthCheckKey) if readErr != nil { - mlog.Debug("Unable to read from database.", mlog.Err(readErr)) + mlog.Warn("Unable to read from database.", mlog.Err(readErr)) s[dbStatusKey] = model.STATUS_UNHEALTHY s[model.STATUS] = model.STATUS_UNHEALTHY } else if healthCheck.Value != currentTime { - mlog.Debug("Incorrect healthcheck value", mlog.String("expected", currentTime), mlog.String("got", healthCheck.Value)) + mlog.Warn("Incorrect healthcheck value", mlog.String("expected", currentTime), mlog.String("got", healthCheck.Value)) s[dbStatusKey] = model.STATUS_UNHEALTHY s[model.STATUS] = model.STATUS_UNHEALTHY } _, writeErr = c.App.Srv().Store.System().PermanentDeleteByName(healthCheckKey) if writeErr != nil { - mlog.Debug("Unable to remove ping health check value from database", mlog.Err(writeErr)) + mlog.Warn("Unable to remove ping health check value from database", mlog.Err(writeErr)) s[dbStatusKey] = model.STATUS_UNHEALTHY s[model.STATUS] = model.STATUS_UNHEALTHY } diff --git a/store/sqlstore/system_store.go b/store/sqlstore/system_store.go index ef3a090c27..db9cf855a7 100644 --- a/store/sqlstore/system_store.go +++ b/store/sqlstore/system_store.go @@ -37,7 +37,7 @@ func (s SqlSystemStore) Save(system *model.System) *model.AppError { } func (s SqlSystemStore) SaveOrUpdate(system *model.System) *model.AppError { - if err := s.GetReplica().SelectOne(&model.System{}, "SELECT * FROM Systems WHERE Name = :Name", map[string]interface{}{"Name": system.Name}); err == nil { + if err := s.GetMaster().SelectOne(&model.System{}, "SELECT * FROM Systems WHERE Name = :Name", map[string]interface{}{"Name": system.Name}); err == nil { if _, err := s.GetMaster().Update(system); err != nil { return model.NewAppError("SqlSystemStore.SaveOrUpdate", "store.sql_system.update.app_error", nil, err.Error(), http.StatusInternalServerError) } @@ -71,7 +71,7 @@ func (s SqlSystemStore) Get() (model.StringMap, *model.AppError) { func (s SqlSystemStore) GetByName(name string) (*model.System, *model.AppError) { var system model.System - if err := s.GetReplica().SelectOne(&system, "SELECT * FROM Systems WHERE Name = :Name", map[string]interface{}{"Name": name}); err != nil { + if err := s.GetMaster().SelectOne(&system, "SELECT * FROM Systems WHERE Name = :Name", map[string]interface{}{"Name": name}); err != nil { return nil, model.NewAppError("SqlSystemStore.GetByName", "store.sql_system.get_by_name.app_error", nil, err.Error(), http.StatusInternalServerError) }