mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 05:57:25 +00:00
Fix session out issue while creating volume and error message coming up while attaching the volume
This commit is contained in:
parent
79e1da68d2
commit
94b45a9e84
@ -265,14 +265,33 @@ func (nm *NodeManager) GetNodeInfo(nodeName k8stypes.NodeName) (NodeInfo, error)
|
|||||||
return *nodeInfo, nil
|
return *nodeInfo, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (nm *NodeManager) GetNodeDetails() []NodeDetails {
|
func (nm *NodeManager) GetNodeDetails() ([]NodeDetails, error) {
|
||||||
nm.nodeInfoLock.RLock()
|
nm.nodeInfoLock.RLock()
|
||||||
defer nm.nodeInfoLock.RUnlock()
|
defer nm.nodeInfoLock.RUnlock()
|
||||||
var nodeDetails []NodeDetails
|
var nodeDetails []NodeDetails
|
||||||
|
vsphereSessionRefreshMap := make(map[string]bool)
|
||||||
|
|
||||||
|
// Create context
|
||||||
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
for nodeName, nodeInfo := range nm.nodeInfoMap {
|
for nodeName, nodeInfo := range nm.nodeInfoMap {
|
||||||
nodeDetails = append(nodeDetails, NodeDetails{nodeName, nodeInfo.vm})
|
nodeDetails = append(nodeDetails, NodeDetails{nodeName, nodeInfo.vm})
|
||||||
|
if vsphereSessionRefreshMap[nodeInfo.vcServer] {
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
return nodeDetails
|
vsphereInstance := nm.vsphereInstanceMap[nodeInfo.vcServer]
|
||||||
|
if vsphereInstance == nil {
|
||||||
|
err := fmt.Errorf("vSphereInstance for vc server %q not found while looking for vm %q", nodeInfo.vcServer, nodeInfo.vm)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
err := vsphereInstance.conn.Connect(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
vsphereSessionRefreshMap[nodeInfo.vcServer] = true
|
||||||
|
}
|
||||||
|
return nodeDetails, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (nm *NodeManager) addNodeInfo(nodeName string, nodeInfo *NodeInfo) {
|
func (nm *NodeManager) addNodeInfo(nodeName string, nodeInfo *NodeInfo) {
|
||||||
|
@ -639,7 +639,8 @@ func (vs *VSphere) InstanceID(nodeName k8stypes.NodeName) (string, error) {
|
|||||||
|
|
||||||
instanceID, err := instanceIDInternal()
|
instanceID, err := instanceIDInternal()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
isManagedObjectNotFoundError, err := vs.retry(nodeName, err)
|
var isManagedObjectNotFoundError bool
|
||||||
|
isManagedObjectNotFoundError, err = vs.retry(nodeName, err)
|
||||||
if isManagedObjectNotFoundError {
|
if isManagedObjectNotFoundError {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
glog.V(4).Infof("InstanceID: Found node %q", convertToString(nodeName))
|
glog.V(4).Infof("InstanceID: Found node %q", convertToString(nodeName))
|
||||||
@ -729,14 +730,17 @@ func (vs *VSphere) AttachDisk(vmDiskPath string, storagePolicyName string, nodeN
|
|||||||
requestTime := time.Now()
|
requestTime := time.Now()
|
||||||
diskUUID, err = attachDiskInternal(vmDiskPath, storagePolicyName, nodeName)
|
diskUUID, err = attachDiskInternal(vmDiskPath, storagePolicyName, nodeName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
isManagedObjectNotFoundError, err := vs.retry(nodeName, err)
|
var isManagedObjectNotFoundError bool
|
||||||
|
isManagedObjectNotFoundError, err = vs.retry(nodeName, err)
|
||||||
if isManagedObjectNotFoundError {
|
if isManagedObjectNotFoundError {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
glog.V(4).Infof("AttachDisk: Found node %q", convertToString(nodeName))
|
glog.V(4).Infof("AttachDisk: Found node %q", convertToString(nodeName))
|
||||||
diskUUID, err = attachDiskInternal(vmDiskPath, storagePolicyName, nodeName)
|
diskUUID, err = attachDiskInternal(vmDiskPath, storagePolicyName, nodeName)
|
||||||
|
glog.V(4).Infof("AttachDisk: Retry: diskUUID %s, err +%v", convertToString(nodeName), diskUUID, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
glog.V(4).Infof("AttachDisk executed for node %s and volume %s with diskUUID %s. Err: %s", convertToString(nodeName), vmDiskPath, diskUUID, err)
|
||||||
vclib.RecordvSphereMetric(vclib.OperationAttachVolume, requestTime, err)
|
vclib.RecordvSphereMetric(vclib.OperationAttachVolume, requestTime, err)
|
||||||
return diskUUID, err
|
return diskUUID, err
|
||||||
}
|
}
|
||||||
@ -792,7 +796,8 @@ func (vs *VSphere) DetachDisk(volPath string, nodeName k8stypes.NodeName) error
|
|||||||
requestTime := time.Now()
|
requestTime := time.Now()
|
||||||
err := detachDiskInternal(volPath, nodeName)
|
err := detachDiskInternal(volPath, nodeName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
isManagedObjectNotFoundError, err := vs.retry(nodeName, err)
|
var isManagedObjectNotFoundError bool
|
||||||
|
isManagedObjectNotFoundError, err = vs.retry(nodeName, err)
|
||||||
if isManagedObjectNotFoundError {
|
if isManagedObjectNotFoundError {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
err = detachDiskInternal(volPath, nodeName)
|
err = detachDiskInternal(volPath, nodeName)
|
||||||
@ -847,7 +852,8 @@ func (vs *VSphere) DiskIsAttached(volPath string, nodeName k8stypes.NodeName) (b
|
|||||||
requestTime := time.Now()
|
requestTime := time.Now()
|
||||||
isAttached, err := diskIsAttachedInternal(volPath, nodeName)
|
isAttached, err := diskIsAttachedInternal(volPath, nodeName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
isManagedObjectNotFoundError, err := vs.retry(nodeName, err)
|
var isManagedObjectNotFoundError bool
|
||||||
|
isManagedObjectNotFoundError, err = vs.retry(nodeName, err)
|
||||||
if isManagedObjectNotFoundError {
|
if isManagedObjectNotFoundError {
|
||||||
if err == vclib.ErrNoVMFound {
|
if err == vclib.ErrNoVMFound {
|
||||||
isAttached, err = false, nil
|
isAttached, err = false, nil
|
||||||
|
@ -187,8 +187,13 @@ func getAccessibleDatastores(ctx context.Context, nodeVmDetail *NodeDetails, nod
|
|||||||
|
|
||||||
// Get all datastores accessible for the virtual machine object.
|
// Get all datastores accessible for the virtual machine object.
|
||||||
func getSharedDatastoresInK8SCluster(ctx context.Context, dc *vclib.Datacenter, nodeManager *NodeManager) ([]*vclib.DatastoreInfo, error) {
|
func getSharedDatastoresInK8SCluster(ctx context.Context, dc *vclib.Datacenter, nodeManager *NodeManager) ([]*vclib.DatastoreInfo, error) {
|
||||||
nodeVmDetails := nodeManager.GetNodeDetails()
|
nodeVmDetails, err := nodeManager.GetNodeDetails()
|
||||||
if nodeVmDetails == nil || len(nodeVmDetails) == 0 {
|
if err != nil {
|
||||||
|
glog.Errorf("Error while obtaining Kubernetes node nodeVmDetail details. error : %+v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(nodeVmDetails) == 0 {
|
||||||
msg := fmt.Sprintf("Kubernetes node nodeVmDetail details is empty. nodeVmDetails : %+v", nodeVmDetails)
|
msg := fmt.Sprintf("Kubernetes node nodeVmDetail details is empty. nodeVmDetails : %+v", nodeVmDetails)
|
||||||
glog.Error(msg)
|
glog.Error(msg)
|
||||||
return nil, fmt.Errorf(msg)
|
return nil, fmt.Errorf(msg)
|
||||||
@ -210,7 +215,7 @@ func getSharedDatastoresInK8SCluster(ctx context.Context, dc *vclib.Datacenter,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
glog.V(9).Infof("sharedDatastores : %+v", sharedDatastores)
|
glog.V(9).Infof("sharedDatastores : %+v", sharedDatastores)
|
||||||
sharedDatastores, err := getDatastoresForEndpointVC(ctx, dc, sharedDatastores)
|
sharedDatastores, err = getDatastoresForEndpointVC(ctx, dc, sharedDatastores)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf("Failed to get shared datastores from endpoint VC. err: %+v", err)
|
glog.Errorf("Failed to get shared datastores from endpoint VC. err: %+v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
|
Loading…
Reference in New Issue
Block a user