mirror of
https://github.com/lordmathis/llamactl.git
synced 2025-11-06 17:14:28 +00:00
Implement updateLocalInstanceFromRemote to preserve Nodes field when syncing remote instance data
This commit is contained in:
@@ -12,6 +12,37 @@ import (
|
|||||||
|
|
||||||
type MaxRunningInstancesError error
|
type MaxRunningInstancesError error
|
||||||
|
|
||||||
|
// updateLocalInstanceFromRemote updates the local stub instance with data from the remote instance
|
||||||
|
// while preserving the Nodes field to maintain remote instance tracking
|
||||||
|
func (im *instanceManager) updateLocalInstanceFromRemote(localInst *instance.Process, remoteInst *instance.Process) {
|
||||||
|
if localInst == nil || remoteInst == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the remote instance options
|
||||||
|
remoteOptions := remoteInst.GetOptions()
|
||||||
|
if remoteOptions == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Preserve the Nodes field from the local instance
|
||||||
|
localOptions := localInst.GetOptions()
|
||||||
|
var preservedNodes []string
|
||||||
|
if localOptions != nil && len(localOptions.Nodes) > 0 {
|
||||||
|
preservedNodes = make([]string, len(localOptions.Nodes))
|
||||||
|
copy(preservedNodes, localOptions.Nodes)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a copy of remote options and restore the Nodes field
|
||||||
|
updatedOptions := *remoteOptions
|
||||||
|
updatedOptions.Nodes = preservedNodes
|
||||||
|
|
||||||
|
// Update the local instance with all remote data
|
||||||
|
localInst.SetOptions(&updatedOptions)
|
||||||
|
localInst.Status = remoteInst.Status
|
||||||
|
localInst.Created = remoteInst.Created
|
||||||
|
}
|
||||||
|
|
||||||
// ListInstances returns a list of all instances managed by the instance manager.
|
// ListInstances returns a list of all instances managed by the instance manager.
|
||||||
// For remote instances, this fetches the live state from remote nodes and updates local stubs.
|
// For remote instances, this fetches the live state from remote nodes and updates local stubs.
|
||||||
func (im *instanceManager) ListInstances() ([]*instance.Process, error) {
|
func (im *instanceManager) ListInstances() ([]*instance.Process, error) {
|
||||||
@@ -32,9 +63,9 @@ func (im *instanceManager) ListInstances() ([]*instance.Process, error) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the local stub's status to reflect remote state
|
// Update the local stub with all remote data (preserving Nodes)
|
||||||
im.mu.Lock()
|
im.mu.Lock()
|
||||||
inst.Status = remoteInst.Status
|
im.updateLocalInstanceFromRemote(inst, remoteInst)
|
||||||
im.mu.Unlock()
|
im.mu.Unlock()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -90,9 +121,8 @@ func (im *instanceManager) CreateInstance(name string, options *instance.CreateI
|
|||||||
// We keep the original options (with Nodes) so IsRemote() works correctly
|
// We keep the original options (with Nodes) so IsRemote() works correctly
|
||||||
inst := instance.NewInstance(name, &im.backendsConfig, &im.instancesConfig, options, nil)
|
inst := instance.NewInstance(name, &im.backendsConfig, &im.instancesConfig, options, nil)
|
||||||
|
|
||||||
// Copy the status and creation time from the remote instance
|
// Update the local stub with all remote data (preserving Nodes)
|
||||||
inst.Status = remoteInst.Status
|
im.updateLocalInstanceFromRemote(inst, remoteInst)
|
||||||
inst.Created = remoteInst.Created
|
|
||||||
|
|
||||||
// Add to local tracking maps (but don't count towards limits)
|
// Add to local tracking maps (but don't count towards limits)
|
||||||
im.instances[name] = inst
|
im.instances[name] = inst
|
||||||
@@ -150,9 +180,9 @@ func (im *instanceManager) GetInstance(name string) (*instance.Process, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the local stub's status to reflect remote state
|
// Update the local stub with all remote data (preserving Nodes)
|
||||||
im.mu.Lock()
|
im.mu.Lock()
|
||||||
inst.Status = remoteInst.Status
|
im.updateLocalInstanceFromRemote(inst, remoteInst)
|
||||||
im.mu.Unlock()
|
im.mu.Unlock()
|
||||||
|
|
||||||
// Return the local stub (preserving Nodes field)
|
// Return the local stub (preserving Nodes field)
|
||||||
@@ -180,10 +210,9 @@ func (im *instanceManager) UpdateInstance(name string, options *instance.CreateI
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the local instance's fields (preserving Nodes field)
|
// Update the local stub with all remote data (preserving Nodes)
|
||||||
im.mu.Lock()
|
im.mu.Lock()
|
||||||
inst.SetOptions(options) // Update options with the original (including Nodes)
|
im.updateLocalInstanceFromRemote(inst, remoteInst)
|
||||||
inst.Status = remoteInst.Status
|
|
||||||
im.mu.Unlock()
|
im.mu.Unlock()
|
||||||
|
|
||||||
// Persist the updated remote instance locally
|
// Persist the updated remote instance locally
|
||||||
@@ -303,9 +332,9 @@ func (im *instanceManager) StartInstance(name string) (*instance.Process, error)
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the local instance's status to match the remote
|
// Update the local stub with all remote data (preserving Nodes)
|
||||||
im.mu.Lock()
|
im.mu.Lock()
|
||||||
inst.Status = remoteInst.Status
|
im.updateLocalInstanceFromRemote(inst, remoteInst)
|
||||||
im.mu.Unlock()
|
im.mu.Unlock()
|
||||||
|
|
||||||
return inst, nil
|
return inst, nil
|
||||||
@@ -372,9 +401,9 @@ func (im *instanceManager) StopInstance(name string) (*instance.Process, error)
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the local instance's status to match the remote
|
// Update the local stub with all remote data (preserving Nodes)
|
||||||
im.mu.Lock()
|
im.mu.Lock()
|
||||||
inst.Status = remoteInst.Status
|
im.updateLocalInstanceFromRemote(inst, remoteInst)
|
||||||
im.mu.Unlock()
|
im.mu.Unlock()
|
||||||
|
|
||||||
return inst, nil
|
return inst, nil
|
||||||
@@ -415,9 +444,9 @@ func (im *instanceManager) RestartInstance(name string) (*instance.Process, erro
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the local instance's status to match the remote
|
// Update the local stub with all remote data (preserving Nodes)
|
||||||
im.mu.Lock()
|
im.mu.Lock()
|
||||||
inst.Status = remoteInst.Status
|
im.updateLocalInstanceFromRemote(inst, remoteInst)
|
||||||
im.mu.Unlock()
|
im.mu.Unlock()
|
||||||
|
|
||||||
return inst, nil
|
return inst, nil
|
||||||
|
|||||||
Reference in New Issue
Block a user