Skip to content

Instantly share code, notes, and snippets.

@anson0370
Created December 8, 2011 05:20
Show Gist options
  • Save anson0370/1446192 to your computer and use it in GitHub Desktop.
Save anson0370/1446192 to your computer and use it in GitHub Desktop.
change log for kongur

Change log of Kongur

TODO list

主要工作是更加的stable

  • 慢SQL优化,解决DB波动时出现调用超时的情况。现在已经优化掉一个很大的全表扫描同时增加了tddl数据源做中间层,等封网后发布

  • 另一种hsf调用的配置方式,主要为了解决groovy建立和维护与流程分离以及通过implant调用hsf会出现找不到地址的问题

  • 优化持久化结构,减少数据量,识别僵尸流程并提供归档和迁移数据的方案,解决DB太大的问题


2.1.2.14

  • [*]修正节点执行动作,现在对每个节点的transition计算动作也会包裹在NodeExecuteListenerbeforeafter动作中间了

2.1.2.13

  • [+]增加方法taskAccessor.getAllTaskIncludeSubProcess(processInstanceId)

    此方法会按照创建时间正序返回这个流程下(包括子流程)所有的任务(历史和当前、完成和未完成、被转派过等的所有任务)

  • [+]现在task标签的timeout子标签支持多个,可以通过下面这样的形式来选择触发一个超时动作

    <task ...>
        ...
        <timeout ... expr="${timeoutGoing==1}"/>
        <timeout ... expr="${timeoutGoing==2}"/>
        <timeout ... expr="${timeoutGoing==3}"/>
    </task>
    

    如果可能被触发的超时动作是复数,则只有第一个(XML中的字面顺序)会生效,其余的无效

  • [+]新增三个操作任务超时动作的方法 - taskAccessor.refreshTaskTimeout刷新任务超时时间,重新开始计时 - taskAccessor.removeTaskTimeout移除任务的超时动作 - taskAccessor.removeAllTaskTimeout移除流程的所有任务的超时动作

  • [*]taskAccessor.getTaskRemainingTime现在不再在不存在超时动作时抛出NPE,转而返回-1

  • [*]历史迁移的时候现在会删除任何可能存在的没用的job记录

  • [*]现在创建task的时候获取处理人出错会抛出为BizException方便重试

  • [+]现在task下的timeout节点增加了表达式支持,可动态决定是否需要timeout动作

    <task ...>
        ...
        <timeout ... expr="${isNeedTimeout}"/>
    </task>
    
  • [+]现在ignoreWeekEnd可以正确忽略法定节假日了,而不再只忽略固定的双休日,但暂时仅支持2012年


2.1.2.12

  • [*]重构申领任务的接口,现在单用户的任务也可以申领了,和多用户保持行为一致

  • [-]去掉了TASK_TYPE_GROUP这个任务类型,因为未使用,对用户组的赋权最终还是会变成TASK_TYPE_MULTI_USER


2.1.2.11

  • [*]修改部分日志输出

  • [+]新增在hecla权限系统下支持通过权限名获取一个权限点下的用户

    在task标签中配置permission-name来给一个任务分配一个权限点的所有用户

    <task permission-name="Ark_Modify_Seller">
        ...
    </task>
    

    当然,也可以使用变量来配置

    <task permission-name="${permissionName}">
        ...
    </task>
    
  • [+]新增接口taskAccessor.queryHistTaskInlcudeSubProcess

    在查询历史任务的时候包含子流程

  • [*]升级taobao-pamirs-schedule2.0.3.5,以修正一个偶尔会在心跳时死锁的BUG

    同时修改PMC中schedule并发时可能出现的脏数据的问题


