Parcourir la 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 il y a 12 ans
Parent
commit
0d8bee5c0c
2 fichiers modifiés avec 28 ajouts et 0 suppressions
  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_;