]> granicus.if.org Git - pdns/commitdiff
Added transaction ID for start/abort/commiTransaction
authorAki Tuomi <cmouse@cmouse.fi>
Sun, 2 Jun 2013 15:45:57 +0000 (18:45 +0300)
committerAki Tuomi <cmouse@desteem.org>
Tue, 4 Jun 2013 07:33:04 +0000 (10:33 +0300)
modules/remotebackend/remotebackend.cc
modules/remotebackend/remotebackend.hh

index af8da6efa181f78d78d90378a78125e4f2bec776..c6b58bc1ce5efff5c990702e42f3c15540b7ff9f 100644 (file)
@@ -52,6 +52,7 @@ RemoteBackend::RemoteBackend(const std::string &suffix)
       build(getArg("connection-string"));
       this->d_dnssec = mustDo("dnssec");
       this->d_index = -1;
+      this->d_trxid = 0;
 }
 
 RemoteBackend::~RemoteBackend() {
@@ -670,22 +671,35 @@ bool RemoteBackend::feedEnts3(int domain_id, const string &domain, set<string> &
 bool RemoteBackend::startTransaction(const string &domain, int domain_id) {
    rapidjson::Document query,answer;
    rapidjson::Value parameters;
+   this->d_trxid = time((time_t*)NULL);
+
    query.SetObject();
    JSON_ADD_MEMBER(query, "method", "startTransaction", query.GetAllocator());
    parameters.SetObject();
    JSON_ADD_MEMBER(parameters, "domain", domain.c_str(), query.GetAllocator());
    JSON_ADD_MEMBER(parameters, "domain_id", domain_id, query.GetAllocator());
+   JSON_ADD_MEMBER(parameters, "trxid", d_trxid, query.GetAllocator());
+
    query.AddMember("parameters", parameters, query.GetAllocator());
 
-   if (connector->send(query) == false || connector->recv(answer) == false)
+   if (connector->send(query) == false || connector->recv(answer) == false) {
+     d_trxid = -1;
      return false;
+   }
    return true;
 
 }
 bool RemoteBackend::commitTransaction() { 
    rapidjson::Document query,answer;
+   rapidjson::Value parameters;
+
    query.SetObject();
    JSON_ADD_MEMBER(query, "method", "abortTransaction", query.GetAllocator());
+   parameters.SetObject();
+   JSON_ADD_MEMBER(parameters, "trxid", d_trxid, query.GetAllocator());
+   query.AddMember("parameters", parameters, query.GetAllocator());
+
+   d_trxid = -1;
    if (connector->send(query) == false || connector->recv(answer) == false)
      return false;
    return true;
@@ -693,8 +707,15 @@ bool RemoteBackend::commitTransaction() {
 
 bool RemoteBackend::abortTransaction() { 
    rapidjson::Document query,answer;
+   rapidjson::Value parameters;
+
    query.SetObject();
    JSON_ADD_MEMBER(query, "method", "commitTransaction", query.GetAllocator());
+   parameters.SetObject();
+   JSON_ADD_MEMBER(parameters, "trxid", d_trxid, query.GetAllocator());
+   query.AddMember("parameters", parameters, query.GetAllocator());
+
+   d_trxid = -1;
    if (connector->send(query) == false || connector->recv(answer) == false)
      return false;
    return true;
index 7f8e103900c3c1744b2d81d015bf00f2bd9aa23d..8984aa089f982421c1d5520bdc65d6b752eb1c23 100644 (file)
@@ -129,6 +129,7 @@ class RemoteBackend : public DNSBackend
     Connector *connector;
     bool d_dnssec;
     rapidjson::Document *d_result;
-    int d_index; 
+    int d_index;
+    time_t d_trxid;
 };
 #endif