2.1.2.10

  • [*]现在processAccessor.queryProcess接口可以根据parentId查询了

  • [*]延迟20s启动心跳 并在启动出错后延迟3s循环重试 避免初始化sqlMapClient打出错误日志

  • [-]暂时去掉生成流程图片时的错误堆栈

  • [-]去除enableTddl配置项

    因为表前缀功能现在也不使用tddl实现了,分库分表则由外部数据源来做,所以这个配置项已经没用了

  • [+]为processService添加修改流程实例的接口

  • [*]优化查询task的SQL性能(MySQL)

    不再关联查询kongur_taskkongur_participation,同时优化分页查询时的磁盘性能损耗

  • [*]修复重试时流程状态不正常还继续重试的问题

    重试时发现流程状态不正常无法重试直接删除重试记录,避免数据堆积无限重试

  • [*]优化结构 嵌入式情况下减少不需要的表

    列出可精简的表

    1. PmcConfigenableArchive = false(默认就是false)

      kongur_app_archive
      kongur_app_archive_config
      kongur_stat
      kongur_stat_config
      
    2. PmcConfigenableVarTrace = false(默认就是false)

      kongur_variable_trace
      kongur_hist_var_trace
      
    3. PmcConfigenableHistMove = false(默认为true)

      kongur_hist_activity
      kongur_hist_participation
      kongur_hist_task
      kongur_hist_var
      kongur_hist_webpage
      
    4. 当PmcConfig中enableDschedule = false(默认就是false)

       pamirs_schedule_queue
       pamirs_schedule_tasktype
       pamirs_schedule_tasktrun
       pamirs_schedule_server
       pamirs_schedule_server_his
      
  • [*]修改插入待调度数据的时候runtimeEnv获取当前process持久化的runtimeEnv而非当前机器配置的runtimeEnv

  • [*]修改PMC中serverConnectorserviceNamekongur

    避免使用默认值可能出现的java.rmi.AlreadyBoundException(原因未确定,猜测)

  • [*]修复当子流程唤醒主流程动作失败的时候不可再唤醒的问题

    改变了子流程唤醒主流程的方式,由异步事件改为通过schedule唤醒,并且记录未完成activity以保证失败后有足够的信息重新唤醒


