@@ -52,6 +52,7 @@ feature_manager::feature_manager(
52
52
ss::sharded<features::feature_table>& table,
53
53
ss::sharded<rpc::connection_cache>& connection_cache,
54
54
ss::sharded<security::role_store>& role_store,
55
+ ss::sharded<topic_table>& topic_table,
55
56
raft::group_id raft0_group)
56
57
: _stm(stm)
57
58
, _as(as)
@@ -62,6 +63,7 @@ feature_manager::feature_manager(
62
63
, _feature_table(table)
63
64
, _connection_cache(connection_cache)
64
65
, _role_store(role_store)
66
+ , _topic_table(topic_table)
65
67
, _raft0_group(raft0_group)
66
68
, _barrier_state(
67
69
*config::node ().node_id(),
@@ -225,6 +227,18 @@ feature_manager::report_enterprise_features() const {
225
227
auto has_non_default_roles
226
228
= n_roles >= 2
227
229
|| (n_roles == 1 && !_role_store.local ().contains (security::default_role));
230
+ auto leadership_pinning_enabled = [&cfg, this ]() {
231
+ if (cfg.default_leaders_preference () != config::leaders_preference{}) {
232
+ return true ;
233
+ }
234
+ for (const auto & topic : _topic_table.local ().topics_map ()) {
235
+ if (topic.second .get_configuration ()
236
+ .properties .leaders_preference ) {
237
+ return true ;
238
+ }
239
+ }
240
+ return false ;
241
+ };
228
242
229
243
features::enterprise_feature_report report;
230
244
report.set (
@@ -249,6 +263,9 @@ feature_manager::report_enterprise_features() const {
249
263
report.set (
250
264
features::license_required_feature::datalake_iceberg,
251
265
cfg.iceberg_enabled ());
266
+ report.set (
267
+ features::license_required_feature::leadership_pinning,
268
+ leadership_pinning_enabled ());
252
269
return report;
253
270
}
254
271
0 commit comments