v20.2.0 Tentacle 发布

Laura Flores

Tentacle 是 Ceph 的第 20 个稳定版本。

这是 Ceph Tentacle 的第一个稳定版本。

目录

与鱿鱼的主要变更

亮点

有关更多详细信息,请参阅下文的章节。

CephFS

  • 目录现在可以配置为具有不区分大小写或规范化的目录条目名称。
  • 当集群不健康时,修改 FS 设置变量 max_mds 现在需要用户通过确认标志 (--yes-i-really-mean-it) 。
  • EOPNOTSUPP(操作不支持)现在由 CephFS FUSE 客户端在默认情况下(即 mode == 0)返回 fallocate

Crimson

  • SeaStore 技术预览:SeaStore 对象存储现在可以与 Crimson-OSD 一起部署,主要用于早期测试和实验。鼓励社区反馈,以帮助未来的改进。

Dashboard

  • 已添加对 NVMe/TCP 网关组和多个命名空间、多集群管理、OAuth 2.0 集成以及增强的 RGW/SMB 功能的支持,包括多站点自动化、分层、策略、生命周期、通知和粒度复制。

集成 SMB 支持

  • Ceph 集群现在提供一个 SMB 管理器模块,该模块的工作方式与现有的 NFS 子系统类似。新的 SMB 支持允许 Ceph 集群自动创建与 CephFS 关联的基于 Samba 的 SMB 文件共享。smb 模块可以配置基本的 Active Directory 域或独立用户身份验证。Ceph 集群可以托管一个或多个虚拟 SMB 集群,这些集群可以使用 Samba 的 CTDB 技术真正地进行集群化。smb 模块需要一个启用了 cephadm 的 Ceph 集群,并部署由 samba-container 项目提供的容器镜像。可以使用 Ceph 仪表板来配置 SMB 集群和共享。一个新的 cephfs-proxy 守护程序会自动部署,以提高可扩展性和内存使用率,从而将 Samba 连接到 CephFS。

MGR

  • 用户现在能够强制禁用始终开启的模块。
  • restfulzabbix 模块(自 2020 年起已弃用)已被正式移除。

RADOS

  • FastEC:为擦除编码池添加了长期期待的性能和空间放大优化。
  • BlueStore:改进了压缩和新的、更快的 WAL(预写日志)。
  • 数据可用性评分:用户现在可以跟踪集群中每个池的数据可用性评分。
  • OMAP:所有组件都切换到更快的 OMAP 迭代接口,从而提高了 RGW bucket listing 和 scrub 操作的性能。

RBD

  • 新的实时迁移功能:RBD 镜像现在可以从另一个 Ceph 集群(本机格式)或从各种外部来源/格式即时导入。
  • 现在支持在 Ceph 集群之间镜像时 RBD 命名空间重映射。
  • 添加或改进了几个与组和组快照信息相关的命令,并且 rbd device map 命令现在默认使用 msgr2

RGW

  • 已添加对 S3 GetObjectAttributes 的支持。

  • 为了与 AWS S3 兼容,LastModified 时间戳现在被截断到秒。请注意,在升级期间,用户可能会观察到这些时间戳向后移动。

  • Bucket resharding 现在在开始阻止写入操作之前完成大部分处理。这应该可以显著减少客户端可见的 resharding 对大型 bucket 的影响。

  • Squid 中引入的用户帐户功能为 IAM API 和策略提供了一流的支持。我们初步的 STS 支持基于租户,并且仅向管理员公开了一些 IAM API。现在,这种基于租户的 IAM 功能已被弃用,以支持帐户。虽然我们将继续支持租户功能本身以实现命名空间隔离,但以下功能将在 V 版本之后不久被移除

    • 基于租户的 IAM API,包括 CreateRole、PutRolePolicy 和 PutUserPolicy,
    • 在 IAM 策略文档中使用租户名称而不是帐户,
    • 不进行跨帐户策略评估的 IAM 策略解释,
    • S3 API 对跨租户名称的支持,例如 Bucket='tenant:bucketname'
    • STS Lite 和 sts:GetSessionToken

