new mutex model

This commit is contained in:
2026-07-07 23:13:18 +00:00
parent 9767c50f77
commit e0c06582ab
4 changed files with 141 additions and 87 deletions
+21 -17
View File
@@ -34,13 +34,10 @@ func Run() {
cluster := Cluster{}
cluster.Init(client)
start := time.Now()
log.Printf("[INFO] starting cluster sync\n")
err := cluster.Sync()
if err != nil {
log.Printf("[ERR ] error encountered while syncing cluster: %s", err)
} else {
log.Printf("[INFO] synced cluster in %d ms\n", time.Since(start).Milliseconds())
}
// set repeating update for full rebuilds
@@ -53,15 +50,11 @@ func Run() {
case <-channel:
return
case <-ticker.C:
start := time.Now()
log.Printf("[INFO] starting cluster sync\n")
err := cluster.Sync()
if err != nil {
log.Printf("[ERR ] error encountered while syncing cluster: %s", err)
} else {
log.Printf("[INFO] synced cluster in %d ms", time.Since(start).Milliseconds())
}
}
}
}()
@@ -116,7 +109,6 @@ func Run() {
})
router.POST("/sync", func(c *gin.Context) {
start := time.Now()
log.Printf("[INFO] starting cluster sync\n")
err := cluster.Sync()
if err != nil {
@@ -124,21 +116,26 @@ func Run() {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
} else {
log.Printf("[INFO] synced cluster in %fs\n", time.Since(start).Seconds())
return
}
})
router.POST("/nodes/:node/sync", func(c *gin.Context) {
nodeName := c.Param("node")
start := time.Now()
log.Printf("[INFO] starting %s sync\n", nodeName)
err := SyncNode(&cluster, nodeName)
node, err := cluster.GetNode(nodeName)
if err != nil {
log.Printf("[ERR ] failed to sync %s: %s", nodeName, err.Error())
c.JSON(http.StatusNotFound, gin.H{"error": err.Error()})
return
}
err = node.Sync()
if err != nil {
log.Printf("[ERR ] failed to sync %s: %s", nodeName, err.Error())
c.JSON(http.StatusNotFound, gin.H{"error": err.Error()})
} else {
log.Printf("[INFO] synced %s in %fs\n", nodeName, time.Since(start).Seconds())
}
})
@@ -146,17 +143,24 @@ func Run() {
nodeName := c.Param("node")
vmid, err := strconv.ParseUint(c.Param("vmid"), 10, 64)
if err != nil {
log.Printf("[ERR ] failed to sync %s.%d: %s", nodeName, vmid, err.Error())
c.JSON(http.StatusInternalServerError, gin.H{"error": fmt.Sprintf("%s could not be converted to vmid (uint)", c.Param("instance"))})
return
}
start := time.Now()
log.Printf("[INFO] starting %s.%d sync\n", nodeName, vmid)
err = SyncInstance(&cluster, nodeName, vmid)
instance, err := cluster.GetInstance(nodeName, vmid)
if err != nil {
log.Printf("[ERR ] failed to sync %s.%d: %s", nodeName, vmid, err.Error())
c.JSON(http.StatusNotFound, gin.H{"error": err.Error()})
return
}
err = instance.Sync()
if err != nil {
log.Printf("[ERR ] failed to sync %s.%d: %s", nodeName, vmid, err.Error())
c.JSON(http.StatusNotFound, gin.H{"error": err.Error()})
} else {
log.Printf("[INFO] synced %s in %fs\n", nodeName, time.Since(start).Seconds())
}
})