-
Notifications
You must be signed in to change notification settings - Fork 0
20210510关于river node中,event与error的区别以及从而延伸出的一些逻辑规律上的总结
zqy edited this page May 10, 2021
·
1 revision
river-node层,event都是给程序员自己看的,同时99.9%的error也是给程序员自己看的,看的方式是,他们都会变成log
然而区别在于我不仅仅想看“错误”也想看一些“算不上是错误”的内容,于是Events就是为了解决此需求而存在了
对于error,除了“我作为程序员想自己看”这个属性之外,还有另一个存在意义,那就是各个warp_panich实体,系统需要他来决定“是不是到了断开某个river”的时候了
如上都是一些对river-node的总结
现在再说说river,就拿这两个“事件来说”:
TCPUSRIO808READER_INITSUCCESS =iota//是给我自己看的log
TCPUSRIO808READER_INITFAIL//也是给我自己看的,没必要告诉客户失败了,但是失败后需要做些类似重启的事
现在就可以首先总结出:第一个是event,第二个是error,因此他们需要放入两个不同的管道,于是river的Events顺理成章的也会为了解决此需求而存在了
不过INITFAIL这个错误,我作为程序员只需要知道“这个事”就行了,并不需要让系统基于“这个事”做些什么
因此有必要把他内部结构通过%v打散,这种才做再river-node中也是经常做的事,比如crc的:
p.config.Errors <-fmt.Errorf(
"%v", NewEvent(CRC_NOTPASS, p.config.UniqueId, hex.EncodeToString(mb),
fmt.Sprintf("[uid:%s]连续第%d次CRC校验失败,当前系统设定的最大连续失败次数为%d",
p.config.UniqueId, p.countor, p.config.Limit_Filter)))
从而在main层进行unwarp时识别出他没有别warp过后,分支出“除把这个error记录日志之外不进行其他操作”的业务逻辑
另一方面,显而易见的,river层有些error是需要被warp的,比如TCPUSRIO808READER_ERRORINLOOP