diff --git a/plugin/eip/src/main/java/org/zstack/network/service/eip/EipManagerImpl.java b/plugin/eip/src/main/java/org/zstack/network/service/eip/EipManagerImpl.java index dae4a3e10bf..e64aed2d29e 100755 --- a/plugin/eip/src/main/java/org/zstack/network/service/eip/EipManagerImpl.java +++ b/plugin/eip/src/main/java/org/zstack/network/service/eip/EipManagerImpl.java @@ -587,7 +587,13 @@ private void handle(final APIAttachEipMsg msg) { return; } - EipInventory eip = EipInventory.valueOf(vo); + final String attachedVmNicUuid = nicInventory.getUuid(); + final String attachedGuestIp = guestIp.getIp(); + vo.setVmNicUuid(attachedVmNicUuid); + vo.setGuestIp(attachedGuestIp); + final EipVO updated = dbf.updateAndRefresh(vo); + + EipInventory eip = EipInventory.valueOf(updated); String l3NetworkUuid = getEipL3Network(nicInventory, eip); NetworkServiceProviderType providerType = nwServiceMgr.getTypeOfNetworkServiceProviderForService( l3NetworkUuid, EipConstant.EIP_TYPE); @@ -596,15 +602,19 @@ private void handle(final APIAttachEipMsg msg) { attachEip(struct, providerType.toString(), new Completion(msg) { @Override public void success() { - vo.setVmNicUuid(nicInventory.getUuid()); - vo.setGuestIp(guestIp.getIp()); - EipVO evo = dbf.updateAndRefresh(vo); - evt.setInventory(EipInventory.valueOf(evo)); + evt.setInventory(EipInventory.valueOf(dbf.reload(updated))); bus.publish(evt); } @Override public void fail(ErrorCode errorCode) { + SQL.New(EipVO.class) + .eq(EipVO_.uuid, msg.getEipUuid()) + .eq(EipVO_.vmNicUuid, attachedVmNicUuid) + .eq(EipVO_.guestIp, attachedGuestIp) + .set(EipVO_.vmNicUuid, null) + .set(EipVO_.guestIp, null) + .update(); evt.setError(errorCode); bus.publish(evt); }