Skip to content

Releases: apache/incubator-pegasus

v1.9.1

26 Jun 13:55
Compare
Choose a tag to compare

Bug修复

  • 修复scan操作中sort key filter不生效的bug;
  • 修复collector中counter统计不完整的bug;

脚本工具

  • 增加pegasus_falcon_screen.sh工具,提供falcon screen模板,用于自动创建和更新falcon screen;

v1.9.0

20 Jun 07:55
Compare
Choose a tag to compare

兼容性

  • 重要:​集群升级1.9版本后,有可能无法回退到1.9之前的老版本
  • 由于修复了json的格式问题,该版本json序列化/反序列化与之前版本有区别,主要影响是zookeeper上记录冷备份信息的backup_policy节点下的数据无法兼容;
  • 为了解决这个问题,从1.9版本开始,将zookeeper上的冷备份信息存储在新节点back下面,原节点backup_policy弃用;
  • 如果集群启用了冷备份功能(通过shell的ls_backup_policy命令可查看有没有启动冷备份),需遵循特定的步骤进行升级,具体参见下面的“升级流程”;
  • 如果集群没有启用冷备份功能,则不存在兼容性问题,可按照常规方式升级;
  • 对客户端的兼容性没有影响;

升级流程

  • disable掉所有的backup policy,并记录下disable了哪些policy;
  • 检查所有的policy,保证没有正在进行中的备份,如果有则等待其完成,并记录下所有的policy信息;
  • 使用shell的cluster_info命令,获取集群的zookeeper_hosts和zookeeper_cluster_name(zookeeper_root的后缀);
  • 使用json fix工具迁移zookeeper的backup_policy节点至back节点:./old2new.sh <zookeeper_hosts> <zookeeper_cluster_name>
  • 修改配置文件后,使用pegasus_rolling_update.sh工具升级一台机器:./script/pegasus_rolling_update.sh <cluster> <meta-list> one 0
  • 升级一台后观察几分钟,没有问题再升级所有机器:./script/pegasus_rolling_update.sh <cluster> <meta-list> all 1
  • 观察升级后集群是否正常,使用shell命令查看各统计指标是否正常;
  • 检查所有的back policy,与升级前信息是否一致;
  • 重新enable之前disable掉的policy;​

功能改进

  • 改进manual compact:可以通过app envs设置rocksdb.manual_compact.disabled=true关闭compact功能,取消已发起但未开始执行的compact;在compact完成后立即统计存储用量;
  • 改进collector:如果不指定email地址,则不发送可用度统计和报警邮件;增加可用度统计结果写回Pegasus表的重试次数,降低写入失败的概率,避免丢失统计结果;
  • 改进日志打印:在meta-server中执行set/del/clear app envs时打印相关日志;

Bug修复

  • 修复json库:修复其不能按照标准序列化和反序列化map数据的问题;修复其不能按照标准序列化和反序列化浮点数的问题;支持bool变量从true/false反序列化;
  • 修复server_stat:修复获取统计数据时依赖的perf counter不正确的问题;
  • 修复collector:修复detect table不存在时进程会core的问题;
  • 修复shell工具:修复并发使用shell工具时可能出现的配置文件冲突覆盖的问题;
  • 修复build和test脚本:修复exit -1非法参数的问题;修复单元测试脚本不能发现测试失败的问题;
  • 修复rdsn:将RPC_GROUP_CHECK的任务优先级改为HIGH,避免group check请求处理不及时造成超时而引发config change的问题;
  • 修复pegasus_server:修复了pegasus_extract_user_data()中可能使用已经被释放的string的bug;

性能优化

  • 改进checkpoint_timer,使trigger checkpoint随机化,避免集中触发flush操作,提升系统稳定性;

Shell工具

  • 在启动onebox时增加--collector选项,用于启动collector进程;
  • 在shell的count_data命令中增加--run_seconds选项,用于控制命令的运行时间以提前结束统计;
  • 改进shell工具,用linenoise库替换readline库,支持命令自动补全,支持历史命令记录,支持用法的hint提示;

脚本工具

  • 改进pegasus_manual_compact.sh脚本,增加--wait_only选项,使其更易用;
  • 改进scripts文件夹下的各种脚本,在脚本执行时生成的临时文件名中加入PID,避免脚本在并发执行时的冲突覆盖问题;

其他

  • 编译时增加--clear_thirdparty选项,可以清理掉已下载的thirdparty库;
  • 编译时增加--compiler选项,方便指定特定的C和C++编译器;修复clang编译器发现的一些问题;
  • 编译支持ccache,减少unit-test中不必要的sleep,提升编译速度;
  • 改进配置模板src/server/config.ini,修改一些配置项的推荐值,增加collector使用的配置项;
  • 改进README,增加相关项目的链接;

v1.8.1

30 May 10:53
Compare
Choose a tag to compare

功能改进

  • 支持通过config sync定期更新app envs;
  • 冷备份在删除过期文件夹时,调用FDS接口选择不进入回收站,实现彻底删除,以支持GDPR;
  • MetaServer的load balance支持黑名单机制,以避免往特定节点增加备份;
  • 改进manual compact,通过app envs方式控制执行,支持periodic和once两种触发模式,并支持指定options;
  • 在pegasus_server_impl的读写操作打印日志时增加打印远程RPC地址,以方便定位问题;
  • 增加pegasus_event_listener,用来监听rocksdb的flush和compaction事件,并增加统计flush和compaction的perf-counter;
  • 增加partition killer,支持随机关闭replica,提高kill测试的覆盖能力;

