BIND 10 #1634: Abstract pool/lease store: initial requirements list
BIND 10 Development
do-not-reply at isc.org
Wed Feb 8 18:52:35 UTC 2012
#1634: Abstract pool/lease store: initial requirements list
-------------------------------------+-------------------------------------
Reporter: tomek | Owner: UnAssigned
Type: task | Status: reviewing
Priority: major | Milestone: Sprint-
Component: dhcp | DHCP-20120220
Keywords: | Resolution:
Defect Severity: N/A | Sensitive: 0
Feature Depending on Ticket: | Sub-Project: DHCP
Add Hours to Ticket: 0 | Estimated Difficulty: 0
Internal?: 0 | Total Hours: 0
-------------------------------------+-------------------------------------
Comment (by stephen):
'''General Points'''[[BR]]
I suggest that the requirements be numbered - it makes it easier to refer
to them. Perhaps easiest would be to number each section then number the
requirements within a section.
'''General Requirements'''[[BR]]
''MUST allow lease manipulation on-line (during server operation)''[[BR]]
I think I would rephrase this as "MUST allow interrogation and
manipulation of the lease by external tools while the server is
operating". The same goes for the similar requirement on the pool.
Suggest that requirements related to the lease be grouped together, and
the same for the pool requirements: it makes it clearer.
''Number of pools MUST NOT be limited''[[BR]]
This is should be a separate requirement.
''MUST allow lease reservation for specific hosts (via hooks?)''[[BR]]
Remove the "(via hooks?)"; that is an implementation detail and is not a
requirement. The same goes for the requirement ''MUST allow pool
selection for new clients (via hooks)''.
''additional, flexible information MUST be stored along with lease (e.g.
subscriber-id, relay-id or other options. This may be used for RECONFIGURE
or requested over LEASEQUERY). Number of actual information MUST be
flexible as number of options may increase in the future.'' I suggest:
{{{
It must be possible to store DHCP options with the lease (e.g. subscriber-
id,
relay-id or other options).
* The number of options that can be associated with the lease MUST NOT be
limited.
* No restrictions must exist on the types of options and their data.
* It MUST be possible to store multiple options of the same type with a
particular lease.
}}}
The last requirement in this section: ''MAY allow view/update by existing
tools'' is not really an independent requirement - it is implicitly
covered by the lease/pool manipulation requirements.
'''Scalability Requirements'''[[BR]]
''MUST support option definitions''[[BR]]
I would put this as "MUST be able to store user-defined options".
''MUST allow multiple r/w access''[[BR]]
Clearer to put "MUST be able to support concurrent read/write access from
multiple processes".
''MUST scale from small (mostly sqlite) to medium (e.g. Postgres, MySQL,
Oracle) to large (e.g. cassandra, hadoop) databases''[[BR]]
I would put this as "MUST be able to work with different databases". It
is quite possible that an SQLite database would be too slow and not
support a large DHCP installation. But that is the fault of the database
and not a problem with the system.
'''Lease Information'''[[BR]]
Focus on the information to be stored, not the format. For example, a
valid design would be to separate information about the IPV4/IPV6 leases
into different tables. In that case the size of the address field in the
V4 table would be different from that in the V6 table. I suggest listing
the V4 information and V6 information separately - it is a design choice
if the information is combined in one table.
The following comments are about individual items but, unless the format
of the data is mandated by an RFC, just identify the data to be stored.
* client-id/client-id-length/hw-address: No need to worry about the length
of the client-id field. If this is stored in a string in a database, the
database will handle storing the size information.
* pool-id: There are no pointers in SQL true, but storing in one table the
ID of a row in another table is very common, so does not need a remark.
This would be better described as "Pool from which the lease was
assigned".
* string fqdn: if the fqdn is shared by multiple leases, it may be better
not to store this as a string - perhaps a pointer to a row in another
table. For this reason, just refer to it as fqdn.
* address fqdn_dns: I would by this as "Indication of DNS server where DNS
update was performed". It might not be an address - it could be a pointer
into a separate table that holds both the address of the server along with
the TSIG information needed to access it.
'''Pool Information'''[[BR]]
As noted above, for the requirements it will be clearer to separate out
the V4 pool requirements for the V6 pool requirements.
Not sure what start_lease/end_lease is - it seems to be separate things
for different address types.
Would we want to store comments with individual pool entries? They might
be useful when inspecting the database.
Do we want to store additional flags relating to pools, such as:
* Don't use before ''time''
* Don't use after ''time''
* Don't use
'''Comments on Questions'''[[BR]]
''Do we want to keep separate list of fixed-leases?''[[BR]]
This is a design issue, but I would say no. Treating them the same as
temporary leases - perhaps not even marking them as fixed, just setting
the lease end time to a thousand years in the future - would seem to be
the easiest for implementation purposes.
The need for name reservation is a requirement and should be explicitly
included in the requirements.
''Do we want IPv4 and IPv6 lease structures unified?''[[BR]]
This is a also design issue - the requirements should just state what
needs to be stored and modified.
''Do we want to have subnets and pools split?''[[BR]]
The current split does seem a bit confusing - I can specify a range of
addresses in a subnet, with subnet-specific parameters, or in a pool, with
pool-specific parameters. If we can get away from subnets, I would drop
them.
The more general question though is whether we want some form of pool
hierarchy with the ability to associate attributes with any level of the
hierarchy and with the resulting set of attributes for an address
determined from the attributes at its level and those above it.
''Do we want to store information in human readable form''[[BR]]
I would go for binary data first and then move to human-readable data if
we want. The reason here comes because human-readable data can be bad for
operations that we want to do, e.g. the string "10.25.0.0" sorts after
"10.192.0.0" even though numerically it comes before it. This could cause
problems if we need to sort retrieved data.
Alternatively, we could store both - use the binary data on input, but add
an operation to fill in the human readable fields on output.
''Network topology''[[BR]]
Go for the minimalist approach - just store the minimum needed, not the
whole topology.
''DNS Updates''[[BR]]
I suggested starting a new section in the requirements for DNS.
Comments from one customer indicate that the ability to clean up the DNS -
even if the responsibility for an address has been reassigned - is
important. We may only be able to do that in certain circumstances, but
if we can, we should.
--
Ticket URL: <http://bind10.isc.org/ticket/1634#comment:5>
BIND 10 Development <http://bind10.isc.org>
BIND 10 Development
More information about the bind10-tickets
mailing list