功能目标

为了对Table的一些行为进行控制,Pegasus提供了Table环境变量,又称之为app envs

Table环境变量以kv-map的形式存储在Table的元数据app_info中,并持久化到Zookeeper上。通过shell的ls命令查看表信息,最后一列envs_count记录Table环境变量的kv对个数:

  1. >>> ls
  2. app_id status app_name app_type partition_count replica_count is_stateful drop_expire_time envs_count
  3. 1 AVAILABLE temp pegasus 8 3 true - 1

如果要查看具体的Table环境变量,则需要使用get_app_envs命令。

Table环境变量具有如下特性:

  • 作为Table的元数据持久化到Zookeeper上。
  • 可以通过命令动态修改,修改成功后会立即更新到Zookeeper上。
  • 通过meta server和replica server的定期同步消息config_sync同步给各个replica生效。由于是定期同步,所以环境变量更新后不会立即生效,而是有一个同步过程,这个过程的时间依赖于配置文件config_sync_interval_ms的值,默认是30秒。
  • 环境变量的key通过都是采用.分隔的字段的形式,方便组织。 目前通过Table环境变量支持的功能包括:

  • Manual-Compact功能

  • Usage-Scenario功能

操作命令

Pegasus的Shell工具中提供了操作Table环境变量的命令。这些命令执行前都需要先执行use xxx选择表。

get_app_envs

获取环境变量列表,用法:get_app_envs

示例:

  1. >>> use temp
  2. OK
  3. >>> get_app_envs
  4. get app envs succeed, count = 1
  5. =================================
  6. rocksdb.usage_scenario = normal
  7. =================================

set_app_envs

设置环境变量,用法:set_app_envs <key> <value> [key value…]

示例:

  1. >>> use temp
  2. OK
  3. >>> set_app_envs rocksdb.usage_scenario bulk_load
  4. set app envs succeed
  5. >>> get_app_envs
  6. get app envs succeed, count = 1
  7. =================================
  8. rocksdb.usage_scenario = bulk_load
  9. =================================

del_app_envs

删除环境变量,用法:del_app_envs <key> [key…]

示例:

  1. >>> use temp
  2. OK
  3. >>> del_app_envs rocksdb.usage_scenario
  4. del app envs succeed
  5. =============================
  6. deleted keys:
  7. rocksdb.usage_scenario
  8. =============================
  9. >>> get_app_envs
  10. get app envs succeed, count = 0

clear_app_envs

清理环境变量,或者叫批量删除环境变量,用法:clear_app_envs <-a|—all> <-p|—prefix str>

两种方式:

  • 全部清理:使用-a选项。
  • 通过前缀清理:使用-p选项指定前缀,匹配时会先自动在前缀后面加上.,然后按照字符串前缀匹配。 譬如:
  1. >>> use temp
  2. OK
  3. >>> set_app_envs k.x v1 k.y v2
  4. set app envs succeed
  5. >>> get_app_envs
  6. get app envs succeed, count = 2
  7. =================================
  8. k.x = v1
  9. k.y = v2
  10. =================================
  11. >>> clear_app_envs -p k
  12. clear app envs succeed
  13. =============================
  14. deleted keys:
  15. k.x
  16. k.y
  17. =============================
  18. >>> get_app_envs
  19. get app envs succeed, count = 0

支持列表

key名称value类型value约束value示例功能说明支持版本
rocksdb.usage_scenariostringnormal | prefer_write | bulk_loadbulk_loadUsage-Scenario1.8.1
replica.deny_client_writebooltrue | falsetrue拒绝写请求1.11.2
replica.write_throttlingstring特定格式1000delay100流量控制#表级流控1.11.2
default_ttlint>=086400表级TTL1.11.2
manual_compact.disabledbooltrue | falsetrueManual-Compact1.9.0
manual_compact.max_concurrent_running_countint>=010Manual-Compact1.11.3
manual_compact.once.trigger_timeintUnix Timestamp in Seconds1547091115Manual-Compact1.8.1
manual_compact.once.target_levelint-1 | >=12Manual-Compact1.8.1
manual_compact.once.bottommost_level_compactionstringforce | skipforceManual-Compact1.8.1
manual_compact.periodic.trigger_timestring特定格式3:00,5:00Manual-Compact1.8.1
manual_compact.periodic.target_levelint-1 | >=12Manual-Compact1.8.1
manual_compact.periodic.bottommost_level_compactionstringforce | skipforceManual-Compact1.8.1
rocksdb.checkpoint.reserve_min_countint>=12Rocksdb-Checkpoint管理1.11.3
rocksdb.checkpoint.reserve_time_secondsint>=0600Rocksdb-Checkpoint管理1.11.3