summaryrefslogtreecommitdiffstats
path: root/messagebus
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-09-20 13:23:12 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2017-09-20 13:23:12 +0200
commit9e290c2d9fa4c539fcbb268d6e4084bf42250fa5 (patch)
tree07ab6782b17e759b4845d8de5c4761171c4d44d1 /messagebus
parent6708c5f296d0c80bb64ad7ba7a2e949969d35753 (diff)
Update and test among all version transitions that we are aware of.
Diffstat (limited to 'messagebus')
-rw-r--r--messagebus/src/tests/sendadapter/sendadapter.cpp101
-rw-r--r--messagebus/src/vespa/messagebus/network/rpcnetwork.cpp8
-rw-r--r--messagebus/src/vespa/messagebus/network/rpcnetwork.h18
3 files changed, 51 insertions, 76 deletions
diff --git a/messagebus/src/tests/sendadapter/sendadapter.cpp b/messagebus/src/tests/sendadapter/sendadapter.cpp
index e3fa3278300..1daf84a6ce8 100644
--- a/messagebus/src/tests/sendadapter/sendadapter.cpp
+++ b/messagebus/src/tests/sendadapter/sendadapter.cpp
@@ -1,11 +1,12 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <vespa/messagebus/testlib/receptor.h>
-#include <vespa/messagebus/testlib/simplemessage.h>
#include <vespa/messagebus/testlib/simpleprotocol.h>
#include <vespa/messagebus/testlib/simplereply.h>
#include <vespa/messagebus/testlib/slobrok.h>
#include <vespa/messagebus/testlib/testserver.h>
+#include <vespa/messagebus/network/rpcsendv1.h>
+#include <vespa/messagebus/network/rpcsendv2.h>
#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/log/log.h>
@@ -58,21 +59,7 @@ public:
bool start();
};
-class Test : public vespalib::TestApp {
-private:
- static const int TIMEOUT_SECS = 60;
-
- bool testVersionedSend(TestData &data,
- const vespalib::Version &srcVersion,
- const vespalib::Version &itrVersion,
- const vespalib::Version &dstVersion);
- void testSendAdapters(TestData &data);
-
-public:
- int Main() override;
-};
-
-TEST_APPHOOK(Test);
+static const int TIMEOUT_SECS = 6;
TestData::TestData() :
_slobrok(),
@@ -116,55 +103,8 @@ TestData::start()
return true;
}
-int
-Test::Main()
-{
- TEST_INIT("sendadapter_test");
-
- TestData data;
- ASSERT_TRUE(data.start());
-
- testSendAdapters(data); TEST_FLUSH();
-
- TEST_DONE();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Tests
-//
-////////////////////////////////////////////////////////////////////////////////
-
-void
-Test::testSendAdapters(TestData &data)
-{
- std::vector<vespalib::Version> versions;
- versions.push_back(vespalib::Version(5, 0));
- versions.push_back(vespalib::Version(5, 1));
-
- for (std::vector<vespalib::Version>::const_iterator srcVersion = versions.begin();
- srcVersion != versions.end(); ++srcVersion)
- {
- for (std::vector<vespalib::Version>::const_iterator itrVersion = versions.begin();
- itrVersion != versions.end(); ++itrVersion)
- {
- for (std::vector<vespalib::Version>::const_iterator dstVersion = versions.begin();
- dstVersion != versions.end(); ++dstVersion)
- {
- EXPECT_TRUE(testVersionedSend(data, *srcVersion, *itrVersion, *dstVersion));
- }
- }
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Utilities
-//
-////////////////////////////////////////////////////////////////////////////////
-
bool
-Test::testVersionedSend(TestData &data,
+testVersionedSend(TestData &data,
const vespalib::Version &srcVersion,
const vespalib::Version &itrVersion,
const vespalib::Version &dstVersion)
@@ -250,3 +190,36 @@ Test::testVersionedSend(TestData &data,
}
return true;
}
+
+
+void
+testSendAdapters(TestData &data, const std::vector<vespalib::Version> & versions)
+{
+ for (vespalib::Version src : versions) {
+ for (vespalib::Version intermediate : versions) {
+ for (vespalib::Version dst : versions) {
+ EXPECT_TRUE(testVersionedSend(data, src, intermediate, dst));
+ }
+ }
+ }
+}
+
+TEST("test that all known versions are present") {
+ TestData data;
+ ASSERT_TRUE(data.start());
+ EXPECT_TRUE(data._srcServer.net.getSendAdapter(vespalib::Version(5, 0)) != nullptr);
+ EXPECT_TRUE(dynamic_cast<mbus::RPCSendV1 *>(data._srcServer.net.getSendAdapter(vespalib::Version(5, 0))) != nullptr);
+ EXPECT_TRUE(data._srcServer.net.getSendAdapter(vespalib::Version(6, 147)) != nullptr);
+ EXPECT_TRUE(dynamic_cast<mbus::RPCSendV1 *>(data._srcServer.net.getSendAdapter(vespalib::Version(6, 147))) != nullptr);
+ EXPECT_TRUE(data._srcServer.net.getSendAdapter(vespalib::Version(6, 148)) != nullptr);
+ EXPECT_TRUE(dynamic_cast<mbus::RPCSendV2 *>(data._srcServer.net.getSendAdapter(vespalib::Version(6, 148))) != nullptr);
+
+}
+
+TEST("test that ee can send between multiple versions") {
+ TestData data;
+ ASSERT_TRUE(data.start());
+ TEST_DO(testSendAdapters(data, {vespalib::Version(5, 0), vespalib::Version(6, 147), vespalib::Version(6, 148)}));
+}
+
+TEST_MAIN() { TEST_RUN_ALL(); }
diff --git a/messagebus/src/vespa/messagebus/network/rpcnetwork.cpp b/messagebus/src/vespa/messagebus/network/rpcnetwork.cpp
index 4b4b23a75db..ad34ab2caff 100644
--- a/messagebus/src/vespa/messagebus/network/rpcnetwork.cpp
+++ b/messagebus/src/vespa/messagebus/network/rpcnetwork.cpp
@@ -181,7 +181,7 @@ RPCNetwork::attach(INetworkOwner &owner)
_sendV1->attach(*this);
_sendV2->attach(*this);
_sendAdapters[vespalib::Version(5)] = _sendV1.get();
- _sendAdapters[vespalib::Version(6, 142)] = _sendV2.get();
+ _sendAdapters[vespalib::Version(6, 148)] = _sendV2.get();
FRT_ReflectionBuilder builder(_orb.get());
builder.DefineMethod("mbus.getVersion", "", "s", true, FRT_METHOD(RPCNetwork::invoke), this);
@@ -204,8 +204,10 @@ RPCNetwork::getConnectionSpec() const
RPCSendAdapter *
RPCNetwork::getSendAdapter(const vespalib::Version &version)
{
- auto lower = _sendAdapters.lower_bound(version);
- return (lower != _sendAdapters.end()) ? lower->second : nullptr;
+ if (version < _sendAdapters.begin()->first) {
+ return nullptr;
+ }
+ return (--_sendAdapters.upper_bound(version))->second;
}
bool
diff --git a/messagebus/src/vespa/messagebus/network/rpcnetwork.h b/messagebus/src/vespa/messagebus/network/rpcnetwork.h
index 0cda6ffecb7..5e762f1a2a9 100644
--- a/messagebus/src/vespa/messagebus/network/rpcnetwork.h
+++ b/messagebus/src/vespa/messagebus/network/rpcnetwork.h
@@ -93,15 +93,6 @@ private:
Error resolveServiceAddress(RoutingNode &recipient, const string &serviceName);
/**
- * Determines and returns the send adapter that is compatible with the given
- * version. If no adapter can be found, this method returns null.
- *
- * @param version The version for which to return an adapter.
- * @return The compatible adapter.
- */
- RPCSendAdapter *getSendAdapter(const vespalib::Version &version);
-
- /**
* This method is a callback invoked after {@link #send(Message, List)} once
* the version of all recipients have been resolved. If all versions were
* resolved ahead of time, this method is invoked by the same thread as the
@@ -220,6 +211,15 @@ public:
*/
void replyError(const SendContext &ctx, uint32_t errCode, const string &errMsg);
+ /**
+ * Determines and returns the send adapter that is compatible with the given
+ * version. If no adapter can be found, this method returns null.
+ *
+ * @param version The version for which to return an adapter.
+ * @return The compatible adapter.
+ */
+ RPCSendAdapter *getSendAdapter(const vespalib::Version &version);
+
void attach(INetworkOwner &owner) override;
const string getConnectionSpec() const override;
bool start() override;