Browse Source

[2862] Pass the update command to the list manager

Pass the sgmtinfo-update command to the client list manager and ack the
segment when done.

Not tested, as there's interaction with the command channel and threads
and external modules. Too much plumbing and too little functionality to
test.
Michal 'vorner' Vaner 11 years ago
parent
commit
0d8bee5c0c
2 changed files with 28 additions and 0 deletions
  1. 25 0
      src/bin/auth/auth_srv.cc
  2. 3 0
      src/bin/auth/auth_srv.h

+ 25 - 0
src/bin/auth/auth_srv.cc

@@ -972,9 +972,34 @@ AuthSrv::listsReconfigured() {
     const bool has_remote = hasRemoteSegment(impl_->datasrc_clients_mgr_);
     if (has_remote && !impl_->readers_subscribed_) {
         impl_->config_session_->subscribe("SegmentReader");
+        impl_->config_session_->
+            setUnhandledCallback(boost::bind(&AuthSrv::foreignCommand, this,
+                                             _1, _2, _3));
         impl_->readers_subscribed_ = true;
     } else if (!has_remote && impl_->readers_subscribed_) {
         impl_->config_session_->unsubscribe("SegmentReader");
+        impl_->config_session_->
+            setUnhandledCallback(isc::config::ModuleCCSession::
+                                 UnhandledCallback());
         impl_->readers_subscribed_ = false;
     }
 }
+
+void
+AuthSrv::reconfigureDone(ConstElementPtr params) {
+    // ACK the segment
+    impl_->config_session_->
+        groupSendMsg(isc::config::createCommand("sgmtinfo-update-ack",
+                                                params), "MemMgr");
+}
+
+void
+AuthSrv::foreignCommand(const std::string& command, const std::string&,
+                        const ConstElementPtr& params)
+{
+    if (command == "sgmtinfo-update") {
+        impl_->datasrc_clients_mgr_.
+            segmentInfoUpdate(params, boost::bind(&AuthSrv::reconfigureDone,
+                                                  this, params));
+    }
+}

+ 3 - 0
src/bin/auth/auth_srv.h

@@ -282,6 +282,9 @@ public:
     void listsReconfigured();
 
 private:
+    void reconfigureDone(isc::data::ConstElementPtr request);
+    void foreignCommand(const std::string& command, const std::string&,
+                        const isc::data::ConstElementPtr& params);
     AuthSrvImpl* impl_;
     isc::asiolink::SimpleCallback* checkin_;
     isc::asiodns::DNSLookup* dns_lookup_;