[svn] commit: r2197 - 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

BIND 10 source code commits bind10-changes at lists.isc.org
Mon Jun 21 13:59:49 UTC 2010


Author: jelte
Date: Mon Jun 21 13:59:49 2010
New Revision: 2197

Log:
base add/delete/etc on a (right now still very basic) transaction class object

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

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 Mon Jun 21 13:59:49 2010
@@ -340,16 +340,17 @@
                     RRTTL(args->get("rr_ttl")->stringValue()));
         RdataPtr rdata = createRdata(rrset.getType(), rrset.getClass(), args->get("rr_rdata")->stringValue());
         rrset.addRdata(rdata);
-        DataSrc::Result r = datasource->startTransaction();
+        DataSrcTransaction* transaction;
+        DataSrc::Result r = datasource->startTransaction(&transaction, zone_name);
         if (r != DataSrc::SUCCESS) {
             return isc::config::createAnswer(r, "error starting transaction");
         }
-        r = datasource->addRRset(zone_name, rrset);
+        r = datasource->addRRset(transaction, rrset);
         std::cout << "[XX] RESULT: " << r << std::endl;
         if (r != DataSrc::SUCCESS) {
             // log? rollback immediately?
         }
-        r = datasource->commitTransaction();
+        r = datasource->commitTransaction(transaction);
         std::cout << "[XX] RESULT rollback: " << r << std::endl;
         if (r == DataSrc::SUCCESS) {
             return isc::config::createAnswer();
@@ -378,16 +379,17 @@
                     RRTTL(0));
         RdataPtr rdata = createRdata(rrset.getType(), rrset.getClass(), args->get("rr_rdata")->stringValue());
         rrset.addRdata(rdata);
-        DataSrc::Result r = datasource->startTransaction();
+        DataSrcTransaction* transaction;
+        DataSrc::Result r = datasource->startTransaction(&transaction, zone_name);
         if (r != DataSrc::SUCCESS) {
             return isc::config::createAnswer(r, "error starting transaction");
         }
-        r = datasource->delRRset(zone_name, rrset);
+        r = datasource->delRRset(transaction, rrset);
         std::cout << "[XX] RESULT: " << r << std::endl;
         if (r != DataSrc::SUCCESS) {
             // log? rollback immediately?
         }
-        r = datasource->commitTransaction();
+        r = datasource->commitTransaction(transaction);
         std::cout << "[XX] RESULT rollback: " << r << std::endl;
         if (r == DataSrc::SUCCESS) {
             return isc::config::createAnswer();

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 Mon Jun 21 13:59:49 2010
@@ -917,32 +917,32 @@
 }
 
 DataSrc::Result
-DataSrc::startTransaction()
+DataSrc::startTransaction(DataSrcTransaction **transaction UNUSED_PARAM, const Name& zonename UNUSED_PARAM)
 {
     return NOT_IMPLEMENTED;
 }
 
 DataSrc::Result
-DataSrc::commitTransaction()
+DataSrc::commitTransaction(DataSrcTransaction *transaction UNUSED_PARAM)
 {
     return NOT_IMPLEMENTED;
 }
 
 DataSrc::Result
-DataSrc::rollbackTransaction()
+DataSrc::rollbackTransaction(DataSrcTransaction *transaction UNUSED_PARAM)
 {
     return NOT_IMPLEMENTED;
 }
 
 DataSrc::Result
