[svn] commit: r2596 - in /branches/trac232/src: bin/auth/auth_srv.cc lib/datasrc/data_source.cc lib/datasrc/data_source.h lib/datasrc/sqlite3_datasrc.cc lib/datasrc/sqlite3_datasrc.h lib/datasrc/tests/sqlite3_unittest.cc

BIND 10 source code commits bind10-changes at lists.isc.org
Thu Jul 22 15:50:57 UTC 2010


Author: jelte
Date: Thu Jul 22 15:50:57 2010
New Revision: 2596

Log:
transaction-specific return codes

Modified:
    branches/trac232/src/bin/auth/auth_srv.cc
    branches/trac232/src/lib/datasrc/data_source.cc
    branches/trac232/src/lib/datasrc/data_source.h
    branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc
    branches/trac232/src/lib/datasrc/sqlite3_datasrc.h
    branches/trac232/src/lib/datasrc/tests/sqlite3_unittest.cc

Modified: branches/trac232/src/bin/auth/auth_srv.cc
==============================================================================
--- branches/trac232/src/bin/auth/auth_srv.cc (original)
+++ branches/trac232/src/bin/auth/auth_srv.cc Thu Jul 22 15:50:57 2010
@@ -365,18 +365,18 @@
         RdataPtr rdata = createRdata(rrset->getType(), rrset->getClass(), args->get("rr_rdata")->stringValue());
         rrset->addRdata(rdata);
         DataSrcTransaction transaction(datasource, zone_name, RRClass::IN());
