mirror of
https://github.com/optim-enterprises-bv/kubernetes.git
synced 2025-11-27 03:44:04 +00:00
godep: update vmware/govmomi
This commit is contained in:
133
vendor/github.com/vmware/govmomi/simulator/registry.go
generated
vendored
133
vendor/github.com/vmware/govmomi/simulator/registry.go
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright (c) 2017 VMware, Inc. All Rights Reserved.
|
||||
Copyright (c) 2017-2018 VMware, Inc. All Rights Reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -17,7 +17,9 @@ limitations under the License.
|
||||
package simulator
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"reflect"
|
||||
"strings"
|
||||
"sync"
|
||||
@@ -55,6 +57,7 @@ type Registry struct {
|
||||
m sync.Mutex
|
||||
objects map[types.ManagedObjectReference]mo.Reference
|
||||
handlers map[types.ManagedObjectReference]RegisterObject
|
||||
locks map[types.ManagedObjectReference]sync.Locker
|
||||
counter int
|
||||
}
|
||||
|
||||
@@ -63,6 +66,7 @@ func NewRegistry() *Registry {
|
||||
r := &Registry{
|
||||
objects: make(map[types.ManagedObjectReference]mo.Reference),
|
||||
handlers: make(map[types.ManagedObjectReference]RegisterObject),
|
||||
locks: make(map[types.ManagedObjectReference]sync.Locker),
|
||||
}
|
||||
|
||||
return r
|
||||
@@ -99,6 +103,11 @@ func (r *Registry) newReference(item mo.Reference) types.ManagedObjectReference
|
||||
return ref
|
||||
}
|
||||
|
||||
func (r *Registry) setReference(item mo.Reference, ref types.ManagedObjectReference) {
|
||||
// mo.Reference() returns a value, not a pointer so use reflect to set the Self field
|
||||
reflect.ValueOf(item).Elem().FieldByName("Self").Set(reflect.ValueOf(ref))
|
||||
}
|
||||
|
||||
// AddHandler adds a RegisterObject handler to the Registry.
|
||||
func (r *Registry) AddHandler(h RegisterObject) {
|
||||
r.handlers[h.Reference()] = h
|
||||
@@ -156,8 +165,7 @@ func (r *Registry) Put(item mo.Reference) mo.Reference {
|
||||
ref := item.Reference()
|
||||
if ref.Type == "" || ref.Value == "" {
|
||||
ref = r.newReference(item)
|
||||
// mo.Reference() returns a value, not a pointer so use reflect to set the Self field
|
||||
reflect.ValueOf(item).Elem().FieldByName("Self").Set(reflect.ValueOf(ref))
|
||||
r.setReference(item, ref)
|
||||
}
|
||||
|
||||
if me, ok := item.(mo.Entity); ok {
|
||||
@@ -186,6 +194,7 @@ func (r *Registry) Remove(item types.ManagedObjectReference) {
|
||||
|
||||
delete(r.objects, item)
|
||||
delete(r.handlers, item)
|
||||
delete(r.locks, item)
|
||||
}
|
||||
|
||||
// getEntityParent traverses up the inventory and returns the first object of type kind.
|
||||
@@ -278,29 +287,48 @@ func FindReference(refs []types.ManagedObjectReference, match ...types.ManagedOb
|
||||
return nil
|
||||
}
|
||||
|
||||
// RemoveReference returns a slice with ref removed from refs
|
||||
func RemoveReference(ref types.ManagedObjectReference, refs []types.ManagedObjectReference) []types.ManagedObjectReference {
|
||||
var result []types.ManagedObjectReference
|
||||
|
||||
for i, r := range refs {
|
||||
if r == ref {
|
||||
result = append(result, refs[i+1:]...)
|
||||
break
|
||||
}
|
||||
|
||||
result = append(result, r)
|
||||
}
|
||||
|
||||
return result
|
||||
// AppendReference appends the given refs to field.
|
||||
func (r *Registry) AppendReference(obj mo.Reference, field *[]types.ManagedObjectReference, ref ...types.ManagedObjectReference) {
|
||||
r.WithLock(obj, func() {
|
||||
*field = append(*field, ref...)
|
||||
})
|
||||
}
|
||||
|
||||
// AddReference returns a slice with ref appended if not already in refs.
|
||||
func AddReference(ref types.ManagedObjectReference, refs []types.ManagedObjectReference) []types.ManagedObjectReference {
|
||||
if FindReference(refs, ref) == nil {
|
||||
return append(refs, ref)
|
||||
}
|
||||
// AddReference appends ref to field if not already in the given field.
|
||||
func (r *Registry) AddReference(obj mo.Reference, field *[]types.ManagedObjectReference, ref types.ManagedObjectReference) {
|
||||
r.WithLock(obj, func() {
|
||||
if FindReference(*field, ref) == nil {
|
||||
*field = append(*field, ref)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
return refs
|
||||
// RemoveReference removes ref from the given field.
|
||||
func RemoveReference(field *[]types.ManagedObjectReference, ref types.ManagedObjectReference) {
|
||||
for i, r := range *field {
|
||||
if r == ref {
|
||||
*field = append((*field)[:i], (*field)[i+1:]...)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// RemoveReference removes ref from the given field.
|
||||
func (r *Registry) RemoveReference(obj mo.Reference, field *[]types.ManagedObjectReference, ref types.ManagedObjectReference) {
|
||||
r.WithLock(obj, func() {
|
||||
RemoveReference(field, ref)
|
||||
})
|
||||
}
|
||||
|
||||
func (r *Registry) removeString(obj mo.Reference, field *[]string, val string) {
|
||||
r.WithLock(obj, func() {
|
||||
for i, name := range *field {
|
||||
if name == val {
|
||||
*field = append((*field)[:i], (*field)[i+1:]...)
|
||||
break
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (r *Registry) content() types.ServiceContent {
|
||||
@@ -322,6 +350,11 @@ func (r *Registry) SearchIndex() *SearchIndex {
|
||||
return r.Get(r.content().SearchIndex.Reference()).(*SearchIndex)
|
||||
}
|
||||
|
||||
// EventManager returns the EventManager singleton
|
||||
func (r *Registry) EventManager() *EventManager {
|
||||
return r.Get(r.content().EventManager.Reference()).(*EventManager)
|
||||
}
|
||||
|
||||
// FileManager returns the FileManager singleton
|
||||
func (r *Registry) FileManager() *FileManager {
|
||||
return r.Get(r.content().FileManager.Reference()).(*FileManager)
|
||||
@@ -336,3 +369,57 @@ func (r *Registry) VirtualDiskManager() *VirtualDiskManager {
|
||||
func (r *Registry) ViewManager() *ViewManager {
|
||||
return r.Get(r.content().ViewManager.Reference()).(*ViewManager)
|
||||
}
|
||||
|
||||
// UserDirectory returns the UserDirectory singleton
|
||||
func (r *Registry) UserDirectory() *UserDirectory {
|
||||
return r.Get(r.content().UserDirectory.Reference()).(*UserDirectory)
|
||||
}
|
||||
|
||||
// SessionManager returns the SessionManager singleton
|
||||
func (r *Registry) SessionManager() *SessionManager {
|
||||
return r.Get(r.content().SessionManager.Reference()).(*SessionManager)
|
||||
}
|
||||
|
||||
func (r *Registry) MarshalJSON() ([]byte, error) {
|
||||
r.m.Lock()
|
||||
defer r.m.Unlock()
|
||||
|
||||
vars := struct {
|
||||
Objects int
|
||||
Locks int
|
||||
}{
|
||||
len(r.objects),
|
||||
len(r.locks),
|
||||
}
|
||||
|
||||
return json.Marshal(vars)
|
||||
}
|
||||
|
||||
func (r *Registry) locker(obj mo.Reference) sync.Locker {
|
||||
if mu, ok := obj.(sync.Locker); ok {
|
||||
return mu
|
||||
}
|
||||
|
||||
ref := obj.Reference()
|
||||
r.m.Lock()
|
||||
mu, ok := r.locks[ref]
|
||||
if !ok {
|
||||
mu = new(sync.Mutex)
|
||||
r.locks[ref] = mu
|
||||
}
|
||||
r.m.Unlock()
|
||||
|
||||
return mu
|
||||
}
|
||||
|
||||
var enableLocker = os.Getenv("VCSIM_LOCKER") != "false"
|
||||
|
||||
// WithLock holds a lock for the given object while then given function is run.
|
||||
func (r *Registry) WithLock(obj mo.Reference, f func()) {
|
||||
if enableLocker {
|
||||
mu := r.locker(obj)
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
}
|
||||
f()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user