[ https://issues.apache.org/jira/browse/IGNITE-8570?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alexey Kuznetsov updated IGNITE-8570:
-------------------------------------
Description:
_+Problem with current GridStringLogger implementation+_:
Most usages of {{GridStringLogger}} in test assumes the following scenario. First, it is
set as a logger for some Ignite node.
Then, after some activity on that node, log content is searched for some predefined strings.
{{GridStringLogger}} uses {{StringBuilder}} of bounded size internally to store log contents,
older contents gets dropped on exaustion.
Thus, changes that add more logging may damage some independent tests that use {{GridStringLogger}}.
+_The suggestion for new implementation:_+
The suggestion is to implement and use another test logger conforming to these requirements:
* It does not accumulate any logs.
* It allows to set the listener that fires when log message matches certain regular expression,
{{Matcher}} can be passed to the listener
_+Proposed design+_, pseudocode:
```
Class GridRegexpLogger implements IgniteLogger{
…
debug(String str){
if(/* str matches pattern. */
{ /* notify listeners. */ }
}
…
listen("regexp", loggerListener)
{ /* registers listener. */ }
listenDebug("regexp", loggerListener)
{ /* registers listener for debug output only. */ }
…
waitFor("regexp", timeout)
{ /* like GridTestUtils.waitForCondition(), waits for regexp to occure in logs. */ }
…
}
```
Sample regexp logger usage:
```
GridRegexpLogger logger;
logger.listen(“regexp”, new GridRegexpListener());
logger.waitFor("regexp", 100);
```
was:
_+Problem with current GridStringLogger implementation+_:
Most usages of {{GridStringLogger}} in test assumes the following scenario. First, it is set
as a logger for some Ignite node.
Then, after some activity on that node, log content is searched for some predefined strings.
{{GridStringLogger}} uses {{StringBuilder}} of bounded size internally to store log contents,
older contents gets dropped on exaustion.
Thus, changes that add more logging may damage some independent tests that use {{GridStringLogger}}.
_+The suggestion for new implementation:
+_The suggestion is to implement and use another test logger conforming to these requirements:
* It does not accumulate any logs.
* It allows to set the listener that fires when log message matches certain regular expression,
{{Matcher}} can be passed to the listener
_+Proposed design+_, pseudocode:
```
Class GridRegexpLogger implements IgniteLogger{
…
debug(String str){
if(/* str matches pattern. */
{ /* notify listeners. */ }
}
…
listen("regexp", loggerListener)
{ /* registers listener. */ }
listenDebug("regexp", loggerListener)
{ /* registers listener for debug output only. */ }
…
waitFor("regexp", timeout)
{ /* like GridTestUtils.waitForCondition(), waits for regexp to occure in logs. */ }
…
}
```
Sample regexp logger usage:
```
GridRegexpLogger logger;
logger.listen(“regexp”, new GridRegexpListener());
logger.waitFor("regexp", 100);
```
> Create lighter version of GridStringLogger
> ------------------------------------------
>
> Key: IGNITE-8570
> URL: https://issues.apache.org/jira/browse/IGNITE-8570
> Project: Ignite
> Issue Type: Improvement
> Affects Versions: 2.4
> Reporter: Andrey Kuznetsov
> Assignee: Alexey Kuznetsov
> Priority: Major
> Fix For: 2.6
>
>
> _+Problem with current GridStringLogger implementation+_:
> Most usages of {{GridStringLogger}} in test assumes the following scenario. First, it
is set as a logger for some Ignite node.
> Then, after some activity on that node, log content is searched for some predefined
strings.
> {{GridStringLogger}} uses {{StringBuilder}} of bounded size internally to store log
contents, older contents gets dropped on exaustion.
> Thus, changes that add more logging may damage some independent tests that use {{GridStringLogger}}.
>
> +_The suggestion for new implementation:_+
> The suggestion is to implement and use another test logger conforming to these requirements:
> * It does not accumulate any logs.
> * It allows to set the listener that fires when log message matches certain regular
expression, {{Matcher}} can be passed to the listener
>
> _+Proposed design+_, pseudocode:
> ```
> Class GridRegexpLogger implements IgniteLogger{
> …
> debug(String str){
> if(/* str matches pattern. */
> { /* notify listeners. */ }
> }
> …
> listen("regexp", loggerListener)
> { /* registers listener. */ }
> listenDebug("regexp", loggerListener)
> { /* registers listener for debug output only. */ }
> …
> waitFor("regexp", timeout)
> { /* like GridTestUtils.waitForCondition(), waits for regexp to occure in logs. */ }
> …
> }
> ```
> Sample regexp logger usage:
> ```
> GridRegexpLogger logger;
> logger.listen(“regexp”, new GridRegexpListener());
> logger.waitFor("regexp", 100);
> ```
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
|