55import org .springframework .beans .factory .annotation .Configurable ;
66import org .springframework .transaction .annotation .Transactional ;
77import org .zstack .core .Platform ;
8+ import org .zstack .core .asyncbatch .While ;
89import org .zstack .core .cloudbus .CloudBus ;
10+ import org .zstack .core .cloudbus .CloudBusCallBack ;
911import org .zstack .core .db .*;
12+ import org .zstack .header .core .NoErrorCompletion ;
1013import org .zstack .header .core .workflow .Flow ;
1114import org .zstack .header .core .workflow .FlowException ;
1215import org .zstack .header .core .workflow .FlowRollback ;
1316import org .zstack .header .core .workflow .FlowTrigger ;
1417import org .zstack .header .message .MessageReply ;
1518import org .zstack .header .network .l3 .*;
16- import org .zstack .header .vm .VmInstanceConstant ;
17- import org .zstack .header .vm .VmInstanceSpec ;
18- import org .zstack .header .vm .VmNicInventory ;
19- import org .zstack .header .vm .VmNicVO ;
19+ import org .zstack .header .vm .*;
2020import org .zstack .identity .Account ;
2121import org .zstack .network .l3 .L3NetworkManager ;
2222import org .zstack .utils .network .IPv6Constants ;
2626import java .util .ArrayList ;
2727import java .util .List ;
2828import java .util .Map ;
29+ import java .util .stream .Collectors ;
2930
3031/**
3132 * Created with IntelliJ IDEA.
@@ -101,16 +102,7 @@ private VmNicInventory makeNicInventory(VmInstanceSpec vmSpec, ApplianceVmNicSpe
101102
102103 @ Transactional
103104 private void removeNicFromDb (List <VmNicInventory > nics ) {
104- dbf .entityForTranscationCallback (TransactionalCallback .Operation .REMOVE , VmNicVO .class );
105- List <String > uuids = new ArrayList <String >(nics .size ());
106- for (VmNicInventory nic : nics ) {
107- uuids .add (nic .getUuid ());
108- }
109-
110- String sql = "delete from VmNicVO v where v.uuid in (:uuids)" ;
111- Query q = dbf .getEntityManager ().createQuery (sql );
112- q .setParameter ("uuids" , uuids );
113- q .executeUpdate ();
105+ SQL .New (VmNicVO .class ).in (VmNicVO_ .uuid , nics .stream ().map (VmNicInventory ::getUuid ).collect (Collectors .toList ())).delete ();
114106 }
115107
116108 @ Override
@@ -166,7 +158,7 @@ public void rollback(FlowRollback chain, Map data) {
166158 return ;
167159 }
168160
169- removeNicFromDb ( nics );
161+ List < ReturnIpMsg > rmsgs = new ArrayList <>( );
170162 for (VmNicInventory nic : nics ) {
171163 if (nic .getUsedIpUuid () == null ) {
172164 continue ;
@@ -176,7 +168,25 @@ public void rollback(FlowRollback chain, Map data) {
176168 msg .setL3NetworkUuid (nic .getL3NetworkUuid ());
177169 msg .setUsedIpUuid (nic .getUsedIpUuid ());
178170 bus .makeTargetServiceIdByResourceUuid (msg , L3NetworkConstant .SERVICE_ID , nic .getL3NetworkUuid ());
179- bus .send (msg );
171+ rmsgs .add (msg );
172+ }
173+
174+ if (!rmsgs .isEmpty ()) {
175+ new While <>(rmsgs ).each ((msg , compl ) -> {
176+ bus .send (msg , new CloudBusCallBack (compl ) {
177+ @ Override
178+ public void run (MessageReply reply ) {
179+ compl .done ();
180+ }
181+ });
182+ }).run (new NoErrorCompletion () {
183+ @ Override
184+ public void done () {
185+ removeNicFromDb (nics );
186+ }
187+ });
188+ } else {
189+ removeNicFromDb (nics );
180190 }
181191 } finally {
182192 chain .rollback ();
0 commit comments