You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pn...@apache.org on 2023/12/03 22:13:19 UTC

(celix) branch feature/509-remove-pubsub updated: Change MQ key algorithm for cxx rsa integration test suite

This is an automated email from the ASF dual-hosted git repository.

pnoltes pushed a commit to branch feature/509-remove-pubsub
in repository https://gitbox.apache.org/repos/asf/celix.git


The following commit(s) were added to refs/heads/feature/509-remove-pubsub by this push:
     new ee9024a5 Change MQ key algorithm for cxx rsa integration test suite
ee9024a5 is described below

commit ee9024a5e9fdbb55e62f36c53fd61b2ad68538d1
Author: Pepijn Noltes <pn...@apache.org>
AuthorDate: Sun Dec 3 23:13:12 2023 +0100

    Change MQ key algorithm for cxx rsa integration test suite
---
 .../src/TestExportImportRemoteServiceFactory.cc    | 60 +++++++++++-----------
 1 file changed, 30 insertions(+), 30 deletions(-)

diff --git a/bundles/cxx_remote_services/integration/src/TestExportImportRemoteServiceFactory.cc b/bundles/cxx_remote_services/integration/src/TestExportImportRemoteServiceFactory.cc
index 428e8d65..f86ebdeb 100644
--- a/bundles/cxx_remote_services/integration/src/TestExportImportRemoteServiceFactory.cc
+++ b/bundles/cxx_remote_services/integration/src/TestExportImportRemoteServiceFactory.cc
@@ -102,13 +102,25 @@ static void sendMsgWithIpc(const celix::LogHelper& logHelper, int qidSender, con
     }
 }
 
