Priyesh Karatha created HDDS-17515:
--------------------------------------
Summary: Move KeyLifecycleService configuration from OMConfigKeys
to a dedicated KeyLifecycleServiceConfig
Key: HDDS-17515
URL: https://issues.apache.org/jira/browse/HDDS-17515
Project: Apache Ozone
Issue Type: Sub-task
Components: OM
Reporter: Priyesh Karatha
Assignee: Priyesh Karatha
h3. Background
HDDS-16640 made the KeyLifecycleService properties reconfigurable at runtime.
Doing that needed several pieces of hand-written plumbing:
- \{{KeyLifecycleService.OZONE_KEY_LIFECYCLE_PROPERTIES}}, a hand-maintained
set of property keys used to register reconfiguration handlers in
\{{OzoneManager}}.
- \{{KeyLifecycleService.ReconfigurableSettings}}, which reads every property
from \{{ConfigurationSource}} and checks it.
- Per-property handlers (\{{validateKeyLifecycleProperty}}) that only validate,
plus a complete callback that re-reads the full configuration.
The keys and defaults are also defined separately: as constants in
\{{OMConfigKeys}}, with descriptions in \{{ozone-default.xml}}. Adding or
changing a lifecycle property means updating all of these places.
h3. Proposal
Move all \{{ozone.lifecycle.service.*}} properties into a new \{{@ConfigGroup}}
class, \{{KeyLifecycleServiceConfig}}, that extends \{{ReconfigurableConfig}},
following the existing \{{OmConfig}} pattern.
- Declare each property once with \{{@Config(reconfigurable = true)}},
including its key, default, type, unit and description.
- Validate in a \{{@PostConstruct}} method.
\{{ConfigurationReflectionUtil.reconfigureProperty}} already rolls a field back
if validation fails.
- In \{{OzoneManager}}, register the config object with
\{{reconfigurationHandler.register(lifecycleConfig)}}. This replaces
\{{OZONE_KEY_LIFECYCLE_PROPERTIES}} and the per-property validation handlers.
- Keep a complete callback for the side effects: pool size, service timeout,
and restarting the service when the interval changes or the service is enabled.
- Have \{{KeyLifecycleService}} read values from the config object, and remove
\{{ReconfigurableSettings}} and the duplicated volatile fields.
- Remove the \{{OZONE_KEY_LIFECYCLE_SERVICE_*}} constants from
\{{OMConfigKeys}} and the matching entries from \{{ozone-default.xml}}. The
\{{@Config}} annotations generate those entries now.
- Update all usages (\{{KeyManagerImpl}},
\{{OMLifecycleSetServiceStatusRequest}}, unit tests and integration tests) to
use \{{KeyLifecycleServiceConfig}} / \{{KeyLifecycleServiceConfig.Keys}}.
h3. Notes
- No change in behaviour: property names, defaults and the reconfiguration
semantics stay the same.
- Fields read by lifecycle worker threads should be \{{volatile}}, because the
reconfiguration thread updates them.
- Keep the current fallback: a non-positive value for the state-save interval
or keys-processed setting falls back to its default.
- The properties have not been in any release, so the old constants can be
removed instead of deprecated.
h3. Affected properties
{\{ozone.lifecycle.service.enabled}}, \{{.interval}}, \{{.timeout}},
\{{.workers}}, \{{.delete.batch-size}}, \{{.mpu.abort.limit.per.task}},
\{{.delete.cached.directory.max-count}}, \{{.state.save.interval.ms}},
\{{.state.save.keys.processed}}, \{{.move.to.trash.enabled}}
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]