Cephadm

  • 一个新的 cephadm 托管的 mgmt-gateway 服务为 Ceph 管理端点(如仪表板和监控堆栈)提供了一个单一的、经过 TLS 终止的入口点。该网关实现为基于 nginx 的反向代理,它为 Prometheus、Grafana 和 Alertmanager 提供服务,因此用户不再需要直接连接到这些守护程序或知道它们运行在哪些主机上。当与新的 oauth2-proxy 服务结合使用时,该服务与使用 OpenID Connect (OIDC) / OAuth 2.0 协议的外部身份提供商集成,该网关可以强制执行集中的身份验证和 Ceph 仪表板和其余监控堆栈的单点登录 (SSO)。

  • Ceph 仪表板和基于 Prometheus 的监控堆栈的高可用性现在通过 cephadm 托管的 mgmt-gateway 提供。nginx 高可用性机制允许 mgmt-gateway 检测健康的仪表板、Prometheus、Grafana 和 Alertmanager 实例,相应地路由流量,并透明地处理管理器故障转移。当使用虚拟 IP 和多个 mgmt-gateway 实例部署时,此架构即使在守护程序或主机发生故障期间也能保持管理访问可用。

  • 一个新的 certmgr cephadm 子系统集中管理 cephadm 托管服务的证书生命周期。certmgr 作为 cephadm 签名证书的集群内部根 CA,还可以消耗用户提供的证书,并跟踪每个证书的配置方式。它标准化了 RGW 和 mgmt-gateway 等服务的 HTTPS 配置,自动更新和轮换 cephadm 签名证书,并在证书无效、即将过期或配置错误时发出健康警告。使用 certmgr,cephadm 签名证书在所有 cephadm 托管服务中可用,从而提供开箱即用的安全默认设置。

CephFS

  • 目录现在可以配置为具有不区分大小写或规范化的目录条目名称。这是一个可继承的配置,使其适用于整个目录树。

    有关更多信息,请参阅 https://docs.ceph.net.cn/en/tentacle/cephfs/charmap/

  • 现在可以使用配置选项 mgr/volumes/pause_purging 暂停异步清除已删除子卷的线程。

  • 现在可以使用配置选项 mgr/volumes/pause_cloning 暂停异步克隆子卷快照的线程。

  • 当集群不健康时,修改设置 max_mds 现在需要用户通过确认标志 (--yes-i-really-mean-it) 。已添加此项作为预防措施,以告知用户修改 max_mds 可能无助于故障排除或恢复工作。相反,它可能会进一步破坏集群的稳定性。

  • EOPNOTSUPP(操作不支持)现在由 CephFS FUSE 客户端在默认情况下(即 mode == 0)返回 fallocate,因为 CephFS 不支持磁盘空间预留。支持的唯一标志是 FALLOC_FL_KEEP_SIZEFALLOC_FL_PUNCH_HOLE

  • ceph fs subvolume snapshot getpath 命令现在允许用户获取子卷快照的路径。如果快照不存在,则返回 ENOENT

  • ceph fs volume create 命令现在允许用户传递用于创建卷的元数据和数据池名称。如果未传递任何一个,或者任何一个都是非空池,则该命令将中止。

  • CephFS 卷的池命名空间名称的格式已从 fsvolumens__<subvol-name> 更改为 fsvolumens__<subvol-grp-name>_<subvol-name>,以避免当位于不同子卷组中的两个子卷具有相同的名称时发生命名空间冲突。即使存在命名空间冲突,也不会存在安全问题,因为 MDS auth cap 限制在子卷路径。现在,通过此更改,命名空间完全隔离。

  • 如果传递给命令 ceph fs subvolume info 的子卷名称是克隆,则输出现在还将包含一个“source”字段,该字段告知用户源快照的名称以及位于源快照的卷、子卷组和子卷的名称。对于使用 Tentacle 或早期版本创建的克隆,该字段的值将为 N/A。常规子卷没有源子卷,因此无论版本如何,它们的输出都不会包含“source”字段。

Crimson / SeaStore

Crimson 项目继续取得进展,Squid 版本标志着 Crimson 可用的第一个技术预览版本。Tentacle 版本引入了许多改进和新功能,这些功能增强了 Crimson-OSD 和 SeaStore 对象存储的稳健性、性能和可用性。在此版本中,SeaStore 现在可以与 Crimson-OSD 一起部署!强烈鼓励早期测试和实验,我们非常感谢社区的任何初步反馈,以帮助指导未来的改进。请查看 Tentacle 的 Crimson 项目更新博客文章,其中介绍了最新版本中包含的一些工作,使我们更接近于完全取代现有的 Classical OSD:https://ceph.net.cn/en/news/blog/2025/crimson-T-release/

如果您是 Crimson 项目的新手,请访问项目页面以获取更多信息和资源:https://ceph.net.cn/en/news/crimson

Dashboard

  • 现在已添加对 NVMe/TCP 网关组和多个命名空间、多集群管理、OAuth 2.0 集成以及增强的 RGW/SMB 功能的支持,包括多站点自动化、分层、策略、生命周期、通知和粒度复制。

MGR

  • Ceph Manager 的始终开启的模块/插件现在可以被强制禁用。在 Ceph 服务出现故障或降级时,我们希望防止管理器被模块命令淹没,这在某些情况下是必要的。

  • mgr/restfulmgr/zabbix:这两个模块自 2020 年起已弃用,现已正式移除。它们在过去几年中没有得到积极维护,并且开始遭受依赖链中的漏洞(例如:CVE-2023-46136)。dashboard 模块是 restful 模块的替代方案,它提供了一个更丰富、维护更好的 RESTful API。对于 zabbix 模块,有替代监控解决方案,例如 prometheus,这是 Ceph 用户社区中最广泛采用的解决方案。

RADOS

  • 长期期待的性能和空间放大优化 (FastEC) 已添加到擦除编码池,包括部分读取和部分写入。

  • 新的 Erasure Coding I/O 代码实现提供了显著的性能提升和一些容量改进。 新代码旨在优化与块存储 (RBD) 和文件存储 (CephFS) 配合使用 Erasure Coding 时的性能,但对于对象存储 (RGW) 也会有所裨益,尤其是在使用较小尺寸的对象时。 必须在每个池上设置一个新的标志 allow_ec_optimizations 才能切换到使用新代码。 一旦 OSD 和 Monitor 守护进程更新,就可以升级现有池。 无需更新客户端。

  • 用于 Erasure Coding 池的默认插件已从 Jerasure 更改为 ISA-L。 在 Tentacle 或更高版本上创建的集群将在创建新池时将 ISA-L 作为默认插件使用。 升级到 T 版本的集群将继续使用其现有的默认值。 可以通过创建新的 Erasure Coding 配置文件并在创建新池时选择它来覆盖默认值。 建议为新池使用 ISA-L,因为 Jerasure 库不再维护。

  • BlueStore 现在具有更好的压缩和新的、更快的 WAL(预写式日志)。

  • 所有组件都已切换到更快的 OMAP 迭代接口,从而改进了 RGW bucket 列出和 scrub 操作。

  • 现在可以在极端情况下绕过 ceph_assert() 以帮助灾难恢复。

  • 添加了用于 dencoding 验证的测试改进。

  • 添加了一个新命令 ceph osd pool availability-status,允许用户查看集群中每个池的可用性评分。 如果池中的任何 PG 未处于 active 状态,或者存在未找到的对象,则该池被认为不可用。 否则,该池被认为可用。 默认情况下,评分每秒更新一次。 可以使用新的配置选项 pool_availability_update_interval 更改此间隔。 该功能默认关闭。 可以使用新的配置选项 enable_availability_tracking 启用该功能(如果需要)。 另外添加了一个命令来清除特定池的可用性状态

    $ ceph osd pool clear-availability-status <pool-name>
    

    此功能处于技术预览阶段。

    相关链接

  • Leader monitor 和 stretch 模式状态现在包含在 ceph status 输出中。

    Related tracker: https://tracker.ceph.com/issues/70406

  • 当 CRUSH 规则使用多个 take 步骤来表示数据中心时,ceph df 命令会报告 stretch 模式池的错误的 MAX AVAILPGMap::get_rule_avail 错误地仅从一个数据中心计算可用空间。 作为解决方法,定义 CRUSH 规则,使用 take defaultchoose firstn 0 type datacenter。 有关详细信息,请参阅 https://tracker.ceph.com/issues/56650#note-6

    升级配置了具有多个 take 步骤的 CRUSH 规则的集群可能会导致数据洗牌,因为新的 CRUSH 更改可能需要重新分配数据。 相比之下,具有单个 take 配置的 stretch 规则在升级过程中不会导致任何数据移动。

  • 添加了便利函数 librados::AioCompletion::cancel(),其行为与 librados::IoCtx::aio_cancel() 相同。

  • 已删除配置参数 osd_repair_during_recovery。 该配置标志用于控制由操作员发起的“repair scrub”是否允许在 OSD 执行恢复时启动。 在此 Ceph 版本中,操作员发起的 scrub 和 repair scrub 绝不会被正在执行的 repair 阻止。

  • 修复了由于 dmclock 的后台清理线程中处理不当的项目而导致的恢复/回填挂起问题。

    Related tracker: https://tracker.ceph.com/issues/61594

  • OSD 的 IOPS 容量,由 mClock 调度器使用,现在也经过检查,以确定其是否低于由以下定义的配置阈值

    • osd_mclock_iops_capacity_low_threshold_hdd – 设置为 50 IOPS
    • osd_mclock_iops_capacity_low_threshold_ssd – 设置为 1000 IOPS

    该检查旨在处理测量的 IOPS 不切实际地低的情况。 如果检测到这种情况,IOPS 容量将设置为最后一个有效值或配置的默认值,以避免影响集群性能(缓慢或停滞的 ops)。

  • 文档已更新,其中包含覆盖 OSD IOPS 容量配置的步骤。

    相关链接

  • pybind/rados: 修复了 WriteOp.zero() 在原始参数顺序颠倒的问题,即 offsetlength。 当 pybind 调用 WriteOp.zero() 时,传递的参数与 rados_write_op_zero 不匹配,并且 offset 和 length 互换,导致意外的响应。

RBD

  • RBD 镜像现在可以从另一个 Ceph 集群立即导入。 迁移源规范的 native 格式增加了 cluster_nameclient_name 可选字段,用于在解析各自的 ceph.conf 类似配置文件后连接到源集群。

  • 借助新的 NBD 流 ("type": "nbd"),RBD 镜像现在可以从各种外部源/格式立即导入。 支持的确切格式及其功能取决于 NBD 服务器的功能。

  • 在 Ceph 集群之间进行镜像时,本地和远程 RBD 命名空间不再需要相同(但池名称仍然需要相同)。 使用 rbd mirror pool enable 命令的新 --remote-namespace 选项,现在可以在配置镜像时将本地命名空间与各自池中的任意远程命名空间配对,包括将默认命名空间映射到非默认命名空间,反之亦然。

  • 所有生成时间戳的 Python API 现在都返回“感知”datetime 对象而不是“朴素”对象(即,包含时区信息而不是不包含时区信息的对象)。 所有时间戳仍然以 UTC 为单位,但包含 timezone.utc 可以使其明确,并避免返回的时间戳被错误解释的潜在问题。 在 Python 3 中,许多 datetime 方法将“朴素”datetime 对象视为本地时间。

  • 引入了 rbd group inforbd group snap info 命令,用于显示有关组和组快照的信息。

  • rbd group snap ls 输出现在包含组快照 ID。 在非格式化 CLI 输出中显示组快照状态的列标题已从 STATUS 更改为 STATE。 显示为 ok 的组快照状态现在显示为 complete,这更具描述性。

  • rbd mirror image statusrbd mirror pool status --verbose 输出中,mirror_uuids 字段已重命名为 mirror_uuid,以突出显示该值始终是单个 UUID 而不是任何类型的列表。

  • 不允许将属于组的镜像移动到 trash。 rbd trash mv 命令现在在这种情况下与 rbd rm 具有相同的行为。

  • rbd device map 命令现在默认对所有设备类型使用 msgr2。 可以传递 -o ms_mode=legacy 以继续使用 krbd 的 msgr1

  • 差异迭代 API 系列已扩展,以允许从或在非用户类型快照之间进行差异化,这些快照只能通过其 ID 引用。

  • 如果镜像已禁用镜像,则获取镜像的镜像模式无效。 公共 API -- C++ mirror_image_get_mode()、C rbd_mirror_image_get_mode() 和 Python Image.mirror_image_get_mode() -- 在禁用镜像时将返回 EINVAL

  • 如果镜像未启用镜像,则提升镜像无效。 公共 API -- C++ mirror_image_promote()、C rbd_mirror_image_promote() 和 Python Image.mirror_image_promote() -- 在未启用镜像时将返回 EINVAL 而不是 ENOENT。

  • 如果镜像未启用镜像,则请求镜像同步无效。 公共 API -- C++ mirror_image_resync()、C rbd_mirror_image_resync() 和 Python Image.mirror_image_resync() -- 在未启用镜像时将返回 EINVAL 而不是 ENOENT。

