You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Ken Giusti (JIRA)" <ji...@apache.org> on 2017/10/06 15:07:01 UTC

[jira] [Comment Edited] (DISPATCH-731) Support wildcard tenant vhosts in address prefix configuration

    [ https://issues.apache.org/jira/browse/DISPATCH-731?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16145715#comment-16145715 ] 

Ken Giusti edited comment on DISPATCH-731 at 10/6/17 3:06 PM:
--------------------------------------------------------------

This issue has been resolved, but in a way that is slightly different from the original description.

Instead of modifying the "prefix" attribute to accept a pattern in the vhost component of the address, a new address attribute "pattern" has been introduced.  The pattern attribute is an alternative to the existing "prefix" attribute (you may only specify one or the other, not both).  The pattern attribute is a wildcarded address pattern that is used to match the incoming address.

The pattern consists of a series of tokens separated by either a period (.) or a forward slash (\/).  For example "one/two/three" is a pattern consisting of three tokens: "one", "two", and "three".  There are two tokens that are reserved for wildcard matching: '\*' and '#'.   The '\*' token matches exactly one token.  The "#" matches zero or more tokens.   

For example, the pattern "one/*/three" will match the addresses "one/two/three" and "one/seven/three", but not "one/three" nor "one/two/two-and-a-half/three" (too many tokens). 

A "prefix" value can be converted to a pattern by appending a "/#" to it.  For example the prefix "a/b/c" is equivalent to the pattern "a/b/c/#".

The '\*' token has higher precedence than the "#" token, and a non-wildcard token has the highest precedence (exact match).   So given the following patterns:

1) a/b/c
2) a/b/*
3) a/b/#

The best match for input address "a/b/c" would be pattern #1.  The best match for "a/b/z" would be #2, since a "\*" match has higher precedence than a "#".  And the best match for "a/b" and "a/b/c/d" would be #3.

To optimize the lookup process, the pattern matcher performs the following transforms on input patterns:

Any sequences of "#/\*" are translated to the equivalent "\*/#"
Any sequences of "#/#" are translated to "#"




was (Author: kgiusti):
This issue has been resolved, but in a way that is slightly different from the original description.

Instead of modifying the "prefix" attribute to accept a pattern in the vhost component of the address, a new address attribute "pattern" has been introduced.  The pattern attribute is an alternative to the existing "prefix" attribute (you may only specify one or the other, not both).  The pattern attribute is a wildcarded address pattern that is used to match the incoming address.

The pattern consists of a series of tokens separated by either a period (.) or a forward slash (/).  For example "one/two/three" is a pattern consisting of three tokens: "one", "two", and "three".  There are two tokens that are reserved for wildcard matching: '*' and '#'.   The '*' token matches exactly one token.  The "#" matches zero or more tokens.   

For example, the pattern "one/*/three" will match the addresses "one/two/three" and "one/seven/three", but not "one/three" nor "one/two/two-and-a-half/three" (too many tokens). 

A "prefix" value can be converted to a pattern by appending a "/#" to it.  For example the prefix "a/b/c" is equivalent to the pattern "a/b/c/#".

The '*' token has higher precedence than the "#" token, and a non-wildcard token has the highest precedence (exact match).   So given the following patterns:

1) a/b/c
2) a/b/*
3) a/b/#

The best match for input address "a/b/c" would be pattern #1.  The best match for "a/b/z" would be #2, since a "*" match has higher precedence than a "#".  And the best match for "a/b" and "a/b/c/d" would be #3.

To optimize the lookup process, the pattern matcher performs the following transforms on input patterns:

Any sequences of "#/*" are translated to the equivalent "*/#"
Any sequences of "#/#" are translated to "#"



> Support wildcard tenant vhosts in address prefix configuration
> --------------------------------------------------------------
>
>                 Key: DISPATCH-731
>                 URL: https://issues.apache.org/jira/browse/DISPATCH-731
>             Project: Qpid Dispatch
>          Issue Type: Improvement
>          Components: Management Agent
>    Affects Versions: 0.7.0
>            Reporter: Ken Giusti
>            Assignee: Ken Giusti
>            Priority: Minor
>             Fix For: 1.0.0
>
>
> When specifying address prefix patterns it should be possible to use a wildcard match for the vhost.  Example:
> address {
>     prefix: a_prefix   # matches current vhost (from open frame)
> }
> address {
>     prefix: /my-vhost.com/other_prefix  # matched only if vhost=my-vhost
> }
> address {
>     prefix:  /*.#.domain1.com/prefix_3 # matched if vhost ends with domain1.com
> }
> address {
>     prefix: /my.vhost.*.com/prefix_4  #matched if vhost starts with 'my.vhost', has a single wildcard component, and ends with '.com'
> }
> Or something like that, I think.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org