修改全局setLastState;在驾驶舱删除司南时的操作进行调整,但疑似还存在偶发问题,大概跟并发有关系,需要后续跟进处理

Signed-off-by: Chenyang Gao <gps949@outlook.com>
This commit is contained in:
Chenyang Gao
2023-05-11 17:54:21 +08:00
parent e5690f26ab
commit 49eb1f8cb1
4 changed files with 11 additions and 5 deletions

View File

@@ -504,6 +504,9 @@ func (h *Mirage) Serve(ctrlChn chan CtrlMsg) error {
case "update-config":
log.Info().Msg("Received update-config message, updating config")
h.cfg = msg.SysCfg
case "set-last-update":
log.Info().Msg("Received set-last-update message, updating last update time")
h.setLastStateChangeToNow()
}
}
}
@@ -610,7 +613,7 @@ func (h *Mirage) setLastStateChangeToNow() {
if h.lastStateChange == nil {
h.lastStateChange = xsync.NewMapOf[time.Time]()
}
h.lastStateChange.Store(user.Name, now)
h.lastStateChange.Store(user.StableID, now)
}
}
@@ -646,7 +649,7 @@ func (h *Mirage) getLastStateChange(users ...User) time.Time {
// are past, then use the entier list of users and look for the last update
if len(users) > 0 {
for _, user := range users {
if lastChange, ok := h.lastStateChange.Load(user.Name); ok {
if lastChange, ok := h.lastStateChange.Load(user.StableID); ok {
times = append(times, lastChange)
}
}

View File

@@ -238,7 +238,7 @@ func (c *Cockpit) RevokeAdmin(
return
}
sysAdmin := c.GetAdmin()
err := c.db.Delete(sysAdmin).Error
err := c.db.Delete(&sysAdmin).Error
if err != nil {
c.doAPIResponse(w, "解绑超级管理员失败", nil)
return

View File

@@ -371,7 +371,7 @@ func (c *Cockpit) CAPIDelNaviNode(
}
// TODO: 是否有必要做远程关闭?
if err := c.db.Delete(naviNode).Error; err != nil {
if err := c.db.Delete(&naviNode).Error; err != nil {
c.doAPIResponse(w, "数据库删除司南节点失败:"+err.Error(), nil)
return
}
@@ -379,5 +379,8 @@ func (c *Cockpit) CAPIDelNaviNode(
delete(c.App.DERPseqnum, naviID)
// c.App.LoadDERPMapFromURL(c.App.cfg.DERPURL)
c.CtrlChn <- CtrlMsg{
Msg: "set-last-update",
}
c.CAPIQueryDERP(w, r)
}

View File

@@ -375,7 +375,7 @@ func (m *Mirage) CAPIDelNaviNode(
}
// TODO: 是否有必要做远程关闭?
if err := m.db.Delete(naviNode).Error; err != nil {
if err := m.db.Delete(&naviNode).Error; err != nil {
m.doAPIResponse(w, "数据库删除司南节点失败:"+err.Error(), nil)
return
}