-        DataSrc::Result r = datasource->startTransaction(transaction);
-        if (r != DataSrc::SUCCESS) {
+        DataSrc::TransactionResult r = datasource->startTransaction(transaction);
+        if (r != DataSrc::T_SUCCESS) {
             return isc::config::createAnswer(r, "error starting transaction");
         }
         r = datasource->addRRset(transaction, rrset);
         std::cout << "[XX] RESULT: " << r << std::endl;
-        if (r != DataSrc::SUCCESS) {
+        if (r != DataSrc::T_SUCCESS) {
             // log? rollback immediately?
         }
         r = datasource->commitTransaction(transaction);
         std::cout << "[XX] RESULT rollback: " << r << std::endl;
-        if (r == DataSrc::SUCCESS) {
+        if (r == DataSrc::T_SUCCESS) {
             return isc::config::createAnswer();
         } else {
             return isc::config::createAnswer(r, "error");
@@ -415,18 +415,18 @@
             }
         }
         DataSrcTransaction transaction(datasource, zone_name, RRClass::IN());
-        DataSrc::Result r = datasource->startTransaction(transaction);
-        if (r != DataSrc::SUCCESS) {
+        DataSrc::TransactionResult r = datasource->startTransaction(transaction);
+        if (r != DataSrc::T_SUCCESS) {
             return isc::config::createAnswer(r, "error starting transaction");
         }
         r = datasource->delRRset(transaction, rrset);
         std::cout << "[XX] RESULT: " << r << std::endl;
-        if (r != DataSrc::SUCCESS) {
+        if (r != DataSrc::T_SUCCESS) {
             // log? rollback immediately?
         }
         r = datasource->commitTransaction(transaction);
         std::cout << "[XX] RESULT rollback: " << r << std::endl;
-        if (r == DataSrc::SUCCESS) {
+        if (r == DataSrc::T_SUCCESS) {
             return isc::config::createAnswer();
         } else {
             return isc::config::createAnswer(r, "error");
@@ -502,18 +502,18 @@
         // hmz can't we assign RRTypes?
         if (datasource) {
             DataSrcTransaction transaction(datasource, zone_name, RRClass::IN());
-            DataSrc::Result r = datasource->startTransaction(transaction);
-            if (r != DataSrc::SUCCESS) {
+            DataSrc::TransactionResult r = datasource->startTransaction(transaction);
+            if (r != DataSrc::T_SUCCESS) {
                 return isc::config::createAnswer(r, "error starting transaction");
             }
             r = datasource->replaceZone(transaction, rrsetlist);
             std::cout << "[XX] RESULT: " << r << std::endl;
-            if (r != DataSrc::SUCCESS) {
+            if (r != DataSrc::T_SUCCESS) {
                 // log? rollback immediately?
             }
             r = datasource->commitTransaction(transaction);
             std::cout << "[XX] RESULT rollback: " << r << std::endl;
-            if (r == DataSrc::SUCCESS) {
+            if (r == DataSrc::T_SUCCESS) {
                 return isc::config::createAnswer();
             } else {
                 return isc::config::createAnswer(r, "error");
@@ -589,15 +589,15 @@
         DataSrc* datasource = const_cast<DataSrc*>(match.getDataSource());
         if (datasource) {
             DataSrcTransaction transaction(datasource, zone_name, RRClass::IN());
-            DataSrc::Result result = datasource->startTransaction(transaction);
-            if (result != DataSrc::SUCCESS) {
+            DataSrc::TransactionResult result = datasource->startTransaction(transaction);
+            if (result != DataSrc::T_SUCCESS) {
                 return isc::config::createAnswer(result, "error starting transaction");
             }
 
-            result = datasource->doIXFR(transaction,
-                                        m.beginSection(Section::ANSWER()),
-                                        m.endSection(Section::ANSWER()));
-            if (result != DataSrc::SUCCESS) {
+            DataSrc::Result ixfr_result = datasource->doIXFR(transaction,
+                                           m.beginSection(Section::ANSWER()),
+                                           m.endSection(Section::ANSWER()));
+            if (ixfr_result != DataSrc::SUCCESS) {
                 return isc::config::createAnswer(result, "Error in doIXFR");
             } else {
                 datasource->commitTransaction(transaction);

Modified: branches/trac232/src/lib/datasrc/data_source.cc
==============================================================================
--- branches/trac232/src/lib/datasrc/data_source.cc (original)
+++ branches/trac232/src/lib/datasrc/data_source.cc Thu Jul 22 15:50:57 2010
@@ -1249,49 +1249,49 @@
     return (NOT_IMPLEMENTED);
 }
 
-DataSrc::Result
+DataSrc::TransactionResult
 DataSrc::startTransaction(DataSrcTransaction& transaction UNUSED_PARAM)
 {
-    return (NOT_IMPLEMENTED);
-}
-
-DataSrc::Result
+    return (T_NOT_IMPLEMENTED);
+}
+
+DataSrc::TransactionResult
 DataSrc::commitTransaction(DataSrcTransaction& transaction UNUSED_PARAM)
 {
-    return (NOT_IMPLEMENTED);
-}
-
-DataSrc::Result
+    return (T_NOT_IMPLEMENTED);
+}
+
+DataSrc::TransactionResult
 DataSrc::rollbackTransaction(DataSrcTransaction& transaction UNUSED_PARAM)
 {
-    return (NOT_IMPLEMENTED);
-}
-
-DataSrc::Result
+    return (T_NOT_IMPLEMENTED);
+}
+
+DataSrc::TransactionResult
 DataSrc::addRRset(DataSrcTransaction& transaction UNUSED_PARAM,
                   const isc::dns::ConstRRsetPtr rrset UNUSED_PARAM)
 {
-    return (NOT_IMPLEMENTED);
-}
-
-DataSrc::Result
+    return (T_NOT_IMPLEMENTED);
+}
+
+DataSrc::TransactionResult
 DataSrc::delRRset(DataSrcTransaction& transaction UNUSED_PARAM,
                   isc::dns::ConstRRsetPtr rrset UNUSED_PARAM)
 {
-    return (NOT_IMPLEMENTED);
-}
-
-DataSrc::Result
+    return (T_NOT_IMPLEMENTED);
+}
+
+DataSrc::TransactionResult
 DataSrc::delZone(DataSrcTransaction& transaction UNUSED_PARAM)
 {
-    return (NOT_IMPLEMENTED);
-}
-
-DataSrc::Result
+    return (T_NOT_IMPLEMENTED);
+}
+
+DataSrc::TransactionResult
 DataSrc::replaceZone(DataSrcTransaction& transaction UNUSED_PARAM,
                      const RRsetList& UNUSED_PARAM)
 {
-    return (NOT_IMPLEMENTED);
+    return (T_NOT_IMPLEMENTED);
 }
 
 static bool
@@ -1431,10 +1431,10 @@
             return (Rcode::SERVFAIL());
         } else {
             // TODO: no serial arithmetic yet?
-            if (delRRset(transaction, *(soa_list.begin())) != SUCCESS) {
+            if (delRRset(transaction, *(soa_list.begin())) != T_SUCCESS) {
                 return (Rcode::SERVFAIL());
             }
-            if (addRRset(transaction, update) != SUCCESS) {
+            if (addRRset(transaction, update) != T_SUCCESS) {
                 return (Rcode::SERVFAIL());
             }
         }
@@ -1444,11 +1444,11 @@
     } else {
         if (update->getClass() == RRClass::ANY() ||
             update->getClass() == RRClass::NONE()) {
-            if (delRRset(transaction, update) != SUCCESS) {
+            if (delRRset(transaction, update) != T_SUCCESS) {
                 return (Rcode::SERVFAIL());
             }
         } else {
-            if (addRRset(transaction, update) != SUCCESS) {
+            if (addRRset(transaction, update) != T_SUCCESS) {
                 return (Rcode::SERVFAIL());
             }
         }
@@ -1652,50 +1652,51 @@
     }
 }
 
-DataSrc::Result
+DataSrc::TransactionResult
 MetaDataSrc::startTransaction(DataSrcTransaction& transaction UNUSED_PARAM)
 {
-    return (NOT_IMPLEMENTED);
-}
-
-DataSrc::Result
+    
+    return (T_NOT_IMPLEMENTED);
+}
+
+DataSrc::TransactionResult
 MetaDataSrc::commitTransaction(DataSrcTransaction& transaction UNUSED_PARAM)
 {
-    return (NOT_IMPLEMENTED);
-}
-
-DataSrc::Result
+    return (T_NOT_IMPLEMENTED);
+}
+
+DataSrc::TransactionResult
 MetaDataSrc::rollbackTransaction(DataSrcTransaction& transaction UNUSED_PARAM)
 {
-    return (NOT_IMPLEMENTED);
-}
-
-DataSrc::Result
+    return (T_NOT_IMPLEMENTED);
+}
+
+DataSrc::TransactionResult
 MetaDataSrc::addRRset(DataSrcTransaction& transaction UNUSED_PARAM,
                       isc::dns::ConstRRsetPtr rrset UNUSED_PARAM)
 {
-    return (NOT_IMPLEMENTED);
-}
-
-DataSrc::Result
+    return (T_NOT_IMPLEMENTED);
+}
+
+DataSrc::TransactionResult
 MetaDataSrc::delRRset(DataSrcTransaction& transaction UNUSED_PARAM,
                       isc::dns::ConstRRsetPtr rrset UNUSED_PARAM)
 {
-    return (NOT_IMPLEMENTED);
-}
-
-DataSrc::Result
+    return (T_NOT_IMPLEMENTED);
+}
+
+DataSrc::TransactionResult
 MetaDataSrc::delZone(DataSrcTransaction& transaction UNUSED_PARAM)
 {
-    return (NOT_IMPLEMENTED);
-}
-
-DataSrc::Result
+    return (T_NOT_IMPLEMENTED);
+}
+
+DataSrc::TransactionResult
 MetaDataSrc::replaceZone(DataSrcTransaction& transaction UNUSED_PARAM,
                          const isc::dns::RRsetList& rrset_list UNUSED_PARAM)
 {
-    return (NOT_IMPLEMENTED);
-}
-
-}
-}
+    return (T_NOT_IMPLEMENTED);
+}
+
+}
+}