RGW

  • 多个修复:Lua 脚本将不再无用地针对健康检查运行,正确引用了 S3 CopyPartPostObjectCompleteMultipartUpload 响应中返回的 ETag 值。

  • IAM 策略评估现在支持条件 ArnEqualsArnLike,以及它们的 NotIfExists 变体。

  • 添加了 BEAST 前端选项 so_reuseport,它通过共享单个 TCP 端口,促进在同一主机上运行多个 RGW 实例。

  • 复制策略现在使用 s3:ReplicateObjects3:ReplicateDeletes3:ReplicateTags 验证目标 bucket 的权限。 对于源 bucket,支持 s3:GetObjectVersionForReplications3:GetObject(Version)。 获取源对象时,还会考虑 s3:GetObjectAcls3:GetObjectLegalHolds3:GetObjectRetention 等操作。 标签的复制由 s3:GetObject(Version)Tagging 权限控制。

  • 为 S3 CopyPartPostObjectCompleteMultipartUpload 响应中返回的 ETag 值添加了缺失的引号。

  • PutObjectLockConfiguration 现在可用于在已启用版本控制的现有 bucket 上启用 S3 对象锁定,而该 bucket 并非在启用对象锁定的情况下创建的。

  • PutBucketPolicy 现在支持 x-amz-confirm-remove-self-bucket-access header。 此外,即使当前策略明确拒绝访问,root 用户始终可以修改 bucket 策略。

  • 添加了对 S3 PublicAccessBlock 配置的 RestrictPublicBuckets 属性的支持。

  • HeadBucket API 现在仅当 API 请求中显式包含 read-stats 查询字符串时,才会报告 X-RGW-Bytes-UsedX-RGW-Object-Count header。

遥测

  • basic 频道中的遥测现在捕获 ec_optimizations 标志,这将使我们能够评估新 FastEC 改进的采用情况。 要选择加入遥测,请运行 ceph telemetry on

从 Reef 或 Squid 升级

在开始之前,请确保您的集群稳定且正常,没有 downrecoveringincompleteundersizedbackfilling PG。 您可以通过在开始之前运行 ceph osd pool set noautoscale,然后在升级成功确认后运行 ceph osd pool unset noautoscale,暂时禁用所有池的 PG 自动缩放器。

注意

可以使用 ceph versions 命令在每个阶段监控升级进度,该命令将告诉您每个类型守护程序的 Ceph 版本。

升级 Cephadm 集群

如果您的集群使用 cephadm 部署(首次在 Octopus 中引入),则升级过程完全自动化。要启动升级,

$ ceph orch upgrade start --image quay.io/ceph/ceph:v20.2.0

使用相同过程升级到未来的次要版本。

可以使用以下命令监控升级进度

$ ceph orch upgrade status

还可以使用 ceph -s(提供一个简单的进度条)或更详细地使用以下命令监控升级进度

$ ceph -W cephadm

可以使用以下命令暂停或恢复升级

$ ceph orch upgrade pause  # to pause
$ ceph orch upgrade resume # to resume

或使用以下命令取消

$ ceph orch upgrade stop

请注意,取消升级只会停止该过程。 无法降级回 Reef 或 Squid。

升级非 cephadm 集群

