private void passThrough(VipMessage msg) { VipVO vip = dbf.findByUuid(msg.getVipUuid(), VipVO.class); if (vip == null) { throw new OperationFailureException(err(SysErrors.RESOURCE_NOT_FOUND, "cannot find the vip[uuid:%s], it may have been deleted", msg.getVipUuid() )); } VipBase v = new VipBase(vip); v.handleMessage((Message) msg); }
protected void acquireVip(ModifyVipAttributesStruct s, Completion completion) { refresh(); if (!acquireCheckModifyVipAttributeStruct(s)) { /* no need to install vip to backend */ completion.success(); return; } VipFactory f = vipMgr.getVipFactory(self.getServiceProvider()); VipBaseBackend vip = f.getVip(getSelf()); vip.acquireVipOnBackend(new Completion(completion) { @Override public void success() { logger.debug(String.format("successfully acquired vip[uuid:%s, name:%s, ip:%s] on service[%s]", self.getUuid(), self.getName(), self.getIp(), s.getServiceProvider())); VipUseForList useForList = new VipUseForList(self.getUseFor()); useForList.add(s.getUseFor()); VipVO vo = Q.New(VipVO.class).eq(VipVO_.uuid, self.getUuid()).find(); vo.setUseFor(useForList.toString()); dbf.updateAndRefresh(vo); addPeerL3NetworkUuid(s.getPeerL3NetworkUuid()); completion.success(); } @Override public void fail(ErrorCode errorCode) { completion.fail(errorCode); } }); }
@Override public void run(SyncTaskChain chain) { acquireVip(msg.getStruct(), new Completion(msg, chain) { @Override public void success() { VipInventory vip = VipInventory.valueOf(self); reply.setVip(vip); bus.reply(msg, reply); chain.next(); } @Override public void fail(ErrorCode errorCode) { reply.setError(errorCode); bus.reply(msg, reply); chain.next(); } }); }
VipBase vipBase = new VipBase(vip); vipBase.checkPeerL3Additive(guestL3Uuid); } catch (CloudRuntimeException e) { throw new ApiMessageInterceptionException(operr(e.getMessage()));
@Override public void releaseResourceOnDetachingNic(VmInstanceSpec spec, VmNicInventory nic, NoErrorCompletion completion) { // Todo(WeiW): Need to check router rather than not only user vm if (spec.getVmInventory().getType().equals(VmInstanceConstant.USER_VM_TYPE)) { completion.done(); return; } /* FIXME shixin: nic.getL3NetworkUuid() should be change to nic.getUesedIp for appliancevm */ logger.debug(String.format("check detaching nic[uuid:%s] in peer l3 of vip", nic.getUuid())); List<VipPeerL3NetworkRefVO> refVOS = Q.New(VipPeerL3NetworkRefVO.class).eq(VipPeerL3NetworkRefVO_.l3NetworkUuid, nic.getL3NetworkUuid()).list(); if (refVOS == null || refVOS.isEmpty()) { completion.done(); return; } Set<String> refUuids = refVOS.stream().map(r -> r.getVipUuid()).collect(Collectors.toSet()); logger.debug(String.format("release peer l3[uuid:%s] from vips[uuid:%s] for detaching nic[uuid:%s]", nic.getL3NetworkUuid(), refUuids, nic.getUuid())); List<VipVO> vipVOS = Q.New(VipVO.class).in(VipVO_.uuid, refUuids).list(); for (VipVO vipVO : vipVOS) { VipBase v = new VipBase(vipVO); v.deletePeerL3NetworkUuid(nic.getL3NetworkUuid()); } completion.done(); }
protected void releaseVip(ModifyVipAttributesStruct s, Completion completion) { refresh(); if ((s != null) && (!releaseCheckModifyVipAttributeStruct(s))){ VipBaseBackend vip = f.getVip(getSelf()); vip.releaseVipOnBackend(new Completion(completion) { @Override
public void addPeerL3NetworkUuid(String peerL3NetworkUuid) { if (checkPeerL3Additive(peerL3NetworkUuid) == false) { logger.debug(String.format("can not add peer l3[uuid:%s] to vip[uuid:%s]", peerL3NetworkUuid, self.getUuid())); return; } if (Q.New(VipPeerL3NetworkRefVO.class) .eq(VipPeerL3NetworkRefVO_.vipUuid, self.getUuid()) .eq(VipPeerL3NetworkRefVO_.l3NetworkUuid, peerL3NetworkUuid) .find() != null) { logger.debug(String.format("peer l3 [uuid:%s] has already add to vip[uuid:%s], skip to add", peerL3NetworkUuid, self.getUuid())); return; } VipPeerL3NetworkRefVO vo = new VipPeerL3NetworkRefVO(); vo.setVipUuid(self.getUuid()); vo.setL3NetworkUuid(peerL3NetworkUuid); dbf.persistAndRefresh(vo); logger.debug(String.format("added peer l3[uuid:%s] to vip[uuid:%s]", peerL3NetworkUuid, self.getUuid())); }
protected VipInventory getSelfInventory() { return VipInventory.valueOf(getSelf()); }
@Override public void success() { logger.debug(String.format("successfully acquired vip[uuid:%s, name:%s, ip:%s] on service[%s]", self.getUuid(), self.getName(), self.getIp(), s.getServiceProvider())); VipUseForList useForList = new VipUseForList(self.getUseFor()); useForList.add(s.getUseFor()); VipVO vo = Q.New(VipVO.class).eq(VipVO_.uuid, self.getUuid()).find(); vo.setUseFor(useForList.toString()); dbf.updateAndRefresh(vo); addPeerL3NetworkUuid(s.getPeerL3NetworkUuid()); completion.success(); }
@Override public void run(SyncTaskChain chain) { deleteVip(new Completion(msg, chain) { @Override public void success() { bus.reply(msg, reply); VipCanonicalEvents.VipEventData vipEventData = new VipCanonicalEvents.VipEventData(); vipEventData.setVipUuid(msg.getVipUuid()); vipEventData.setCurrentStatus(VipCanonicalEvents.VIP_STATUS_DELETED); vipEventData.setInventory(inventory); vipEventData.setDate(new Date()); vipEventData.setAccountUuid(accountUuid); evtf.fire(VipCanonicalEvents.VIP_DELETED_PATH, vipEventData); chain.next(); } @Override public void fail(ErrorCode errorCode) { reply.setError(errorCode); bus.reply(msg, reply); chain.next(); } }); }
public void deletePeerL3NetworkUuid(String peerL3NetworkUuid) { if (checkPeerL3Deleteable(peerL3NetworkUuid) == false) { return; } VipPeerL3NetworkRefVO vo = Q.New(VipPeerL3NetworkRefVO.class) .eq(VipPeerL3NetworkRefVO_.vipUuid, self.getUuid()) .eq(VipPeerL3NetworkRefVO_.l3NetworkUuid, peerL3NetworkUuid) .find(); if (vo != null) { dbf.remove(vo); } logger.debug(String.format("deleted peer l3[uuid:%s] from vip[uuid:%s]", peerL3NetworkUuid, self.getUuid())); }
@Override public void success() { logger.debug(String.format("successfully released vip[uuid:%s, name:%s, ip:%s] on service[%s]", self.getUuid(), self.getName(), self.getIp(), self.getServiceProvider())); VipUseForList useForList = new VipUseForList(self.getUseFor()); self.setUseFor(null); clearPeerL3Network(); self.setServiceProvider(null); dbf.update(self); completion.success(); }
VipBase vipBase = new VipBase(vipVO); vipBase.checkPeerL3Additive(nicL3Uuid); } catch (CloudRuntimeException e) { throw new ApiMessageInterceptionException(operr(e.getMessage()));
@Override public void run(BeforeReleaseVipExtensionPoint ext) { logger.debug(String.format("execute before release vip extension point %s", ext)); ext.beforeReleaseVip(VipInventory.valueOf(getSelf())); } });
protected boolean acquireCheckModifyVipAttributeStruct(ModifyVipAttributesStruct s) { if (s.isUserFor()) { VipUseForList useForList = new VipUseForList(self.getUseFor()); useForList.add(s.getUseFor()); self.setUseFor(useForList.toString()); } if (s.isServiceProvider()) { if (self.getServiceProvider() != null && s.getServiceProvider() != null && !s.getServiceProvider().equals(self.getServiceProvider())) { throw new OperationFailureException(operr("service provider of the vip[uuid:%s, name:%s, ip: %s] has been set to %s", self.getUuid(), self.getName(), self.getIp(), self.getServiceProvider())); } self.setServiceProvider(s.getServiceProvider()); } if (s.isPeerL3NetworkUuid()) { try { if (s.isServiceProvider()) { addPeerL3NetworkUuid(s.getPeerL3NetworkUuid()); } } catch (CloudRuntimeException e) { throw new OperationFailureException(operr(e.getMessage())); } } self = dbf.updateAndRefresh(self); /* snat service is bound the router interface, don't need to bound to backend */ if (s.getUseFor().equals(NetworkServiceType.SNAT.toString())) { return false; } return s.isPeerL3NetworkUuid() && s.isServiceProvider(); }
protected void passToBackend(Message msg) { if (self.getServiceProvider() == null) { bus.dealWithUnknownMessage(msg); return; } VipFactory f = vipMgr.getVipFactory(self.getServiceProvider()); VipBaseBackend bkd = f.getVip(getSelf()); bkd.handleBackendSpecificMessage(msg); }