[
https://issues.apache.org/jira/browse/KNOX-2638?focusedWorklogId=627152&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-627152
]
ASF GitHub Bot logged work on KNOX-2638:
----------------------------------------
Author: ASF GitHub Bot
Created on: 23/Jul/21 12:32
Start Date: 23/Jul/21 12:32
Worklog Time Spent: 10m
Work Description: zeroflag opened a new pull request #472:
URL: https://github.com/apache/knox/pull/472
## What changes were proposed in this pull request?
STR:
1. Have an existing topology (test.xml), see if
blockSemicolon/blockBackslash/blockNonAscii are in the get topology output:
```bash
$ curl -u admin:admin-password -k -X GET
https://localhost:8443/gateway/admin/api/v1/topologies/test | grep
blockSemicolon
<name>main.invalidRequest.blockSemicolon</name>
```
2. Deploy a new topology file (test2.xml)
```bash
cp ./conf/topologies/test.xml ./conf/topologies/test2.xml
```
3. blockSemicolon/blockBackslash/blockNonAscii are no longer in the orignial
test.xml output:
```bash
$ curl -u admin:admin-password -k -X GET
https://localhost:8443/gateway/admin/api/v1/topologies/test | grep
blockSemicolon
```
The reason why these shiro properties are missing is because we only add
these after a topology deployment to the in memory representation of a
topology. When we deploy a new topology we also reload all the existing
topologies but only redeploy the newly added one.
```java
@Override
public void reloadTopologies() {
try {
synchronized (this) {
Map<File, Topology> oldTopologies = topologies;
Map<File, Topology> newTopologies =
loadTopologies(topologiesDirectory); // <= parse everything from disk
List<TopologyEvent> events = createChangeEvents(oldTopologies,
newTopologies);
topologies = newTopologies;
notifyChangeListeners(events); // <= this will redeploy the new
topology and add the shiro properties, but those will be missing from all other
existing topologies
}
} catch (Exception e) {
// Maybe it makes sense to throw exception
log.failedToReloadTopologies(e);
}
}
```
One open question is whether we wan't to write out these properties to the
disk or not.
## How was this patch tested?
This was discovered while investigating the flakiness of an existing test:
GatewayAdminTopologyFuncTest.
After the fixed I verified that GatewayAdminTopologyFuncTest is no longer
flaky. Existing tests cover this case that's why no new tests were added.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
Issue Time Tracking
-------------------
Worklog Id: (was: 627152)
Time Spent: 40m (was: 0.5h)
> Shiro propererties are missing after topology deployment
> --------------------------------------------------------
>
> Key: KNOX-2638
> URL: https://issues.apache.org/jira/browse/KNOX-2638
> Project: Apache Knox
> Issue Type: Bug
> Reporter: Attila Magyar
> Assignee: Attila Magyar
> Priority: Major
> Time Spent: 40m
> Remaining Estimate: 0h
>
> STR:
> 1. Have an existing topology (test.xml), see if
> blockSemicolon/blockBackslash/blockNonAscii are in the get topology output:
> curl -u admin:admin-password -k -X GET
> [https://localhost:8443/gateway/admin/api/v1/topologies/test]
> | grep blockSemicolon
> <name>main.invalidRequest.blockSemicolon</name>
> 2. Deploy a new topology file (test2.xml)
> {code:java}
> cp ./conf/topologies/test.xml ./conf/topologies/test2.xml {code}
> 3. blockSemicolon/blockBackslash/blockNonAscii are no longer in the orignial
> test.xml output:
> {code:java}
> curl -u admin:admin-password -k -X GET
> https://localhost:8443/gateway/admin/api/v1/topologies/test | grep
> blockSemicolon {code}
> This also causes some flakiness in tests like GatewayAdminTopologyFuncTest.
>
> The reason why these shiro properties are missing is because we only add
> these after a topology deployment to the in memory representation of a
> topology. When we deploy a new topology we also reload all the existing
> topologies but only redeploy the newly added one.
>
> {code:java}
> @Override
> public void reloadTopologies() {
> try {
> synchronized (this) {
> Map<File, Topology> oldTopologies = topologies;
> Map<File, Topology> newTopologies =
> loadTopologies(topologiesDirectory); // <= parse everything from disk
> List<TopologyEvent> events = createChangeEvents(oldTopologies,
> newTopologies);
> topologies = newTopologies;
> notifyChangeListeners(events); // <= this will redeploy the new
> topology and add the shiro properties, but those will be missing from all
> other existing topologies
> }
> } catch (Exception e) {
> // Maybe it makes sense to throw exception
> log.failedToReloadTopologies(e);
> }
> } {code}
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)