注意

  1. 如果您的集群正在运行 Reef (18.2.x) 或更高版本,您可能会选择首先将其转换为使用 cephadm,以便自动化到 Tentacle 的升级(参见上文)。 有关详细信息,请参阅 https://docs.ceph.net.cn/en/tentacle/cephadm/adoption/

  2. 如果您的集群正在运行 Reef (18.2.x) 或更高版本,systemd 单元文件名已更改为包含集群 fsid。 要查找集群的正确 systemd 单元文件名,请运行以下命令

    $ systemctl -l | grep <daemon type>
    

    示例

    $ systemctl -l | grep mon | grep active
    
    ceph-6ce0347c-314a-11ee-9b52-000af7995d6c@mon.f28-h21-000-r630.service loaded active running Ceph mon.f28-h21-000-r630 for 6ce0347c-314a-11ee-9b52-000af7995d6c
    
  1. 在升级期间设置 noout 标志。(可选,但建议这样做。)

    $ ceph osd set noout
    
  2. 通过安装新软件包并重新启动 Monitor 守护程序来升级 Monitor。 例如,在每个 Monitor 主机上

    $ systemctl restart ceph-mon.target
    

    完成所有 Monitor 的升级后,通过查找 tentacle 字符串来验证 Monitor 升级是否完成。 该命令

    $ ceph mon dump | grep min_mon_release
    

    应报告

    min_mon_release 20 (tentacle)
    

    如果未找到,则表示一个或多个 Monitor 未升级和重新启动,或者 quorum 不包含所有 Monitor。

  3. 通过安装新软件包并重新启动所有 Manager 守护程序来升级 ceph-mgr 守护程序。 例如,在每个 Manager 主机上

    $ systemctl restart ceph-mgr.target
    

    通过检查 ceph -s 验证 ceph-mgr 守护程序是否正在运行

    $ ceph -s
    
    ...
      services:
       mon: 3 daemons, quorum foo,bar,baz
       mgr: foo(active), standbys: bar, baz
    ...
    
  4. 通过安装新软件包并重新启动所有 OSD 主机上的 ceph-osd 守护程序来升级所有 OSD

    $ systemctl restart ceph-osd.target
    
  5. 升级所有 CephFS MDS 守护程序。 对于每个 CephFS 文件系统

    5.1. 禁用 standby_replay

    $ ceph fs set <fs_name> allow_standby_replay false

    5.2. 将 rank 数减少到 1。 (如果您计划稍后恢复它,请先记下原始 MDS 守护程序数量。)

    $ ceph status # ceph fs set <fs_name> max_mds 1

    5.3. 定期检查状态,等待集群停用任何非零 rank

    $ ceph status

    5.4. 使用以下命令将所有 standby MDS 守护程序从适当的主机上离线

    $ systemctl stop ceph-mds@<daemon_name>

    5.5. 确认只有一个 MDS 在线,并且它是您的 FS 的 rank 0

    $ ceph status

    5.6. 通过安装新软件包并重新启动守护程序来升级剩余的最后一个 MDS 守护程序

    $ systemctl restart ceph-mds.target

    5.7. 重新启动所有已离线的 standby MDS 守护程序

    $ systemctl start ceph-mds.target

    5.8. 恢复卷的原始 max_mds

    $ ceph fs set <fs_name> max_mds <original_max_mds>

  6. 通过升级软件包并重新启动所有主机上的守护程序来升级所有 radosgw 守护程序

    $ systemctl restart ceph-radosgw.target
    
  7. 完成升级,禁止使用 Tentacle 之前的 OSD,并启用所有新的 Tentacle 专用功能

    $ ceph osd require-osd-release tentacle
    
  8. 如果您在开始时设置了 noout,请务必使用以下命令清除它

    $ ceph osd unset noout
    
  9. 考虑将您的集群转换为使用 cephadm 部署和编排框架,以简化集群管理和未来的升级。 有关将现有集群转换为 cephadm 的更多信息,请参阅 https://docs.ceph.net.cn/en/tentacle/cephadm/adoption/

升级后

  1. 使用 ceph health 验证集群是否正常。

  2. 考虑启用遥测,以将匿名使用统计信息和崩溃信息发送给 Ceph 上游开发人员。 要查看在不向任何人发送任何信息的情况下将报告什么

    $ ceph telemetry preview-all
    

    如果您对报告的数据感到满意,可以使用以下命令选择加入自动报告高级集群元数据

    $ ceph telemetry on
    

    可以在 https://telemetry-public.ceph.com/ 找到聚合 Ceph 遥测的公共仪表板。

从旧版本发布版(如昆西)升级

必须先升级到Reef (18.2.z) 或 Squid (19.2.z),然后才能升级到Tentacle。

感谢我们的贡献者

我们向 Ceph 社区的所有成员表示感谢,他们通过提出 pull 请求、测试此版本、提供反馈和提出宝贵建议来做出贡献。

如果您有兴趣帮助测试下一个版本Umbrella,请加入我们的 #ceph-at-scale Slack 频道。

Tentacle 版本的发布离不开社区的贡献

