mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-18 07:30:12 +01:00
This commit is contained in:
parent
d7090839e7
commit
c631b64d00
2 changed files with 36 additions and 16 deletions
|
|
@ -1237,18 +1237,21 @@ func autoFixIndex() {
|
|||
autoFixLock.Lock()
|
||||
defer autoFixLock.Unlock()
|
||||
|
||||
rootUpdated := treenode.GetRootUpdated()
|
||||
rootUpdatedMap := treenode.GetRootUpdated()
|
||||
i := -1
|
||||
size := len(rootUpdated)
|
||||
for rootID, updated := range rootUpdated {
|
||||
size := len(rootUpdatedMap)
|
||||
for rootID, updated := range rootUpdatedMap {
|
||||
if isFullReindexing {
|
||||
break
|
||||
}
|
||||
|
||||
i++
|
||||
|
||||
root := sql.GetBlock(rootID)
|
||||
if nil == root {
|
||||
rootUpdated, err := sql.GetRootUpdated(rootID)
|
||||
if nil != err {
|
||||
continue
|
||||
}
|
||||
if "" == rootUpdated {
|
||||
logging.LogWarnf("not found tree [%s] in database, reindex it", rootID)
|
||||
reindexTree(rootID, i, size)
|
||||
continue
|
||||
|
|
@ -1261,20 +1264,24 @@ func autoFixIndex() {
|
|||
}
|
||||
|
||||
btUpdated, _ := time.Parse("20060102150405", updated)
|
||||
dbUpdated, _ := time.Parse("20060102150405", root.Updated)
|
||||
dbUpdated, _ := time.Parse("20060102150405", rootUpdated)
|
||||
if dbUpdated.Before(btUpdated.Add(-1 * time.Minute)) {
|
||||
logging.LogWarnf("tree [%s] is not up to date, reindex it", rootID)
|
||||
reindexTree(rootID, i, size)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
roots := sql.GetBlockRedundant(rootID)
|
||||
if 1 < len(roots) {
|
||||
logging.LogWarnf("exist more than one tree [%s], reindex it", rootID)
|
||||
sql.RemoveTreeQueue(root.Box, rootID)
|
||||
reindexTree(rootID, i, size)
|
||||
duplicatedRootIDs := sql.GetDuplicatedRootIDs()
|
||||
for _, rootID := range duplicatedRootIDs {
|
||||
root := sql.GetBlock(rootID)
|
||||
if nil == root {
|
||||
continue
|
||||
}
|
||||
|
||||
logging.LogWarnf("exist more than one tree [%s], reindex it", rootID)
|
||||
sql.RemoveTreeQueue(root.Box, rootID)
|
||||
reindexTree(rootID, i, size)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -581,17 +581,30 @@ func GetBlock(id string) (ret *Block) {
|
|||
return
|
||||
}
|
||||
|
||||
func GetBlockRedundant(id string) (ret []*Block) {
|
||||
rows, err := query("SELECT * FROM blocks WHERE id = ?", id)
|
||||
func GetRootUpdated(rootID string) (ret string, err error) {
|
||||
rows, err := query("SELECT updated FROM blocks WHERE root_id = ? AND type = 'd'", rootID)
|
||||
if nil != err {
|
||||
logging.LogErrorf("sql query failed: %s", err)
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
if block := scanBlockRows(rows); nil != block {
|
||||
ret = append(ret, block)
|
||||
}
|
||||
rows.Scan(&ret)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func GetDuplicatedRootIDs() (ret []string) {
|
||||
rows, err := query("SELECT DISTINCT root_id FROM blocks GROUP BY id HAVING COUNT(*) > 1")
|
||||
if nil != err {
|
||||
logging.LogErrorf("sql query failed: %s", err)
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
var id string
|
||||
rows.Scan(&id)
|
||||
ret = append(ret, id)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue