mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-01 15:07:17 +08:00
fix(region): skip sync vm disk error (#18039)
This commit is contained in:
@@ -1432,13 +1432,14 @@ func (manager *SDiskManager) getDisksByStorage(storage *SStorage) ([]SDisk, erro
|
||||
}
|
||||
|
||||
func (manager *SDiskManager) findOrCreateDisk(ctx context.Context, userCred mcclient.TokenCredential, provider cloudprovider.ICloudProvider, vdisk cloudprovider.ICloudDisk, index int, syncOwnerId mcclient.IIdentityProvider, managerId string) (*SDisk, error) {
|
||||
diskObj, err := db.FetchByExternalIdAndManagerId(manager, vdisk.GetGlobalId(), func(q *sqlchemy.SQuery) *sqlchemy.SQuery {
|
||||
diskId := vdisk.GetGlobalId()
|
||||
diskObj, err := db.FetchByExternalIdAndManagerId(manager, diskId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery {
|
||||
sq := StorageManager.Query().SubQuery()
|
||||
return q.Join(sq, sqlchemy.Equals(sq.Field("id"), q.Field("storage_id"))).Filter(sqlchemy.Equals(sq.Field("manager_id"), managerId))
|
||||
})
|
||||
if err != nil {
|
||||
if errors.Cause(err) != sql.ErrNoRows {
|
||||
return nil, errors.Wrapf(err, "db.FetchByExternalIdAndManagerId")
|
||||
return nil, errors.Wrapf(err, "db.FetchByExternalIdAndManagerId %s", diskId)
|
||||
}
|
||||
vstorage, err := vdisk.GetIStorage()
|
||||
if err != nil {
|
||||
@@ -1485,6 +1486,10 @@ func (manager *SDiskManager) SyncDisks(ctx context.Context, userCred mcclient.To
|
||||
for i := 0; i < len(removed); i += 1 {
|
||||
err = removed[i].syncRemoveCloudDisk(ctx, userCred)
|
||||
if err != nil {
|
||||
// vm not sync, so skip disk used by vm error
|
||||
if errors.Cause(err) == httperrors.ErrNotEmpty {
|
||||
continue
|
||||
}
|
||||
syncResult.DeleteError(err)
|
||||
} else {
|
||||
syncResult.Delete()
|
||||
|
||||
@@ -712,7 +712,7 @@ func (manager *SElasticcacheManager) newFromCloudElasticcache(ctx context.Contex
|
||||
return q.Equals("manager_id", provider.Id)
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "newFromCloudElasticcache.FetchVpcId")
|
||||
return nil, errors.Wrapf(err, "newFromCloudElasticcache.FetchVpcId %s", vpcId)
|
||||
}
|
||||
instance.VpcId = vpc.GetId()
|
||||
}
|
||||
@@ -726,7 +726,7 @@ func (manager *SElasticcacheManager) newFromCloudElasticcache(ctx context.Contex
|
||||
Filter(sqlchemy.Equals(vpc.Field("manager_id"), provider.Id))
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "newFromCloudElasticcache.FetchNetworkId")
|
||||
return nil, errors.Wrapf(err, "newFromCloudElasticcache.FetchNetworkId %s", networkId)
|
||||
}
|
||||
instance.NetworkId = network.GetId()
|
||||
}
|
||||
|
||||
@@ -617,9 +617,7 @@ func (manager *SElasticipManager) newFromCloudEip(ctx context.Context, userCred
|
||||
Filter(sqlchemy.Equals(vpc.Field("manager_id"), provider.Id))
|
||||
})
|
||||
if err != nil {
|
||||
msg := fmt.Sprintf("failed to found network by externalId %s error: %v", networkId, err)
|
||||
log.Errorf(msg)
|
||||
return nil, errors.Error(msg)
|
||||
return nil, errors.Wrapf(err, "failed to found network by externalId %s", networkId)
|
||||
}
|
||||
eip.NetworkId = network.GetId()
|
||||
}
|
||||
@@ -951,15 +949,15 @@ func (self *SElasticip) AssociateNatGateway(ctx context.Context, userCred mcclie
|
||||
}
|
||||
|
||||
func (manager *SElasticipManager) getEipByExtEip(ctx context.Context, userCred mcclient.TokenCredential, extEip cloudprovider.ICloudEIP, provider *SCloudprovider, region *SCloudregion, syncOwnerId mcclient.IIdentityProvider) (*SElasticip, error) {
|
||||
eipObj, err := db.FetchByExternalIdAndManagerId(manager, extEip.GetGlobalId(), func(q *sqlchemy.SQuery) *sqlchemy.SQuery {
|
||||
eipId := extEip.GetGlobalId()
|
||||
eipObj, err := db.FetchByExternalIdAndManagerId(manager, eipId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery {
|
||||
return q.Equals("manager_id", provider.Id)
|
||||
})
|
||||
if err == nil {
|
||||
return eipObj.(*SElasticip), nil
|
||||
}
|
||||
if err != sql.ErrNoRows {
|
||||
log.Errorf("FetchByExternalId fail %s", err)
|
||||
return nil, err
|
||||
if errors.Cause(err) != sql.ErrNoRows {
|
||||
return nil, errors.Wrapf(err, "FetchByExternalIdAndManagerId %s", eipId)
|
||||
}
|
||||
|
||||
return manager.newFromCloudEip(ctx, userCred, extEip, provider, region, syncOwnerId)
|
||||
|
||||
@@ -3529,7 +3529,7 @@ func getCloudNicNetwork(ctx context.Context, vnic cloudprovider.ICloudNic, host
|
||||
Filter(sqlchemy.Equals(vpc.Field("manager_id"), host.ManagerId))
|
||||
})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Cannot find network of external_id %s: %v", vnetId, err)
|
||||
return nil, errors.Wrapf(err, "Cannot find network of external_id %s", vnetId)
|
||||
}
|
||||
localNet := localNetObj.(*SNetwork)
|
||||
return localNet, nil
|
||||
@@ -3827,6 +3827,9 @@ func (self *SGuest) fixSysDiskIndex() error {
|
||||
sysDisk.SetModelManager(GuestdiskManager, sysDisk)
|
||||
err := sysQ.First(sysDisk)
|
||||
if err != nil {
|
||||
if errors.Cause(err) == sql.ErrNoRows {
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
if sysDisk.Index == 0 {
|
||||
|
||||
@@ -2318,7 +2318,7 @@ func (hh *SHost) newCloudHostStorage(ctx context.Context, userCred mcclient.Toke
|
||||
return q.Equals("manager_id", provider.Id)
|
||||
})
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
if errors.Cause(err) == sql.ErrNoRows {
|
||||
// no cloud storage found, this may happen for on-premise host
|
||||
// create the storage right now
|
||||
zone, _ := hh.GetZone()
|
||||
@@ -2553,7 +2553,7 @@ func (hh *SHost) SyncHostVMs(ctx context.Context, userCred mcclient.TokenCredent
|
||||
sq := HostManager.Query().SubQuery()
|
||||
return q.Join(sq, sqlchemy.Equals(sq.Field("id"), q.Field("host_id"))).Filter(sqlchemy.Equals(sq.Field("manager_id"), hh.ManagerId))
|
||||
})
|
||||
if err != nil && err != sql.ErrNoRows {
|
||||
if err != nil && errors.Cause(err) != sql.ErrNoRows {
|
||||
log.Errorf("failed to found guest by externalId %s error: %v", added[i].GetGlobalId(), err)
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -598,7 +598,7 @@ func (lbb *SLoadbalancerBackend) constructFieldsFromCloudLoadbalancerBackend(ext
|
||||
return q.Join(sq, sqlchemy.Equals(sq.Field("id"), q.Field("host_id"))).Filter(sqlchemy.Equals(sq.Field("manager_id"), managerId))
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
return errors.Wrapf(err, "FetchByExternalIdAndManagerId %s", ext.GetBackendId())
|
||||
}
|
||||
|
||||
guest := instance.(*SGuest)
|
||||
|
||||
@@ -315,7 +315,7 @@ func (self *SNatSEntry) SyncWithCloudNatSTable(ctx context.Context, userCred mcc
|
||||
Filter(sqlchemy.Equals(vpc.Field("manager_id"), managerId))
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
return errors.Wrapf(err, "search network by externalId: %s", extNetworkId)
|
||||
}
|
||||
self.NetworkId = network.GetId()
|
||||
}
|
||||
|
||||
@@ -281,7 +281,7 @@ func (manager *SVpcManager) GetOrCreateVpcForClassicNetwork(ctx context.Context,
|
||||
return _vpc.(*SVpc), nil
|
||||
}
|
||||
if errors.Cause(err) != sql.ErrNoRows {
|
||||
return nil, errors.Wrap(err, "db.FetchByExternalId")
|
||||
return nil, errors.Wrapf(err, "db.FetchByExternalId %s", externalId)
|
||||
}
|
||||
vpc := &SVpc{}
|
||||
vpc.IsDefault = false
|
||||
@@ -324,7 +324,7 @@ func (svpc *SVpc) GetNetworkByExtId(extId string) (*SNetwork, error) {
|
||||
return q
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrapf(err, "GetNetworkByExtId(%s)", extId)
|
||||
}
|
||||
return network.(*SNetwork), nil
|
||||
}
|
||||
@@ -1660,7 +1660,7 @@ func (svpc *SVpc) GetVpcPeeringConnectionByExtId(extId string) (*SVpcPeeringConn
|
||||
return q.Equals("vpc_id", svpc.Id)
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrapf(err, "FetchByExternalIdAndManagerId %s", extId)
|
||||
}
|
||||
return peer.(*SVpcPeeringConnection), nil
|
||||
}
|
||||
@@ -1670,7 +1670,7 @@ func (svpc *SVpc) GetAccepterVpcPeeringConnectionByExtId(extId string) (*SVpcPee
|
||||
return q.Equals("peer_vpc_id", svpc.Id)
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrapf(err, "FetchByExternalIdAndManagerId %s", extId)
|
||||
}
|
||||
return peer.(*SVpcPeeringConnection), nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user