Modified: branches/trac232/src/lib/datasrc/data_source.h
==============================================================================
--- branches/trac232/src/lib/datasrc/data_source.h (original)
+++ branches/trac232/src/lib/datasrc/data_source.h Thu Jul 22 15:50:57 2010
@@ -82,6 +82,15 @@
         SUCCESS,
         ERROR,
         NOT_IMPLEMENTED
+    };
+
+    enum TransactionResult {
+        T_SUCCESS,              // ok
+        T_ERROR,                // general (code) error
+        T_DB_ERROR,             // (write) error in the backend
+        T_NOT_IMPLEMENTED,      // write functions not implemented
+        T_NO_SUCH_ZONE,         // zone not known to this data source
+        T_NO_SUCH_DATA          // attempt to delete nonexistant data
     };
 
     // These flags indicate conditions encountered while processing a query.
@@ -271,13 +280,13 @@
 
     // For datasource that support writing, overwrite these
     // methods. By default they will return NOT_IMPLEMENTED.
-    virtual Result addRRset(DataSrcTransaction&  transaction,
-                            isc::dns::ConstRRsetPtr rrset);
-    virtual Result delRRset(DataSrcTransaction&  transaction,
-                            isc::dns::ConstRRsetPtr rrset);
-    virtual Result delZone(DataSrcTransaction&  transaction);
-    virtual Result replaceZone(DataSrcTransaction&  transaction,
-                               const isc::dns::RRsetList& rrsets);
+    virtual TransactionResult addRRset(DataSrcTransaction&  transaction,
+                                       isc::dns::ConstRRsetPtr rrset);
+    virtual TransactionResult delRRset(DataSrcTransaction&  transaction,
+                                       isc::dns::ConstRRsetPtr rrset);
+    virtual TransactionResult delZone(DataSrcTransaction&  transaction);
+    virtual TransactionResult replaceZone(DataSrcTransaction&  transaction,
+                                          const isc::dns::RRsetList& rrsets);
 
     // The following methods are used by the 'high-level' ones below
     //
@@ -292,9 +301,9 @@
 
     // General High-level functions. If your data source can make use
     // of backend-specific shortcuts, you can overwrite these methods
-    virtual Result startTransaction(DataSrcTransaction&  transaction);
-    virtual Result commitTransaction(DataSrcTransaction&  transaction);
-    virtual Result rollbackTransaction(DataSrcTransaction&  transaction);
+    virtual TransactionResult startTransaction(DataSrcTransaction&  transaction);
+    virtual TransactionResult commitTransaction(DataSrcTransaction&  transaction);
+    virtual TransactionResult rollbackTransaction(DataSrcTransaction&  transaction);
     virtual Result doIXFR(DataSrcTransaction&  transaction,
                           const isc::dns::RRsetIterator start,
                           const isc::dns::RRsetIterator end);
@@ -373,17 +382,17 @@
     // Writable data sources
     //
     // see comments at DataSrc
-    virtual Result startTransaction(DataSrcTransaction&  transaction);
-    virtual Result commitTransaction(DataSrcTransaction&  transaction);
-    virtual Result rollbackTransaction(DataSrcTransaction&  transaction);
+    virtual TransactionResult startTransaction(DataSrcTransaction&  transaction);
+    virtual TransactionResult commitTransaction(DataSrcTransaction&  transaction);
+    virtual TransactionResult rollbackTransaction(DataSrcTransaction&  transaction);
     
-    virtual Result addRRset(DataSrcTransaction&  transaction,
-                            isc::dns::ConstRRsetPtr rrset);
-    virtual Result delRRset(DataSrcTransaction&  transaction,
-                            isc::dns::ConstRRsetPtr rrset);
-    virtual Result delZone(DataSrcTransaction&  transaction);
-    virtual Result replaceZone(DataSrcTransaction&  transaction,
-                               const isc::dns::RRsetList& rrsets);
+    virtual TransactionResult addRRset(DataSrcTransaction&  transaction,
+                                       isc::dns::ConstRRsetPtr rrset);
+    virtual TransactionResult delRRset(DataSrcTransaction&  transaction,
+                                       isc::dns::ConstRRsetPtr rrset);
+    virtual TransactionResult delZone(DataSrcTransaction&  transaction);
+    virtual TransactionResult replaceZone(DataSrcTransaction&  transaction,
+                                          const isc::dns::RRsetList& rrsets);
     // end of writable data sources part
 private:
     std::vector<ConstDataSrcPtr> data_sources;

Modified: branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc
==============================================================================
--- branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc (original)
+++ branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc Thu Jul 22 15:50:57 2010
@@ -774,63 +774,63 @@
     return (SUCCESS);
 }
 
