/// @brief Creates the IPv4 lease statistical data result set
///
- /// The result is populated by iterating over the IPv4 leases in storage,
- /// in ascending order by subnet ID, accumulating the lease state counts.
+ /// The result set is populated by iterating over the IPv4 leases in
+ /// storage, in ascending order by address, accumulating the lease state
+ /// counts per subnet. Note that walking the leases by address should
+ /// inherently group them by subnet, and while this does not gaurantee
+ /// ascending order of subnet id, it should be sufficient to accumulate
+ /// state counts per subnet. This avoids introducing an additional
+ /// subnet_id index.
/// At the completion of all entries for a given subnet, the counts are
- /// used to create AddressStatsRow4 instances which are appended to an
+ /// used to create LeaseStatsRow instances which are appended to an
/// internal vector. The process results in a vector containing one entry
/// per state per subnet.
///
/// - Lease::STATE_DEFAULT (i.e. assigned)
/// - Lease::STATE_DECLINED
void start() {
- // Get the subnet_id index
- const Lease4StorageSubnetIdIndex& idx
- = storage4_.get<SubnetIdIndexTag>();
+ const Lease4StorageAddressIndex& idx
+ = storage4_.get<AddressIndexTag>();
// Iterate over the leases in order by subnet, accumulating per
// subnet counts for each state of interest. As we finish each
SubnetID cur_id = 0;
int64_t assigned = 0;
int64_t declined = 0;
- for(Lease4StorageSubnetIdIndex::const_iterator lease = idx.begin();
+ for(Lease4StorageAddressIndex::const_iterator lease = idx.begin();
lease != idx.end(); ++lease) {
-
// If we've hit the next subnet, add rows for the current subnet
// and wipe the accumulators
- if ((*lease)->subnet_id_ > cur_id) {
+ if ((*lease)->subnet_id_ != cur_id) {
if (cur_id > 0) {
rows_.push_back(LeaseStatsRow(cur_id, Lease::STATE_DEFAULT,
assigned));
/// @brief Creates the IPv6 lease statistical data result set
///
- /// The result is populated by iterating over the IPv6 leases in storage,
- /// in ascending order by subnet ID, accumulating the lease state counts
- /// per lease type. At the completion of all entries for a given subnet,
- /// the counts are used to create AddressStatsRow5 instances which are
- /// appended to an internal vector. The process results in a vector
- /// containing one entry per state per lease type per subnet.
+ /// The result set is populated by iterating over the IPv6 leases in
+ /// storage, in ascending order by address, accumulating the lease state
+ /// counts per subnet. Note that walking the leases by address should
+ /// inherently group them by subnet, and while this does not gaurantee
+ /// ascending order of subnet id, it should be sufficient to accumulate
+ /// state counts per subnet. This avoids introducing an additional
+ /// subnet_id index.
+ /// At the completion of all entries for a given subnet, the counts
+ /// are used to create LeaseStatsRow instances which are appended to an
+ /// internal vector. The process results in a vector containing one entry
+ /// per state per lease type per subnet.
///
/// Currently the states counted are:
///
/// - Lease::STATE_DECLINED
virtual void start() {
// Get the subnet_id index
- const Lease6StorageSubnetIdIndex& idx
- = storage6_.get<SubnetIdIndexTag>();
+ const Lease6StorageAddressIndex& idx
+ = storage6_.get<AddressIndexTag>();
// Iterate over the leases in order by subnet, accumulating per
// subnet counts for each state of interest. As we finish each
int64_t declined = 0;
int64_t assigned_pds = 0;
- for(Lease6StorageSubnetIdIndex::const_iterator lease = idx.begin();
+ for(Lease6StorageAddressIndex::const_iterator lease = idx.begin();
lease != idx.end(); ++lease) {
// If we've hit the next subnet, add rows for the current subnet
// and wipe the accumulators
- if ((*lease)->subnet_id_ > cur_id) {
+ if ((*lease)->subnet_id_ != cur_id) {
if (cur_id > 0) {
rows_.push_back(LeaseStatsRow(cur_id, Lease::TYPE_NA,
Lease::STATE_DEFAULT,
-// Copyright (C) 2016 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2015-2016 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
/// @brief Tag for indexes by address.
struct AddressIndexTag { };
-/// @brief Tag for indexes by subnet id.
-struct SubnetIdIndexTag { };
-
/// @brief Tag for indexes by DUID, IAID, lease type tuple.
struct DuidIaidTypeIndexTag { };
boost::multi_index::const_mem_fun<Lease, int64_t,
&Lease::getExpirationTime>
>
- >,
-
- boost::multi_index::ordered_non_unique<
- boost::multi_index::tag<SubnetIdIndexTag>,
- // The subnet id is held in the subnet_id_ member of Lease6
- // class. Note that the subnet_id_ is defined in the base
- // class (Lease) so we have to point to this class rather
- // than derived class: Lease6.
- boost::multi_index::member<Lease, SubnetID, &Lease::subnet_id_>
>
-
>
> Lease6Storage; // Specify the type name of this container.
boost::multi_index::member<Lease, isc::asiolink::IOAddress, &Lease::addr_>
>,
- boost::multi_index::ordered_non_unique<
- boost::multi_index::tag<SubnetIdIndexTag>,
- // The subnet id is held in the subnet_id_ member of Lease4
- // class. Note that the subnet_id_ is defined in the base
- // class (Lease) so we have to point to this class rather
- // than derived class: Lease4.
- boost::multi_index::member<Lease, SubnetID, &Lease::subnet_id_>
- >,
-
// Specification of the second index starts here.
boost::multi_index::ordered_non_unique<
boost::multi_index::tag<HWAddressSubnetIdIndexTag>,
/// @brief DHCPv6 lease storage index by expiration time.
typedef Lease6Storage::index<ExpirationIndexTag>::type Lease6StorageExpirationIndex;
-/// @brief DHCPv6 lease storage index by subnet id.
-typedef Lease6Storage::index<SubnetIdIndexTag>::type Lease6StorageSubnetIdIndex;
-
/// @brief DHCPv4 lease storage index by address.
typedef Lease4Storage::index<AddressIndexTag>::type Lease4StorageAddressIndex;
-/// @brief DHCPv4 lease storage index by subnet id.
-typedef Lease4Storage::index<SubnetIdIndexTag>::type Lease4StorageSubnetIdIndex;
-
/// @brief DHCPv4 lease storage index by exiration time.
typedef Lease4Storage::index<ExpirationIndexTag>::type Lease4StorageExpirationIndex;