[
https://issues.apache.org/jira/browse/NIP-9?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Pierre Villard updated NIP-9:
-----------------------------
Description:
h3. Motivation
Currently a component can specify if state will be stored or not using the
annotation
{code:java}
@Stateful(scopes = Scope.CLUSTER, description = "xyz") {code}
And the state is a Map<String, String>.
Through the UI / APIs, it is possible to get the state using:
{code:java}
GET .../{id}/state{code}
and to clear the state using:
{code:java}
POST .../{id}/state/clear-requests{code}
Note that for the above request, we accept a ComponentStateEntity for the
payload but this is completely ignored at the moment in the backend code and
the UI always sends {} for the payload.
In some cases, it would be useful to provide the option to the user to remove
only a specific key from the state and not clear the entirety of the state.
However, this is risky and highly depends on the code of the component and how
the state is used/managed.
This is why this feature should NOT be enabled by default, and could be turned
on via a new attribute of the annotation in the code of the component. This
would be the responsibility of the developer to know if this is OK to have the
option of removing individual keys from the state while the component is
stopped.
h3. Scope
Add
{code:java}
boolean dropStateKeySupported() default false; {code}
to org.apache.nifi.annotation.behavior.Stateful
Once we have this API change, some straight forward changes would be required
in the classes where we currently implement clearing the state for a given
component ID by also passing the component state entity up until
StandardComponentStateDAO class.
For components where this improvement is desired, the annotation would become
something like:
{code:java}
@Stateful(scopes = Scope.CLUSTER, description = "xyz", dropStateKeySupported =
true) {code}
h3. Compatibility
Fully backward compatible.
was:
h3. Motivation
Currently a component can specify if state will be stored or not using the
annotation
{code:java}
@Stateful(scopes = Scope.CLUSTER, description = "xyz") {code}
And the state is a Map<String, String>.
Through the UI / APIs, it is possible to get the state using:
{code:java}
GET .../{id}/state{code}
and to clear the state using:
{code:java}
POST .../{id}/state/clear-requests{code}
Note that for the above request, we accept a ComponentStateEntity for the
payload but this is completely ignored at the moment in the backend code and
the UI always sends {} for the payload.
In some cases, it would be useful to provide the option to the user to remove
only a specific key from the state and not clear the entirety of the state.
However, this is risky and highly depends on the code of the component and how
the state is used/managed.
This is why this feature should NOT be enabled by default, and could be turned
on via a new attribute of the annotation in the code of the component. This
would be the responsibility of the developer to know if this is OK to have the
option of removing individual keys from the state while the component is
stopped.
h3. Scope
Add
{code:java}
boolean canDropKey() default false; {code}
to org.apache.nifi.annotation.behavior.Stateful
Once we have this API change, some straight forward changes would be required
in the classes where we currently implement clearing the state for a given
component ID by also passing the component state entity up until
StandardComponentStateDAO class.
For components where this improvement is desired, the annotation would become
something like:
{code:java}
@Stateful(scopes = Scope.CLUSTER, description = "xyz", canDropKey = true)
{code}
h3. Compatibility
Fully backward compatible.
> Possibility to drop individual keys in component state
> ------------------------------------------------------
>
> Key: NIP-9
> URL: https://issues.apache.org/jira/browse/NIP-9
> Project: NiFi Improvement Proposal
> Issue Type: Improvement
> Reporter: Pierre Villard
> Assignee: Pierre Villard
> Priority: Major
>
> h3. Motivation
> Currently a component can specify if state will be stored or not using the
> annotation
> {code:java}
> @Stateful(scopes = Scope.CLUSTER, description = "xyz") {code}
> And the state is a Map<String, String>.
> Through the UI / APIs, it is possible to get the state using:
> {code:java}
> GET .../{id}/state{code}
> and to clear the state using:
> {code:java}
> POST .../{id}/state/clear-requests{code}
> Note that for the above request, we accept a ComponentStateEntity for the
> payload but this is completely ignored at the moment in the backend code and
> the UI always sends {} for the payload.
> In some cases, it would be useful to provide the option to the user to remove
> only a specific key from the state and not clear the entirety of the state.
> However, this is risky and highly depends on the code of the component and
> how the state is used/managed.
> This is why this feature should NOT be enabled by default, and could be
> turned on via a new attribute of the annotation in the code of the component.
> This would be the responsibility of the developer to know if this is OK to
> have the option of removing individual keys from the state while the
> component is stopped.
> h3. Scope
> Add
> {code:java}
> boolean dropStateKeySupported() default false; {code}
> to org.apache.nifi.annotation.behavior.Stateful
> Once we have this API change, some straight forward changes would be required
> in the classes where we currently implement clearing the state for a given
> component ID by also passing the component state entity up until
> StandardComponentStateDAO class.
> For components where this improvement is desired, the annotation would become
> something like:
> {code:java}
> @Stateful(scopes = Scope.CLUSTER, description = "xyz", dropStateKeySupported
> = true) {code}
> h3. Compatibility
> Fully backward compatible.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)