[ 
https://issues.apache.org/jira/browse/CASSANDRA-15998?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Petrov updated CASSANDRA-15998:
------------------------------------
    Component/s:     (was: Test/dtest/python)
                 Test/dtest/java

> 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/java
>            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: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to