From cecaba065d9f9a9ff93dfa7c0f85d6a428be83c1 Mon Sep 17 00:00:00 2001 From: Oleksandr Vayda Date: Fri, 5 Jul 2024 02:41:25 +0200 Subject: [PATCH] issue #1335 Upgrade to ArangoDB 3.11 --- .../za/co/absa/spline/admin/AdminCLI.scala | 2 +- .../spline/arango/ArangoManagerFactory.scala | 4 +- arangodb-foxx-services/package-lock.json | 101 ++++++------------ .../test/fixture/ArangoDbFixtureLike.scala | 4 +- .../persistence/ArangoDatabaseFacade.scala | 18 ++-- .../spline/persistence/ArangoRepoConfig.scala | 13 ++- 6 files changed, 52 insertions(+), 90 deletions(-) diff --git a/admin/src/main/scala/za/co/absa/spline/admin/AdminCLI.scala b/admin/src/main/scala/za/co/absa/spline/admin/AdminCLI.scala index fd25c2bdf..af1a0c84d 100644 --- a/admin/src/main/scala/za/co/absa/spline/admin/AdminCLI.scala +++ b/admin/src/main/scala/za/co/absa/spline/admin/AdminCLI.scala @@ -59,7 +59,7 @@ object AdminCLI extends App { ) } - private val dbManagerFactory = new ArangoManagerFactoryImpl(activeFailover = false) + private val dbManagerFactory = new ArangoManagerFactoryImpl private val maybeConsole = InputConsole.systemConsoleIfAvailable() new AdminCLI(dbManagerFactory, maybeConsole).exec(args) diff --git a/admin/src/main/scala/za/co/absa/spline/arango/ArangoManagerFactory.scala b/admin/src/main/scala/za/co/absa/spline/arango/ArangoManagerFactory.scala index db05aaa4d..a8c2805d8 100644 --- a/admin/src/main/scala/za/co/absa/spline/arango/ArangoManagerFactory.scala +++ b/admin/src/main/scala/za/co/absa/spline/arango/ArangoManagerFactory.scala @@ -30,7 +30,7 @@ trait ArangoManagerFactory { def create(connectionURL: ArangoConnectionURL, maybeSSLContext: Option[SSLContext], dryRun: Boolean): ArangoManager } -class ArangoManagerFactoryImpl(activeFailover: Boolean)(implicit ec: ExecutionContext) extends ArangoManagerFactory { +class ArangoManagerFactoryImpl(implicit ec: ExecutionContext) extends ArangoManagerFactory { override def create(connectionURL: ArangoConnectionURL, maybeSSLContext: Option[SSLContext], dryRun: Boolean): ArangoManager = { val scriptRepo = MigrationScriptRepository @@ -54,7 +54,7 @@ class ArangoManagerFactoryImpl(activeFailover: Boolean)(implicit ec: ExecutionCo } def dbFacade(): ArangoDatabaseFacade = - new ArangoDatabaseFacade(connectionURL, maybeSSLContext, activeFailover) + new ArangoDatabaseFacade(connectionURL, maybeSSLContext, activeFailover = false) AutoClosingArangoManagerProxy.create(dbManager, dbFacade) } diff --git a/arangodb-foxx-services/package-lock.json b/arangodb-foxx-services/package-lock.json index 921fee88d..9f9a56b2d 100644 --- a/arangodb-foxx-services/package-lock.json +++ b/arangodb-foxx-services/package-lock.json @@ -97,9 +97,9 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -153,9 +153,9 @@ } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -5340,9 +5340,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -7592,18 +7592,6 @@ "node": ">=8" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -7620,9 +7608,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -8632,13 +8620,10 @@ } }, "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -9947,12 +9932,6 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/yargs": { "version": "17.5.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", @@ -10099,9 +10078,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -10144,9 +10123,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -14042,9 +14021,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -15732,15 +15711,6 @@ "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -15751,9 +15721,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -16499,13 +16469,10 @@ } }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true }, "semver-regex": { "version": "3.1.4", @@ -17445,12 +17412,6 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "yargs": { "version": "17.5.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", diff --git a/integration-tests/src/main/scala/za/co/absa/spline/test/fixture/ArangoDbFixtureLike.scala b/integration-tests/src/main/scala/za/co/absa/spline/test/fixture/ArangoDbFixtureLike.scala index 26e7cbe59..0a75a34b1 100644 --- a/integration-tests/src/main/scala/za/co/absa/spline/test/fixture/ArangoDbFixtureLike.scala +++ b/integration-tests/src/main/scala/za/co/absa/spline/test/fixture/ArangoDbFixtureLike.scala @@ -18,7 +18,7 @@ package za.co.absa.spline.test.fixture import com.arangodb.async.ArangoDatabaseAsync import io.testcontainers.arangodb.containers.ArangoContainer -import za.co.absa.spline.persistence.ArangoDatabaseFacade.MinArangoVerRecommended +import za.co.absa.commons.version.Version._ import za.co.absa.spline.persistence.{ArangoConnectionURL, ArangoDatabaseFacade} trait ArangoDbFixtureLike { @@ -42,6 +42,6 @@ trait ArangoDbFixtureLike { } object ArangoDbFixtureLike { - private val ArangoDbVersion = MinArangoVerRecommended + private val ArangoDbVersion = ver"3.11" private val ArangoDbContainer: ArangoContainer = new ArangoContainer(ArangoDbVersion.asString).withoutAuth() } diff --git a/persistence/src/main/scala/za/co/absa/spline/persistence/ArangoDatabaseFacade.scala b/persistence/src/main/scala/za/co/absa/spline/persistence/ArangoDatabaseFacade.scala index 26201e4d5..8ec59a433 100644 --- a/persistence/src/main/scala/za/co/absa/spline/persistence/ArangoDatabaseFacade.scala +++ b/persistence/src/main/scala/za/co/absa/spline/persistence/ArangoDatabaseFacade.scala @@ -74,8 +74,8 @@ object ArangoDatabaseFacade extends LazyLogging { import za.co.absa.commons.version.Version._ - val MinArangoVerRequired: Version = semver"3.6.0" - val MinArangoVerRecommended: Version = ver"3.10" + private val ArangoDBVerMinIncluding = semver"3.9.0" + private val ArangoDBVerMaxExcluding = Option(semver"3.12.0") private def warmUpDb(db: ArangoDatabaseAsync): Unit = { val verStr = try { @@ -93,16 +93,10 @@ object ArangoDatabaseFacade extends LazyLogging { val arangoVer = Version.asSemVer(verStr) // check ArangoDb server version requirements - if (arangoVer < MinArangoVerRequired) + if (arangoVer < ArangoDBVerMinIncluding) sys.error(s"" + - s"Unsupported ArangoDB server version ${arangoVer.asString}. " + - s"Required version: ${MinArangoVerRequired.asString} or later. " + - s"Recommended version: ${MinArangoVerRecommended.asString} or later.") - - if (arangoVer < MinArangoVerRecommended) - logger.warn(s"WARNING: " + - s"The ArangoDB server version ${arangoVer.asString} might contain a bug that can cause Spline malfunction. " + - s"It's highly recommended to upgrade to ArangoDB ${MinArangoVerRecommended.asString} or later. " + - s"See: https://github.com/arangodb/arangodb/issues/12693") + s"Unsupported ArangoDB server version detected: ${arangoVer.asString}. " + + s"Please upgrade ArangoDB to version ${ArangoDBVerMinIncluding.asString} or higher" + + (ArangoDBVerMaxExcluding.map(v => s" (but less than ${v.asString} which is currently not supported).") getOrElse ".")) } } diff --git a/persistence/src/main/scala/za/co/absa/spline/persistence/ArangoRepoConfig.scala b/persistence/src/main/scala/za/co/absa/spline/persistence/ArangoRepoConfig.scala index d9e712988..657e2ac65 100644 --- a/persistence/src/main/scala/za/co/absa/spline/persistence/ArangoRepoConfig.scala +++ b/persistence/src/main/scala/za/co/absa/spline/persistence/ArangoRepoConfig.scala @@ -49,7 +49,7 @@ class ArangoRepoConfig extends InitializingBean with LazyLogging { @Bean def databaseVersionChecker: DatabaseVersionChecker = new DatabaseVersionChecker(databaseVersionManager) } -object ArangoRepoConfig extends DefaultConfigurationStack with ConfTyped { +object ArangoRepoConfig extends DefaultConfigurationStack with ConfTyped with LazyLogging { import za.co.absa.commons.config.ConfigurationImplicits._ @@ -67,8 +67,15 @@ object ArangoRepoConfig extends DefaultConfigurationStack with ConfTyped { val DisableSSLValidation: Boolean = conf.getBoolean(Prop("disableSslValidation"), false) - val ActiveFailoverMode: Boolean = - conf.getBoolean(Prop("activeFailover"), false) + val ActiveFailoverMode: Boolean = { + val enabled = conf.getBoolean(Prop("activeFailover"), false) + if (enabled) { + // Active failover mode is deprecated in Arango ver 3.11, and to be removed in ver 3.12. + // See https://docs.arangodb.com/3.11/release-notes/version-3.11/incompatible-changes-in-3-11/#active-failover-deployment-mode-deprecation + logger.warn("Active failover mode is deprecated and will be removed in the future versions.") + } + enabled + } } }