diff --git a/service/arangod_config_builder.go b/service/arangod_config_builder.go index 86010de6..db5a28c3 100644 --- a/service/arangod_config_builder.go +++ b/service/arangod_config_builder.go @@ -143,7 +143,8 @@ func createArangodConf(log zerolog.Logger, bsCfg BootstrapConfig, myHostDir, myC // createArangodArgs returns the command line arguments needed to run an arangod server of given type. func createArangodArgs(log zerolog.Logger, config Config, clusterConfig ClusterConfig, myContainerDir, myContainerLogFile string, - myPeerID, myAddress, myPort string, serverType ServerType, arangodConfig configFile, agentRecoveryID string, databaseAutoUpgrade bool) []string { + myPeerID, myAddress, myPort string, serverType ServerType, arangodConfig configFile, agentRecoveryID string, databaseAutoUpgrade bool, + features DatabaseFeatures) []string { containerConfFileName := filepath.Join(myContainerDir, arangodConfFileName) args := make([]string, 0, 40) @@ -165,6 +166,11 @@ func createArangodArgs(log zerolog.Logger, config Config, clusterConfig ClusterC optionPair{"--log.file", slasher(myContainerLogFile)}, optionPair{"--log.force-direct", "false"}, ) + + if !config.RunningInDocker && features.HasCopyInstallationFiles() { + options = append(options, optionPair{"--javascript.copy-installation", "true"}) + } + if databaseAutoUpgrade { options = append(options, optionPair{"--database.auto-upgrade", "true"}) diff --git a/service/database_features.go b/service/database_features.go index 5fad5d68..bda7000c 100644 --- a/service/database_features.go +++ b/service/database_features.go @@ -29,8 +29,9 @@ import driver "github.com/arangodb/go-driver" type DatabaseFeatures driver.Version const ( - v32 driver.Version = "3.2.0" - v34 driver.Version = "3.4.0" + v32 driver.Version = "3.2.0" + v33_17 driver.Version = "3.3.17" + v34 driver.Version = "3.4.0" ) // NewDatabaseFeatures returns a new DatabaseFeatures based on @@ -52,3 +53,14 @@ func (v DatabaseFeatures) DefaultStorageEngine() string { } return "mmfiles" } + +// HasCopyInstallationFiles does server support copying installation files +func (v DatabaseFeatures) HasCopyInstallationFiles() bool { + if driver.Version(v).CompareTo(v34) >= 0 { + return true + } + if driver.Version(v).CompareTo(v33_17) >= 0 { + return true + } + return false +} diff --git a/service/runtime_server_manager.go b/service/runtime_server_manager.go index 51d1d297..b401fd81 100644 --- a/service/runtime_server_manager.go +++ b/service/runtime_server_manager.go @@ -167,7 +167,8 @@ func startServer(ctx context.Context, log zerolog.Logger, runtimeContext runtime clusterConfig, myPeer, _ := runtimeContext.ClusterConfig() upgradeManager := runtimeContext.UpgradeManager() databaseAutoUpgrade := upgradeManager.ServerDatabaseAutoUpgrade(serverType) - args, err := createServerArgs(log, config, clusterConfig, myContainerDir, myContainerLogFile, myPeer.ID, myHostAddress, strconv.Itoa(myPort), serverType, arangodConfig, containerSecretFileName, bsCfg.RecoveryAgentID, databaseAutoUpgrade) + args, err := createServerArgs(log, config, clusterConfig, myContainerDir, myContainerLogFile, myPeer.ID, myHostAddress, strconv.Itoa(myPort), serverType, arangodConfig, + containerSecretFileName, bsCfg.RecoveryAgentID, databaseAutoUpgrade, features) if err != nil { return nil, false, maskAny(err) } diff --git a/service/server_config_builder.go b/service/server_config_builder.go index 3e54488c..c5f33420 100644 --- a/service/server_config_builder.go +++ b/service/server_config_builder.go @@ -75,10 +75,10 @@ func collectServerConfigVolumes(serverType ServerType, config configFile) []Volu // createServerArgs returns the command line arguments needed to run an arangod/arangosync server of given type. func createServerArgs(log zerolog.Logger, config Config, clusterConfig ClusterConfig, myContainerDir, myContainerLogFile string, myPeerID, myAddress, myPort string, serverType ServerType, arangodConfig configFile, - clusterJWTSecretFile, agentRecoveryID string, databaseAutoUpgrade bool) ([]string, error) { + clusterJWTSecretFile, agentRecoveryID string, databaseAutoUpgrade bool, features DatabaseFeatures) ([]string, error) { switch serverType.ProcessType() { case ProcessTypeArangod: - return createArangodArgs(log, config, clusterConfig, myContainerDir, myContainerLogFile, myPeerID, myAddress, myPort, serverType, arangodConfig, agentRecoveryID, databaseAutoUpgrade), nil + return createArangodArgs(log, config, clusterConfig, myContainerDir, myContainerLogFile, myPeerID, myAddress, myPort, serverType, arangodConfig, agentRecoveryID, databaseAutoUpgrade, features), nil case ProcessTypeArangoSync: return createArangoSyncArgs(log, config, clusterConfig, myContainerDir, myContainerLogFile, myPeerID, myAddress, myPort, serverType, clusterJWTSecretFile) default: