订阅流表不断报错Read only object or object without ownership can't be applied to mutable function append!,请问是哪里不对?

做流计算的时候,遇到有一个订阅一直报错Read only object or object without ownership can't be applied to mutable function append!

attachments-2021-12-p6dgqEJ161b5be1657541.png

报错的订阅的具体实现:

attachments-2021-12-BmbyZwKc61b5bead4635f.png

另外,我还有一个订阅,也订阅了sTb_join12,在这个订阅的handler自定义函数里select查询了报错订阅的输出csEngine1。

attachments-2021-12-6QJDLHrt61b5bf6f6b7be.png请问是哪里有问题?

请先 登录 后评论

1 个回答

Yating Xie

报错的原因:函数(比如这里的append_plan函数)的参数里面没有加mutable的话,调用这个函数的时候会把这个对象(比如这里的csEngine1)设成readOnly,这时候如果有另一个线程去写这个对象(你的第一个订阅就在写csEngines1)的话会报上述错误。


解决方法一:订阅sTb_join12 的两个subscribeTable函数,传相同的hash值。因为hash值设为相同时,会在同一个线程中轮流处理这两个订阅任务,就避免了并发继而避免了报错。


解决方法二:你的两个订阅可以简化为一个,在自定义函数里append!横截面引擎,然后接着写你之前的自定义函数里的各种处理逻辑,这样保证了对表CSEngines1的append!和select查询两件事一定是串行的,示例如下:

attachments-2021-12-JkTpVBsV61b5c2419c9a4.png

请先 登录 后评论