[jboss-jira] [JBoss JIRA] (WFLY-3705) read-resource recursive-depth has no effect when recursive=true
Brian Stansberry (JIRA)
issues at jboss.org
Mon Aug 11 16:22:29 EDT 2014
[ https://issues.jboss.org/browse/WFLY-3705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12992109#comment-12992109 ]
Brian Stansberry commented on WFLY-3705:
----------------------------------------
Agreed, it should be
{code}
T | 0 | No recursion
{code}
The GlobalOperationAttributes.RECURSIVE_DEPTH field should be fixed to remove the ".setDefaultValue(new ModelNode(0))" call to the builder. There really is no default value here if '0' behaves differently from 'U'.
That requires changes to how GlobalOperationAttributes.RECURSIVE_DEPTH is used though. If an attribute has no default value, you can't do this as it is done in ReadResourceDescriptionHandler:
{code}
final int recursiveDepth = RECURSIVE_DEPTH.resolveModelAttribute(context, operation).asInt();
{code}
It needs to be more like
{code}
ModelNode depthNode = RECURSIVE_DEPTH.resolveModelAttribute(context, operation);
final Integer recursiveDepth = depthNode.isDefined() ? depthNode.asInt(): null;
{code}
And then null checks wherever recursiveDepth is used. Or the code could use an int with -1 representing undefined. That would be simpler:
{code}
final int recursiveDepth = RECURSIVE_DEPTH.resolveModelAttribute(context, operation).asInt(-1);
{code}
ReadResourceHandler uses an older idiom to read the data from the operation that isn't affected by removing the default value from the RECURSIVE_DEPTH definition.
> read-resource recursive-depth has no effect when recursive=true
> ---------------------------------------------------------------
>
> Key: WFLY-3705
> URL: https://issues.jboss.org/browse/WFLY-3705
> Project: WildFly
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: Documentation, Domain Management
> Affects Versions: 8.1.0.Final
> Environment: Linux aimobile-sm.servicemesh.com 3.15.7-200.fc20.x86_64 #1 SMP Mon Jul 28 18:50:26 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
> Reporter: Arcadiy Ivanov
> Assignee: Brian Stansberry
>
> The code inside ReadResourceHandler.doExecuteInternal(OperationContext context, ModelNode operation) goes as follows:
> {noformat}
> final int recursiveDepth = operation.get(ModelDescriptionConstants.RECURSIVE_DEPTH).asInt(0);
> final boolean recursive = recursiveDepth > 0 || operation.get(ModelDescriptionConstants.RECURSIVE).asBoolean(false);
> {noformat}
> The [documentation|https://docs.jboss.org/author/display/WFLY8/Global+operations] states:
> recursive-depth – (int) – The depth to which information about child resources should be included *if recursive is {{true}*. If not set, the depth will be unlimited; i.e. all descendant resources will be included.
> The logic, however, as implemented goes - either recursive-depth is greater than zero OR recursive is true.
> The proper implementation should be:
> {noformat}
> final int recursiveDepth = operation.get(ModelDescriptionConstants.RECURSIVE_DEPTH).asInt(0);
> final boolean recursive = operation.get(ModelDescriptionConstants.RECURSIVE).asBoolean(false) &&
> (!operation.get(ModelDescriptionConstants.RECURSIVE_DEPTH).isDefined() || recursiveDepth > 0);
> {noformat}
> The above snippet works as follows: recurs IF recursive is set AND (either recursive-depth is not defined OR recursive-depth is greater than 0).
>
--
This message was sent by Atlassian JIRA
(v6.2.6#6264)
More information about the jboss-jira
mailing list