diff options
author | Daniel Schalla <daniel@schalla.me> | 2018-10-10 19:55:12 +0200 |
---|---|---|
committer | Christopher Speller <crspeller@gmail.com> | 2018-10-10 10:55:12 -0700 |
commit | c36e85c9126b921cf00e578ac70c1f1ee0153abd (patch) | |
tree | 86bfea62ec6a1ce0edc548db4a87851c41e30b88 /store/sqlstore | |
parent | bd04d7f75698c7b68434199208dc469021b823c2 (diff) | |
download | chat-c36e85c9126b921cf00e578ac70c1f1ee0153abd.tar.gz chat-c36e85c9126b921cf00e578ac70c1f1ee0153abd.tar.bz2 chat-c36e85c9126b921cf00e578ac70c1f1ee0153abd.zip |
DeleteAll for KV (#9431)
Expire K/V Values
Regenerate Code
pathfix
Update Expiry on Update
Check for Exit Signal
gofmt
Rewrote Go Routine
Remove tempoarily cleanup loop
fix expiretime
TEST: Expired Watchdog as GoRoutine
Check if Srv is nil
Use Scheduler/Worker for Expired Key CleanUp
add license
fix scheduler job type; DoJob Restructuring
Remove unused imports and constants
move db migration from 5.4 to 5.5
Diffstat (limited to 'store/sqlstore')
-rw-r--r-- | store/sqlstore/plugin_store.go | 27 | ||||
-rw-r--r-- | store/sqlstore/upgrade.go | 2 |
2 files changed, 25 insertions, 4 deletions
diff --git a/store/sqlstore/plugin_store.go b/store/sqlstore/plugin_store.go index e4b79e54a..ae7e65d2d 100644 --- a/store/sqlstore/plugin_store.go +++ b/store/sqlstore/plugin_store.go @@ -61,7 +61,7 @@ func (ps SqlPluginStore) SaveOrUpdate(kv *model.PluginKeyValue) store.StoreChann } } } else if ps.DriverName() == model.DATABASE_DRIVER_MYSQL { - if _, err := ps.GetMaster().Exec("INSERT INTO PluginKeyValueStore (PluginId, PKey, PValue) VALUES(:PluginId, :Key, :Value) ON DUPLICATE KEY UPDATE PValue = :Value", map[string]interface{}{"PluginId": kv.PluginId, "Key": kv.Key, "Value": kv.Value}); err != nil { + if _, err := ps.GetMaster().Exec("INSERT INTO PluginKeyValueStore (PluginId, PKey, PValue, ExpireAt) VALUES(:PluginId, :Key, :Value, :ExpireAt) ON DUPLICATE KEY UPDATE PValue = :Value, ExpireAt = :ExpireAt", map[string]interface{}{"PluginId": kv.PluginId, "Key": kv.Key, "Value": kv.Value, "ExpireAt": kv.ExpireAt}); err != nil { result.Err = model.NewAppError("SqlPluginStore.SaveOrUpdate", "store.sql_plugin_store.save.app_error", nil, err.Error(), http.StatusInternalServerError) return } @@ -74,8 +74,8 @@ func (ps SqlPluginStore) SaveOrUpdate(kv *model.PluginKeyValue) store.StoreChann func (ps SqlPluginStore) Get(pluginId, key string) store.StoreChannel { return store.Do(func(result *store.StoreResult) { var kv *model.PluginKeyValue - - if err := ps.GetReplica().SelectOne(&kv, "SELECT * FROM PluginKeyValueStore WHERE PluginId = :PluginId AND PKey = :Key", map[string]interface{}{"PluginId": pluginId, "Key": key}); err != nil { + currentTime := model.GetMillis() + if err := ps.GetReplica().SelectOne(&kv, "SELECT * FROM PluginKeyValueStore WHERE PluginId = :PluginId AND PKey = :Key AND (ExpireAt = 0 OR ExpireAt > :CurrentTime)", map[string]interface{}{"PluginId": pluginId, "Key": key, "CurrentTime": currentTime}); err != nil { if err == sql.ErrNoRows { result.Err = model.NewAppError("SqlPluginStore.Get", "store.sql_plugin_store.get.app_error", nil, fmt.Sprintf("plugin_id=%v, key=%v, err=%v", pluginId, key, err.Error()), http.StatusNotFound) } else { @@ -97,6 +97,27 @@ func (ps SqlPluginStore) Delete(pluginId, key string) store.StoreChannel { }) } +func (ps SqlPluginStore) DeleteAllForPlugin(pluginId string) store.StoreChannel { + return store.Do(func(result *store.StoreResult) { + if _, err := ps.GetMaster().Exec("DELETE FROM PluginKeyValueStore WHERE PluginId = :PluginId", map[string]interface{}{"PluginId": pluginId}); err != nil { + result.Err = model.NewAppError("SqlPluginStore.Delete", "store.sql_plugin_store.delete.app_error", nil, fmt.Sprintf("plugin_id=%v, err=%v", pluginId, err.Error()), http.StatusInternalServerError) + } else { + result.Data = true + } + }) +} + +func (ps SqlPluginStore) DeleteAllExpired() store.StoreChannel { + return store.Do(func(result *store.StoreResult) { + currentTime := model.GetMillis() + if _, err := ps.GetMaster().Exec("DELETE FROM PluginKeyValueStore WHERE ExpireAt != 0 AND ExpireAt < :CurrentTime", map[string]interface{}{"CurrentTime": currentTime}); err != nil { + result.Err = model.NewAppError("SqlPluginStore.Delete", "store.sql_plugin_store.delete.app_error", nil, fmt.Sprintf("current_time=%v, err=%v", currentTime, err.Error()), http.StatusInternalServerError) + } else { + result.Data = true + } + }) +} + func (ps SqlPluginStore) List(pluginId string, offset int, limit int) store.StoreChannel { if limit <= 0 { limit = DEFAULT_PLUGIN_KEY_FETCH_LIMIT diff --git a/store/sqlstore/upgrade.go b/store/sqlstore/upgrade.go index 42d34f525..9898d5b32 100644 --- a/store/sqlstore/upgrade.go +++ b/store/sqlstore/upgrade.go @@ -510,7 +510,7 @@ func UpgradeDatabaseToVersion54(sqlStore SqlStore) { func UpgradeDatabaseToVersion55(sqlStore SqlStore) { // TODO: Uncomment following condition when version 5.5.0 is released // if shouldPerformUpgrade(sqlStore, VERSION_5_4_0, VERSION_5_5_0) { - + sqlStore.CreateColumnIfNotExists("PluginKeyValueStore", "ExpireAt", "bigint(20)", "bigint", "0") // saveSchemaVersion(sqlStore, VERSION_5_5_0) // } } |