Skip to content

升级 ​

Simba 在源码层面遵循 语义化版本:在同一主版本内升级时,基于旧版本编译通过的代码无需修改即可 基于新版本编译通过,因此升级时请重新编译。不承诺二进制兼容(不重新编译就运行基于另一版本编译的代码)。以下内容的源码不兼容变更只会出现在主版本中:

范围包括
核心 APIme.ahoo.simba、me.ahoo.simba.partition、me.ahoo.simba.event、me.ahoo.simba.spi 的公共类型
后端simba-jdbc、simba-redis、simba-spring-redis、simba-zookeeper 的公共类(JdbcLeaseBackend、Dialect、RedisLeaseBackend、RedisScripting、SpringRedisScripting、ZookeeperLeaseBackend 等)
Spring Boot starter公共类型和注解(@SimbaScheduled、@SimbaPartitioned、各 *Properties 类、SimbaLifecycle、MicrometerSimbaEventListener、SimbaEndpoint、SimbaHealthIndicator)、simba.* 属性、bean 名称和条件
协程simba-coroutines(5.1 起):me.ahoo.simba.coroutines 的函数和类型(awaitAcquire、awaitTryAcquire、withLock、awaitRevoked、SimbaEventFlow)
测试套件simba-testing(InMemoryLeaseBackend、VirtualClock、VirtualScheduler、Simulation)和 simba-tck(LeaseBackendSpec、FencingSpec)
可观测性指标名和标签键、Actuator 端点和健康指示器的 JSON 字段
存储JDBC schema、Redis 键和消息、Zookeeper 路径

次版本可能新增字段、标签、枚举常量和事件:读取 JSON、对 Simba 的枚举和事件做 when 判断时请容忍新增。标注了 @InternalSimbaApi 的类型(引擎、Simba.Builder.scheduler、Simba.awaitIdle)以及所有 internal 声明不提供这一保证。

从 4.x 升级 ​

5.0 在 API、配置和存储上都与 4.x 不兼容,切换前需要停止所有节点。请按照 从 4.x 迁移到 5.0 操作。

5.x 内部升级 ​

次版本和补丁版本保持存储格式不变,因此不同 5.x 版本的节点可以竞争同一名称,你可以逐个节点滚动升级。发布说明列出了所有变更: GitHub Releases。

从 5.0 升级到 5.1 ​

5.1 新增了 API,调整了 Redis 后端在 Cluster 上的调用计时,并沿用 5.0 的存储格式,因此两个版本的节点可以同时运行:

  • DistributedLock.acquireAsync(timeout) 和 tryAcquireAsync() 以不阻塞的方式获取锁,参阅 锁。它们是默认方法,你自己的 DistributedLock 实现无需修改即可编译。
  • 新的可选模块 simba-coroutines 提供挂起版的锁调用、withLock、Term.awaitRevoked() 和 SimbaEventFlow;它依赖 kotlinx-coroutines-core,simba-core 不依赖它。
  • simba-testing:InMemoryLeaseBackend.builder() 还可以设置 sessionBoundGrants,让一次授予只持续会话剩余的时长,与 Redis 相同;SimulationParams 新增 sessionBoundGrants、truncatedGrantShare、meanInjectionInterval、 groupPartitions 和 earlyCloseShare(参阅测试)。已有的构造器和参数保持不变。
  • Redis 开启 routeBySlot(Cluster)时,一次调用先在会话所在的槽运行脚本,再为每个租约或组所在的槽各运行一个脚本 (Cluster):
    • 从发出会话调用起经过的时间达到会话剩余时长后,获取和加入不再向其他槽发送任何脚本,并以 SimbaException 失败。回复晚于这个时长才到达的获取会释放它开始的任期(包括已经授予成功的槽)并失败;引擎会像其他失败的调用一样重试。
    • 租约槽仍按自己的时钟授予一个完整的会话租期,持有者再次获取时也按此延长,与 5.0 相同。
    • 续约现在只按会话还剩的时长(续约后的剩余时长减去从会话调用返回起经过的时间)延长租约和成员资格,而不是从脚本执行时起延长一个完整租期:延迟的续约不会再让已死亡会话的租约多保留最多两个租期。
    • 不再比较不同节点的 TIME。

基于 Apache License 2.0 发布。