mirror of
https://github.com/ultravioletrs/cocos.git
synced 2026-08-07 07:14:50 +00:00
45187d7f41
* Implement graceful shutdown for services and add TTL management for VMs Signed-off-by: Sammy Oina <sammyoina@gmail.com> * Remove unnecessary comment from go-tdx-guest dependency in go.mod Signed-off-by: Sammy Oina <sammyoina@gmail.com> * Update manager/api/logging.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Add TTL manager initialization in TestStop Signed-off-by: Sammy Oina <sammyoina@gmail.com> * Fix logging format in Shutdown method for consistency Signed-off-by: Sammy Oina <sammyoina@gmail.com> * Add unit tests for TTL manager functionality Signed-off-by: Sammy Oina <sammyoina@gmail.com> * Enhance TTL tests with mutex for thread safety in expiration checks Signed-off-by: Sammy Oina <sammyoina@gmail.com> * Add TTL parameter to CreateVM in TestRun for improved testing scenarios Signed-off-by: Sammy Oina <sammyoina@gmail.com> * Add Shutdown test to verify VM cleanup and TTL manager integration Signed-off-by: Sammy Oina <sammyoina@gmail.com> --------- Signed-off-by: Sammy Oina <sammyoina@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
67 lines
1.3 KiB
Go
67 lines
1.3 KiB
Go
// Copyright (c) Ultraviolet
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
package manager
|
|
|
|
import (
|
|
"context"
|
|
sync "sync"
|
|
"time"
|
|
)
|
|
|
|
// TTLManager handles TTL functionality for VMs.
|
|
type TTLManager struct {
|
|
timers map[string]*time.Timer
|
|
mu sync.RWMutex
|
|
}
|
|
|
|
// NewTTLManager creates a new TTL manager.
|
|
func NewTTLManager() *TTLManager {
|
|
return &TTLManager{
|
|
timers: make(map[string]*time.Timer),
|
|
}
|
|
}
|
|
|
|
// SetTTL sets a TTL for a VM and returns a function to cancel it.
|
|
func (tm *TTLManager) SetTTL(vmID string, ttl time.Duration, onExpiry func()) context.CancelFunc {
|
|
tm.mu.Lock()
|
|
defer tm.mu.Unlock()
|
|
|
|
if timer, exists := tm.timers[vmID]; exists {
|
|
timer.Stop()
|
|
}
|
|
|
|
timer := time.AfterFunc(ttl, onExpiry)
|
|
tm.timers[vmID] = timer
|
|
|
|
return func() {
|
|
tm.mu.Lock()
|
|
defer tm.mu.Unlock()
|
|
if t, exists := tm.timers[vmID]; exists {
|
|
t.Stop()
|
|
delete(tm.timers, vmID)
|
|
}
|
|
}
|
|
}
|
|
|
|
// CancelTTL cancels the TTL for a specific VM.
|
|
func (tm *TTLManager) CancelTTL(vmID string) {
|
|
tm.mu.Lock()
|
|
defer tm.mu.Unlock()
|
|
|
|
if timer, exists := tm.timers[vmID]; exists {
|
|
timer.Stop()
|
|
delete(tm.timers, vmID)
|
|
}
|
|
}
|
|
|
|
// CancelAll cancels all active TTLs.
|
|
func (tm *TTLManager) CancelAll() {
|
|
tm.mu.Lock()
|
|
defer tm.mu.Unlock()
|
|
|
|
for vmID, timer := range tm.timers {
|
|
timer.Stop()
|
|
delete(tm.timers, vmID)
|
|
}
|
|
}
|