+static int getConsumer2ProviderChannelId(std::string& scope, std::string& topic) {
+    auto c2pChannel = std::string{"c2p"} + "/" + scope + "/" + topic; //client 2 provider channel
+    auto c2pId = (int)celix_utils_stringHash(c2pChannel.c_str());
+    return c2pId;
+}
+
+static long getProvider2ConsumerChannelId(std::string& scope, std::string& topic) {
+    auto p2cChannel = std::string{"p2c"} + "/" + scope + "/" + topic; //provider 2 client channel
+    int p2cId = (int)celix_utils_stringHash(p2cChannel.c_str());
+    return p2cId;
+}
+
 /**
  * A importedCalculater which acts as a pubsub proxy to a imported remote service.
  */
 class ImportedCalculator final : public ICalculator {
 public:
-    explicit ImportedCalculator(celix::LogHelper _logHelper) : logHelper{std::move(_logHelper)} {
-        setupMsgIpc();
+    explicit ImportedCalculator(celix::LogHelper _logHelper, int c2pChannelId, int p2cChannelId) : logHelper{std::move(_logHelper)} {
+        setupMsgIpc(c2pChannelId, p2cChannelId);
     }
 
     ~ImportedCalculator() noexcept override {
@@ -185,9 +197,9 @@ public:
     }
 
 private:
-    void setupMsgIpc() {
-        int keySender = 1234;   // TODO make configurable
-        int keyReceiver = 1235; // TODO make configurable
+    void setupMsgIpc(int c2pChannelId, int p2cChannelId) {
+        int keySender = (int)c2pChannelId;
+        int keyReceiver = (int)p2cChannelId;
         qidSender = msgget(keySender, 0666 | IPC_CREAT);
         qidReceiver = msgget(keyReceiver, 0666 | IPC_CREAT);
 
@@ -306,13 +318,6 @@ public:
     ~CalculatorImportServiceFactory() noexcept override = default;
 
     std::unique_ptr<celix::rsa::IImportRegistration> importService(const celix::rsa::EndpointDescription& endpoint) override {
-        auto topic = endpoint.getProperties().get("endpoint.topic");
-        auto scope = endpoint.getProperties().get("endpoint.topic");
-        if (topic.empty() || scope.empty()) {
-            ctx->logError("Cannot import pubsub endpoint. Endpoint does not have a scope and/or topic");
-            return nullptr;
-        }
-
         auto componentId = createImportedCalculatorComponent(endpoint);
         return std::make_unique<ComponentImportRegistration>(ctx, std::move(componentId));
     }
@@ -327,11 +332,12 @@ public:
 
 private:
     std::string createImportedCalculatorComponent(const celix::rsa::EndpointDescription& endpoint) {
-        auto invokeTopic = endpoint.getProperties().get("endpoint.topic") + "_invoke";
-        auto returnTopic = endpoint.getProperties().get("endpoint.topic") + "_return";
+        auto topic = endpoint.getProperties().get("endpoint.topic");
         auto scope = endpoint.getProperties().get("endpoint.scope");
+        auto c2pChannelId = getConsumer2ProviderChannelId(scope, topic);
+        auto p2cChannelId = getProvider2ConsumerChannelId(scope, topic);
 
-        auto& cmp = ctx->getDependencyManager()->createComponent(std::make_unique<ImportedCalculator>(logHelper));
+        auto& cmp = ctx->getDependencyManager()->createComponent(std::make_unique<ImportedCalculator>(logHelper, c2pChannelId, p2cChannelId));
         cmp.createServiceDependency<celix::PromiseFactory>()
                 .setRequired(true)
                 .setStrategy(DependencyUpdateStrategy::suspend)
@@ -372,8 +378,8 @@ private:
  */
 class ExportedCalculator final {
 public:
-    explicit ExportedCalculator(celix::LogHelper _logHelper) : logHelper{std::move(_logHelper)} {
-        setupMsgIpc();
+    explicit ExportedCalculator(celix::LogHelper _logHelper, int c2pChannelId, int p2cChannelId) : logHelper{std::move(_logHelper)} {
+        setupMsgIpc(c2pChannelId, p2cChannelId);
     }
 
     void setPromiseFactory(const std::shared_ptr<celix::PromiseFactory>& fac) {
@@ -428,10 +434,10 @@ public:
         calculator = calc;
     }
 private:
-    void setupMsgIpc() {
+    void setupMsgIpc(int c2pChannelId, int p2cChannelId) {
         //note reverse order of sender and receiver compared to ImportedCalculator
-        int keySender = 1235;   // TODO make configurable
-        int keyReceiver = 1234; // TODO make configurable
+        int keySender = (int)p2cChannelId;
+        int keyReceiver = (int)c2pChannelId;
         qidSender = msgget(keySender, 0666 | IPC_CREAT);
         qidReceiver = msgget(keyReceiver, 0666 | IPC_CREAT);
 
@@ -520,13 +526,6 @@ public:
     ~CalculatorExportServiceFactory() noexcept override = default;
 
     std::unique_ptr<celix::rsa::IExportRegistration> exportService(const celix::Properties& serviceProperties) override {
-        auto topic = serviceProperties.get("endpoint.topic");
-        auto scope = serviceProperties.get("endpoint.topic");
-        if (topic.empty() || scope.empty()) {
-            ctx->logError("Cannot export remote service pubsub without endpoint configuration. Endpoint does not have a scope and/or topic");
-            return nullptr;
-        }
-
         auto componentId = createExportedCalculatorComponent(serviceProperties);
         return std::make_unique<ComponentExportRegistration>(ctx, std::move(componentId));
     }
@@ -545,12 +544,13 @@ public:
 
 private:
     std::string createExportedCalculatorComponent(const celix::Properties& serviceProperties) {
-        auto invokeTopic = serviceProperties.get("endpoint.topic") + "_invoke";
-        auto returnTopic = serviceProperties.get("endpoint.topic") + "_return";
+        auto topic = serviceProperties.get("endpoint.topic");
         auto scope = serviceProperties.get("endpoint.scope");
+        auto c2pChannelId = getConsumer2ProviderChannelId(scope, topic);
+        auto p2cChannelId = getProvider2ConsumerChannelId(scope, topic);
         auto svcId = serviceProperties.get(celix::SERVICE_ID);
 
-        auto& cmp = ctx->getDependencyManager()->createComponent(std::make_unique<ExportedCalculator>(logHelper));
+        auto& cmp = ctx->getDependencyManager()->createComponent(std::make_unique<ExportedCalculator>(logHelper, c2pChannelId, p2cChannelId));
 
         cmp.createServiceDependency<celix::PromiseFactory>()
                 .setRequired(true)