2
0
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:
Marcin Siodelski
2018-02-27 10:48:53 +01:00
parent c0b7b9b710
commit c34b44da74

View File

@@ -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());
}
}
} }
} }