You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@logging.apache.org by Gary Gregory <ga...@gmail.com> on 2022/03/14 00:17:51 UTC

Re: [logging-log4j2] branch release-2.x updated: Switches Cassandra to random port

Can't we use an ephemeral port here?

Gary

On Sun, Mar 13, 2022, 19:14 <pk...@apache.org> wrote:

> This is an automated email from the ASF dual-hosted git repository.
>
> pkarwasz pushed a commit to branch release-2.x
> in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
>
>
> The following commit(s) were added to refs/heads/release-2.x by this push:
>      new 10460ec  Switches Cassandra to random port
> 10460ec is described below
>
> commit 10460ec5200aa7eafb33b200f0f349a66e16c708
> Author: Piotr P. Karwasz <pi...@karwasz.org>
> AuthorDate: Mon Mar 14 00:13:41 2022 +0100
>
>     Switches Cassandra to random port
> ---
>  .../org/apache/logging/log4j/cassandra/CassandraRule.java | 15
> ++++++++++++---
>  .../src/test/resources/CassandraAppenderTest.xml          |  2 +-
>  2 files changed, 13 insertions(+), 4 deletions(-)
>
> diff --git
> a/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> b/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> index 2939d07..ad39dd6 100644
> ---
> a/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> +++
> b/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> @@ -18,22 +18,25 @@ package org.apache.logging.log4j.cassandra;
>
>  import java.io.IOException;
>  import java.net.InetAddress;
> +import java.net.InetSocketAddress;
>  import java.nio.file.Files;
>  import java.nio.file.Path;
>  import java.security.Permission;
>  import java.util.concurrent.CountDownLatch;
>  import java.util.concurrent.ThreadFactory;
>
> -import com.datastax.driver.core.Cluster;
> -import com.datastax.driver.core.Session;
>  import org.apache.cassandra.service.CassandraDaemon;
>  import org.apache.logging.log4j.LoggingException;
>  import org.apache.logging.log4j.core.util.Cancellable;
>  import org.apache.logging.log4j.core.util.Closer;
>  import org.apache.logging.log4j.core.util.Log4jThreadFactory;
> +import org.apache.logging.log4j.test.AvailablePortFinder;
>  import org.apache.logging.log4j.util.PropertiesUtil;
>  import org.junit.rules.ExternalResource;
>
> +import com.datastax.driver.core.Cluster;
> +import com.datastax.driver.core.Session;
> +
>  /**
>   * JUnit rule to set up and tear down a Cassandra database instance.
>   */
> @@ -66,12 +69,18 @@ public class CassandraRule extends ExternalResource {
>          Files.createDirectories(root.resolve("data"));
>          final Path config = root.resolve("cassandra.yml");
>          Files.copy(getClass().getResourceAsStream("/cassandra.yaml"),
> config);
> +        final int nativePort = AvailablePortFinder.getNextAvailable();
> +        System.setProperty("cassandra.native_transport_port",
> Integer.toString(nativePort));
> +        System.setProperty("cassandra.storage_port",
> Integer.toString(AvailablePortFinder.getNextAvailable()));
>          System.setProperty("cassandra.config", "file:" +
> config.toString());
>          System.setProperty("cassandra.storagedir", root.toString());
>          System.setProperty("cassandra-foreground", "true"); // prevents
> Cassandra from closing stdout/stderr
>          THREAD_FACTORY.newThread(embeddedCassandra).start();
>          latch.await();
> -        cluster =
> Cluster.builder().addContactPoints(InetAddress.getLoopbackAddress()).build();
> +        cluster = Cluster.builder()
> +                .addContactPointsWithPorts(new
> InetSocketAddress(InetAddress.getLoopbackAddress(), nativePort))
> +                .build();
> +
>          try (final Session session = cluster.connect()) {
>              session.execute("CREATE KEYSPACE " + keyspace + " WITH
> REPLICATION = " +
>                  "{ 'class': 'SimpleStrategy', 'replication_factor': 2
> };");
> diff --git a/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> b/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> index e1f37e9..f9ce643 100644
> --- a/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> +++ b/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> @@ -19,7 +19,7 @@
>  <Configuration name="CassandraAppenderTest">
>    <Appenders>
>      <Cassandra name="Cassandra" clusterName="Test Cluster"
> keyspace="test" table="logs" bufferSize="10" batched="true">
> -      <SocketAddress host="localhost" port="9042"/>
> +      <SocketAddress host="localhost"
> port="${sys:cassandra.native_transport_port}"/>
>        <ColumnMapping name="id" pattern="%uuid{TIME}"
> type="java.util.UUID"/>
>        <ColumnMapping name="timeid" literal="now()"/>
>        <ColumnMapping name="message" pattern="%message"/>
>

Re: [logging-log4j2] branch release-2.x updated: Switches Cassandra to random port

Posted by Matt Sicker <bo...@gmail.com>.
If you're trying to test how CI handles a commit, then yeah, file a
PR. Those PR builds are the same as a commit build.

On Mon, Mar 14, 2022 at 4:02 PM Piotr P. Karwasz
<pi...@gmail.com> wrote:
>
> On Mon, Mar 14, 2022 at 9:47 PM Gary Gregory <ga...@gmail.com> wrote:
> >
> > Time add a better to Cassandra in a PR! ;-)
>
> I took my chances pushing the commit directly and it failed on MacOS
> (but retrieved the ephemeral port correctly), ;-(. Next time I'll opt
> for a PR. Maybe the timeout is the issue. The MacOS machine seems to
> be the slowest of the lot.
>
> Piotr

Re: [logging-log4j2] branch release-2.x updated: Switches Cassandra to random port

Posted by Gary Gregory <ga...@gmail.com>.
I was talking about submitting a PR to the Cassandra project to add a
getter.

Gary

On Mon, Mar 14, 2022, 17:02 Piotr P. Karwasz <pi...@gmail.com>
wrote:

> On Mon, Mar 14, 2022 at 9:47 PM Gary Gregory <ga...@gmail.com>
> wrote:
> >
> > Time add a better to Cassandra in a PR! ;-)
>
> I took my chances pushing the commit directly and it failed on MacOS
> (but retrieved the ephemeral port correctly), ;-(. Next time I'll opt
> for a PR. Maybe the timeout is the issue. The MacOS machine seems to
> be the slowest of the lot.
>
> Piotr
>

Re: [logging-log4j2] branch release-2.x updated: Switches Cassandra to random port

Posted by "Piotr P. Karwasz" <pi...@gmail.com>.
On Mon, Mar 14, 2022 at 9:47 PM Gary Gregory <ga...@gmail.com> wrote:
>
> Time add a better to Cassandra in a PR! ;-)

I took my chances pushing the commit directly and it failed on MacOS
(but retrieved the ephemeral port correctly), ;-(. Next time I'll opt
for a PR. Maybe the timeout is the issue. The MacOS machine seems to
be the slowest of the lot.

Piotr

Re: [logging-log4j2] branch release-2.x updated: Switches Cassandra to random port

Posted by Gary Gregory <ga...@gmail.com>.
Time add a better to Cassandra in a PR! ;-)

Gary

On Mon, Mar 14, 2022, 15:31 Piotr P. Karwasz <pi...@gmail.com>
wrote:

> On Mon, Mar 14, 2022 at 11:19 AM Gary Gregory <ga...@gmail.com>
> wrote:
> > Using 0 to get an ephemeral is guaranteed to work (until the OS runs out
> of
> > ports). Using AvailablePortFinder does not guarantee anything IIRC. Isn't
> > there a (small) chance that someone else on the machine can use that port
> > before we do? Assuming there is an API that says 'this is my actual port'
> > in the server we are creating.
>
> There is no API to retrieve the server's actual port, but this can be
> done through a private field. I pushed a proof-of-concept on the
> `release-2.x`.
>
> Piotr
>

Re: [logging-log4j2] branch release-2.x updated: Switches Cassandra to random port

Posted by "Piotr P. Karwasz" <pi...@gmail.com>.
On Mon, Mar 14, 2022 at 11:19 AM Gary Gregory <ga...@gmail.com> wrote:
> Using 0 to get an ephemeral is guaranteed to work (until the OS runs out of
> ports). Using AvailablePortFinder does not guarantee anything IIRC. Isn't
> there a (small) chance that someone else on the machine can use that port
> before we do? Assuming there is an API that says 'this is my actual port'
> in the server we are creating.

There is no API to retrieve the server's actual port, but this can be
done through a private field. I pushed a proof-of-concept on the
`release-2.x`.

Piotr

Re: [logging-log4j2] branch release-2.x updated: Switches Cassandra to random port

Posted by Gary Gregory <ga...@gmail.com>.
Using 0 to get an ephemeral is guaranteed to work (until the OS runs out of
ports). Using AvailablePortFinder does not guarantee anything IIRC. Isn't
there a (small) chance that someone else on the machine can use that port
before we do? Assuming there is an API that says 'this is my actual port'
in the server we are creating.

Gary

On Mon, Mar 14, 2022, 04:29 Volkan Yazıcı <vo...@yazi.ci> wrote:

> Doh! I was responding to Gary's remark but after checking the diff in more
> detail, indeed there are no fixed ports anywhere. On the contrary, this
> commit addresses that issue.
>
> On Mon, Mar 14, 2022 at 9:22 AM Piotr P. Karwasz <pi...@gmail.com>
> wrote:
>
> > On Mon, Mar 14, 2022 at 1:18 AM Gary Gregory <ga...@gmail.com>
> > wrote:
> > >
> > > Can't we use an ephemeral port here?
> >
> > I am not sure I understand: `AvailablePortFinder` does return a port
> > in the ephemeral range.
> >
> > Piotr
> >
> > >
> > > Gary
> > >
> > > On Sun, Mar 13, 2022, 19:14 <pk...@apache.org> wrote:
> > >
> > > > This is an automated email from the ASF dual-hosted git repository.
> > > >
> > > > pkarwasz pushed a commit to branch release-2.x
> > > > in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
> > > >
> > > >
> > > > The following commit(s) were added to refs/heads/release-2.x by this
> > push:
> > > >      new 10460ec  Switches Cassandra to random port
> > > > 10460ec is described below
> > > >
> > > > commit 10460ec5200aa7eafb33b200f0f349a66e16c708
> > > > Author: Piotr P. Karwasz <pi...@karwasz.org>
> > > > AuthorDate: Mon Mar 14 00:13:41 2022 +0100
> > > >
> > > >     Switches Cassandra to random port
> > > > ---
> > > >  .../org/apache/logging/log4j/cassandra/CassandraRule.java | 15
> > > > ++++++++++++---
> > > >  .../src/test/resources/CassandraAppenderTest.xml          |  2 +-
> > > >  2 files changed, 13 insertions(+), 4 deletions(-)
> > > >
> > > > diff --git
> > > >
> >
> a/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> > > >
> >
> b/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> > > > index 2939d07..ad39dd6 100644
> > > > ---
> > > >
> >
> a/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> > > > +++
> > > >
> >
> b/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> > > > @@ -18,22 +18,25 @@ package org.apache.logging.log4j.cassandra;
> > > >
> > > >  import java.io.IOException;
> > > >  import java.net.InetAddress;
> > > > +import java.net.InetSocketAddress;
> > > >  import java.nio.file.Files;
> > > >  import java.nio.file.Path;
> > > >  import java.security.Permission;
> > > >  import java.util.concurrent.CountDownLatch;
> > > >  import java.util.concurrent.ThreadFactory;
> > > >
> > > > -import com.datastax.driver.core.Cluster;
> > > > -import com.datastax.driver.core.Session;
> > > >  import org.apache.cassandra.service.CassandraDaemon;
> > > >  import org.apache.logging.log4j.LoggingException;
> > > >  import org.apache.logging.log4j.core.util.Cancellable;
> > > >  import org.apache.logging.log4j.core.util.Closer;
> > > >  import org.apache.logging.log4j.core.util.Log4jThreadFactory;
> > > > +import org.apache.logging.log4j.test.AvailablePortFinder;
> > > >  import org.apache.logging.log4j.util.PropertiesUtil;
> > > >  import org.junit.rules.ExternalResource;
> > > >
> > > > +import com.datastax.driver.core.Cluster;
> > > > +import com.datastax.driver.core.Session;
> > > > +
> > > >  /**
> > > >   * JUnit rule to set up and tear down a Cassandra database instance.
> > > >   */
> > > > @@ -66,12 +69,18 @@ public class CassandraRule extends
> > ExternalResource {
> > > >          Files.createDirectories(root.resolve("data"));
> > > >          final Path config = root.resolve("cassandra.yml");
> > > >
> Files.copy(getClass().getResourceAsStream("/cassandra.yaml"),
> > > > config);
> > > > +        final int nativePort =
> AvailablePortFinder.getNextAvailable();
> > > > +        System.setProperty("cassandra.native_transport_port",
> > > > Integer.toString(nativePort));
> > > > +        System.setProperty("cassandra.storage_port",
> > > > Integer.toString(AvailablePortFinder.getNextAvailable()));
> > > >          System.setProperty("cassandra.config", "file:" +
> > > > config.toString());
> > > >          System.setProperty("cassandra.storagedir", root.toString());
> > > >          System.setProperty("cassandra-foreground", "true"); //
> > prevents
> > > > Cassandra from closing stdout/stderr
> > > >          THREAD_FACTORY.newThread(embeddedCassandra).start();
> > > >          latch.await();
> > > > -        cluster =
> > > >
> >
> Cluster.builder().addContactPoints(InetAddress.getLoopbackAddress()).build();
> > > > +        cluster = Cluster.builder()
> > > > +                .addContactPointsWithPorts(new
> > > > InetSocketAddress(InetAddress.getLoopbackAddress(), nativePort))
> > > > +                .build();
> > > > +
> > > >          try (final Session session = cluster.connect()) {
> > > >              session.execute("CREATE KEYSPACE " + keyspace + " WITH
> > > > REPLICATION = " +
> > > >                  "{ 'class': 'SimpleStrategy', 'replication_factor':
> 2
> > > > };");
> > > > diff --git
> > a/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> > > > b/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> > > > index e1f37e9..f9ce643 100644
> > > > --- a/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> > > > +++ b/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> > > > @@ -19,7 +19,7 @@
> > > >  <Configuration name="CassandraAppenderTest">
> > > >    <Appenders>
> > > >      <Cassandra name="Cassandra" clusterName="Test Cluster"
> > > > keyspace="test" table="logs" bufferSize="10" batched="true">
> > > > -      <SocketAddress host="localhost" port="9042"/>
> > > > +      <SocketAddress host="localhost"
> > > > port="${sys:cassandra.native_transport_port}"/>
> > > >        <ColumnMapping name="id" pattern="%uuid{TIME}"
> > > > type="java.util.UUID"/>
> > > >        <ColumnMapping name="timeid" literal="now()"/>
> > > >        <ColumnMapping name="message" pattern="%message"/>
> > > >
> >
>

Re: [logging-log4j2] branch release-2.x updated: Switches Cassandra to random port

Posted by Volkan Yazıcı <vo...@yazi.ci>.
Doh! I was responding to Gary's remark but after checking the diff in more
detail, indeed there are no fixed ports anywhere. On the contrary, this
commit addresses that issue.

On Mon, Mar 14, 2022 at 9:22 AM Piotr P. Karwasz <pi...@gmail.com>
wrote:

> On Mon, Mar 14, 2022 at 1:18 AM Gary Gregory <ga...@gmail.com>
> wrote:
> >
> > Can't we use an ephemeral port here?
>
> I am not sure I understand: `AvailablePortFinder` does return a port
> in the ephemeral range.
>
> Piotr
>
> >
> > Gary
> >
> > On Sun, Mar 13, 2022, 19:14 <pk...@apache.org> wrote:
> >
> > > This is an automated email from the ASF dual-hosted git repository.
> > >
> > > pkarwasz pushed a commit to branch release-2.x
> > > in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
> > >
> > >
> > > The following commit(s) were added to refs/heads/release-2.x by this
> push:
> > >      new 10460ec  Switches Cassandra to random port
> > > 10460ec is described below
> > >
> > > commit 10460ec5200aa7eafb33b200f0f349a66e16c708
> > > Author: Piotr P. Karwasz <pi...@karwasz.org>
> > > AuthorDate: Mon Mar 14 00:13:41 2022 +0100
> > >
> > >     Switches Cassandra to random port
> > > ---
> > >  .../org/apache/logging/log4j/cassandra/CassandraRule.java | 15
> > > ++++++++++++---
> > >  .../src/test/resources/CassandraAppenderTest.xml          |  2 +-
> > >  2 files changed, 13 insertions(+), 4 deletions(-)
> > >
> > > diff --git
> > >
> a/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> > >
> b/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> > > index 2939d07..ad39dd6 100644
> > > ---
> > >
> a/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> > > +++
> > >
> b/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> > > @@ -18,22 +18,25 @@ package org.apache.logging.log4j.cassandra;
> > >
> > >  import java.io.IOException;
> > >  import java.net.InetAddress;
> > > +import java.net.InetSocketAddress;
> > >  import java.nio.file.Files;
> > >  import java.nio.file.Path;
> > >  import java.security.Permission;
> > >  import java.util.concurrent.CountDownLatch;
> > >  import java.util.concurrent.ThreadFactory;
> > >
> > > -import com.datastax.driver.core.Cluster;
> > > -import com.datastax.driver.core.Session;
> > >  import org.apache.cassandra.service.CassandraDaemon;
> > >  import org.apache.logging.log4j.LoggingException;
> > >  import org.apache.logging.log4j.core.util.Cancellable;
> > >  import org.apache.logging.log4j.core.util.Closer;
> > >  import org.apache.logging.log4j.core.util.Log4jThreadFactory;
> > > +import org.apache.logging.log4j.test.AvailablePortFinder;
> > >  import org.apache.logging.log4j.util.PropertiesUtil;
> > >  import org.junit.rules.ExternalResource;
> > >
> > > +import com.datastax.driver.core.Cluster;
> > > +import com.datastax.driver.core.Session;
> > > +
> > >  /**
> > >   * JUnit rule to set up and tear down a Cassandra database instance.
> > >   */
> > > @@ -66,12 +69,18 @@ public class CassandraRule extends
> ExternalResource {
> > >          Files.createDirectories(root.resolve("data"));
> > >          final Path config = root.resolve("cassandra.yml");
> > >          Files.copy(getClass().getResourceAsStream("/cassandra.yaml"),
> > > config);
> > > +        final int nativePort = AvailablePortFinder.getNextAvailable();
> > > +        System.setProperty("cassandra.native_transport_port",
> > > Integer.toString(nativePort));
> > > +        System.setProperty("cassandra.storage_port",
> > > Integer.toString(AvailablePortFinder.getNextAvailable()));
> > >          System.setProperty("cassandra.config", "file:" +
> > > config.toString());
> > >          System.setProperty("cassandra.storagedir", root.toString());
> > >          System.setProperty("cassandra-foreground", "true"); //
> prevents
> > > Cassandra from closing stdout/stderr
> > >          THREAD_FACTORY.newThread(embeddedCassandra).start();
> > >          latch.await();
> > > -        cluster =
> > >
> Cluster.builder().addContactPoints(InetAddress.getLoopbackAddress()).build();
> > > +        cluster = Cluster.builder()
> > > +                .addContactPointsWithPorts(new
> > > InetSocketAddress(InetAddress.getLoopbackAddress(), nativePort))
> > > +                .build();
> > > +
> > >          try (final Session session = cluster.connect()) {
> > >              session.execute("CREATE KEYSPACE " + keyspace + " WITH
> > > REPLICATION = " +
> > >                  "{ 'class': 'SimpleStrategy', 'replication_factor': 2
> > > };");
> > > diff --git
> a/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> > > b/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> > > index e1f37e9..f9ce643 100644
> > > --- a/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> > > +++ b/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> > > @@ -19,7 +19,7 @@
> > >  <Configuration name="CassandraAppenderTest">
> > >    <Appenders>
> > >      <Cassandra name="Cassandra" clusterName="Test Cluster"
> > > keyspace="test" table="logs" bufferSize="10" batched="true">
> > > -      <SocketAddress host="localhost" port="9042"/>
> > > +      <SocketAddress host="localhost"
> > > port="${sys:cassandra.native_transport_port}"/>
> > >        <ColumnMapping name="id" pattern="%uuid{TIME}"
> > > type="java.util.UUID"/>
> > >        <ColumnMapping name="timeid" literal="now()"/>
> > >        <ColumnMapping name="message" pattern="%message"/>
> > >
>

Re: [logging-log4j2] branch release-2.x updated: Switches Cassandra to random port

Posted by "Piotr P. Karwasz" <pi...@gmail.com>.
On Mon, Mar 14, 2022 at 1:18 AM Gary Gregory <ga...@gmail.com> wrote:
>
> Can't we use an ephemeral port here?

I am not sure I understand: `AvailablePortFinder` does return a port
in the ephemeral range.

Piotr

>
> Gary
>
> On Sun, Mar 13, 2022, 19:14 <pk...@apache.org> wrote:
>
> > This is an automated email from the ASF dual-hosted git repository.
> >
> > pkarwasz pushed a commit to branch release-2.x
> > in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
> >
> >
> > The following commit(s) were added to refs/heads/release-2.x by this push:
> >      new 10460ec  Switches Cassandra to random port
> > 10460ec is described below
> >
> > commit 10460ec5200aa7eafb33b200f0f349a66e16c708
> > Author: Piotr P. Karwasz <pi...@karwasz.org>
> > AuthorDate: Mon Mar 14 00:13:41 2022 +0100
> >
> >     Switches Cassandra to random port
> > ---
> >  .../org/apache/logging/log4j/cassandra/CassandraRule.java | 15
> > ++++++++++++---
> >  .../src/test/resources/CassandraAppenderTest.xml          |  2 +-
> >  2 files changed, 13 insertions(+), 4 deletions(-)
> >
> > diff --git
> > a/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> > b/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> > index 2939d07..ad39dd6 100644
> > ---
> > a/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> > +++
> > b/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> > @@ -18,22 +18,25 @@ package org.apache.logging.log4j.cassandra;
> >
> >  import java.io.IOException;
> >  import java.net.InetAddress;
> > +import java.net.InetSocketAddress;
> >  import java.nio.file.Files;
> >  import java.nio.file.Path;
> >  import java.security.Permission;
> >  import java.util.concurrent.CountDownLatch;
> >  import java.util.concurrent.ThreadFactory;
> >
> > -import com.datastax.driver.core.Cluster;
> > -import com.datastax.driver.core.Session;
> >  import org.apache.cassandra.service.CassandraDaemon;
> >  import org.apache.logging.log4j.LoggingException;
> >  import org.apache.logging.log4j.core.util.Cancellable;
> >  import org.apache.logging.log4j.core.util.Closer;
> >  import org.apache.logging.log4j.core.util.Log4jThreadFactory;
> > +import org.apache.logging.log4j.test.AvailablePortFinder;
> >  import org.apache.logging.log4j.util.PropertiesUtil;
> >  import org.junit.rules.ExternalResource;
> >
> > +import com.datastax.driver.core.Cluster;
> > +import com.datastax.driver.core.Session;
> > +
> >  /**
> >   * JUnit rule to set up and tear down a Cassandra database instance.
> >   */
> > @@ -66,12 +69,18 @@ public class CassandraRule extends ExternalResource {
> >          Files.createDirectories(root.resolve("data"));
> >          final Path config = root.resolve("cassandra.yml");
> >          Files.copy(getClass().getResourceAsStream("/cassandra.yaml"),
> > config);
> > +        final int nativePort = AvailablePortFinder.getNextAvailable();
> > +        System.setProperty("cassandra.native_transport_port",
> > Integer.toString(nativePort));
> > +        System.setProperty("cassandra.storage_port",
> > Integer.toString(AvailablePortFinder.getNextAvailable()));
> >          System.setProperty("cassandra.config", "file:" +
> > config.toString());
> >          System.setProperty("cassandra.storagedir", root.toString());
> >          System.setProperty("cassandra-foreground", "true"); // prevents
> > Cassandra from closing stdout/stderr
> >          THREAD_FACTORY.newThread(embeddedCassandra).start();
> >          latch.await();
> > -        cluster =
> > Cluster.builder().addContactPoints(InetAddress.getLoopbackAddress()).build();
> > +        cluster = Cluster.builder()
> > +                .addContactPointsWithPorts(new
> > InetSocketAddress(InetAddress.getLoopbackAddress(), nativePort))
> > +                .build();
> > +
> >          try (final Session session = cluster.connect()) {
> >              session.execute("CREATE KEYSPACE " + keyspace + " WITH
> > REPLICATION = " +
> >                  "{ 'class': 'SimpleStrategy', 'replication_factor': 2
> > };");
> > diff --git a/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> > b/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> > index e1f37e9..f9ce643 100644
> > --- a/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> > +++ b/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> > @@ -19,7 +19,7 @@
> >  <Configuration name="CassandraAppenderTest">
> >    <Appenders>
> >      <Cassandra name="Cassandra" clusterName="Test Cluster"
> > keyspace="test" table="logs" bufferSize="10" batched="true">
> > -      <SocketAddress host="localhost" port="9042"/>
> > +      <SocketAddress host="localhost"
> > port="${sys:cassandra.native_transport_port}"/>
> >        <ColumnMapping name="id" pattern="%uuid{TIME}"
> > type="java.util.UUID"/>
> >        <ColumnMapping name="timeid" literal="now()"/>
> >        <ColumnMapping name="message" pattern="%message"/>
> >

Re: [logging-log4j2] branch release-2.x updated: Switches Cassandra to random port

Posted by Volkan Yazıcı <vo...@yazi.ci>.
We indeed can and should!

Piotr, see `JsonTemplateLayoutNullEventDelimiterTest` and
`nullEventDelimitedJsonTemplateLayoutLogging.xml` for inspiration.

On Mon, Mar 14, 2022 at 1:18 AM Gary Gregory <ga...@gmail.com> wrote:

> Can't we use an ephemeral port here?
>
> Gary
>
> On Sun, Mar 13, 2022, 19:14 <pk...@apache.org> wrote:
>
> > This is an automated email from the ASF dual-hosted git repository.
> >
> > pkarwasz pushed a commit to branch release-2.x
> > in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
> >
> >
> > The following commit(s) were added to refs/heads/release-2.x by this
> push:
> >      new 10460ec  Switches Cassandra to random port
> > 10460ec is described below
> >
> > commit 10460ec5200aa7eafb33b200f0f349a66e16c708
> > Author: Piotr P. Karwasz <pi...@karwasz.org>
> > AuthorDate: Mon Mar 14 00:13:41 2022 +0100
> >
> >     Switches Cassandra to random port
> > ---
> >  .../org/apache/logging/log4j/cassandra/CassandraRule.java | 15
> > ++++++++++++---
> >  .../src/test/resources/CassandraAppenderTest.xml          |  2 +-
> >  2 files changed, 13 insertions(+), 4 deletions(-)
> >
> > diff --git
> >
> a/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> >
> b/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> > index 2939d07..ad39dd6 100644
> > ---
> >
> a/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> > +++
> >
> b/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
> > @@ -18,22 +18,25 @@ package org.apache.logging.log4j.cassandra;
> >
> >  import java.io.IOException;
> >  import java.net.InetAddress;
> > +import java.net.InetSocketAddress;
> >  import java.nio.file.Files;
> >  import java.nio.file.Path;
> >  import java.security.Permission;
> >  import java.util.concurrent.CountDownLatch;
> >  import java.util.concurrent.ThreadFactory;
> >
> > -import com.datastax.driver.core.Cluster;
> > -import com.datastax.driver.core.Session;
> >  import org.apache.cassandra.service.CassandraDaemon;
> >  import org.apache.logging.log4j.LoggingException;
> >  import org.apache.logging.log4j.core.util.Cancellable;
> >  import org.apache.logging.log4j.core.util.Closer;
> >  import org.apache.logging.log4j.core.util.Log4jThreadFactory;
> > +import org.apache.logging.log4j.test.AvailablePortFinder;
> >  import org.apache.logging.log4j.util.PropertiesUtil;
> >  import org.junit.rules.ExternalResource;
> >
> > +import com.datastax.driver.core.Cluster;
> > +import com.datastax.driver.core.Session;
> > +
> >  /**
> >   * JUnit rule to set up and tear down a Cassandra database instance.
> >   */
> > @@ -66,12 +69,18 @@ public class CassandraRule extends ExternalResource {
> >          Files.createDirectories(root.resolve("data"));
> >          final Path config = root.resolve("cassandra.yml");
> >          Files.copy(getClass().getResourceAsStream("/cassandra.yaml"),
> > config);
> > +        final int nativePort = AvailablePortFinder.getNextAvailable();
> > +        System.setProperty("cassandra.native_transport_port",
> > Integer.toString(nativePort));
> > +        System.setProperty("cassandra.storage_port",
> > Integer.toString(AvailablePortFinder.getNextAvailable()));
> >          System.setProperty("cassandra.config", "file:" +
> > config.toString());
> >          System.setProperty("cassandra.storagedir", root.toString());
> >          System.setProperty("cassandra-foreground", "true"); // prevents
> > Cassandra from closing stdout/stderr
> >          THREAD_FACTORY.newThread(embeddedCassandra).start();
> >          latch.await();
> > -        cluster =
> >
> Cluster.builder().addContactPoints(InetAddress.getLoopbackAddress()).build();
> > +        cluster = Cluster.builder()
> > +                .addContactPointsWithPorts(new
> > InetSocketAddress(InetAddress.getLoopbackAddress(), nativePort))
> > +                .build();
> > +
> >          try (final Session session = cluster.connect()) {
> >              session.execute("CREATE KEYSPACE " + keyspace + " WITH
> > REPLICATION = " +
> >                  "{ 'class': 'SimpleStrategy', 'replication_factor': 2
> > };");
> > diff --git a/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> > b/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> > index e1f37e9..f9ce643 100644
> > --- a/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> > +++ b/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml
> > @@ -19,7 +19,7 @@
> >  <Configuration name="CassandraAppenderTest">
> >    <Appenders>
> >      <Cassandra name="Cassandra" clusterName="Test Cluster"
> > keyspace="test" table="logs" bufferSize="10" batched="true">
> > -      <SocketAddress host="localhost" port="9042"/>
> > +      <SocketAddress host="localhost"
> > port="${sys:cassandra.native_transport_port}"/>
> >        <ColumnMapping name="id" pattern="%uuid{TIME}"
> > type="java.util.UUID"/>
> >        <ColumnMapping name="timeid" literal="now()"/>
> >        <ColumnMapping name="message" pattern="%message"/>
> >
>