使用go-zookeeper api创建TTL节点总是显示无效参数

问题描述 投票:0回答:1

我在尝试创建 TTL 节点时遇到问题。在执行相应函数的过程中,我一直遇到“无效参数”错误。我已确保我的参数与函数定义一致,但错误仍然存在。难道是我使用的功能不正确?

API:

// CreateTTL creates a TTL znode, which will be automatically deleted by server after the TTL.
func (c *Conn) CreateTTL(path string, data []byte, flags int32, acl []ACL, ttl time.Duration) (string, error) {
    if err := validatePath(path, flags&FlagSequence == FlagSequence); err != nil {
        return "", err
    }
    if flags&FlagTTL != FlagTTL {
        return "", ErrInvalidFlags
    }

    res := &createResponse{}
    _, err := c.request(opCreateTTL, &CreateTTLRequest{path, data, acl, flags, ttl.Milliseconds()}, res, nil)
    return res.Path, err}

我的代码:

import "github.com/go-zookeeper/zk"
conn, _, err := zk.Connect( []string{"[***]:***"}, time.Second*5)
if err != nil {
     hlog.Errorf("[ZK] Connect returned error: %v", err)
}
res, err := conn.CreateTTL("/test", []byte("ttl node"), zk.FlagTTL, zk.WorldACL(zk.PermAll), time.Second)

我尝试更改 ttl、路径、数据参数,但仍然返回此错误

go apache-zookeeper zk ttl znodes
1个回答
0
投票

代码没问题,原因是我的Zookeeper服务器中的TTL节点未启用。 请注意,从 3.5.3 开始,Zookeeper 支持创建 Time-To-Live (TTL) 节点,但我们可能需要手动添加这 2 个设置并重新启动 Zookeeper 服务器。

znode.container.checkIntervalMs=60000
znode.container.maxPerMinute=10000

这些配置启用了Zookeeper中容器节点和TTL节点的删除操作的调度。第一个控制每次运行删除操作之间的时间间隔(以毫秒为单位),默认值为 60000 毫秒(或 1 分钟)。第二个控制每分钟最多删除多少个节点,默认值为 10000。

© www.soinside.com 2019 - 2024. All rights reserved.