Skip to content

Commit 74707d2

Browse files
authored
Merge pull request #3792 from dougm/vcsim-perfman-vcls
fix: vcsim: Avoid panic in QueryAvailablePerfMetric if VM has no Datastore
2 parents d7a41b6 + 5c16d3f commit 74707d2

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

simulator/performance_manager.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,9 @@ func (p *PerformanceManager) buildAvailablePerfMetricsQueryResponse(ids []types.
109109
r.Returnval = append(r.Returnval, types.PerfMetricId{CounterId: id.CounterId, Instance: strconv.Itoa(i)})
110110
}
111111
case "$physDisk":
112-
r.Returnval = append(r.Returnval, types.PerfMetricId{CounterId: id.CounterId, Instance: datastoreURL})
112+
if datastoreURL != "" {
113+
r.Returnval = append(r.Returnval, types.PerfMetricId{CounterId: id.CounterId, Instance: datastoreURL})
114+
}
113115
case "$file":
114116
r.Returnval = append(r.Returnval, types.PerfMetricId{CounterId: id.CounterId, Instance: "DISKFILE"})
115117
r.Returnval = append(r.Returnval, types.PerfMetricId{CounterId: id.CounterId, Instance: "DELTAFILE"})
@@ -128,7 +130,11 @@ func (p *PerformanceManager) queryAvailablePerfMetric(ctx *Context, entity types
128130
switch entity.Type {
129131
case "VirtualMachine":
130132
vm := ctx.Map.Get(entity).(*VirtualMachine)
131-
return p.buildAvailablePerfMetricsQueryResponse(p.vmMetrics, int(vm.Summary.Config.NumCpu), vm.Datastore[0].Value)
133+
ds := ""
134+
if len(vm.Datastore) != 0 {
135+
ds = vm.Datastore[0].Value
136+
}
137+
return p.buildAvailablePerfMetricsQueryResponse(p.vmMetrics, int(vm.Summary.Config.NumCpu), ds)
132138
case "HostSystem":
133139
host := ctx.Map.Get(entity).(*HostSystem)
134140
return p.buildAvailablePerfMetricsQueryResponse(p.hostMetrics, int(host.Hardware.CpuInfo.NumCpuThreads), host.Datastore[0].Value)

simulator/performance_manager_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,15 @@ func TestQueryAvailablePerfMetric(t *testing.T) {
174174
}
175175
}
176176

177+
vm.Datastore = nil // e.g. vCLS VMs have no Datastore
178+
if info, err := p.AvailableMetric(ctx, vm.Reference(), 20); err != nil {
179+
t.Fatal(err)
180+
} else {
181+
if len(info) == 0 {
182+
t.Fatal("Expected non-empty list of vm")
183+
}
184+
}
185+
177186
host := ctx.Map.Any("HostSystem").(*HostSystem)
178187
if info, err := p.AvailableMetric(ctx, host.Reference(), 20); err != nil {
179188
t.Fatal(err)

0 commit comments

Comments
 (0)