mirror of
https://github.com/OpenNebula/one.git
synced 2024-12-22 13:33:52 +03:00
parent
b6538876b5
commit
ecd36bcb9a
@ -271,6 +271,15 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Revert changes in PCI Devices after migrate failure
|
||||||
|
* @param sr host share capacity info
|
||||||
|
*/
|
||||||
|
void revert_pci(HostShareCapacity& sr)
|
||||||
|
{
|
||||||
|
host_share.revert_pci(sr);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests whether a VM device capacity can be allocated in the host
|
* Tests whether a VM device capacity can be allocated in the host
|
||||||
* @param sr capacity requested by the VM
|
* @param sr capacity requested by the VM
|
||||||
|
@ -71,6 +71,12 @@ public:
|
|||||||
*/
|
*/
|
||||||
void del(HostShareCapacity &sr);
|
void del(HostShareCapacity &sr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Revert changes in PCI Devices
|
||||||
|
* @param sr capacity info by the VM
|
||||||
|
*/
|
||||||
|
void revert_pci(HostShareCapacity &sr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if this share can host a VM.
|
* Check if this share can host a VM.
|
||||||
* @param cpu requested by the VM
|
* @param cpu requested by the VM
|
||||||
|
@ -84,7 +84,12 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Remove the VM assignment from the PCI device list
|
* Remove the VM assignment from the PCI device list
|
||||||
*/
|
*/
|
||||||
void del(const std::vector<VectorAttribute *> &devs);
|
void del(const std::vector<VectorAttribute *> &devs, int vmid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Revert the VM assignment from the PCI device list
|
||||||
|
*/
|
||||||
|
void revert(std::vector<VectorAttribute *> &devs);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the PCI list with monitor data, it will create or
|
* Updates the PCI list with monitor data, it will create or
|
||||||
|
@ -370,7 +370,7 @@ void HostShare::del(HostShareCapacity &sr)
|
|||||||
|
|
||||||
ds.del(sr);
|
ds.del(sr);
|
||||||
|
|
||||||
pci.del(sr.pci);
|
pci.del(sr.pci, sr.vmid);
|
||||||
|
|
||||||
numa.del(sr);
|
numa.del(sr);
|
||||||
|
|
||||||
@ -379,6 +379,13 @@ void HostShare::del(HostShareCapacity &sr)
|
|||||||
|
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void HostShare::revert_pci(HostShareCapacity &sr)
|
||||||
|
{
|
||||||
|
pci.revert(sr.pci);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
bool HostShare::test(HostShareCapacity& sr, string& error) const
|
bool HostShare::test(HostShareCapacity& sr, string& error) const
|
||||||
{
|
{
|
||||||
if ( !test_compute(sr.cpu, sr.mem, error) )
|
if ( !test_compute(sr.cpu, sr.mem, error) )
|
||||||
|
@ -181,13 +181,13 @@ void HostSharePCI::add(vector<VectorAttribute *> &devs, int vmid)
|
|||||||
/* ------------------------------------------------------------------------*/
|
/* ------------------------------------------------------------------------*/
|
||||||
/* ------------------------------------------------------------------------*/
|
/* ------------------------------------------------------------------------*/
|
||||||
|
|
||||||
void HostSharePCI::del(const vector<VectorAttribute *> &devs)
|
void HostSharePCI::del(const vector<VectorAttribute *> &devs, int vmid)
|
||||||
{
|
{
|
||||||
for (auto device : devs)
|
for (auto device : devs)
|
||||||
{
|
{
|
||||||
auto pci_it = pci_devices.find(device->vector_value("PREV_ADDRESS"));
|
auto pci_it = pci_devices.find(device->vector_value("PREV_ADDRESS"));
|
||||||
|
|
||||||
if (pci_it != pci_devices.end())
|
if (pci_it != pci_devices.end() && pci_it->second->vmid == vmid)
|
||||||
{
|
{
|
||||||
pci_it->second->vmid = -1;
|
pci_it->second->vmid = -1;
|
||||||
pci_it->second->attrs->replace("VMID",-1);
|
pci_it->second->attrs->replace("VMID",-1);
|
||||||
@ -199,7 +199,7 @@ void HostSharePCI::del(const vector<VectorAttribute *> &devs)
|
|||||||
|
|
||||||
pci_it = pci_devices.find(device->vector_value("ADDRESS"));
|
pci_it = pci_devices.find(device->vector_value("ADDRESS"));
|
||||||
|
|
||||||
if (pci_it != pci_devices.end())
|
if (pci_it != pci_devices.end() && pci_it->second->vmid == vmid)
|
||||||
{
|
{
|
||||||
pci_it->second->vmid = -1;
|
pci_it->second->vmid = -1;
|
||||||
pci_it->second->attrs->replace("VMID",-1);
|
pci_it->second->attrs->replace("VMID",-1);
|
||||||
@ -213,6 +213,44 @@ void HostSharePCI::del(const vector<VectorAttribute *> &devs)
|
|||||||
/* ------------------------------------------------------------------------*/
|
/* ------------------------------------------------------------------------*/
|
||||||
/* ------------------------------------------------------------------------*/
|
/* ------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void HostSharePCI::revert(vector<VectorAttribute *> &devs)
|
||||||
|
{
|
||||||
|
string address;
|
||||||
|
|
||||||
|
for (auto device : devs)
|
||||||
|
{
|
||||||
|
device->vector_value("PREV_ADDRESS", address);
|
||||||
|
|
||||||
|
if (!address.empty())
|
||||||
|
{
|
||||||
|
auto dev = pci_devices[address];
|
||||||
|
|
||||||
|
if (!dev)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
device->replace("DOMAIN", dev->attrs->vector_value("DOMAIN"));
|
||||||
|
device->replace("BUS", dev->attrs->vector_value("BUS"));
|
||||||
|
device->replace("SLOT", dev->attrs->vector_value("SLOT"));
|
||||||
|
device->replace("FUNCTION",dev->attrs->vector_value("FUNCTION"));
|
||||||
|
device->replace("ADDRESS", address);
|
||||||
|
device->remove("PREV_ADDRESS");
|
||||||
|
|
||||||
|
int node = -1;
|
||||||
|
if (dev->attrs->vector_value("NUMA_NODE", node)==0 && node !=-1)
|
||||||
|
{
|
||||||
|
device->replace("NUMA_NODE", node);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------------*/
|
||||||
|
/* ------------------------------------------------------------------------*/
|
||||||
|
|
||||||
void HostSharePCI::set_monitorization(Template& ht)
|
void HostSharePCI::set_monitorization(Template& ht)
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
|
@ -98,6 +98,15 @@ void LifeCycleManager::revert_migrate_after_failure(VirtualMachine* vm)
|
|||||||
{
|
{
|
||||||
hpool->del_capacity(vm->get_hid(), sr);
|
hpool->del_capacity(vm->get_hid(), sr);
|
||||||
|
|
||||||
|
if (!sr.pci.empty())
|
||||||
|
{
|
||||||
|
if (auto host = hpool->get(vm->get_previous_hid()))
|
||||||
|
{
|
||||||
|
// Revert PCI assignment in sr
|
||||||
|
host->revert_pci(sr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
vm->rollback_previous_vnc_port();
|
vm->rollback_previous_vnc_port();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user