99import org .zstack .core .db .SimpleQuery ;
1010import org .zstack .core .errorcode .ErrorFacade ;
1111import org .zstack .header .apimediator .ApiMessageInterceptionException ;
12+ import org .zstack .header .errorcode .ErrorCode ;
1213import org .zstack .header .identity .APIChangeResourceOwnerMsg ;
1314import org .zstack .header .identity .AccountType ;
1415import org .zstack .header .identity .Quota ;
@@ -151,12 +152,27 @@ private void checkTotalVMQuota(String currentAccountUuid,
151152 String vmInstanceUuid ,
152153 long totalVmNumQuota ,
153154 long totalVmNum ) {
155+ ErrorCode error = checkTotalVMQuotaWithResult (currentAccountUuid ,
156+ resourceTargetOwnerAccountUuid ,
157+ vmInstanceUuid ,
158+ totalVmNumQuota ,
159+ totalVmNum );
160+ if (error != null ) {
161+ throw new ApiMessageInterceptionException (error );
162+ }
163+ }
164+
165+ private ErrorCode checkTotalVMQuotaWithResult (String currentAccountUuid ,
166+ String resourceTargetOwnerAccountUuid ,
167+ String vmInstanceUuid ,
168+ long totalVmNumQuota ,
169+ long totalVmNum ) {
154170 if (Q .New (VmInstanceVO .class )
155171 .eq (VmInstanceVO_ .uuid , vmInstanceUuid )
156172 .notNull (VmInstanceVO_ .lastHostUuid )
157173 .isExists ()) {
158174 // Dirty hack - VM with last host UUID means existing VM.
159- return ;
175+ return null ;
160176 }
161177
162178 QuotaUtil .QuotaCompareInfo quotaCompareInfo ;
@@ -167,18 +183,17 @@ private void checkTotalVMQuota(String currentAccountUuid,
167183 quotaCompareInfo .quotaValue = totalVmNumQuota ;
168184 quotaCompareInfo .currentUsed = totalVmNum ;
169185 quotaCompareInfo .request = 1 ;
170- new QuotaUtil ().CheckQuota (quotaCompareInfo );
186+ return new QuotaUtil ().checkQuotaAndReturn (quotaCompareInfo );
171187 }
172188
173189 @ Transactional (readOnly = true )
174- public void checkVmInstanceQuota (String currentAccountUuid ,
175- String resourceTargetOwnerAccountUuid ,
176- String vmInstanceUuid ,
177- Map <String , Quota .QuotaPair > pairs ) {
190+ public ErrorCode checkVmInstanceQuotaWithResult (String currentAccountUuid ,
191+ String resourceTargetOwnerAccountUuid ,
192+ String vmInstanceUuid ,
193+ Map <String , Quota .QuotaPair > pairs ) {
178194 long vmNumQuota = pairs .get (VmQuotaConstant .VM_RUNNING_NUM ).getValue ();
179195
180196 VmQuotaUtil .VmQuota vmQuotaUsed = new VmQuotaUtil ().getUsedVmCpuMemory (resourceTargetOwnerAccountUuid , null );
181- //
182197 {
183198 QuotaUtil .QuotaCompareInfo quotaCompareInfo ;
184199 quotaCompareInfo = new QuotaUtil .QuotaCompareInfo ();
@@ -188,22 +203,38 @@ public void checkVmInstanceQuota(String currentAccountUuid,
188203 quotaCompareInfo .quotaValue = vmNumQuota ;
189204 quotaCompareInfo .currentUsed = vmQuotaUsed .runningVmNum ;
190205 quotaCompareInfo .request = 1 ;
191- new QuotaUtil ().CheckQuota (quotaCompareInfo );
206+ ErrorCode error = new QuotaUtil ().checkQuotaAndReturn (quotaCompareInfo );
207+ if (error != null ) {
208+ return error ;
209+ }
192210 }
193- //
194- checkTotalVMQuota (currentAccountUuid ,
211+
212+ ErrorCode error = checkTotalVMQuotaWithResult (currentAccountUuid ,
195213 resourceTargetOwnerAccountUuid ,
196214 vmInstanceUuid ,
197215 pairs .get (VmQuotaConstant .VM_TOTAL_NUM ).getValue (),
198216 vmQuotaUsed .totalVmNum );
199- //
217+ if (error != null ) {
218+ return error ;
219+ }
220+
200221 VmInstanceVO vm = dbf .getEntityManager ().find (VmInstanceVO .class , vmInstanceUuid );
201222
202- checkVmCupAndMemoryCapacity (currentAccountUuid , resourceTargetOwnerAccountUuid , vm .getCpuNum (), vm .getMemorySize (), pairs );
223+ return checkVmCupAndMemoryCapacityWithResult (currentAccountUuid , resourceTargetOwnerAccountUuid , vm .getCpuNum (), vm .getMemorySize (), pairs );
224+ }
225+
226+ public void checkVmInstanceQuota (String currentAccountUuid ,
227+ String resourceTargetOwnerAccountUuid ,
228+ String vmInstanceUuid ,
229+ Map <String , Quota .QuotaPair > pairs ) {
230+ ErrorCode error = checkVmInstanceQuotaWithResult (currentAccountUuid , resourceTargetOwnerAccountUuid , vmInstanceUuid , pairs );
231+ if (error != null ) {
232+ throw new ApiMessageInterceptionException (error );
233+ }
203234 }
204235
205236 @ Transactional (readOnly = true )
206- public void checkVmCupAndMemoryCapacity (String currentAccountUuid , String resourceTargetOwnerAccountUuid , long cpu , long memory , Map <String , Quota .QuotaPair > pairs ) {
237+ public ErrorCode checkVmCupAndMemoryCapacityWithResult (String currentAccountUuid , String resourceTargetOwnerAccountUuid , long cpu , long memory , Map <String , Quota .QuotaPair > pairs ) {
207238 VmQuotaUtil .VmQuota vmQuotaUsed = new VmQuotaUtil ().getUsedVmCpuMemory (resourceTargetOwnerAccountUuid );
208239 long cpuNumQuota = pairs .get (VmQuotaConstant .VM_RUNNING_CPU_NUM ).getValue ();
209240 long memoryQuota = pairs .get (VmQuotaConstant .VM_RUNNING_MEMORY_SIZE ).getValue ();
@@ -217,7 +248,10 @@ public void checkVmCupAndMemoryCapacity(String currentAccountUuid, String resour
217248 quotaCompareInfo .quotaValue = cpuNumQuota ;
218249 quotaCompareInfo .currentUsed = vmQuotaUsed .runningVmCpuNum ;
219250 quotaCompareInfo .request = cpu ;
220- new QuotaUtil ().CheckQuota (quotaCompareInfo );
251+ ErrorCode error = new QuotaUtil ().checkQuotaAndReturn (quotaCompareInfo );
252+ if (error != null ) {
253+ return error ;
254+ }
221255 }
222256 {
223257 QuotaUtil .QuotaCompareInfo quotaCompareInfo ;
@@ -228,7 +262,14 @@ public void checkVmCupAndMemoryCapacity(String currentAccountUuid, String resour
228262 quotaCompareInfo .quotaValue = memoryQuota ;
229263 quotaCompareInfo .currentUsed = vmQuotaUsed .runningVmMemorySize ;
230264 quotaCompareInfo .request = memory ;
231- new QuotaUtil ().CheckQuota (quotaCompareInfo );
265+ return new QuotaUtil ().checkQuotaAndReturn (quotaCompareInfo );
266+ }
267+ }
268+
269+ public void checkVmCupAndMemoryCapacity (String currentAccountUuid , String resourceTargetOwnerAccountUuid , long cpu , long memory , Map <String , Quota .QuotaPair > pairs ) {
270+ ErrorCode error = checkVmCupAndMemoryCapacityWithResult (currentAccountUuid , resourceTargetOwnerAccountUuid , cpu , memory , pairs );
271+ if (error != null ) {
272+ throw new ApiMessageInterceptionException (error );
232273 }
233274 }
234275
0 commit comments