2.1.2.9

  • [*]修复PmcConfig配置的clientMode方式不可用的问题

    可以通过这种配置方式连接中心化PMC发布的hsf接口

  • [-]表前缀功能不再依赖与tddl,因此去掉tddl-client的依赖并删除kongur-adaptor-tddl

    之前表前缀功能使用tddl实现,但并未使用tddl分库分表等功能,有点多余,所以去掉tddl,改为自己实现 如果pom中有依赖kongur-adaptor-tddl,现在可以删除了。

  • [*]升级tddl-sequence到推荐版本2.4.3,功能无影响

    需要注意的是类com.taobao.tddl.client.sequence.exception.SequenceException的包路径在新版本中被修改了,如果业务系统用到tddl-sequence则最好使用相同版本

  • [*]优化异步执行的子流程对主流程ID的持久化记录

    之前为了防止异步执行的子流程执行完后尝试唤醒主流程可能导致的错误而没有记录主流程ID。 现在为了不增加数据表字段而暂时记录了一个负值的主流程ID,后续可能需要再优化

  • [+]增加关闭流程引擎的接口

    /**
     * 关闭流程引擎
     * <p>
     * 包括关闭流程执行的开关;关闭时间程序和心跳;关闭tbschedule调度<br>
     * 可期望达到的效果是任何流程节点在调用的一秒内不会再被执行,但不保证和流程无关的接口不可调用<br>
     * 在等待时间结束前的所有调用都会暂停并正常返回<br>
     * 而等待时间结束后任何尝试执行流程节点的动作都会抛出错误到上层接口(具体接口返回的错误形式不定,调用方应该也不需要关心)<br>
     * 典型的使用方式是只需要调用shutDown(2000L)后就不用管了
     *
     * @param waitTime 等待时间毫秒数
     * @return 是否成功
     */
    public boolean controlService.shutDown(long waitTime);
    
  • [*]taobao-pamirs-transaction升级到1.0.6,功能无变化,修复了那个猛刷WARN日志的BUG……

  • [*]uic-client升级到3.1.3.3

    因为发现之前使用的3.0.3在taobao maven repo中已经没有了,PMC中的uic调用只在任务流发消息时取邮件和旺旺使用,绝大部分情况下不会用到,对uic的依赖是provided的

  • [+]PmcConfig增加配置项enableVarTrace,默认为false

    该功能是把每个节点的当前变量集状态序列化为json通过异步方式存入数据库,原意是方便排查错误,但就长久使用情况来看基本是用不到的,所以关闭

  • [+]添加模板作用范围的节点执行前后事件配置

    该功能可以在每一个节点执行前后调用业务方代码

    global节点中添加子节点nodeListener,暂时只有一个属性beanId并且暂时也只支持spring bean的调用方式。该bean需要实现接口NodeExecuteListener

    一个简单的例子看起来是这样的

    <process ..>
      <global>
        <nodeListener beanId="someBean" />
        ...
      </global>
      ...
    </process>
    
  • [+]增加暂停和恢复任务超时时间的接口

    /**
     * 暂停或激活任务的超时完成处理
     * <p>
     * 暂停或激活一个任务的超时处理,不存在超时动作时NPE
     *
     * @param taskId 任务id
     * @param active false为暂停 true为重新激活
     * @return [!注意!]这里返回的并非操作是否成功,而是超时动作的原始状态,true为激活,false为暂停
     * @throws NullPointerException 如果任务并不存在超时动作
     */
    boolean taskAccessor.activeTaskTimeout(Long taskId, boolean active);
    
    /**
     * 获取任务超时动作的状态
     * <p>
     * true为激活,false为暂停,不存在超时动作时NPE
     *
     * @param taskId 任务id
     * @return true为激活,false为暂停
     * @throws NullPointerException 如果任务并不存在超时动作
     */
    boolean taskAccessor.isTaskTimeoutRunning(Long taskId);
    
  • [*]获取任务超时时间和修改任务超时时间的接口现在会抛出NPE,抛出原因同上新增的接口

    taskAccessor.addTaskTimeout()以及taskAccessor.getTaskRemainingTime()
    
  • [-]之前直接修改任务超时时间的接口已经被废弃

    taskAccessor.modifyTaskTimeout()
    
  • [*]对时间程序延时的判断现在使用job表的endTime字段作为上一次执行时间

    之前使用gmtModified可能会有潜在的风险,此项改动不影响任何现有功能


2.1.2.8

  • [*]taobao-pamirs-transaction升级到1.0.5,功能无变化,增加了事务持续时间过长的warn日志(貌似这部分他们还有BUG,可以用log4j屏蔽日志)

  • [+]分开可执行域和元域(可理解为发起域)

    1. 删除executeDomain配置项
    2. 增加metaDomain配置项取代executeDomain配置项,该项表示在该组机器发起的流程所属域
    3. 增加executableDomain配置项,该项表示该组机器可执行的域,多项之间通过半角逗号,分隔,需要为其中每一项配置对应的pamirs-schedule的taskType和queue
    4. 因为考虑兼容不使用schedule的方式,保留enableDschedule配置项,单独配置executableDomain并不会启动pamirs-schedule,仍然需要打开此配置

    这个改动过后,所有节点执行时默认携带metaDomain。同时会根据executableDomain配置启动0-N个pamirs-schedule

    对于绝大部分用户来说,从上一版本升级到此版本只需要修改PmcConfig配置,用metaDomain代替executeDomain,并用同一值配置executableDomain

    例:

    原先是

    <property name="executeDomain">
      <value>testDomain</value>
    </property>
    

    升级后

    <property name="metaDomain">
      <value>testDomain</value>
    </property>
    <property name="executableDomain">
      <value>testDomain</value>
    </property>
    

    [!!注意!!]runtimeEnvexecutableDomain中的配置不要使用字符@,PMC使用此字符作为分隔标记

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment