components.
[ISC-Bugs #20558]
+- During startup, when the server encounters a lease whose binding state is
+ FTS_BACKUP but whose pool has no configured failover peer, it will reset the
+ lease's binding state to FTS_FREE. This allows the leases to be reclaimed
+ by the server after a pool's configuration has changed from failover to
+ standalone. Prior to this such leases would remain stuck in the backup state
+ making them unavailable for assignment. This behavior is off by default.
+ It is enabled by defining CONVERT_BACKUP_TO_FREE in includes/site.h and
+ will occur whether or not the server is compiled for failover.
+ [ISC-Bugs #36960]
+
Changes since 4.1-ESV-R10rc1
- None
64 indicates that the first 64 bits are the subnet or on-link
prefix. */
#define DHCLIENT_DEFAULT_PREFIX_LEN 64
+
+/* Enable conversion at startup of leases from FTS_BACKUP to FTS_FREE
+ when either their pool has no configured failover peer or
+ FAILOVER_PROTOCOL is not enabled. This allows the leases to be
+ reclaimed by the server after a pool's configuration has changed
+ from failover to standalone. Prior to this such leases would remain
+ stuck in the backup state. */
+/* #define CONVERT_BACKUP_TO_FREE */
+
lease->ip_addr.len, MDL);
return ISC_R_SUCCESS;
}
+
+#if defined (CONVERT_BACKUP_TO_FREE)
+#if defined (FAILOVER_PROTOCOL)
+ /* If the lease is in FTS_BACKUP but there is no peer, then the
+ * pool must have been formerly configured for failover and
+ * is now configured as standalone. This means we need to
+ * move the lease to FTS_FREE to make it available. */
+ if ((lease->binding_state == FTS_BACKUP) &&
+ (lease->pool->failover_peer == NULL)) {
+#else
+ /* We aren't compiled for failover, so just move to FTS_FREE */
+ if (lease->binding_state == FTS_BACKUP) {
+#endif
+ lease->binding_state = FTS_FREE;
+ lease->next_binding_state = FTS_FREE;
+ }
+#endif
/* Put the lease on the right queue. Failure to queue is probably
* due to a bogus binding state. In such a case, we claim success,