BIND 10 trac2850_2, updated. a1d81937904fd5f646f40c655975855aea5985d4 [2850] Make isWritable() not throw
BIND 10 source code commits
bind10-changes at lists.isc.org
Thu May 2 13:57:18 UTC 2013
The branch, trac2850_2 has been updated
via a1d81937904fd5f646f40c655975855aea5985d4 (commit)
via 26326a8f0780a2603c7ff7268998fbcce7bc5dbc (commit)
via 7a49270e4d0117b5432dfedec70e41a9c399745a (commit)
from c45efc1b129fc4b64d79040e0bec33f08658b170 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit a1d81937904fd5f646f40c655975855aea5985d4
Author: Mukund Sivaraman <muks at isc.org>
Date: Thu May 2 19:26:27 2013 +0530
[2850] Make isWritable() not throw
commit 26326a8f0780a2603c7ff7268998fbcce7bc5dbc
Author: Mukund Sivaraman <muks at isc.org>
Date: Thu May 2 19:17:56 2013 +0530
[2850] Update isWritable() API doc
commit 7a49270e4d0117b5432dfedec70e41a9c399745a
Author: Mukund Sivaraman <muks at isc.org>
Date: Thu May 2 14:28:02 2013 +0530
[2850] Remove empty ZoneTableSegment destructor
-----------------------------------------------------------------------
Summary of changes:
src/lib/datasrc/memory/zone_table_segment.h | 11 ++++++++---
src/lib/datasrc/memory/zone_table_segment_local.h | 3 ++-
.../datasrc/memory/zone_table_segment_mapped.cc | 10 +++++-----
src/lib/datasrc/memory/zone_table_segment_mapped.h | 14 +++++++-------
.../memory/zone_table_segment_mapped_unittest.cc | 20 ++++++++++++++------
5 files changed, 36 insertions(+), 22 deletions(-)
-----------------------------------------------------------------------
diff --git a/src/lib/datasrc/memory/zone_table_segment.h b/src/lib/datasrc/memory/zone_table_segment.h
index 8c55c1d..d62426f 100644
--- a/src/lib/datasrc/memory/zone_table_segment.h
+++ b/src/lib/datasrc/memory/zone_table_segment.h
@@ -107,9 +107,14 @@ public:
/// \brief Return true if the segment is writable.
///
/// The user of the zone table segment will load or update zones
- /// into the segment only for writable ones. "local" segments will
- /// always be writable. a "mapped" segment will be writable if a
- /// mapped memory segment in read-write mode has been set.
+ /// into the segment only for writable ones. The precise definition
+ /// of "writability" differs in different derived classes (see
+ /// derived class documentation). In general, however, the user
+ /// should only rely on this interface rather than assume a specific
+ /// definition for a specific type of segment.
+ ///
+ /// \throw None This method's implementations must be
+ /// exception-free.
virtual bool isWritable() const = 0;
/// \brief Create an instance depending on the memory segment model
diff --git a/src/lib/datasrc/memory/zone_table_segment_local.h b/src/lib/datasrc/memory/zone_table_segment_local.h
index 41463e2..7728c1a 100644
--- a/src/lib/datasrc/memory/zone_table_segment_local.h
+++ b/src/lib/datasrc/memory/zone_table_segment_local.h
@@ -55,7 +55,8 @@ public:
/// \brief Return true if the segment is writable.
///
- /// This implementation always returns true.
+ /// Local segments are always writable. This implementation always
+ /// returns true.
virtual bool isWritable() const {
return (true);
}
diff --git a/src/lib/datasrc/memory/zone_table_segment_mapped.cc b/src/lib/datasrc/memory/zone_table_segment_mapped.cc
index 6c50700..f28d1ee 100644
--- a/src/lib/datasrc/memory/zone_table_segment_mapped.cc
+++ b/src/lib/datasrc/memory/zone_table_segment_mapped.cc
@@ -31,9 +31,6 @@ ZoneTableSegmentMapped::ZoneTableSegmentMapped(const RRClass& rrclass) :
{
}
-ZoneTableSegmentMapped::~ZoneTableSegmentMapped() {
-}
-
void
ZoneTableSegmentMapped::reset(MemorySegmentOpenMode mode,
isc::data::ConstElementPtr params)
@@ -225,9 +222,12 @@ ZoneTableSegmentMapped::getMemorySegment() {
bool
ZoneTableSegmentMapped::isWritable() const {
if (!mem_sgmt_) {
- isc_throw(isc::Unexpected,
- "isWritable() called without calling reset() first");
+ // If reset() was never performed for this segment, or if the
+ // most recent reset() had failed, then the segment is not
+ // writable.
+ return (false);
}
+
return ((current_mode_ == CREATE) || (current_mode_ == READ_WRITE));
}
diff --git a/src/lib/datasrc/memory/zone_table_segment_mapped.h b/src/lib/datasrc/memory/zone_table_segment_mapped.h
index 5f15f28..d73528b 100644
--- a/src/lib/datasrc/memory/zone_table_segment_mapped.h
+++ b/src/lib/datasrc/memory/zone_table_segment_mapped.h
@@ -33,6 +33,7 @@ class ZoneTableSegmentMapped : public ZoneTableSegment {
// This is so that ZoneTableSegmentMapped can be instantiated from
// ZoneTableSegment::create().
friend class ZoneTableSegment;
+
protected:
/// \brief Protected constructor
///
@@ -40,10 +41,8 @@ protected:
/// (\c ZoneTableSegment::create()), so this constructor is
/// protected.
ZoneTableSegmentMapped(const isc::dns::RRClass& rrclass);
-public:
- /// \brief Destructor
- virtual ~ZoneTableSegmentMapped();
+public:
/// \brief Return the ZoneTableHeader for the mapped zone table
/// segment implementation.
///
@@ -64,11 +63,12 @@ public:
/// successful \c reset() call first.
virtual isc::util::MemorySegment& getMemorySegment();
- /// \brief Return true if the segment is writable. For read-only
- /// segments, false is returned.
+ /// \brief Returns if the segment is writable.
///
- /// \throws isc::Unexpected if this method is called without a
- /// successful \c reset() call first.
+ /// Segments successfully opened in CREATE or READ_WRITE modes are
+ /// writable. Segments opened in READ_ONLY mode are not writable.
+ /// If there was a failure in \c reset(), the segment is not
+ /// writable.
virtual bool isWritable() const;
/// \brief The mode using which to open a ZoneTableSegment around a
diff --git a/src/lib/datasrc/tests/memory/zone_table_segment_mapped_unittest.cc b/src/lib/datasrc/tests/memory/zone_table_segment_mapped_unittest.cc
index a5942a6..c26b421 100644
--- a/src/lib/datasrc/tests/memory/zone_table_segment_mapped_unittest.cc
+++ b/src/lib/datasrc/tests/memory/zone_table_segment_mapped_unittest.cc
@@ -66,8 +66,9 @@ TEST_F(ZoneTableSegmentMappedTest, getMemorySegmentUninitialized) {
}
TEST_F(ZoneTableSegmentMappedTest, isWritableUninitialized) {
- // This should throw as we haven't called reset() yet.
- EXPECT_THROW(ztable_segment_->isWritable(), isc::Unexpected);
+ // isWritable() must return false by default, when the segment has
+ // not been reset() yet.
+ EXPECT_FALSE(ztable_segment_->isWritable());
}
ZoneData*
@@ -104,7 +105,10 @@ TEST_F(ZoneTableSegmentMappedTest, resetBadConfig) {
// The following should still throw, unaffected by the failed opens.
EXPECT_THROW(ztable_segment_->getHeader(), isc::Unexpected);
EXPECT_THROW(ztable_segment_->getMemorySegment(), isc::Unexpected);
- EXPECT_THROW(ztable_segment_->isWritable(), isc::Unexpected);
+
+ // isWritable() must still return false, because the segment has not
+ // been successfully reset() yet.
+ EXPECT_FALSE(ztable_segment_->isWritable());
}
TEST_F(ZoneTableSegmentMappedTest, reset) {
@@ -118,7 +122,10 @@ TEST_F(ZoneTableSegmentMappedTest, reset) {
// The following should still throw, unaffected by the failed open.
EXPECT_THROW(ztable_segment_->getHeader(), isc::Unexpected);
EXPECT_THROW(ztable_segment_->getMemorySegment(), isc::Unexpected);
- EXPECT_THROW(ztable_segment_->isWritable(), isc::Unexpected);
+
+ // isWritable() must still return false, because the segment has not
+ // been successfully reset() yet.
+ EXPECT_FALSE(ztable_segment_->isWritable());
// READ_WRITE mode must create the mapped file if it doesn't exist
// (and must not result in an exception).
@@ -130,7 +137,6 @@ TEST_F(ZoneTableSegmentMappedTest, reset) {
// The following method calls should no longer throw:
EXPECT_NO_THROW(ztable_segment_->getHeader());
EXPECT_NO_THROW(ztable_segment_->getMemorySegment());
- EXPECT_NO_THROW(ztable_segment_->isWritable());
// Let's try to re-open the mapped file in READ_ONLY mode. It should
// not fail now.
@@ -154,7 +160,9 @@ TEST_F(ZoneTableSegmentMappedTest, reset) {
// The following should throw now.
EXPECT_THROW(ztable_segment_->getHeader(), isc::Unexpected);
EXPECT_THROW(ztable_segment_->getMemorySegment(), isc::Unexpected);
- EXPECT_THROW(ztable_segment_->isWritable(), isc::Unexpected);
+
+ // isWritable() must return false, because the last reset() failed.
+ EXPECT_FALSE(ztable_segment_->isWritable());
// READ_WRITE with an existing map file ought to work too. This
// would use existing named addresses.
More information about the bind10-changes
mailing list