diff options
author | Joram Wilander <jwawilander@gmail.com> | 2018-06-27 05:08:40 -0400 |
---|---|---|
committer | George Goldberg <george@gberg.me> | 2018-06-27 10:08:40 +0100 |
commit | 0d91bf323ec32f46453b2c4c1877e8eeb830ab4d (patch) | |
tree | d458825ac3f5c710e95fc171fa23217377e53b37 /store/sqlstore | |
parent | f17c15c9d83e42e46adb8e8c1fb9706b22fe6f50 (diff) | |
download | chat-0d91bf323ec32f46453b2c4c1877e8eeb830ab4d.tar.gz chat-0d91bf323ec32f46453b2c4c1877e8eeb830ab4d.tar.bz2 chat-0d91bf323ec32f46453b2c4c1877e8eeb830ab4d.zip |
Lock bulk importing to master database node (#9012)
Diffstat (limited to 'store/sqlstore')
-rw-r--r-- | store/sqlstore/store.go | 2 | ||||
-rw-r--r-- | store/sqlstore/supplier.go | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/store/sqlstore/store.go b/store/sqlstore/store.go index fc7b3be18..500f98235 100644 --- a/store/sqlstore/store.go +++ b/store/sqlstore/store.go @@ -65,6 +65,8 @@ type SqlStore interface { RemoveIndexIfExists(indexName string, tableName string) bool GetAllConns() []*gorp.DbMap Close() + LockToMaster() + UnlockFromMaster() Team() store.TeamStore Channel() store.ChannelStore Post() store.PostStore diff --git a/store/sqlstore/supplier.go b/store/sqlstore/supplier.go index 02a3cef7f..1e6bdcba1 100644 --- a/store/sqlstore/supplier.go +++ b/store/sqlstore/supplier.go @@ -105,6 +105,7 @@ type SqlSupplier struct { searchReplicas []*gorp.DbMap oldStores SqlSupplierOldStores settings *model.SqlSettings + lockedToMaster bool } func NewSqlSupplier(settings model.SqlSettings, metrics einterfaces.MetricsInterface) *SqlSupplier { @@ -283,7 +284,7 @@ func (ss *SqlSupplier) GetSearchReplica() *gorp.DbMap { } func (ss *SqlSupplier) GetReplica() *gorp.DbMap { - if len(ss.settings.DataSourceReplicas) == 0 { + if len(ss.settings.DataSourceReplicas) == 0 || ss.lockedToMaster { return ss.GetMaster() } @@ -801,6 +802,14 @@ func (ss *SqlSupplier) Close() { } } +func (ss *SqlSupplier) LockToMaster() { + ss.lockedToMaster = true +} + +func (ss *SqlSupplier) UnlockFromMaster() { + ss.lockedToMaster = false +} + func (ss *SqlSupplier) Team() store.TeamStore { return ss.oldStores.team } |