limitations under the License.
*/
-#include "private/redis/asyncdatabasediscovery.hpp"
-#include "private/databaseconfiguration.hpp"
-#include "private/logger.hpp"
+/*
+ * This source code is part of the near-RT RIC (RAN Intelligent Controller)
+ * platform project (RICP).
+*/
+
#include <cstdlib>
#include "config.h"
+#include "private/abort.hpp"
+#include "private/databaseconfiguration.hpp"
+#include "private/logger.hpp"
+#include "private/redis/asyncdatabasediscovery.hpp"
#if HAVE_HIREDIS
#include "private/redis/asynchiredisdatabasediscovery.hpp"
#endif
-#include "private/abort.hpp"
+#include "private/redis/asyncsentineldatabasediscovery.hpp"
using namespace shareddatalayer::redis;
std::shared_ptr<AsyncDatabaseDiscovery> AsyncDatabaseDiscovery::create(std::shared_ptr<Engine> engine,
const boost::optional<Namespace>& ns,
const DatabaseConfiguration& staticDatabaseConfiguration,
+ const boost::optional<std::size_t>& addressIndex,
std::shared_ptr<Logger> logger)
{
- auto staticAddresses(staticDatabaseConfiguration.getServerAddresses());
+ auto staticAddresses(staticDatabaseConfiguration.getServerAddresses(addressIndex));
if (staticAddresses.empty())
staticAddresses = staticDatabaseConfiguration.getDefaultServerAddresses();
SHAREDDATALAYER_ABORT("No Hiredis vip for Redis cluster configuration");
#endif
else
+ {
#if HAVE_HIREDIS
- return std::make_shared<AsyncHiredisDatabaseDiscovery>(engine,
- ns,
- DatabaseInfo::Type::SINGLE,
- staticAddresses,
- logger);
+ if (staticDbType == DatabaseConfiguration::DbType::REDIS_SENTINEL ||
+ staticDbType == DatabaseConfiguration::DbType::SDL_SENTINEL_CLUSTER)
+ {
+ auto sentinelAddress(staticDatabaseConfiguration.getSentinelAddress(addressIndex));
+ if (sentinelAddress)
+ return std::make_shared<AsyncSentinelDatabaseDiscovery>(engine,
+ logger,
+ *sentinelAddress,
+ staticDatabaseConfiguration.getSentinelMasterName());
+ else
+ SHAREDDATALAYER_ABORT("Sentinel address not configured.");
+ }
+ else
+ {
+ return std::make_shared<AsyncHiredisDatabaseDiscovery>(engine,
+ ns,
+ DatabaseInfo::Type::SINGLE,
+ staticAddresses,
+ logger);
+ }
#else
static_cast<void>(logger);
SHAREDDATALAYER_ABORT("No Hiredis");
#endif
+ }
}
-