-DataSrc::addRRset(const isc::dns::Name& zonename UNUSED_PARAM,
+DataSrc::addRRset(DataSrcTransaction* transaction UNUSED_PARAM,
                   const isc::dns::RRset& rrset UNUSED_PARAM)
 {
     return NOT_IMPLEMENTED;
 }
 
 DataSrc::Result
-DataSrc::delRRset(const isc::dns::Name& zonename UNUSED_PARAM,
+DataSrc::delRRset(DataSrcTransaction* transaction UNUSED_PARAM,
                   const isc::dns::RRset& rrset UNUSED_PARAM)
 {
     return NOT_IMPLEMENTED;
@@ -1007,25 +1007,25 @@
 }
 
 DataSrc::Result
-MetaDataSrc::startTransaction()
+MetaDataSrc::startTransaction(DataSrcTransaction **transaction UNUSED_PARAM, const Name& zonename UNUSED_PARAM)
 {
     return NOT_IMPLEMENTED;
 }
 
 DataSrc::Result
-MetaDataSrc::commitTransaction()
+MetaDataSrc::commitTransaction(DataSrcTransaction *transaction UNUSED_PARAM)
 {
     return NOT_IMPLEMENTED;
 }
 
 DataSrc::Result
-MetaDataSrc::rollbackTransaction()
+MetaDataSrc::rollbackTransaction(DataSrcTransaction *transaction UNUSED_PARAM)
 {
     return NOT_IMPLEMENTED;
 }
 
 DataSrc::Result
-MetaDataSrc::addRRset(const isc::dns::Name& zonename UNUSED_PARAM,
+MetaDataSrc::addRRset(DataSrcTransaction* transaction UNUSED_PARAM,
                       const isc::dns::RRset& rrset UNUSED_PARAM)
 {
     return NOT_IMPLEMENTED;
@@ -1044,7 +1044,7 @@
 }
 
 DataSrc::Result
-MetaDataSrc::delRRset(const isc::dns::Name& zonename UNUSED_PARAM,
+MetaDataSrc::delRRset(DataSrcTransaction* transaction UNUSED_PARAM,
                       const isc::dns::RRset& rrset UNUSED_PARAM)
 {
     return 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 Mon Jun 21 13:59:49 2010
@@ -160,6 +160,15 @@
                                     isc::dns::RRsetList& target) const = 0;
 };
 
+// subclass this if you need specific data in your transaction model
+// TODO: probably needs private constructor, so that only startTransaction can make them
+//       also probably should keep a pointer to a datasource
+//       should this also provide the outwards interface?
+class DataSrcTransaction {
+public:
+    virtual ~DataSrcTransaction() {};
+};
+
 // Base class for a DNS Data Source
 class DataSrc : public AbstractDataSrc {
     ///
@@ -234,13 +243,13 @@
     // class that creates the transaction on init, and move al write
     // functions there. (keeping in mind that high-level write
     // functions also need read functionality)
-    virtual Result addRRset(const isc::dns::Name& zonename,
+    virtual Result addRRset(DataSrcTransaction* transaction,
                             const isc::dns::RRset& rrset);
-    virtual Result delRRset(const isc::dns::Name& zonename,
+    virtual Result delRRset(DataSrcTransaction* transaction,
                             const isc::dns::RRset& rrset);
-    virtual Result startTransaction();
-    virtual Result commitTransaction();
-    virtual Result rollbackTransaction();
+    virtual Result startTransaction(DataSrcTransaction** transaction, const isc::dns::Name& zonename);
+    virtual Result commitTransaction(DataSrcTransaction *transaction);
+    virtual Result rollbackTransaction(DataSrcTransaction *transaction);
 
 private:
     isc::dns::RRClass rrclass;
@@ -315,13 +324,13 @@
     // Writable data sources
     //
     // see comments at DataSrc
-    virtual Result startTransaction();
-    virtual Result commitTransaction();
-    virtual Result rollbackTransaction();
+    virtual Result startTransaction(DataSrcTransaction** transaction, const isc::dns::Name& zonename);
+    virtual Result commitTransaction(DataSrcTransaction* transaction);
+    virtual Result rollbackTransaction(DataSrcTransaction* transaction);
     
-    virtual Result addRRset(const isc::dns::Name& zonename,
+    virtual Result addRRset(DataSrcTransaction* transaction,
                             const isc::dns::RRset& rrset);
-    virtual Result delRRset(const isc::dns::Name& zonename,
+    virtual Result delRRset(DataSrcTransaction* transaction,
                             const isc::dns::RRset& rrset);
     // end of writable data sources part
 private:

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 Mon Jun 21 13:59:49 2010
@@ -13,6 +13,8 @@
 // PERFORMANCE OF THIS SOFTWARE.
 
 // $Id$
+
+#include <config.h>
 
 #include <string>
 #include <sstream>
@@ -756,9 +758,26 @@
 }
 
 DataSrc::Result
-Sqlite3DataSrc::startTransaction()
+Sqlite3DataSrc::startTransaction(DataSrcTransaction **transaction, const Name& zonename)
 {
     int result = sqlite3_exec(dbparameters->db_, w_start_transaction_str, NULL, NULL, NULL);
+    if (result == SQLITE_OK) {
+        if (transaction) {
+            Sqlite3DataSrcTransaction *trans = new Sqlite3DataSrcTransaction();
+            trans->zone_id = hasExactZone(zonename.toText().c_str());
+            *transaction = trans;
+        }
+        return DataSrc::SUCCESS;
+    } else {
+        return DataSrc::ERROR;
+    }
+}
+
+DataSrc::Result
+Sqlite3DataSrc::commitTransaction(DataSrcTransaction *transaction UNUSED_PARAM)
+{
+    int result = sqlite3_exec(dbparameters->db_, w_commit_transaction_str, NULL, NULL, NULL);
+    delete transaction;
     if (result == SQLITE_OK) {
         return DataSrc::SUCCESS;
     } else {
@@ -767,20 +786,10 @@
 }
 
 DataSrc::Result
-Sqlite3DataSrc::commitTransaction()
-{
-    int result = sqlite3_exec(dbparameters->db_, w_commit_transaction_str, NULL, NULL, NULL);
-    if (result == SQLITE_OK) {
-        return DataSrc::SUCCESS;
-    } else {
-        return DataSrc::ERROR;
-    }
-}
-
-DataSrc::Result
-Sqlite3DataSrc::rollbackTransaction()
+Sqlite3DataSrc::rollbackTransaction(DataSrcTransaction *transaction UNUSED_PARAM)
 {
     int result = sqlite3_exec(dbparameters->db_, w_rollback_transaction_str, NULL, NULL, NULL);
+    delete transaction;
     if (result == SQLITE_OK) {
         return DataSrc::SUCCESS;
     } else {
@@ -862,13 +871,12 @@
 }
 
 DataSrc::Result
-Sqlite3DataSrc::addRRset(const isc::dns::Name& zonename,
+Sqlite3DataSrc::addRRset(DataSrcTransaction* transaction,
                          const isc::dns::RRset& rrset)
 {
     std::cout << "[XX] addRR at sqlite3" << std::endl;
-    int zone_id = hasExactZone(zonename.toText().c_str());
-    
-    std::cout << "[XX] zone id for: " << zonename << ": " << zone_id << std::endl;
+    Sqlite3DataSrcTransaction* trans = (Sqlite3DataSrcTransaction*) transaction;
+    std::cout << "[XX] zone id: " << trans->zone_id << std::endl;
 
     RdataIteratorPtr rdp = rrset.getRdataIterator();
     rdp->first();
@@ -876,7 +884,7 @@
     std::cout << "[XX] RDATA: " << rdp->getCurrent().toText().c_str() << std::endl;
     DataSrc::Result result = DataSrc::SUCCESS;
     do {
-        result = addRR(zone_id, rrset.getName(), rrset.getType(), rrset.getTTL(), rdp->getCurrent());
+        result = addRR(trans->zone_id, rrset.getName(), rrset.getType(), rrset.getTTL(), rdp->getCurrent());
         if (result != DataSrc::SUCCESS) {
             return result;
         } else {
@@ -892,7 +900,6 @@
                       const isc::dns::RRType& rrtype,
                       const isc::dns::rdata::Rdata& rdata)
 {
-
     sqlite3_stmt* query = dbparameters->w_del_rr_;
     
     sqlite3_reset(query);
@@ -941,13 +948,13 @@
 }
 
 DataSrc::Result
-Sqlite3DataSrc::delRRset(const isc::dns::Name& zonename,
+Sqlite3DataSrc::delRRset(DataSrcTransaction* transaction,
                          const isc::dns::RRset& rrset)
 {
     std::cout << "[XX] delRR at sqlite3" << std::endl;
-    int zone_id = hasExactZone(zonename.toText().c_str());
+    Sqlite3DataSrcTransaction* trans = (Sqlite3DataSrcTransaction*) transaction;
     
-    std::cout << "[XX] zone id for: " << zonename << ": " << zone_id << std::endl;
+    std::cout << "[XX] zone id for: " << trans->zone_id << std::endl;
 
     RdataIteratorPtr rdp = rrset.getRdataIterator();
     rdp->first();
@@ -955,7 +962,7 @@
     std::cout << "[XX] RDATA: " << rdp->getCurrent().toText().c_str() << std::endl;
     DataSrc::Result result = DataSrc::SUCCESS;
     do {
-        result = delRR(zone_id, rrset.getName(), rrset.getType(), rdp->getCurrent());
+        result = delRR(trans->zone_id, rrset.getName(), rrset.getType(), rdp->getCurrent());
         if (result != DataSrc::SUCCESS) {
             return result;
         } else {

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 Mon Jun 21 13:59:49 2010
@@ -109,14 +109,14 @@
 
     // hmz, should we have a transaction context object? (see comments
     // in datasource.h
-    Result startTransaction();
-    Result commitTransaction();
-    Result rollbackTransaction();
+    Result startTransaction(DataSrcTransaction **transaction, const isc::dns::Name& zonename);
+    Result commitTransaction(DataSrcTransaction *transaction);
+    Result rollbackTransaction(DataSrcTransaction *transaction);
     
     //DataSrc::Result addRRset(const isc::dns::Name& zonename, const isc::dns::RRset& rrset);
-    DataSrc::Result addRRset(const isc::dns::Name& zonename,
+    DataSrc::Result addRRset(DataSrcTransaction* transaction,
                              const isc::dns::RRset& rrset);
-    DataSrc::Result delRRset(const isc::dns::Name& zonename,
+    DataSrc::Result delRRset(DataSrcTransaction* transaction,
                              const isc::dns::RRset& rrset);
 private:
     DataSrc::Result addRR(int zone_id,
@@ -147,6 +147,11 @@
     Sqlite3Parameters* dbparameters;
 };
 
+class Sqlite3DataSrcTransaction : public DataSrcTransaction {
+public:
+    int zone_id;
+};
+
 }
 }
 




More information about the bind10-changes mailing list