BIND 10 #1648: Abstract pool/lease store: design
BIND 10 Development
do-not-reply at isc.org
Mon Jun 18 16:18:12 UTC 2012
#1648: Abstract pool/lease store: design
-------------------------------------+-------------------------------------
Reporter: tomek | Owner: UnAssigned
Type: task | Status: reviewing
Priority: | Milestone: Sprint-
medium | DHCP-20120703
Component: data | Resolution:
source | Sensitive: 0
Keywords: | Sub-Project: DHCP
Defect Severity: N/A | Estimated Difficulty: 0
Feature Depending on Ticket: | Total Hours: 0
Add Hours to Ticket: 0 |
Internal?: 0 |
-------------------------------------+-------------------------------------
Comment (by stephen):
Commment that DhcpPoolLeaseRequirements contains the requirements for the
pool/lease store, but DhcpPoolLeaseDesign appears to contain more
requirements - for the API - and not the design.
'''LEASES4 and LEASES6'''[[BR]]
Everything in this apart from available-leases or used-leases seems to be
related to a single lease. These two items are summary information about
all leases. Also, we just need to be able to obtain that information: we
don't necessarily need to store it. Whether it would be useful to
denormalise the database and maintain a counter, or whether it is better
to query the database everytime we need the numbers depends on the access
pattern.
A state transition table describing the lease lifetime (or a reference to
one) would be helpful.
I think the design should also enumerate the operations needed in this
part of the API, e.g. add, renew etc.
'''DDNS information in lease structures'''[[BR]]
I think there is a need to decouple the DDNS information from the leases.
We have talked about the idea of a separate DDNS process: if this is done,
the information it needs should be stored in one place (the DNS table),
not split across that and the lease table. When a lease expires, the code
should signal the DDNS process that the name should be removed.
So I would suggest that the lease information just contains a dns-id.
This is returned when a DNS entry is created, and is passed to the DDNS
code on a renewal or expiration. Also, as the fqdn may be shared by many
leases, in a normalised database it should be stored only once (probably
in one of the DDNS structutres): whether it should be stored (possibly
multiple times) in the lease structure would depend on access pattern.
'''SUBNET/SUBNET6'''[[BR]]
Should this structure store a first address/last address? Isn't that an
attribute of the pool?
Regarding parameters we need to make a decision as to how we view the
inheritance aspects as used in ISC DHCP. For example, if we add
parameters to a subnet declaration - and have a pool point to it and
override some parameters - then we have a form of inheritance. Is this
what we want?
Also related to inheritance is the question of whether the inheritance is
static or dynamic (i.e. if we change the subnet parameters, does the
change immediately propagate to leases that don't override them)?
The design should enumerate the operations needed.
As the pool structures store comments, the subnet structures should do so
as well.
'''POOL4'''[[BR]]
The type code for this pool is wrong.
I don't think we should use "lease" nomenclature here. To keep V4/V6
consistency, why not just used "first" and "last" for the first/last
addresses/prefixes?
'''DDNS'''[[BR]]
I agree with the idea that setup information should be stored in the
configuration database, but as suggested above, information about the data
added to the zone should be stored in the database.
I'm particularly thinking of the case where there is some problem in
adding or removing the DNS information. If the lease management component
of the software puts relevant DNS information in the database, the DDNS
component can run more or less independently. For example, on lease
expiration the lease could could remove the lease and signal the DDNS code
to remove the DNS entry. If there is some problem, the DNS code could
keep retrying independently of the rest of the DHCP code. (This deals with
the "DDNS clean up failure" point in the "Extra Features" section.)
'''HOST'''[[BR]]
Address information could be within a lease table. All we need is a
pointer to the lease information that could be NULL if the host is only
being used to store options.
'''Extra Features'''[[BR]]
I agree with the need for leases consistency. However:
Pool deletion: as the pool is stored in the configuration database, the
proposal here suggests that this would be modified by the code, which
seems to be against the current philosphy of BIND 10. Storing it in the
database would make this easier, but I agree it logically fits in the
configuration database.
Automatic pool deletion when all leases have expired would be better but,
for the reasons above, I think somewhat awkward to implement. I would
suggest:
* Allowing the current ISC DHCP feature of "(don't) use (after <date>)" in
the pool configuration statements. This forces the user to plan when
migrating between pools.
* Having the configuration verification code reject an incompatible
configuration change if leases are active in pools.
By the latter, I mean that if one lease is active, shrinking the pool to
contain just that address would be allowed: deleting it, or shrinking it
so that the address is excluded would not be allowed. (An interesting
question is whether we should allow configuration changes if the address
were moved to a different pool. In the short term, I would suggest not -
we could look at it again in the longer term.)
'''Questions'''[[BR]]
__Q4 (representation of data)__[[BR]]
I think binary form will be faster (although the actual decision should
not be made here - this is the API design).
In an SQL database, we could always provide views to convert the data to
human readable form (even SQLite3 allows a range of functions in a SELECT
statement).
__Q6 (fixed values or ranges for times)__[[BR]]
If it is easy to accept ranges, I suggest we allow ranges.
__Q8 (what is in the database and what is in the configuration
store)__[[BR]]
I think that the answer is that small amounts of data that is rarely
updated got ijnto the configuration store, the rest goes into the
database. In practice, this is likely to be subnets, pools, DDNS
configuration information (such as server, secret key etc.).
This is touched upon in the paragraph after the LEASES6 section. It might
be clearer if this paragraph were expanded and moved to the introduction
or into a separate section on data stores.
__Q9 (reserved leases)__[[BR]]
I think there is an argument for putting fixed leases in pools.
After all, when allocating a lease from a pool, we still need to check the
collection of existing leases allocated from the pool before assigning a
new address. Having the permanent lease be part of that collection would
not add much overhead. However, we would still need some global list to
locate the lease when the client for whom the lease is reserved connects.
__Q12 (specifying DDNS Information)__[[BR]]
Q13 has suggested that we need some form of parameter inheritance, of the
form:
{{{
global -> subnet -> pool
}}}
I suggest that the DDNS information be inheritable information, i.e.
defined global unless overridden at subnet or pool level.
__Q13 (inheritance hierarchy)__[[BR]]
The current ISC DHCP product allows classes and the specification of
parameters based on class. Is this something we want to natively include?
If not, should we allow the creation of class-based collections of
information that are unused by the native Kea code, but accessible to user
hook code?
--
Ticket URL: <http://bind10.isc.org/ticket/1648#comment:6>
BIND 10 Development <http://bind10.isc.org>
BIND 10 Development
More information about the bind10-tickets
mailing list