سلام
من قصد دارم در حین اجرای شبیه سازی با توجه به محاسباتی که انجام می دهم در صورت نیاز تصمیم به کاهش تعداد VMها بگیرم.
برای این کار باید یک VM را مشخص کنم و ان را تخریب کنم.
به نظر متد ProcessVmDestroy از کلاس Datacenter این کار انجام می دهد. به اين صورت كه يك event ایجاد می کند و برای رخ دادن ان را ارسال می کند.
1- حال اگر این فرایند که گفتم درست است. چطور باید این متد را فراخوانی کنم؟ از فایل اصلی اجرایی (مثل example1) یا از کلاس DatacenterBroker؟
2- اگر cloudlet های در حال اجرا در این VM باشند یا قرار باشد در آن اجرا شوند تکلیف انها چه می شود؟
کد متد تخریب VM از کلاس دیتاسنتر به این صورت است:
protected void processVmDestroy(SimEvent ev, boolean ack) {
Vm vm = (Vm) ev.getData();
getVmAllocationPolicy().deallocateHostForVm(vm);
if (ack) {
int[] data = new int[3];
data[0] = getId();
data[1] = vm.getId();
data[2] = CloudSimTags.TRUE;
sendNow(vm.getUserId(), CloudSimTags.VM_DESTROY_ACK, data);
}
getVmList().remove(vm);
}