演练版本升级和回滚,遇到UNKNOWN Operation Type的错误

【详述】在测试环境进行版本升级和回滚演练,遇到UNKNOWN Operation Type的错误。
操作步骤:

  1. 先把2.3.10的集群升级到2.4.4,运行了约4个小时,没有问题。(看起来升级是完全成功的)

  2. 尝试回滚版本,按照官方文档,先设置ignore_unknown_log_id=true后,从followers开始,回滚版本,
    直至全部FE重启,回滚成功。

  3. 开始从followers开始,设置ignore_unknown_log_id=false后,继续重启。第一台followers重启成功,但是第二台出现错误,无法正常启动。(相关日志见附件1)

  4. 没有更好的办法,于是从这台无法正常启动的follower开始,重新进行版本升级,开始重复1的步骤,直至版本再次升级到2.4.4成功,运行了15分钟,没有问题。(看起来升级是完全成功的)

  5. 继续开始尝试回滚版本,设置了ignore_unknown_log_id=true的条件下,回滚版本成功。(见附件截图)

  6. 继续从曾经有问题的follower节点(10.70.2.122)开始,设置ignore_unknown_log_id=false后,重启失败,和之前的错误类似,换了一个元信息的Id。(相关日志见附件3)
    【背景】做过哪些操作?
    【业务影响】
    【StarRocks版本】从2.3.10升级到2.4.4,尝试从2.4.4回滚到2.3.10
    【集群规模】3fe+3be(fe与be混部)
    【机器信息】CPU虚拟核/内存/网卡,4C/8G
    【联系方式】jimokanghanchao@gmail.com
    【附件】

  7. 第一次follower启动失败的日志
    2023-03-20 13:14:47,279 INFO (replayer|64) [LoadManager.replayCreateLoadJob():128] LOAD_JOB=318986, msg={replay create load job}
    2023-03-20 13:14:47,280 ERROR (replayer|64) [BDBJournalCursor.next():117] fail to read journal entity key=14375620, will exit
    java.io.IOException: UNKNOWN Operation Type 10012
    at com.starrocks.journal.JournalEntity.readFields(JournalEntity.java:648) ~[starrocks-fe.jar:?]
    at com.starrocks.journal.bdbje.BDBJournalCursor.next(BDBJournalCursor.java:115) [starrocks-fe.jar:?]
    at com.starrocks.server.GlobalStateMgr.replayJournal(GlobalStateMgr.java:1721) [starrocks-fe.jar:?]
    at com.starrocks.server.GlobalStateMgr$4.runOneCycle(GlobalStateMgr.java:1518) [starrocks-fe.jar:?]
    at com.starrocks.common.util.Daemon.run(Daemon.java:115) [starrocks-fe.jar:?]

  8. 第二次follower启动失败的日志
    2023-03-20 13:50:22,050 ERROR (replayer|64) [BDBJournalCursor.next():117] fail to read journal entity key=14413918, will exit
    java.io.IOException: UNKNOWN Operation Type 10012
    at com.starrocks.journal.JournalEntity.readFields(JournalEntity.java:648) ~[starrocks-fe.jar:?]
    at com.starrocks.journal.bdbje.BDBJournalCursor.next(BDBJournalCursor.java:115) [starrocks-fe.jar:?]
    at com.starrocks.server.GlobalStateMgr.replayJournal(GlobalStateMgr.java:1721) [starrocks-fe.jar:?]
    at com.starrocks.server.GlobalStateMgr$4.runOneCycle(GlobalStateMgr.java:1518) [starrocks-fe.jar:?]
    at com.starrocks.common.util.Daemon.run(Daemon.java:115) [starrocks-fe.jar:?]

这个问题是回滚没有加ignore_unknown_log_id=true导致没有办法识别高版本的一些的feature,另外回滚完需要确保meta/image/下面有新的image文件生成,然后配置ignore_unknown_log_id=false再重启

原因应该搞清楚了,其实是新的image(对应回滚后的FE版本)在leader节点和另外一个follower节点上已经有了,但是出现问题的follower节点还没有(当前meta目录下的image对应的还是回滚前FE版本)。
看了下代码的处理,可以让这个节点启动时,设定下helper nodes,去主动获取下新的image。