-DataSrc::Result
+DataSrc::TransactionResult
 Sqlite3DataSrc::startTransaction(DataSrcTransaction& transaction)
 {
     if (transaction.getState() != DataSrcTransaction::INIT) {
-        return DataSrc::ERROR;
+        return DataSrc::T_ERROR;
     }
     int result = sqlite3_exec(dbparameters->db_, w_start_transaction_str, NULL, NULL, NULL);
     if (result == SQLITE_OK) {
         int zone_id = hasExactZone(transaction.getZoneName().toText().c_str());
         if (zone_id <= 0) {
-            return DataSrc::ERROR;
+            return DataSrc::T_NO_SUCH_ZONE;
         }
         isc::data::ElementPtr trans_data = isc::data::Element::createMap();
         trans_data->set("zone_id", isc::data::Element::create(zone_id));
         transaction.setData(trans_data);
         transaction.setState(DataSrcTransaction::RUNNING);
-        return DataSrc::SUCCESS;
-    } else {
-        return DataSrc::ERROR;
-    }
-}
-
-DataSrc::Result
+        return DataSrc::T_SUCCESS;
+    } else {
+        return DataSrc::T_DB_ERROR;
+    }
+}
+
+DataSrc::TransactionResult
 Sqlite3DataSrc::commitTransaction(DataSrcTransaction& transaction UNUSED_PARAM)
 {
     if (transaction.getState() != DataSrcTransaction::RUNNING) {
-        return DataSrc::ERROR;
+        return DataSrc::T_ERROR;
     }
 
     int result = sqlite3_exec(dbparameters->db_, w_commit_transaction_str, NULL, NULL, NULL);
     
     if (result == SQLITE_OK) {
         transaction.setState(DataSrcTransaction::DONE);
-        return DataSrc::SUCCESS;
-    } else {
-        return DataSrc::ERROR;
-    }
-}
-
-DataSrc::Result
+        return DataSrc::T_SUCCESS;
+    } else {
+        return DataSrc::T_DB_ERROR;
+    }
+}
+
+DataSrc::TransactionResult
 Sqlite3DataSrc::rollbackTransaction(DataSrcTransaction& transaction UNUSED_PARAM)
 {
     if (transaction.getState() != DataSrcTransaction::RUNNING) {
-        return DataSrc::ERROR;
+        return DataSrc::T_ERROR;
     }
     int result = sqlite3_exec(dbparameters->db_, w_rollback_transaction_str, NULL, NULL, NULL);
 
     if (result == SQLITE_OK) {
         transaction.setState(DataSrcTransaction::DONE);
-        return DataSrc::SUCCESS;
-    } else {
-        return DataSrc::ERROR;
-    }
-}
-
-
-DataSrc::Result
+        return DataSrc::T_SUCCESS;
+    } else {
+        return DataSrc::T_DB_ERROR;
+    }
+}
+
+
+DataSrc::TransactionResult
 Sqlite3DataSrc::addRR(int zone_id,
                       const isc::dns::Name& name,
                       const isc::dns::RRType& rrtype,
@@ -892,22 +892,22 @@
     sqlite3_reset(query);
 
     if (result == SQLITE_DONE) {
-        return DataSrc::SUCCESS;
+        return DataSrc::T_SUCCESS;
     } else {
         std::cout << "[XX] sqlite3 add_rr error: " << result << std::endl;;
         std::cout << "[XX] " << sqlite3_errmsg(dbparameters->db_) << std::endl;
 
-        return DataSrc::ERROR;
-    }
-
-}
-
-DataSrc::Result
+        return DataSrc::T_DB_ERROR;
+    }
+
+}
+
+DataSrc::TransactionResult
 Sqlite3DataSrc::addRRset(DataSrcTransaction& transaction,
                          isc::dns::ConstRRsetPtr rrset)
 {
     if (transaction.getState() != DataSrcTransaction::RUNNING) {
-        return DataSrc::ERROR;
+        return DataSrc::T_ERROR;
     }
     std::cout << "[XX] addRR at sqlite3" << std::endl;
     int zone_id = transaction.getData()->get("zone_id")->intValue();
@@ -917,10 +917,10 @@
     rdp->first();
     std::cout << "[XX] RDATA: " << rdp->getCurrent().toText() << std::endl;
     std::cout << "[XX] RDATA: " << rdp->getCurrent().toText().c_str() << std::endl;
-    DataSrc::Result result = DataSrc::SUCCESS;
+    DataSrc::TransactionResult result = DataSrc::T_SUCCESS;
     do {
         result = addRR(zone_id, rrset->getName(), rrset->getType(), rrset->getTTL(), rdp->getCurrent());
-        if (result != DataSrc::SUCCESS) {
+        if (result != DataSrc::T_SUCCESS) {
             return result;
         } else {
             rdp->next();
@@ -929,7 +929,7 @@
     return result;
 }
 
-DataSrc::Result
+DataSrc::TransactionResult
 Sqlite3DataSrc::delRR(int zone_id,
                       const isc::dns::Name& name,
                       const isc::dns::RRType& rrtype)
@@ -980,19 +980,19 @@
 
     if (result == SQLITE_DONE) {
         if (deleted_rows > 0) {
-            return DataSrc::SUCCESS;
+            return DataSrc::T_SUCCESS;
         } else {
-            return DataSrc::ERROR;
+            return DataSrc::T_NO_SUCH_DATA;
         }
     } else {
         std::cout << "[XX] sqlite3 del_rr error: " << result << std::endl;;
         std::cout << "[XX] " << sqlite3_errmsg(dbparameters->db_) << std::endl;
 
-        return DataSrc::ERROR;
-    }
-}
-
-DataSrc::Result
+        return DataSrc::T_DB_ERROR;
+    }
+}
+
+DataSrc::TransactionResult
 Sqlite3DataSrc::delRR(int zone_id,
                       const isc::dns::Name& name,
                       const isc::dns::RRType& rrtype,
@@ -1032,20 +1032,25 @@
 
     std::cout << "[XX] query prepared, executing" << std::endl;
     int result = sqlite3_step(query);
+    int deleted_rows =  sqlite3_total_changes(dbparameters->db_);
 
     sqlite3_reset(query);
 
     if (result == SQLITE_DONE) {
-        return DataSrc::SUCCESS;
+        if (deleted_rows > 0) {
+            return DataSrc::T_SUCCESS;
+        } else {
+            return DataSrc::T_NO_SUCH_DATA;
+        }
     } else {
         std::cout << "[XX] sqlite3 add_rr error: " << result << std::endl;;
         std::cout << "[XX] " << sqlite3_errmsg(dbparameters->db_) << std::endl;
 
-        return DataSrc::ERROR;
-    }
-}
-
-DataSrc::Result
+        return DataSrc::T_DB_ERROR;
+    }
+}
+
+DataSrc::TransactionResult
 Sqlite3DataSrc::delAll(int zone_id)
 {
     sqlite3_stmt* query = dbparameters->w_del_all_;
@@ -1066,51 +1071,51 @@
     sqlite3_reset(query);
 
     if (result == SQLITE_DONE) {
-        return DataSrc::SUCCESS;
+        return DataSrc::T_SUCCESS;
     } else {
         std::cout << "[XX] sqlite3 add_rr error: " << result << std::endl;;
         std::cout << "[XX] " << sqlite3_errmsg(dbparameters->db_) << std::endl;
 
-        return DataSrc::ERROR;
-    }
-}
-
-DataSrc::Result
+        return DataSrc::T_DB_ERROR;
+    }
+}
+
+DataSrc::TransactionResult
 Sqlite3DataSrc::replaceZone(DataSrcTransaction& transaction,
                             const isc::dns::RRsetList& rrsets)
 {
     if (transaction.getState() != DataSrcTransaction::RUNNING) {
-        return DataSrc::ERROR;
+        return DataSrc::T_ERROR;
     }
 
     int zone_id = transaction.getData()->get("zone_id")->intValue();
 
-    DataSrc::Result result = delAll(zone_id);
-    if (result != DataSrc::SUCCESS) {
+    DataSrc::TransactionResult result = delAll(zone_id);
+    if (result != DataSrc::T_SUCCESS) {
         return result;
     }
 
     RRsetList::const_iterator it = rrsets.begin();
     while (it != rrsets.end()) {
         result = addRRset(transaction, *it);
-        if (result != DataSrc::SUCCESS) {
+        if (result != DataSrc::T_SUCCESS) {
             return result;
         }
     }
-    return DataSrc::SUCCESS;
-}
-
-DataSrc::Result
+    return DataSrc::T_SUCCESS;
+}
+
+DataSrc::TransactionResult
 Sqlite3DataSrc::delZone(DataSrcTransaction& transaction)
 {
     if (transaction.getState() != DataSrcTransaction::RUNNING) {
-        return DataSrc::ERROR;
+        return DataSrc::T_ERROR;
     }
 
     int zone_id = transaction.getData()->get("zone_id")->intValue();
 
-    DataSrc::Result result = delAll(zone_id);
-    if (result != DataSrc::SUCCESS) {
+    DataSrc::TransactionResult result = delAll(zone_id);
+    if (result != DataSrc::T_SUCCESS) {
         return result;
     }
 
@@ -1132,21 +1137,21 @@
     sqlite3_reset(query);
 
     if (q_result == SQLITE_DONE) {
-        return DataSrc::SUCCESS;
+        return DataSrc::T_SUCCESS;
     } else {
         std::cout << "[XX] sqlite3 del zone error: " << result << std::endl;;
         std::cout << "[XX] " << sqlite3_errmsg(dbparameters->db_) << std::endl;
 
-        return DataSrc::ERROR;
-    }
-}
-
-DataSrc::Result
+        return DataSrc::T_DB_ERROR;
+    }
+}
+
+DataSrc::TransactionResult
 Sqlite3DataSrc::delRRset(DataSrcTransaction& transaction,
                          isc::dns::ConstRRsetPtr rrset)
 {
     if (transaction.getState() != DataSrcTransaction::RUNNING) {
-        return DataSrc::ERROR;
+        return DataSrc::T_ERROR;
     }
 
     std::cout << "[XX] delRR at sqlite3" << std::endl;
@@ -1154,7 +1159,7 @@
     
     std::cout << "[XX] zone id for: " << zone_id << std::endl;
 
-    DataSrc::Result result = DataSrc::SUCCESS;
+    DataSrc::TransactionResult result = DataSrc::T_SUCCESS;
 
     if (rrset->getRdataCount() > 0) {
         RdataIteratorPtr rdp = rrset->getRdataIterator();
@@ -1163,7 +1168,7 @@
         std::cout << "[XX] RDATA: " << rdp->getCurrent().toText().c_str() << std::endl;
         do {
             result = delRR(zone_id, rrset->getName(), rrset->getType(), rdp->getCurrent());
-            if (result != DataSrc::SUCCESS) {
+            if (result != DataSrc::T_SUCCESS) {
                 return result;
             } else {
                 rdp->next();

Modified: branches/trac232/src/lib/datasrc/sqlite3_datasrc.h
==============================================================================
--- branches/trac232/src/lib/datasrc/sqlite3_datasrc.h (original)
+++ branches/trac232/src/lib/datasrc/sqlite3_datasrc.h Thu Jul 22 15:50:57 2010
@@ -107,35 +107,32 @@
 
     // write access
 
-    // hmz, should we have a transaction context object? (see comments
-    // in datasource.h
-    Result startTransaction(DataSrcTransaction& transaction);
-    Result commitTransaction(DataSrcTransaction& transaction);
-    Result rollbackTransaction(DataSrcTransaction& transaction);
+    TransactionResult startTransaction(DataSrcTransaction& transaction);
+    TransactionResult commitTransaction(DataSrcTransaction& transaction);
+    TransactionResult rollbackTransaction(DataSrcTransaction& transaction);
     
-    //DataSrc::Result addRRset(const isc::dns::Name& zonename, const isc::dns::RRset& rrset);
-    DataSrc::Result addRRset(DataSrcTransaction& transaction,
-                             isc::dns::ConstRRsetPtr rrset);
-    DataSrc::Result delRRset(DataSrcTransaction& transaction,
-                             isc::dns::ConstRRsetPtr rrset);
-    DataSrc::Result replaceZone(DataSrcTransaction& transaction,
-                                const isc::dns::RRsetList& rrset_list);
-    DataSrc::Result delZone(DataSrcTransaction& transaction);
+    TransactionResult addRRset(DataSrcTransaction& transaction,
+                               isc::dns::ConstRRsetPtr rrset);
+    TransactionResult delRRset(DataSrcTransaction& transaction,
+                               isc::dns::ConstRRsetPtr rrset);
+    TransactionResult replaceZone(DataSrcTransaction& transaction,
+                                           const isc::dns::RRsetList& rrset_list);
+    TransactionResult delZone(DataSrcTransaction& transaction);
 
 private:
-    DataSrc::Result addRR(int zone_id,
+    DataSrc::TransactionResult addRR(int zone_id,
                           const isc::dns::Name& name,
                           const isc::dns::RRType& rrtype,
                           const isc::dns::RRTTL& rrttl,
                           const isc::dns::rdata::Rdata& rdata);
-    DataSrc::Result delRR(int zone_id,
-                          const isc::dns::Name& name,
-                          const isc::dns::RRType& rrtype);
-    DataSrc::Result delRR(int zone_id,
-                          const isc::dns::Name& name,
-                          const isc::dns::RRType& rrtype,
-                          const isc::dns::rdata::Rdata& rdata);
-    DataSrc::Result delAll(int zone_id);
+    DataSrc::TransactionResult delRR(int zone_id,
+                                     const isc::dns::Name& name,
+                                     const isc::dns::RRType& rrtype);
+    DataSrc::TransactionResult delRR(int zone_id,
+                                     const isc::dns::Name& name,
+                                     const isc::dns::RRType& rrtype,
+                                     const isc::dns::rdata::Rdata& rdata);
+    DataSrc::TransactionResult delAll(int zone_id);
 
 private:
     enum Mode {

Modified: branches/trac232/src/lib/datasrc/tests/sqlite3_unittest.cc
==============================================================================
--- branches/trac232/src/lib/datasrc/tests/sqlite3_unittest.cc (original)
+++ branches/trac232/src/lib/datasrc/tests/sqlite3_unittest.cc Thu Jul 22 15:50:57 2010
@@ -974,43 +974,43 @@
     EXPECT_EQ(DataSrcTransaction::INIT, transaction.getState());
     
     // start doing things without calling startTransaction()
-    EXPECT_EQ(DataSrc::ERROR,
+    EXPECT_EQ(DataSrc::T_ERROR,
               data_source.commitTransaction(transaction));
-    EXPECT_EQ(DataSrc::ERROR,
+    EXPECT_EQ(DataSrc::T_ERROR,
               data_source.rollbackTransaction(transaction));
-    EXPECT_EQ(DataSrc::ERROR,
+    EXPECT_EQ(DataSrc::T_ERROR,
               data_source.addRRset(transaction, new_rrset));
     RRsetIterator rrset_it = RRsetIterator();
     RRsetList empty_list;
-    EXPECT_EQ(DataSrc::ERROR,
+    EXPECT_EQ(DataSrc::T_ERROR,
               data_source.replaceZone(transaction, empty_list));
-    EXPECT_EQ(DataSrc::ERROR,
+    EXPECT_EQ(DataSrc::T_ERROR,
               data_source.delZone(transaction));
-    EXPECT_EQ(DataSrc::ERROR,
+    EXPECT_EQ(DataSrc::T_ERROR,
               data_source.delRRset(transaction, new_rrset));
     // need rrsetit for doIXFR (but doIXFR should probably be moved up to datasource itself)
 
-    EXPECT_EQ(DataSrc::SUCCESS,
+    EXPECT_EQ(DataSrc::T_SUCCESS,
               data_source.startTransaction(transaction));
     EXPECT_EQ(DataSrcTransaction::RUNNING, transaction.getState());
-    EXPECT_EQ(DataSrc::ERROR,
+    EXPECT_EQ(DataSrc::T_ERROR,
               data_source.startTransaction(transaction));
-    EXPECT_EQ(DataSrc::SUCCESS,
+    EXPECT_EQ(DataSrc::T_SUCCESS,
               data_source.rollbackTransaction(transaction));
     EXPECT_EQ(DataSrcTransaction::DONE, transaction.getState());
 
     // state now 'done', everything should error again
-    EXPECT_EQ(DataSrc::ERROR,
+    EXPECT_EQ(DataSrc::T_ERROR,
               data_source.commitTransaction(transaction));
-    EXPECT_EQ(DataSrc::ERROR,
+    EXPECT_EQ(DataSrc::T_ERROR,
               data_source.rollbackTransaction(transaction));
-    EXPECT_EQ(DataSrc::ERROR,
+    EXPECT_EQ(DataSrc::T_ERROR,
               data_source.addRRset(transaction, new_rrset));
-    EXPECT_EQ(DataSrc::ERROR,
+    EXPECT_EQ(DataSrc::T_ERROR,
               data_source.replaceZone(transaction, empty_list));
-    EXPECT_EQ(DataSrc::ERROR,
+    EXPECT_EQ(DataSrc::T_ERROR,
               data_source.delZone(transaction));
-    EXPECT_EQ(DataSrc::ERROR,
+    EXPECT_EQ(DataSrc::T_ERROR,
               data_source.delRRset(transaction, new_rrset));
 }
 
@@ -1028,11 +1028,11 @@
 
     // add it, but roll back
     DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
-    EXPECT_EQ(DataSrc::SUCCESS,
+    EXPECT_EQ(DataSrc::T_SUCCESS,
               data_source.startTransaction(transaction1));
-    EXPECT_EQ(DataSrc::SUCCESS,
+    EXPECT_EQ(DataSrc::T_SUCCESS,
               data_source.addRRset(transaction1, new_rrset));
-    EXPECT_EQ(DataSrc::SUCCESS,
+    EXPECT_EQ(DataSrc::T_SUCCESS,
               data_source.rollbackTransaction(transaction1));
     
     // check whether our new record does not exist
@@ -1043,11 +1043,11 @@
 
     // add it with commit
     DataSrcTransaction transaction2(&data_source, zone_name, RRClass::IN());
-    EXPECT_EQ(DataSrc::SUCCESS,
+    EXPECT_EQ(DataSrc::T_SUCCESS,
               data_source.startTransaction(transaction2));
-    EXPECT_EQ(DataSrc::SUCCESS,
+    EXPECT_EQ(DataSrc::T_SUCCESS,
               data_source.addRRset(transaction2, new_rrset));
-    EXPECT_EQ(DataSrc::SUCCESS,
+    EXPECT_EQ(DataSrc::T_SUCCESS,
               data_source.commitTransaction(transaction2));
 
     // now check whether it does exist
@@ -1073,11 +1073,11 @@
 
     // add it, but roll back
     DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
-    EXPECT_EQ(DataSrc::SUCCESS,
+    EXPECT_EQ(DataSrc::T_SUCCESS,
               data_source.startTransaction(transaction1));
-    EXPECT_EQ(DataSrc::SUCCESS,
+    EXPECT_EQ(DataSrc::T_SUCCESS,
               data_source.delRRset(transaction1, new_rrset));
-    EXPECT_EQ(DataSrc::SUCCESS,
+    EXPECT_EQ(DataSrc::T_SUCCESS,
               data_source.rollbackTransaction(transaction1));
 
     // check whether our new record still exists
@@ -1089,11 +1089,11 @@
 
     // add it, and commit
     DataSrcTransaction transaction2(&data_source, zone_name, RRClass::IN());
-    EXPECT_EQ(DataSrc::SUCCESS,
+    EXPECT_EQ(DataSrc::T_SUCCESS,
               data_source.startTransaction(transaction2));
-    EXPECT_EQ(DataSrc::SUCCESS,
+    EXPECT_EQ(DataSrc::T_SUCCESS,
               data_source.delRRset(transaction2, new_rrset));
-    EXPECT_EQ(DataSrc::SUCCESS,
+    EXPECT_EQ(DataSrc::T_SUCCESS,
               data_source.commitTransaction(transaction2));
 
     // now check whether it does not exist now
@@ -1122,9 +1122,9 @@
 
     // Replace them, roll back
     DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
-    data_source.startTransaction(transaction1);
-    data_source.replaceZone(transaction1, empty_list);
-    data_source.rollbackTransaction(transaction1);
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.startTransaction(transaction1));
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.replaceZone(transaction1, empty_list));
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.rollbackTransaction(transaction1));
 
     // check whether it still exists
     EXPECT_EQ(DataSrc::SUCCESS,
@@ -1135,9 +1135,9 @@
 
     // Replace them, commit
     DataSrcTransaction transaction2(&data_source, zone_name, RRClass::IN());
-    data_source.startTransaction(transaction2);
-    data_source.replaceZone(transaction2, empty_list);
-    data_source.commitTransaction(transaction2);
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.startTransaction(transaction2));
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.replaceZone(transaction2, empty_list));
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.commitTransaction(transaction2));
     
     // check whether it's gone now
     EXPECT_EQ(DataSrc::SUCCESS,
@@ -1165,9 +1165,9 @@
 
     // Delete zone, roll back
     DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
-    data_source.startTransaction(transaction1);
-    data_source.delZone(transaction1);
-    data_source.rollbackTransaction(transaction1);
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.startTransaction(transaction1));
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.delZone(transaction1));
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.rollbackTransaction(transaction1));
 
     // check whether it still exists
     EXPECT_EQ(DataSrc::SUCCESS,
@@ -1178,9 +1178,9 @@
 
     // Delete zone, commit
     DataSrcTransaction transaction2(&data_source, zone_name, RRClass::IN());
-    data_source.startTransaction(transaction2);
-    data_source.delZone(transaction2);
-    data_source.commitTransaction(transaction2);
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.startTransaction(transaction2));
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.delZone(transaction2));
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.commitTransaction(transaction2));
     
     // check whether it's gone now
     EXPECT_EQ(DataSrc::SUCCESS,
@@ -1191,7 +1191,7 @@
 
     // try to start a transaction for the zone that is now gone
     DataSrcTransaction transaction3(&data_source, zone_name, RRClass::IN());
-    EXPECT_EQ(DataSrc::ERROR, data_source.startTransaction(transaction3));
+    EXPECT_EQ(DataSrc::T_NO_SUCH_ZONE, data_source.startTransaction(transaction3));
     
 }
 
@@ -1420,13 +1420,13 @@
 
     // do IXFR, roll back
     DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
-    data_source.startTransaction(transaction1);
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.startTransaction(transaction1));
     EXPECT_EQ(DataSrc::SUCCESS,
               data_source.doIXFR(transaction1,
                                  ixfr_msg.beginSection(Section::ANSWER()),
                                  ixfr_msg.endSection(Section::ANSWER()))
     );
-    data_source.rollbackTransaction(transaction1);
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.rollbackTransaction(transaction1));
 
     checkSingleRRset(data_source,
                      "www.example.com. 3600 IN A 192.0.2.1\n",
@@ -1434,13 +1434,13 @@
 
     // do IXFR, commit
     DataSrcTransaction transaction2(&data_source, zone_name, RRClass::IN());
-    data_source.startTransaction(transaction2);
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.startTransaction(transaction2));
     EXPECT_EQ(DataSrc::SUCCESS,
               data_source.doIXFR(transaction2,
                                  ixfr_msg.beginSection(Section::ANSWER()),
                                  ixfr_msg.endSection(Section::ANSWER()))
     );
-    data_source.commitTransaction(transaction2);
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.commitTransaction(transaction2));
 
     checkSingleRRset(data_source,
                      "www.example.com. 3600 IN A 192.0.2.3\n",
@@ -1448,13 +1448,13 @@
 
     // same IXFR should now fail, because the start serial doesn't match
     DataSrcTransaction transaction3(&data_source, zone_name, RRClass::IN());
-    data_source.startTransaction(transaction3);
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.startTransaction(transaction3));
     EXPECT_EQ(DataSrc::ERROR,
               data_source.doIXFR(transaction3,
                                  ixfr_msg.beginSection(Section::ANSWER()),
                                  ixfr_msg.endSection(Section::ANSWER()))
     );
-    data_source.rollbackTransaction(transaction3);
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.rollbackTransaction(transaction3));
 }
 
 TEST_F(Sqlite3DataSourceTest, ixfr_bad) {
@@ -1470,13 +1470,13 @@
     ASSERT_EQ(0, ixfrFromFile(ixfr_msg, TEST_DATA_DIR
               "/ixfr_bad_remove_nonexisting.rrs"));
     DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
-    data_source.startTransaction(transaction1);
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.startTransaction(transaction1));
     EXPECT_EQ(DataSrc::ERROR,
               data_source.doIXFR(transaction1,
                                  ixfr_msg.beginSection(Section::ANSWER()),
                                  ixfr_msg.endSection(Section::ANSWER()))
     );
-    data_source.rollbackTransaction(transaction1);
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.rollbackTransaction(transaction1));
     
 }
 
@@ -1491,7 +1491,7 @@
     Message update_msg(Message::RENDER);
 
     DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
-    data_source.startTransaction(transaction1);
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.startTransaction(transaction1));
     update_msg.setQid(1234);
 
     // bad qtype
@@ -1539,7 +1539,7 @@
     ASSERT_EQ(0, updateFromFile(update_msg, TEST_DATA_DIR "/update1.packet"));
     ASSERT_EQ(DataSrc::SUCCESS, data_source.doUpdate(transaction1, update_msg));
 
-    data_source.commitTransaction(transaction1);
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.commitTransaction(transaction1));
     checkSingleRRset(data_source,
                      "",
                      Name("ip46.example.com"), RRClass::IN(), RRType::A());
@@ -1573,7 +1573,7 @@
     Message update_msg(Message::RENDER);
 
     DataSrcTransaction transaction1(&data_source, zone_name, RRClass::CH());
-    data_source.startTransaction(transaction1);
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.startTransaction(transaction1));
     update_msg.setQid(1234);
 
     update_msg.setOpcode(isc::dns::Opcode::UPDATE());
@@ -1594,14 +1594,11 @@
     Message update_msg(Message::RENDER);
 
     DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
-    data_source.startTransaction(transaction1);
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.startTransaction(transaction1));
 
     ASSERT_EQ(0, updateFromFile(update_msg, TEST_DATA_DIR "/update2.packet"));
     ASSERT_EQ(DataSrc::ERROR, data_source.doUpdate(transaction1, update_msg));
     ASSERT_EQ(Rcode::NXRRSET(), update_msg.getRcode());
-
-    data_source.rollbackTransaction(transaction1);
-    data_source.startTransaction(transaction1);
 
     ASSERT_EQ(0, updateFromFile(update_msg, TEST_DATA_DIR "/update3.packet"));
     ASSERT_EQ(DataSrc::ERROR, data_source.doUpdate(transaction1, update_msg));
@@ -1632,7 +1629,7 @@
     Message update_msg(Message::RENDER);
 
     DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
-    data_source.startTransaction(transaction1);
+    ASSERT_EQ(DataSrc::T_SUCCESS, data_source.startTransaction(transaction1));
 
     ASSERT_EQ(0, updateFromFile(update_msg, TEST_DATA_DIR "/update7.packet"));
     ASSERT_EQ(DataSrc::ERROR, data_source.doUpdate(transaction1, update_msg));




More information about the bind10-changes mailing list