Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue 4136: Fix logging configurations are broken in docker image #4137

Merged
merged 1 commit into from
Dec 29, 2023

Conversation

Shawyeok
Copy link
Contributor

Motivation

Fix #4136

Changes

Modify apply-config-from-env.py to accept individual files as parameters instead of a configuration folder. This change will enable the script to selectively apply the configuration override mechanism only to the necessary files.

@hangc0276
Copy link
Contributor

@Shawyeok Please rebase the master, thanks.

@Shawyeok Shawyeok force-pushed the fix-logging-broken-in-docker-image branch from 97ee222 to 6b1fe0a Compare December 7, 2023 05:45
@Shawyeok
Copy link
Contributor Author

Shawyeok commented Dec 7, 2023

@Shawyeok Please rebase the master, thanks.

Done, thanks.

@hangc0276
Copy link
Contributor

@zymap Please help take a look at this PR, thanks.

Copy link
Member

@zymap zymap left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, the apply-config-from-env will go through the configuration file and only update the existing key with the format k=v. So I don't think it will update the log4j configuration file. Could you please paste your log4j configuration file as well?

@Shawyeok
Copy link
Contributor Author

Shawyeok commented Dec 12, 2023

Actually, the apply-config-from-env will go through the configuration file and only update the existing key with the format k=v. So I don't think it will update the log4j configuration file. Could you please paste your log4j configuration file as well?

@zymap
There is an edge case here. For example, with the log4j2.xml configuration below, <Console name="CONSOLE" and <Console name="CONSOLEMDC" are treated as having the same key due to their k=v pattern (here, it’s <Consolename). As a result, any configuration lines that appear later are discarded, thus breaking the validity of the XML format.

<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="%d{ISO8601} - %-5p - [%t:%C{1}@%L] - %m%n"/>
</Console>
<Console name="CONSOLEMDC" target="SYSTEM_OUT">
<PatternLayout pattern="%d{ISO8601} - %-5p - [%t:%C{1}@%L] %X - %m%n"/>
</Console>

Here is a docker-compose file that can quickly reproduce the issue. You will see the error information mentioned in #4136.

version: '3'
services:
  zk:
    image: zookeeper:3.8.1
  bookie0:
    image: apache/bookkeeper:4.16.3
    environment:
      - BK_zkServers=zk:2181
    depends_on:
      - zk

@Shawyeok
Copy link
Contributor Author

@zymap
The current capability of apply-config-from-env.py is limited to handling configuration files in the k=v format, like properties files. Applying it to XML format configurations is meaningless and may lead to unexpected configuration replacements.

@zymap
Copy link
Member

zymap commented Dec 12, 2023

okay. How about letting the apply-conf-from-env support use the specified files to update? Most of the time, we only need to update the bookkeeper configuration file and zookeeper configuration file. I think we always manually update the rocksdb and log4j configuration files.

@Shawyeok
Copy link
Contributor Author

okay. How about letting the apply-conf-from-env support use the specified files to update? Most of the time, we only need to update the bookkeeper configuration file and zookeeper configuration file. I think we always manually update the rocksdb and log4j configuration files.

Yes, this is indeed what this PR does: it modifies apply-config-from-env.py to accept individual files as parameters. The usage would be like this:

$ ./apply-config-from-env file ...

@zymap
Copy link
Member

zymap commented Dec 12, 2023

Ah. Sorry. I misunderstood this pr. LGTM

@zymap zymap merged commit 9dab139 into apache:master Dec 29, 2023
16 checks passed
@raymondBourges
Copy link

Thanks @Shawyeok for this PR :-)

I use the three files it contains via docker volumes to get around the log configuration problem on my 4.16.3 image.

What do you think @zymap about also pushing this PR on the 4.16 branch so that it will be present in future 4.16.x images?

THANKS

@zymap
Copy link
Member

zymap commented Feb 4, 2024

@raymondBourges Sure, will include this in the next release.

@raymondBourges
Copy link

Thanks but 4.16.4 was already released on January 29 (but image on dockerhub still in 4.16.3).
This is why I talk about an 4.16 branch so that the PR will be included in a possible 4.16.5.
Thanks

lhotari pushed a commit to lhotari/bookkeeper that referenced this pull request Feb 9, 2024
lhotari pushed a commit to lhotari/bookkeeper that referenced this pull request Feb 9, 2024
@lhotari
Copy link
Member

lhotari commented Feb 9, 2024

I'm including this fix in #4207 and #4206 while fixing CI for branch-4.15 and branch-4.16 .

