Skip to content

Commit bbf677b

Browse files
christoph-zededaeriknordmark
authored andcommitted
Revert "hypervisor: move determining hypervisor"
This reverts commit 8b1f5ba. Signed-off-by: Christoph Ostarek <[email protected]>
1 parent 4979840 commit bbf677b

File tree

3 files changed

+48
-56
lines changed

3 files changed

+48
-56
lines changed

pkg/pillar/cmd/domainmgr/domainmgr.go

Lines changed: 45 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,20 @@ func (ctx *domainContext) publishAssignableAdapters() {
136136
ctx.pubAssignableAdapters.Publish("global", *ctx.assignableAdapters)
137137
}
138138

139+
var currentHypervisor hypervisor.Hypervisor
140+
var currentHypervisorMutex sync.Mutex
139141
var logger *logrus.Logger
140142
var log *base.LogObject
141143

144+
// CurrentHypervisor returns the current hypervisor
145+
func CurrentHypervisor() hypervisor.Hypervisor {
146+
currentHypervisorMutex.Lock()
147+
hv := currentHypervisor
148+
currentHypervisorMutex.Unlock()
149+
150+
return hv
151+
}
152+
142153
func Run(ps *pubsub.PubSub, loggerArg *logrus.Logger, logArg *base.LogObject, arguments []string) int {
143154
logger = loggerArg
144155
log = logArg
@@ -168,14 +179,17 @@ func Run(ps *pubsub.PubSub, loggerArg *logrus.Logger, logArg *base.LogObject, ar
168179
fmt.Printf("%s: %s\n", agentName, Version)
169180
return 0
170181
}
182+
currentHypervisorMutex.Lock()
183+
currentHypervisor, err = hypervisor.GetHypervisor(*domainCtx.hypervisorPtr)
184+
currentHypervisorMutex.Unlock()
171185
if err != nil {
172186
log.Fatal(err)
173187
}
174188

175189
if err := pidfile.CheckAndCreatePidfile(log, agentName); err != nil {
176190
log.Fatal(err)
177191
}
178-
log.Functionf("Starting %s with %s hypervisor backend", agentName, hypervisor.CurrentHypervisor().Name())
192+
log.Functionf("Starting %s with %s hypervisor backend", agentName, CurrentHypervisor().Name())
179193

180194
// Run a periodic timer so we always update StillRunning
181195
stillRunning := time.NewTicker(25 * time.Second)
@@ -472,15 +486,15 @@ func Run(ps *pubsub.PubSub, loggerArg *logrus.Logger, logArg *base.LogObject, ar
472486

473487
capabilitiesSent := false
474488
capabilitiesTicker := time.NewTicker(5 * time.Second)
475-
if err := getAndPublishCapabilities(&domainCtx, hypervisor.CurrentHypervisor()); err != nil {
489+
if err := getAndPublishCapabilities(&domainCtx, CurrentHypervisor()); err != nil {
476490
log.Warnf("getAndPublishCapabilities: %v", err)
477491
} else {
478492
capabilitiesSent = true
479493
capabilitiesTicker.Stop()
480494
}
481495

482496
log.Functionf("Creating %s at %s", "metricsTimerTask", agentlog.GetMyStack())
483-
go metricsTimerTask(&domainCtx, hypervisor.CurrentHypervisor())
497+
go metricsTimerTask(&domainCtx, CurrentHypervisor())
484498

485499
// Before starting to process DomainConfig, domainmgr should (in this order):
486500
// 1. wait for NIM to publish DNS to learn which ports are used for management
@@ -516,7 +530,7 @@ func Run(ps *pubsub.PubSub, loggerArg *logrus.Logger, logArg *base.LogObject, ar
516530
publishProcessesHandler(&domainCtx)
517531

518532
case <-capabilitiesTicker.C:
519-
if err := getAndPublishCapabilities(&domainCtx, hypervisor.CurrentHypervisor()); err != nil {
533+
if err := getAndPublishCapabilities(&domainCtx, CurrentHypervisor()); err != nil {
520534
log.Warnf("getAndPublishCapabilities: %v", err)
521535
} else {
522536
capabilitiesSent = true
@@ -542,7 +556,7 @@ func Run(ps *pubsub.PubSub, loggerArg *logrus.Logger, logArg *base.LogObject, ar
542556
var resources types.HostMemory
543557
for i := 0; true; i++ {
544558
delay := 10
545-
resources, err = hypervisor.CurrentHypervisor().GetHostCPUMem()
559+
resources, err = CurrentHypervisor().GetHostCPUMem()
546560
if err == nil {
547561
break
548562
}
@@ -930,7 +944,7 @@ func verifyStatus(ctx *domainContext, status *types.DomainStatus) {
930944
configActivate = true
931945
}
932946

933-
domainID, domainStatus, err := hypervisor.CurrentHypervisor().Task(status).Info(status.DomainName)
947+
domainID, domainStatus, err := CurrentHypervisor().Task(status).Info(status.DomainName)
934948
if err != nil || domainStatus == types.HALTED {
935949
if status.Activated && configActivate {
936950
if err == nil {
@@ -963,10 +977,10 @@ func verifyStatus(ctx *domainContext, status *types.DomainStatus) {
963977
}
964978

965979
//cleanup app instance tasks
966-
if err := hypervisor.CurrentHypervisor().Task(status).Delete(status.DomainName); err != nil {
980+
if err := CurrentHypervisor().Task(status).Delete(status.DomainName); err != nil {
967981
log.Errorf("failed to delete domain: %s (%v)", status.DomainName, err)
968982
}
969-
if err := hypervisor.CurrentHypervisor().Task(status).Cleanup(status.DomainName); err != nil {
983+
if err := CurrentHypervisor().Task(status).Cleanup(status.DomainName); err != nil {
970984
log.Errorf("failed to cleanup domain: %s (%v)", status.DomainName, err)
971985
}
972986
}
@@ -1104,7 +1118,7 @@ func maybeRetryBoot(ctx *domainContext, status *types.DomainStatus) {
11041118
}
11051119
defer file.Close()
11061120

1107-
if err := hypervisor.CurrentHypervisor().Task(status).Setup(*status, *config, ctx.assignableAdapters, nil, file); err != nil {
1121+
if err := CurrentHypervisor().Task(status).Setup(*status, *config, ctx.assignableAdapters, nil, file); err != nil {
11081122
//it is retry, so omit error
11091123
log.Errorf("Failed to create DomainStatus from %v: %s",
11101124
config, err)
@@ -1383,14 +1397,14 @@ func doAssignIoAdaptersToDomain(ctx *domainContext, config types.DomainConfig,
13831397

13841398
}
13851399
for i, long := range assignmentsPci {
1386-
err := hypervisor.CurrentHypervisor().PCIReserve(long)
1400+
err := CurrentHypervisor().PCIReserve(long)
13871401
if err != nil {
13881402
// Undo what we assigned
13891403
for j, long := range assignmentsPci {
13901404
if j >= i {
13911405
break
13921406
}
1393-
hypervisor.CurrentHypervisor().PCIRelease(long)
1407+
CurrentHypervisor().PCIRelease(long)
13941408
}
13951409
if publishAssignableAdapters {
13961410
ctx.publishAssignableAdapters()
@@ -1567,7 +1581,7 @@ func doActivate(ctx *domainContext, config types.DomainConfig,
15671581
defer file.Close()
15681582

15691583
globalConfig := agentlog.GetGlobalConfig(log, ctx.subGlobalConfig)
1570-
if err := hypervisor.CurrentHypervisor().Task(status).Setup(*status, config, ctx.assignableAdapters, globalConfig, file); err != nil {
1584+
if err := CurrentHypervisor().Task(status).Setup(*status, config, ctx.assignableAdapters, globalConfig, file); err != nil {
15711585
log.Errorf("Failed to create DomainStatus from %v: %s",
15721586
config, err)
15731587
status.SetErrorNow(err.Error())
@@ -1626,17 +1640,17 @@ func doActivateTail(ctx *domainContext, status *types.DomainStatus,
16261640
status.State = types.BOOTING
16271641
publishDomainStatus(ctx, status)
16281642

1629-
err := hypervisor.CurrentHypervisor().Task(status).Start(status.DomainName)
1643+
err := CurrentHypervisor().Task(status).Start(status.DomainName)
16301644
if err != nil {
16311645
log.Errorf("domain start for %s: %s", status.DomainName, err)
16321646
status.SetErrorNow(err.Error())
16331647

16341648
// Delete
1635-
if err := hypervisor.CurrentHypervisor().Task(status).Delete(status.DomainName); err != nil {
1649+
if err := CurrentHypervisor().Task(status).Delete(status.DomainName); err != nil {
16361650
log.Errorf("failed to delete domain: %s (%v)", status.DomainName, err)
16371651
}
16381652
// Cleanup
1639-
if err := hypervisor.CurrentHypervisor().Task(status).Cleanup(status.DomainName); err != nil {
1653+
if err := CurrentHypervisor().Task(status).Cleanup(status.DomainName); err != nil {
16401654
log.Errorf("failed to cleanup domain: %s (%v)", status.DomainName, err)
16411655
}
16421656

@@ -1650,7 +1664,7 @@ func doActivateTail(ctx *domainContext, status *types.DomainStatus,
16501664
status.VifList = checkIfEmu(status.VifList)
16511665

16521666
status.State = types.RUNNING
1653-
domainID, state, err := hypervisor.CurrentHypervisor().Task(status).Info(status.DomainName)
1667+
domainID, state, err := CurrentHypervisor().Task(status).Info(status.DomainName)
16541668

16551669
if err != nil {
16561670
// Immediate failure treat as above
@@ -1661,11 +1675,11 @@ func doActivateTail(ctx *domainContext, status *types.DomainStatus,
16611675
log.Errorf("doActivateTail(%v) failed for %s: %s",
16621676
status.UUIDandVersion, status.DisplayName, err)
16631677
// Delete
1664-
if err := hypervisor.CurrentHypervisor().Task(status).Delete(status.DomainName); err != nil {
1678+
if err := CurrentHypervisor().Task(status).Delete(status.DomainName); err != nil {
16651679
log.Errorf("failed to delete domain: %s (%v)", status.DomainName, err)
16661680
}
16671681
// Cleanup
1668-
if err := hypervisor.CurrentHypervisor().Task(status).Cleanup(status.DomainName); err != nil {
1682+
if err := CurrentHypervisor().Task(status).Cleanup(status.DomainName); err != nil {
16691683
log.Errorf("failed to cleanup domain: %s (%v)", status.DomainName, err)
16701684
}
16711685
return
@@ -1710,7 +1724,7 @@ func doInactivate(ctx *domainContext, status *types.DomainStatus, impatient bool
17101724

17111725
log.Functionf("doInactivate(%v) for %s domainId %d",
17121726
status.UUIDandVersion, status.DisplayName, status.DomainId)
1713-
domainID, _, err := hypervisor.CurrentHypervisor().Task(status).Info(status.DomainName)
1727+
domainID, _, err := CurrentHypervisor().Task(status).Info(status.DomainName)
17141728
if err == nil && domainID != status.DomainId {
17151729
status.DomainId = domainID
17161730
status.BootTime = time.Now()
@@ -1784,7 +1798,7 @@ func doInactivate(ctx *domainContext, status *types.DomainStatus, impatient bool
17841798
}
17851799

17861800
if status.DomainId != 0 {
1787-
if err := hypervisor.CurrentHypervisor().Task(status).Delete(status.DomainName); err != nil {
1801+
if err := CurrentHypervisor().Task(status).Delete(status.DomainName); err != nil {
17881802
log.Errorf("Failed to delete domain %s (%v)", status.DomainName, err)
17891803
} else {
17901804
log.Functionf("doInactivate(%v) for %s: Delete succeeded",
@@ -1802,7 +1816,7 @@ func doInactivate(ctx *domainContext, status *types.DomainStatus, impatient bool
18021816
}
18031817

18041818
func doCleanup(ctx *domainContext, status *types.DomainStatus) {
1805-
if err := hypervisor.CurrentHypervisor().Task(status).Cleanup(status.DomainName); err != nil {
1819+
if err := CurrentHypervisor().Task(status).Cleanup(status.DomainName); err != nil {
18061820
log.Errorf("failed to cleanup domain: %s (%v)", status.DomainName, err)
18071821
}
18081822

@@ -1906,7 +1920,7 @@ func releaseAdapters(ctx *domainContext, ioAdapterList []types.IoAdapter,
19061920
checkIoBundleAll(ctx)
19071921
}
19081922
for _, long := range assignments {
1909-
err := hypervisor.CurrentHypervisor().PCIRelease(long)
1923+
err := CurrentHypervisor().PCIRelease(long)
19101924
if err != nil && !ignoreErrors {
19111925
status.SetErrorNow(err.Error())
19121926
}
@@ -2275,7 +2289,7 @@ func waitForDomainGone(status types.DomainStatus, maxDelay time.Duration) bool {
22752289
time.Sleep(delay)
22762290
waited += delay
22772291
}
2278-
_, state, err := hypervisor.CurrentHypervisor().Task(&status).Info(status.DomainName)
2292+
_, state, err := CurrentHypervisor().Task(&status).Info(status.DomainName)
22792293
if err != nil {
22802294
log.Errorf("waitForDomainGone(%v) for %s error %s state %s",
22812295
status.UUIDandVersion, status.DisplayName,
@@ -2363,7 +2377,7 @@ func DomainCreate(ctx *domainContext, status types.DomainStatus) (int, error) {
23632377
log.Errorf("DomainCreate(%s) no DomainConfig", status.Key())
23642378
return 0, fmt.Errorf("DomainCreate(%s) no DomainConfig", status.Key())
23652379
}
2366-
domainID, err = hypervisor.CurrentHypervisor().Task(&status).Create(status.DomainName, filename, config)
2380+
domainID, err = CurrentHypervisor().Task(&status).Create(status.DomainName, filename, config)
23672381

23682382
return domainID, err
23692383
}
@@ -2376,7 +2390,7 @@ func DomainShutdown(status types.DomainStatus, force bool) error {
23762390

23772391
// Stop the domain
23782392
log.Functionf("Stopping domain - %s", status.DomainName)
2379-
err = hypervisor.CurrentHypervisor().Task(&status).Stop(status.DomainName, force)
2393+
err = CurrentHypervisor().Task(&status).Stop(status.DomainName, force)
23802394

23812395
return err
23822396
}
@@ -2833,7 +2847,7 @@ func handlePhysicalIOAdapterListImpl(ctxArg interface{}, key string,
28332847
len(aa.IoBundleList))
28342848

28352849
// check for mismatched PCI-ids and assignment groups and mark as errors
2836-
aa.CheckBadAssignmentGroups(log, hypervisor.CurrentHypervisor().PCISameController)
2850+
aa.CheckBadAssignmentGroups(log, CurrentHypervisor().PCISameController)
28372851
for i := range aa.IoBundleList {
28382852
ib := &aa.IoBundleList[i]
28392853
log.Functionf("handlePhysicalIOAdapterListImpl: new Adapter: %+v",
@@ -2878,7 +2892,7 @@ func handlePhysicalIOAdapterListImpl(ctxArg interface{}, key string,
28782892
aa.AddOrUpdateIoBundle(log, *ib)
28792893

28802894
// check for mismatched PCI-ids and assignment groups and mark as errors
2881-
aa.CheckBadAssignmentGroups(log, hypervisor.CurrentHypervisor().PCISameController)
2895+
aa.CheckBadAssignmentGroups(log, CurrentHypervisor().PCISameController)
28822896
// Lookup since it could have changed
28832897
ib = aa.LookupIoBundlePhylabel(ib.Phylabel)
28842898
updatePortAndPciBackIoBundle(ctx, ib)
@@ -2979,7 +2993,7 @@ func updatePortAndPciBackIoBundle(ctx *domainContext, ib *types.IoBundle) (chang
29792993
// expand list to include other PCI functions on the same PCI controller
29802994
// since they need to be treated as part of the same bundle even if the
29812995
// EVE controller doesn't know it
2982-
list = aa.ExpandControllers(log, list, hypervisor.CurrentHypervisor().PCISameController)
2996+
list = aa.ExpandControllers(log, list, CurrentHypervisor().PCISameController)
29832997
for _, ib := range list {
29842998
if types.IsPort(ctx.deviceNetworkStatus, ib.Ifname) {
29852999
isPort = true
@@ -3065,7 +3079,7 @@ func updatePortAndPciBackIoMember(ctx *domainContext, ib *types.IoBundle, isPort
30653079
if ib.PciLong != "" {
30663080
log.Functionf("updatePortAndPciBackIoMember: Removing %s (%s) from pciback",
30673081
ib.Phylabel, ib.PciLong)
3068-
err = hypervisor.CurrentHypervisor().PCIRelease(ib.PciLong)
3082+
err = CurrentHypervisor().PCIRelease(ib.PciLong)
30693083
if err != nil {
30703084
err = fmt.Errorf("adapter %s (group %s, type %d) PCI ID %s; not released by hypervisor: %v",
30713085
ib.Phylabel, ib.AssignmentGroup, ib.Type,
@@ -3112,7 +3126,7 @@ func updatePortAndPciBackIoMember(ctx *domainContext, ib *types.IoBundle, isPort
31123126
} else if ib.PciLong != "" && ib.UsbAddr == "" {
31133127
log.Noticef("Assigning %s (%s) to pciback",
31143128
ib.Phylabel, ib.PciLong)
3115-
err := hypervisor.CurrentHypervisor().PCIReserve(ib.PciLong)
3129+
err := CurrentHypervisor().PCIReserve(ib.PciLong)
31163130
if err != nil {
31173131
return changed, err
31183132
}
@@ -3353,7 +3367,7 @@ func handleIBDelete(ctx *domainContext, phylabel string) {
33533367
log.Functionf("handleIBDelete: Assigning %s (%s) back",
33543368
ib.Phylabel, ib.PciLong)
33553369
if ib.PciLong != "" {
3356-
err := hypervisor.CurrentHypervisor().PCIRelease(ib.PciLong)
3370+
err := CurrentHypervisor().PCIRelease(ib.PciLong)
33573371
if err != nil {
33583372
log.Errorf("handleIBDelete(%d %s %s) PCIRelease %s failed %v",
33593373
ib.Type, ib.Phylabel, ib.AssignmentGroup, ib.PciLong, err)

pkg/pillar/cmd/usbmanager/usbmanager.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
"github.com/lf-edge/eve/pkg/pillar/agentbase"
1212
"github.com/lf-edge/eve/pkg/pillar/base"
13+
"github.com/lf-edge/eve/pkg/pillar/cmd/domainmgr"
1314
"github.com/lf-edge/eve/pkg/pillar/hypervisor"
1415
"github.com/lf-edge/eve/pkg/pillar/pubsub"
1516
"github.com/lf-edge/eve/pkg/pillar/utils"
@@ -81,7 +82,7 @@ func Run(ps *pubsub.PubSub, loggerArg *logrus.Logger, logArg *base.LogObject, ar
8182
}
8283
log.Functionf("processed Vault Status")
8384

84-
currentHypervisor := hypervisor.CurrentHypervisor()
85+
currentHypervisor := domainmgr.CurrentHypervisor()
8586
_, ok := currentHypervisor.(hypervisor.KvmContext)
8687
if ok {
8788
usbCtx.subscribe(ps)

pkg/pillar/hypervisor/hypervisor.go

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,14 @@
44
package hypervisor
55

66
import (
7-
"flag"
87
"fmt"
9-
"log"
10-
"os"
11-
128
"github.com/lf-edge/eve/pkg/pillar/types"
139
"github.com/shirou/gopsutil/cpu"
1410
"github.com/shirou/gopsutil/mem"
1511
"github.com/sirupsen/logrus"
12+
"os"
1613
)
1714

18-
var currentHypervisor Hypervisor
19-
20-
func init() {
21-
var err error
22-
23-
flagSet := flag.NewFlagSet("", flag.ExitOnError)
24-
allHypervisors, enabledHypervisors := GetAvailableHypervisors()
25-
hypervisorPtr := flagSet.String("h", enabledHypervisors[0], fmt.Sprintf("Current hypervisor %+q", allHypervisors))
26-
27-
currentHypervisor, err = GetHypervisor(*hypervisorPtr)
28-
if err != nil {
29-
log.Fatal(err)
30-
}
31-
}
32-
33-
// CurrentHypervisor returns the current hypervisor
34-
func CurrentHypervisor() Hypervisor {
35-
return currentHypervisor
36-
}
37-
3815
// Hypervisor provides methods for manipulating domains on the host
3916
type Hypervisor interface {
4017
Name() string

0 commit comments

Comments
 (0)