Skip to content

Commit

Permalink
Merge branch 'shixin-41036@@2' into 'feature-L7lb'
Browse files Browse the repository at this point in the history
[BugFix: ZSTACK-41036] reconnect vpc will not sync slb vip info only shared lb

See merge request zstackio/zstack!1093
  • Loading branch information
gitlab committed Jun 11, 2021
2 parents 7b40bcb + fc6a32a commit 29f08b5
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 4 deletions.
Expand Up @@ -53,4 +53,6 @@ public interface VirtualRouterManager {

VmNicInventory getSnatPubicInventory(VirtualRouterVmInventory vrInv);
void changeVirutalRouterDefaultL3Network(String vrUuid, String newL3Uuid, String oldL3Uuid, Completion completion);

List<String> getVirtualRouterVips(String vrUuid, List<String> vipUuids);
}
Expand Up @@ -2533,4 +2533,27 @@ public String convertFilterNameToZQL(String filterName) {
throw new OperationFailureException(argerr("invalid ApplianceVmType %s", ss[1]));
}
}

/* filter out the vips that belong to other applianceVm */
@Override
public List<String> getVirtualRouterVips(String vrUuid, List<String> vipUuids) {
List<String> ret = new ArrayList<>();
String peerUuid = haBackend.getVirutalRouterPeerUuid(vrUuid);

for (String uuid : vipUuids) {
List<String> vrUuids = vipProxy.getVrUuidsByNetworkService(VipVO.class.getSimpleName(), uuid);
if (vrUuids == null || vrUuids.isEmpty()) {
ret.add(uuid);
continue;
}

if (vrUuids.contains(vrUuid) || vrUuids.contains(peerUuid)) {
ret.add(uuid);
}

/* this vip is belonged to this vr */
}

return ret;
}
}
Expand Up @@ -47,7 +47,7 @@ final public void detachNetworkService(String vrUuid, String type, List<String>

final public List<String> getVrUuidsByNetworkService(String type, String serviceUuid) {
List<String> vrUuids = getNoHaVirtualRouterUuidsByNetworkService(serviceUuid);
if (vrUuids != null && !vrUuids.isEmpty() && vrUuids.size() <= 1) {
if (vrUuids != null && vrUuids.size() == 1) {
return vrUuids;
}

Expand Down
Expand Up @@ -14,6 +14,7 @@
import org.zstack.header.errorcode.ErrorCode;
import org.zstack.network.service.vip.*;
import org.zstack.network.service.virtualrouter.VirtualRouterConstant;
import org.zstack.network.service.virtualrouter.VirtualRouterManager;
import org.zstack.network.service.virtualrouter.VirtualRouterVmInventory;
import org.zstack.network.service.virtualrouter.vyos.VyosConstants;

Expand All @@ -28,6 +29,8 @@ public class VirtualRouterSyncVipFlow implements Flow {
protected VirtualRouterVipBackend vipExt;
@Autowired
protected VipConfigProxy proxy;
@Autowired
protected VirtualRouterManager vrMgr;

@Override
public void run(final FlowTrigger chain, Map data) {
Expand Down Expand Up @@ -59,11 +62,18 @@ public void run(final FlowTrigger chain, Map data) {
return;
}

List<String> vipUuidss = new ArrayList<>(vipUuids);
vipUuidss = vrMgr.getVirtualRouterVips(vr.getUuid(), vipUuidss);
if (vipUuidss.isEmpty()) {
chain.next();
return;
}

/*just only vrouter vip and skip the flat vip*/
List<VipVO> vips = Q.New(VipVO.class)
.in(VipVO_.serviceProvider, Arrays.asList(VyosConstants.PROVIDER_TYPE.toString(),
VirtualRouterConstant.PROVIDER_TYPE.toString()))
.in(VipVO_.uuid, vipUuids).list();
.in(VipVO_.uuid, vipUuidss).list();
if (vips.isEmpty()) {
chain.next();
return;
Expand Down
Expand Up @@ -50,6 +50,8 @@ public class VirtualRouterVipBackend extends AbstractVirtualRouterBackend implem
private ApiTimeoutManager apiTimeoutManager;
@Autowired
private VipConfigProxy proxy;
@Autowired
VirtualRouterManager vrMgr;

public static String RELEASE_VIP_TASK = "releaseVip";
public static String APPLY_VIP_TASK = "applyVip";
Expand Down Expand Up @@ -246,16 +248,18 @@ public void run(MessageReply reply) {
}

private List<VipTO> findVipsOnVirtualRouter(VmNicInventory nic) {
List<VipVO> vips = SQL.New("select vip from VipVO vip, VipPeerL3NetworkRefVO ref " +
List<String> vipUuids = SQL.New("select vip.uuid from VipVO vip, VipPeerL3NetworkRefVO ref " +
"where ref.vipUuid = vip.uuid and vip.system = false " +
"and ref.l3NetworkUuid = :l3Uuid")
.param("l3Uuid", nic.getL3NetworkUuid())
.list();

if (vips == null || vips.isEmpty()) {
vipUuids = vrMgr.getVirtualRouterVips(nic.getVmInstanceUuid(), vipUuids);
if (vipUuids == null || vipUuids.isEmpty()) {
return null;
}

List<VipVO> vips = Q.New(VipVO.class).in(VipVO_.uuid, vipUuids).list();
VirtualRouterVmInventory vr = VirtualRouterVmInventory.valueOf((VirtualRouterVmVO)
Q.New(VirtualRouterVmVO.class).eq(VirtualRouterVmVO_.uuid, nic.getVmInstanceUuid()).find());

Expand Down

0 comments on commit 29f08b5

Please sign in to comment.