merlimat pushed a commit that referenced this pull request Feb 9, 2024
* Add support for Junit5 tests and fix CI that has been broken (#4197)

* Add support for Junit5 tests

- upgrade surefire plugin
- replace <forkMode>always</forkMode> with supported way in newer maven-surefire-plugin
- maven-failsafe-plugin version must match maven-surefire-plugin version
- remove invalid test case. Log4j is in the classpath for other reasons
  checked by running
  "mvn -pl tests/integration-tests-utils/pom.xml test -X"
  also verified by debugging that it's not in the system classpath, it is loaded by the
  MavenClassLoader
- add assertj-core for fluent assertions in tests

* Upgrade arquillian-junit-standalone

* Fix error in pom.xml

* Fix java.lang.ClassNotFoundException: javax.ws.rs.ProcessingException

* Pick docker-java-api version that is compatible with arquillian-cube-docker

* Fix snakeyaml issue

* Fix running of bookkeeper in Docker in tests

* Improve GitHub Actions CI workflow logging

* Increase client tests timeout

* Add script for picking fast ubuntu mirror for docker build

* upgrade maven-dependency-plugin version (used for copying .tar.gz for docker image building)

* Fix building of the docker image

* Increase timeouts for integration tests

* Use eclipse-temurin base image

* Replace "FROM ubuntu:22.10" with "FROM ubuntu:22.04" to use LTS version of ubuntu

22.10 (kinetic) is EOL since July 20 2023

* Build docker image also for backward-compatibility-tests

* Install gpg that is required by the scripts

* Add UBUNTU_MIRROR

* Remove redundancy from integration tests

* Fix missing dependency

* Fix classpath issues for arquillian-cube

* Upgrade actions versions

* Fix invalid references in native-io/pom.xml

* Fix circe-checksum native library compilation

* Migrate Gradle specific settings to Maven

* Another attempt to disable backward-compat tests in integration test build job

* Add working solution for skipping backward compat tests in the int tests

* Attempt to fix issue in locating the file

* Fix tar file extraction

* Improve solution

* Backward compat tests build commands without int tests

* Copy tune-runner-vm and clean-disk from Pulsar CI and clean disk

* Revisit skipping of backward compat tests once again

* Use similar MAVEN_OPTS as there is in Pulsar

* Fix directory

* Add way to find git root directory

* Revisit one more time

* Add current-version-image back

* Enable tests for backwardCompatTests

* Don't create /ledgers in ZK if it already exists

* Add uncaughtexceptionhandler

* Add exclusions for reload4j

* Use maven-surefire 2.8.1 for certain tests

* Add failing test back in, also fails with surefire 2.8.1

* Exclude logging implementations

* Revert "Use maven-surefire 2.8.1 for certain tests"

This reverts commit 94e2b8e.

* Exclude log4j

* Add instructions how to run on Mac Apple Silicon

* Find slf4j version

* Block loading some classes

* Change context classloader while creating new bookkeeper

* Route commons logging to slf4j

* Update shrinkwrap.version

* Wait for ZK client to shutdown before returning from close

* Upgrade Groovy version

* Remove arquillian-junit-container which causes tests to be run twice

* Skip backward compat tests unless -DbackwardCompatTests is passed

* Delay closing of classloaders by 5 seconds

* Fix checkstyle

* Improve instructions for running tests

* Upgrade Testcontainers and import the bom in dependencyManagement

* Fix synchronization bug pointed out by spotbugs

* upgrade markdown-link-check

* Ignore checking Google calendar for dead links

* Ignore anchors

* Add 2 more patterns to dead link checker exclusions

* Collect logs

* Log integration tests to console to observe progress, disable retries

* Use maven version provided by GitHub Action runner

* Improve instructions for docker socket proxy

* Add test timeout of 5 minutes for BookieShellTestBase

* Fix test to match changes made in e41d672

* Upgrade mockito to 4.11.0

* Align hamcrest with junit

* Revert "Upgrade mockito to 4.11.0"

This reverts commit 55b7fcd.

* Make JAVA_HOME optional

* Tune Java's DNS cache timeouts for docker images

* Use different directory for JDK 8

* Add tooling to containers that help debugging

* Upgrade JMH version and configuration

* Specify maven.compiler.release to fix issues with building with Java 11

* Remove gmavenplus plugin since there's already groovy-eclipse compiler in use

* Upgrade apache-rat-plugin

* Fix validation step

* Don't import shaded class

* Move freebuilder out of distributed libraries (there was invalid config for the annotation processor)

* Remove use of shaded class in test

* Upgrade junit5, assertj-core & awaitility to latest stable

* Fix simpletest logic

- LAC is updated asynchronously. Entries might be unconfirmed when read before ledger is closed.
- The last entry id passed to the read method was invalid

* Fix SimpleTestCommandTest

---------

Co-authored-by: Matteo Merli <[email protected]>
(cherry picked from commit 7bd91a7)

* Fix logging configurations are broken in docker image (#4137)

(cherry picked from commit 9dab139)

---------

Co-authored-by: 萧易客 <[email protected]>
merlimat pushed a commit that referenced this pull request Feb 9, 2024
* Add support for Junit5 tests and fix CI that has been broken (#4197)

* Add support for Junit5 tests

- upgrade surefire plugin
- replace <forkMode>always</forkMode> with supported way in newer maven-surefire-plugin
- maven-failsafe-plugin version must match maven-surefire-plugin version
- remove invalid test case. Log4j is in the classpath for other reasons
  checked by running
  "mvn -pl tests/integration-tests-utils/pom.xml test -X"
  also verified by debugging that it's not in the system classpath, it is loaded by the
  MavenClassLoader
- add assertj-core for fluent assertions in tests

* Upgrade arquillian-junit-standalone

* Fix error in pom.xml

* Fix java.lang.ClassNotFoundException: javax.ws.rs.ProcessingException

* Pick docker-java-api version that is compatible with arquillian-cube-docker

* Fix snakeyaml issue

* Fix running of bookkeeper in Docker in tests

* Improve GitHub Actions CI workflow logging

* Increase client tests timeout

* Add script for picking fast ubuntu mirror for docker build

* upgrade maven-dependency-plugin version (used for copying .tar.gz for docker image building)

* Fix building of the docker image

* Increase timeouts for integration tests

* Use eclipse-temurin base image

* Replace "FROM ubuntu:22.10" with "FROM ubuntu:22.04" to use LTS version of ubuntu

22.10 (kinetic) is EOL since July 20 2023

* Build docker image also for backward-compatibility-tests

* Install gpg that is required by the scripts

* Add UBUNTU_MIRROR

* Remove redundancy from integration tests

* Fix missing dependency

* Fix classpath issues for arquillian-cube

* Upgrade actions versions

* Fix invalid references in native-io/pom.xml

* Fix circe-checksum native library compilation

* Migrate Gradle specific settings to Maven

* Another attempt to disable backward-compat tests in integration test build job

* Add working solution for skipping backward compat tests in the int tests

* Attempt to fix issue in locating the file

* Fix tar file extraction

* Improve solution

* Backward compat tests build commands without int tests

* Copy tune-runner-vm and clean-disk from Pulsar CI and clean disk

* Revisit skipping of backward compat tests once again

* Use similar MAVEN_OPTS as there is in Pulsar

* Fix directory

* Add way to find git root directory

* Revisit one more time

* Add current-version-image back

* Enable tests for backwardCompatTests

* Don't create /ledgers in ZK if it already exists

* Add uncaughtexceptionhandler

* Add exclusions for reload4j

* Use maven-surefire 2.8.1 for certain tests

* Add failing test back in, also fails with surefire 2.8.1

* Exclude logging implementations

* Revert "Use maven-surefire 2.8.1 for certain tests"

This reverts commit 94e2b8e.

* Exclude log4j

* Add instructions how to run on Mac Apple Silicon

* Find slf4j version

* Block loading some classes

* Change context classloader while creating new bookkeeper

* Route commons logging to slf4j

* Update shrinkwrap.version

* Wait for ZK client to shutdown before returning from close

* Upgrade Groovy version

* Remove arquillian-junit-container which causes tests to be run twice

* Skip backward compat tests unless -DbackwardCompatTests is passed

* Delay closing of classloaders by 5 seconds

* Fix checkstyle

* Improve instructions for running tests

* Upgrade Testcontainers and import the bom in dependencyManagement

* Fix synchronization bug pointed out by spotbugs

* upgrade markdown-link-check

* Ignore checking Google calendar for dead links

* Ignore anchors

* Add 2 more patterns to dead link checker exclusions

* Collect logs

* Log integration tests to console to observe progress, disable retries

* Use maven version provided by GitHub Action runner

* Improve instructions for docker socket proxy

* Add test timeout of 5 minutes for BookieShellTestBase

* Fix test to match changes made in e41d672

* Upgrade mockito to 4.11.0

* Align hamcrest with junit

* Revert "Upgrade mockito to 4.11.0"

This reverts commit 55b7fcd.

* Make JAVA_HOME optional

* Tune Java's DNS cache timeouts for docker images

* Use different directory for JDK 8

* Add tooling to containers that help debugging

* Upgrade JMH version and configuration

* Specify maven.compiler.release to fix issues with building with Java 11

* Remove gmavenplus plugin since there's already groovy-eclipse compiler in use

* Upgrade apache-rat-plugin

* Fix validation step

* Don't import shaded class

* Move freebuilder out of distributed libraries (there was invalid config for the annotation processor)

* Remove use of shaded class in test

* Upgrade junit5, assertj-core & awaitility to latest stable

* Fix simpletest logic

- LAC is updated asynchronously. Entries might be unconfirmed when read before ledger is closed.
- The last entry id passed to the read method was invalid

* Fix SimpleTestCommandTest

---------

Co-authored-by: Matteo Merli <[email protected]>
(cherry picked from commit 7bd91a7)

* Sync bk-ci.yml from master and delete other workflows

* Don't backport windows build changes to the build or CI

* Upgrade jna to 5.13.0

* migrate apply-config-from-env.py from python2 to python3 (#3614)

Fix #3549

Descriptions of the changes in this PR:
migrate apply-config-from-env.py from python2 to python3
fix docker/Dockerfile

### Motivation

Issue 3549: migrate apply-config-from-env.py from python2 to python3

### Changes

add newline character, and reformat for docker/Dockerfile
change print to print()

Master Issue: 3549

* Fix logging configurations are broken in docker image (#4137)

---------

Co-authored-by: xiang092689 <[email protected]>
Co-authored-by: 萧易客 <[email protected]>
Ghatage pushed a commit to sijie/bookkeeper that referenced this pull request Jul 12, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Logging configurations are broken in the docker image
6 participants