[
https://issues.apache.org/jira/browse/CASSANDRA-15998?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
David Capwell updated CASSANDRA-15998:
--------------------------------------
Change Category: Quality Assurance
Complexity: Low Hanging Fruit
Status: Open (was: Triage Needed)
> Add proper support for jvm-dtests to query logs
> -----------------------------------------------
>
> Key: CASSANDRA-15998
> URL: https://issues.apache.org/jira/browse/CASSANDRA-15998
> Project: Cassandra
> Issue Type: New Feature
> Components: Test/dtest
> Reporter: David Capwell
> Priority: Normal
>
> Right now we log to disk, but don’t expose a direct way to access the logs,
> this method is also a bit brittle as all the instances write to the same
> location (and cleanup between tests is missing). To aid in this, we should
> properly support reading log files for each instance.
> Below is a POC of what it takes to read the logs today
> {code}
> diff --git a/test/conf/logback-dtest.xml b/test/conf/logback-dtest.xml
> index 370e1e5bb2..472ebc23ba 100644
> --- a/test/conf/logback-dtest.xml
> +++ b/test/conf/logback-dtest.xml
> @@ -25,9 +25,9 @@
> <appender name="INSTANCEFILE"
> class="ch.qos.logback.core.rolling.RollingFileAppender">
> - <file>./build/test/logs/${cassandra.testtag}/TEST-${suitename}.log</file>
> +
> <file>./build/test/logs/${cassandra.testtag}/TEST-${suitename}-${instance_id}.log</file>
> <rollingPolicy
> class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
> -
> <fileNamePattern>./build/test/logs/${cassandra.testtag}/TEST-${suitename}.log.%i.gz</fileNamePattern>
> +
> <fileNamePattern>./build/test/logs/${cassandra.testtag}/TEST-${suitename}-${instance_id}.log.%i.gz</fileNamePattern>
> <minIndex>1</minIndex>
> <maxIndex>20</maxIndex>
> </rollingPolicy>
> {code}
> And test case
> {code}
> package org.apache.cassandra.distributed.test;
> import java.io.BufferedReader;
> import java.io.FileInputStream;
> import java.io.IOException;
> import java.io.InputStreamReader;
> import java.io.UncheckedIOException;
> import java.nio.charset.StandardCharsets;
> import java.util.Iterator;
> import java.util.Spliterator;
> import java.util.Spliterators;
> import java.util.regex.Matcher;
> import java.util.regex.Pattern;
> import java.util.stream.Stream;
> import java.util.stream.StreamSupport;
> import com.google.common.io.Closeables;
> import org.junit.Test;
> import org.apache.cassandra.distributed.Cluster;
> import org.apache.cassandra.distributed.impl.InstanceIDDefiner;
> import org.apache.cassandra.utils.AbstractIterator;
> public class AllTheLogs extends TestBaseImpl
> {
> @Test
> public void test() throws IOException
> {
> try (final Cluster cluster = init(Cluster.build(1).start()))
> {
> String tag = System.getProperty("cassandra.testtag",
> "cassandra.testtag_IS_UNDEFINED");
> String suite = System.getProperty("suitename",
> "suitename_IS_UNDEFINED");
> String id = cluster.get(1).callOnInstance(() -> new
> InstanceIDDefiner().getPropertyValue());
> String log = String.format("build/test/logs/%s/TEST-%s-%s.log",
> tag, suite, id);
> grep(log, "Enqueuing flush of tables").forEach(l ->
> System.out.println("I found the thing: " + l));
> }
> }
> private static Stream<String> grep(String file, String regex) throws
> IOException
> {
> return grep(file, Pattern.compile(regex));
> }
> private static Stream<String> grep(String file, Pattern regex) throws
> IOException
> {
> BufferedReader reader = new BufferedReader(new InputStreamReader(new
> FileInputStream(file), StandardCharsets.UTF_8));
> Iterator<String> it = new AbstractIterator<String>()
> {
> protected String computeNext()
> {
> try
> {
> String s;
> while ((s = reader.readLine()) != null)
> {
> Matcher m = regex.matcher(s);
> if (m.find())
> return s;
> }
> reader.close();
> return endOfData();
> }
> catch (IOException e)
> {
> Closeables.closeQuietly(reader);
> throw new UncheckedIOException(e);
> }
> }
> };
> return StreamSupport.stream(Spliterators.spliteratorUnknownSize(it,
> Spliterator.ORDERED), false);
> }
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]