0

我正在使用集群 ML 4.2.9 服务器更新XDBC服务器配置

admin:appserver-set-max-time-limit($config,$id,$maxTimeLimit )
admin:save-configuration-without-restart()

然而,在设置了这个配置之后,MarkLogic 指定了 2 种持久化这个变化的方法。

  1. 管理员:保存配置,无需重启()
  2. 管理员:保存配置()

对于 1,ML 文档指出“如果您使用此功能保存任何需要重新启动服务器的更改(“冷”更改,例如 App Server 端口分配更改),则更改将在下次 MarkLogic Server 重新启动时生效(尽管它们将保存在配置中)”

有人可以告诉我,admin:appserver-set-max-time-limit是冷变化还是热变化。意思是,如果我使用admin:save-configuration-without-restart()(我打算使用),我的更改会尽快生效。否则,我将不得不将这些更改按计划进行,以便将服务器停机时间考虑在内。

谢谢

4

3 回答 3

2

我刚刚运行了 xquery

admin:appserver-set-max-time-limit($config,$id,$maxTimeLimit )
admin:save-configuration-without-restart()

并设置 $maxTimeLimit=60 秒,我仍然可以看到其他 XQueries 运行超过 1 分钟。所以,我猜这个改变需要服务器冷重启。

但是,如果有人知道,请告诉我。

于 2012-09-03T15:38:13.647 回答
2

这是一个热变化。您可以在管理 UI 中看到这一点:“最大时间限制”旁边没有星号 (*)。

但是您的代码看起来很有趣,我认为这就是它不起作用的原因。再看一下http://docs.marklogic.com/5.0doc/docapp.xqy#display.xqy?fname=http://pubs/5.0doc/apidoc/admin.xml&category=Admin+Library&function=admin上的示例:save-configuration-without-restart

let $config := admin:get-configuration()
let $spec := admin:forest-set-enabled($config, 
  xdmp:forest("myForest"), fn:true() )
return
  admin:save-configuration-without-restart($spec)

您的代码缺少 admin:save-configuration-without-restart() 的参数,因此它什么也不做。此外,保存新版本的配置至关重要。XQuery 变量通常是不可变的,因此示例使用一个新变量来执行此操作。您也可以回收相同的变量名,但重要的是要了解这是重用而不是突变。

let $config := admin:get-configuration()
let $config := admin:forest-set-enabled($config,
  xdmp:forest("myForest"), fn:true() )
return
  admin:save-configuration-without-restart($config)

或者这更接近我通常做的,xdmp:set用于突变。我不会xdmp:set在大多数应用程序代码中使用,但对于部署而言,引入可变性的好处超过了缺点。

declare variable $CFG := admin:get-configuration() ;

xdmp:set(
  $CFG, admin:forest-set-enabled($CFG, xdmp:forest("myForest"), fn:true())
,
admin:save-configuration-without-restart($CFG)

对此进行测试的一种方法是查看管理 UI。如果它没有反映您的更改,无论是否重新启动,那么您的代码有问题。

于 2012-09-03T18:20:59.573 回答
0

@mlakele 这是我使用的实际代码

xquery version "1.0-ml"; 

import module namespace admin = "http://marklogic.com/xdmp/admin" 
          at "/MarkLogic/admin.xqy";

declare variable $maxTimeLimit := 60;
declare variable $defaultTimeLimit := 60;

if ($defaultTimeLimit<=$maxTimeLimit) 
then ( 
    let $config := admin:get-configuration()
    let $groupid := admin:group-get-id($config, "Default")
    let $ids:= admin:group-get-xdbcserver-ids($config, $groupid)
    return (
            for $id in $ids 
                        return 
            let $new_config := admin:appserver-set-max-time-limit($config,$id,$maxTimeLimit )
                let $final_config := admin:appserver-set-default-time-limit($new_config,$id,$defaultTimeLimit )
                return admin:save-configuration-without-restart($final_config)

))
else ()

这对我有用,我可以在管理 UI 中看到超时值已更新。但是,当我运行另一个通常需要 60 多秒的 XQuery 时,它不会超时。有什么理由吗?此外, http: //docs.marklogic.com/5.0doc/docapp.xqy#display.xqy?fname=http ://pubs/5.0doc/apidoc/admin.xml&category=Admin+Library&function=admin:save 的示例-configuration-without-restart不谈使用admin:forest-set-enabled($config,xdmp:forest("myForest"), fn:true() )

真的需要调用 admin:forest-set-enabled 吗?如我所见,配置更改已存储(尽管它们无效)

于 2012-09-04T08:59:43.397 回答