mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-05 00:15:17 +00:00
[5437] Optimized lease search in INIT_REBOOT case.
This commit is contained in:
@@ -1799,21 +1799,50 @@ Dhcpv4Srv::assignLease(Dhcpv4Exchange& ex) {
|
|||||||
|
|
||||||
Lease4Ptr lease;
|
Lease4Ptr lease;
|
||||||
Subnet4Ptr original_subnet = subnet;
|
Subnet4Ptr original_subnet = subnet;
|
||||||
Subnet4Ptr s = original_subnet;
|
|
||||||
while (s) {
|
if (client_id) {
|
||||||
if (client_id) {
|
Lease4Collection leases_client_id = LeaseMgrFactory::instance().getLease4(*client_id);
|
||||||
lease = LeaseMgrFactory::instance().getLease4(*client_id, s->getID());
|
if (!leases_client_id.empty()) {
|
||||||
|
Subnet4Ptr s = original_subnet;
|
||||||
|
|
||||||
|
while (s) {
|
||||||
|
for (auto l = leases_client_id.begin(); l != leases_client_id.end(); ++l) {
|
||||||
|
if ((*l)->subnet_id_ == s->getID()) {
|
||||||
|
lease = *l;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lease) {
|
||||||
|
break;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
s = s->getNextSubnet(original_subnet, query->getClasses());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!lease && hwaddr) {
|
if (!lease && hwaddr) {
|
||||||
lease = LeaseMgrFactory::instance().getLease4(*hwaddr, s->getID());
|
Lease4Collection leases_hwaddr = LeaseMgrFactory::instance().getLease4(*hwaddr);
|
||||||
}
|
if (!leases_hwaddr.empty()) {
|
||||||
|
Subnet4Ptr s = original_subnet;
|
||||||
|
|
||||||
if (lease ) {
|
while (s) {
|
||||||
break;
|
for (auto l = leases_hwaddr.begin(); l != leases_hwaddr.end(); ++l) {
|
||||||
|
if ((*l)->subnet_id_ == s->getID()) {
|
||||||
|
lease = *l;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
if (lease) {
|
||||||
s = s->getNextSubnet(original_subnet, query->getClasses());
|
break;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
s = s->getNextSubnet(original_subnet, query->getClasses());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user