Bug修复

  • 修复replica close时并发存取app造成非法访问core的问题;
  • 修复info collector中将stat_timer的间隔时间单位用错的bug;
  • 修复configuration中处理uint64类型可能溢出的bug;

性能优化

  • 默认开启rocksdb的bloom filter功能,bits_per_key设置为10,读操作的延迟下降约10%;
  • 默认开启rocksdb的block cache功能,使用LRUCache,capacity设置为10GB;
  • 程序动态链接tcmalloc库,整体性能提升10%~20%;
  • 通过随机化设置rocksdb的write_buffer_size和level0_file_num_compaction_trigger配置项,避免因为同时触发flush和compaction执行而形成CPU和IO使用高峰,提升服务稳定性;

rdsn模块的化简与重构

  • 移除rpc_address相关的C接口;
  • 引入rpc_holder工具类,方便编写RPC交互逻辑;
  • 引入pipeline机制,方便编写更清晰和易测试的异步交互逻辑;
  • 重构tls memory allocator,移除无用的memory provider;
  • 移除rdsn的layer2层的RPC_L2_CLIENT_READ/WRITE,简化rpc code的注册与分派逻辑;
  • 引入format库,提供ddebug_replica系列日志宏,简化日志打印;
  • 引入replica_base类,提供replica的get_gpid()和replica_name()公共方法;
  • 移除task和task_tracker相关的C接口,并用future_task替换原来的safe_late_task,提升代码可读性;
  • 重构configuration相关的API;
  • 重构pegasus_server_impl的写流程,使代码结构更清晰;

rocksdb模块

  • 为pegasus-rocksdb项目增加travis-ci支持;
  • 改进CompactRange函数,在ReFitLevel完成后打印lsm_state,帮助进行性能分析;
  • 改进FlushMemTable函数,不再返回NoNeedOperate错误码;

Shell工具

  • 增加操作app envs的相关命令,包括get_app_envs/set_app_envs/del_app_envs/clear_app_envs;
  • 改进ls命令,不再显示envs列;
  • 改进app命令,修改health状态的统计项;
  • 改进app_stat命令,重新整理统计数据列,调整对齐格式;
  • 改进help命令,支持帮助信息的自动换行;

脚本工具

  • 增加pegasus_set_usage_scenario.sh,用于设置表的使用场景,支持normal/preper_write/bulk_load三种场景;
  • 改进download-thirdparty.sh,支持在下载第三方库时检查md5sum;
  • 增加pegasus_offline_node_list.sh,用于下线一批机器;
  • 改进pegasus_manual_compact.sh,支持periodic和once两种触发模式,支持指定options;
  • 改进pack_server.sh,不再打包pegasus_rproxy程序;

其他

  • 为pegasus项目增加travis-ci支持;
  • 将pegasus项目的默认编译模式从debug改为了release;
  • 将rdsn共享库的名字由dsn_layer2_stateful_type1改为dsn_replica_server;
  • 修复因为缺少__STDC_FORMAT_MACROS宏引发的编译问题;
  • 修改src/server/config.ini,提供更合理的推荐配置;

v1.8.0

30 May 07:48
Compare
Choose a tag to compare
  • 接口改进:在MultiGetOptions中增加reverse参数,支持逆向扫描查找数据;
  • 项目重构:移除java文件夹,将Java Client放到单独的项目中;移除rocksdb文件夹,将RocksDB作为submodule放到单独的项目中,并catch到最近的主线版本;
  • 功能改进:改进load-balance使负载更均衡;增加配置参数,支持数据以非压缩方式存储;支持远程命令触发的manual compact功能;增加对异常查询的统计和日志;
  • rdsn重构:移除不必要的文件;移除gpid相关的C接口;改进perf-counter使其可以多次实例化;
  • bug修复:修复了learn过程中分布式协议上的一处bug;修复获取local ipv4地址的bug;
  • 工具改进:增加pegasus_manual_compact.sh脚本;改进模板配置文件src/server/config.ini,用于业务的分布式部署;改进shell的count_data命令,增加top_count选项;修复pack打包工具;修复client sample示例代码;

v1.7.0

30 May 10:55
Compare
Choose a tag to compare
  • 改进冷备份功能:重构了冷备份打checkpoint的流程;支持统计单次冷备份的总大小;修复冷备policy启动时间漂移的问题;修复冷备份恢复的一个bug;
  • 代码重构与化简:文件结构重整;移除了大部分C-API接口;移除了layer1 app model;移除了dmodule load功能;移除了windows平台下的服务;移除__TITLE宏;
  • 改进NFS模块:移除对裸指针的使用;增加copy失败重试机制;使用random robin queue以提高learn app的并发能力;
  • 增加remote-command:lb.assign_delay_ms;lb.add_secondary_enable_flow_control;lb.add_secondary_max_count_for_one_node;
  • Bug修复:修复了aio core的bug;修复了task_tracker析构时的bug;修复new replica时的内存泄漏问题;修复disk stat时不正确使用右值引用的bug;修复gc_checkpoints中边界处理bug;
  • 性能优化:优化了replica_stub中对锁的使用;优化mutation中对blob的使用,避免不必要的memcpy;优化error_code的解析功能;优化rocksdb checkpoint功能,降低加锁时间和失败率;
  • 工具改进:改进pegasus_rolling_update.sh,减小热升级对服务可用度的影响;增加pegasus_offline_node.sh,以支持节点下线;改进shell工具,提升交互体验;改进pack工具,以拷贝依赖的系统库;