Aashish Sharma ▪ Abhishek Desai ▪ Abhishek Kane ▪ Abhishek Lekshmanan ▪ Achint Kaur ▪ Achintk1491 ▪ Adam C. Emerson ▪ Adam King ▪ Adam Kupczyk ▪ Adam Lyon-Jones ▪ Adarsh Ashokan ▪ Afreen Misbah ▪ Aishwarya Mathuria ▪ Alex Ainscow ▪ Alex Kershaw ▪ Alex Wojno ▪ Alexander Indenbaum ▪ Alexey Odinokov ▪ Alexon Oliveira ▪ Ali Maredia ▪ Ali Masarwa ▪ Aliaksei Makarau ▪ Anatoly Scheglov ▪ Andrei Ivashchenko ▪ Ankit Kumar ▪ Ankush Behl ▪ Anmol Babu ▪ Anoop C S ▪ Anthony D Atri ▪ Anuradha Gadge ▪ Anushruti Sharma ▪ arm7star ▪ Artem Vasilev ▪ Avan Thakkar ▪ Aviv Caro ▪ Benedikt Heine ▪ Bernard Landon ▪ Bill Scales ▪ Brad Hubbard ▪ Brian P ▪ bugwz ▪ cailianchun ▪ Casey Bodley ▪ Chanyoung Park ▪ Chen Yuanrun ▪ Chengen Du ▪ Christian Rohmann ▪ Christopher Hoffman ▪ chungfengz ▪ Chunmei Liu ▪ Connor Fawcett ▪ Cory Snyder ▪ Cybertinus ▪ daijufang ▪ Dan Mick ▪ Dan van der Ster ▪ Daniel Gryniewicz ▪ Danny Al-Gaaf ▪ DanWritesCode ▪ David Galloway ▪ Deepika Upadhyay ▪ Dhairya Parmar ▪ Divyansh Kamboj ▪ Dnyaneshwari ▪ Dominique Leuenberger ▪ Dongdong Tao ▪ Doug Whitfield ▪ Drunkard Zhang ▪ Effi Ofer ▪ Emin ▪ Emin Mert Sunacoglu ▪ Enrico Bocchi ▪ Enrico De Fent ▪ er0k ▪ Erik Sjölund ▪ Ernesto Puerta ▪ Ethan Wu ▪ Feng, Hualong ▪ Florent Carli ▪ Gabriel BenHanokh ▪ Gal Salomon ▪ Garry Drankovich ▪ Gil Bregman ▪ Gilad Sid ▪ gitkenan ▪ Gregory O'Neill ▪ Guillaume Abrioux ▪ gukaifeng ▪ Hannes Baum ▪ haoyixing ▪ hejindong ▪ Hezko ▪ Hoai-Thu Vuong ▪ Hualong Feng ▪ Hyun Jin Kim ▪ igomon ▪ Igor Fedotov ▪ Igor Golikov ▪ Ilya Dryomov ▪ imtzw ▪ Indira Sawant ▪ Ivo Almeida ▪ J. Eric Ivancich ▪ Jakob Haufe ▪ James Oakley ▪ Jamie Pryde ▪ Jane Zhu ▪ Janne Heß ▪ Jannis Speer ▪ Jared Yu ▪ Jaya Prakash ▪ Jayaprakash-ibm ▪ Jesse F. Williamson ▪ Jesse Williamson ▪ Jianwei Zhang ▪ Jianxin Li ▪ jiawd ▪ Jiffin Tony Thottan ▪ Joao Eduardo Luis ▪ Joel Davidow ▪ John Agombar ▪ John Mulligan ▪ Jon Bailey ▪ Jos Collin ▪ Jose J Palacios-Perez ▪ Joshua Baergen ▪ Joshua Blanch ▪ Juan Ferrer Toribio ▪ Juan Miguel Olmo Martínez ▪ julpark ▪ junxiang Mu ▪ Kalpesh Pandya ▪ Kamoltat Sirivadhna ▪ kchheda3 ▪ Kefu Chai ▪ Ken Dreyer ▪ Kevin Niederwanger ▪ Kevin Zhao ▪ Kotresh Hiremath Ravishankar ▪ Kritik Sachdeva ▪ Kushal Deb ▪ Kushal Jyoti Deb ▪ Kyrylo Shatskyy ▪ Laimis Juzeliūnas ▪ Laura Flores ▪ Lee Sanders ▪ Leo Mylonas ▪ Leonid Chernin ▪ Leonid Usov ▪ lightmelodies ▪ Linjing Li ▪ liubingrun ▪ lizhipeng ▪ Lorenz Bausch ▪ Luc Ritchie ▪ Lucian Petrut ▪ Luo Rixin ▪ Ma Jianpeng ▪ Marc Singer ▪ Marcel Lauhoff ▪ Mark Kogan ▪ Mark Nelson ▪ Martin Nowak ▪ Matan Breiz ▪ Matt Benjamin ▪ Matt Vandermeulen ▪ Matteo Paramatti ▪ Matthew Vernon ▪ Max Carrara ▪ Max Kellermann ▪ Md Mahamudur Rahaman Sajib ▪ Michael J. Kidd ▪ Michal Nasiadka ▪ Mike Perez ▪ Miki Patel ▪ Milind Changire ▪ Mindy Preston ▪ Mingyuan Liang ▪ Mohit Agrawal ▪ molpako ▪ mosayyebzadeh ▪ Mouratidis Theofilos ▪ Mykola Golub ▪ Myoungwon Oh ▪ N Balachandran ▪ Naman Munet ▪ Naveen Naidu ▪ nbalacha ▪ Neeraj Pratap Singh ▪ Neha Ojha ▪ Niklas Hambüchen ▪ Nithya Balachandran ▪ Nitzan Mordechai ▪ Nizamudeen A ▪ Oguzhan Ozmen ▪ Omid Yoosefi ▪ Omri Zeneva ▪ Or Ozeri ▪ Orit Wasserman ▪ Oshrey Avraham ▪ Patrick Donnelly ▪ Paul Cuzner ▪ Paul Stemmet ▪ Paulo E. Castro ▪ Pedro Gonzalez Gomez ▪ Pere Diaz Bou ▪ Peter Sabaini ▪ Pierre Riteau ▪ Piotr Parcz ▪ Piyush Agarwal ▪ Ponnuvel Palaniyappan ▪ Prachi Goel ▪ Prashant D ▪ prik73 ▪ Pritha Srivastava ▪ Puja Shahu ▪ pujashahu ▪ qn2060 ▪ Radoslaw Zarzynski ▪ Raja Sharma ▪ Ramana Raja ▪ Redouane Kachach ▪ rhkelson ▪ Richard Poole ▪ Rishabh Dave ▪ Robin Geuze ▪ Ronen Friedman ▪ Rongqi Sun ▪ Rostyslav Khudov ▪ Roy Sahar ▪ Ryotaro Banno ▪ Sachin Prabhu ▪ Sachin Punadikar ▪ Sam Goyal ▪ Samarah Uriarte ▪ Samuel Just ▪ Satoru Takeuchi ▪ Seena Fallah ▪ Shachar Sharon ▪ Shasha Lu ▪ Shawn Edwards ▪ Shen Jiatong ▪ Shilpa Jagannath ▪ shimin ▪ Shinya Hayashi ▪ Shraddha Agrawal ▪ Shreya Sapale ▪ Shreyansh Sancheti ▪ Shrish0098 ▪ Shua Lv ▪ Shweta Bhosale ▪ Shweta Sodani ▪ Shwetha K Acharya ▪ Sidharth Anupkrishnan ▪ Silent ▪ Simon Jürgensmeyer ▪ Soumya Koduri ▪ Sridhar Seshasayee ▪ Srinivasa Bharath Kanta ▪ Stellios Williams ▪ Steven Chien ▪ Sun Lan ▪ Sungjoon Koh ▪ Sungmin Lee ▪ Sunil Angadi ▪ Sunnat Samadov ▪ Surya Kumari Jangala ▪ Suyash Dongre ▪ T K Chandra Hasan ▪ Taha Jahangir ▪ Tan Changzhi ▪ Teng Jie ▪ Teoman Onay ▪ Thomas Lamprecht ▪ Tobias Fischer ▪ Tobias Urdin ▪ Tod Chen ▪ Tomer Haskalovitch ▪ TomNewChao ▪ Toshikuni Fukaya ▪ Trang Tran ▪ TruongSinh Tran-Nguyen ▪ Tyler Brekke ▪ Tyler Stachecki ▪ Umesh Muthuvara ▪ Vallari Agrawal ▪ Venky Shankar ▪ Victoria Mackie ▪ Ville Ojamo ▪ Vinay Bhaskar Varada ▪ Wang Chao ▪ wanglinke ▪ Xavi Hernandez ▪ Xiubo Li ▪ Xuehan Xu ▪ XueYu Bai ▪ Yaarit Hatuka ▪ Yan, Zheng ▪ Yantao Xue ▪ Yao guotao ▪ Yehuda Sadeh ▪ Yingxin Cheng ▪ Yite Gu ▪ Yonatan Zaken ▪ Yuri Weinstein ▪ Yuval Lifsh ▪ Zac Dover ▪ Zack Cerza ▪ Zaken ▪ Zhang Song ▪ zhangjianwei2 ▪ Zhansong Gao ▪ Zhipeng Li ▪ 胡玮文