Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package reload4j for openSUSE:Factory checked in at 2022-04-13 21:04:15 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/reload4j (Old) and /work/SRC/openSUSE:Factory/.reload4j.new.1900 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "reload4j" Wed Apr 13 21:04:15 2022 rev:4 rq:969222 version:1.2.20 Changes: -------- --- /work/SRC/openSUSE:Factory/reload4j/reload4j.changes 2022-03-28 16:59:52.432913352 +0200 +++ /work/SRC/openSUSE:Factory/.reload4j.new.1900/reload4j.changes 2022-04-13 21:04:38.768549897 +0200 @@ -1,0 +2,8 @@ +Mon Apr 11 13:51:49 UTC 2022 - Fridrich Strba <fst...@suse.com> + +- Update to upstream version 1.2.20 + * For enabled logging statements, the performance of iterating + on appenders attached to a logger has been significantly + improved. + +------------------------------------------------------------------- Old: ---- reload4j-1.2.19.tar.xz New: ---- reload4j-1.2.20.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ reload4j.spec ++++++ --- /var/tmp/diff_new_pack.1NrYwk/_old 2022-04-13 21:04:39.320550338 +0200 +++ /var/tmp/diff_new_pack.1NrYwk/_new 2022-04-13 21:04:39.324550341 +0200 @@ -18,7 +18,7 @@ %bcond_with tests Name: reload4j -Version: 1.2.19 +Version: 1.2.20 Release: 0 Summary: Revival of EOLed log4j 1.x License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.1NrYwk/_old 2022-04-13 21:04:39.356550367 +0200 +++ /var/tmp/diff_new_pack.1NrYwk/_new 2022-04-13 21:04:39.360550370 +0200 @@ -2,7 +2,7 @@ <service name="tar_scm" mode="disabled"> <param name="scm">git</param> <param name="url">https://github.com/qos-ch/reload4j.git</param> - <param name="revision">v_1.2.19</param> + <param name="revision">v_1.2.20</param> <param name="match-tag">v_*</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v_(.*)</param> ++++++ reload4j-1.2.19.tar.xz -> reload4j-1.2.20.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reload4j-1.2.19/README.md new/reload4j-1.2.20/README.md --- old/reload4j-1.2.19/README.md 2022-02-08 09:07:33.000000000 +0100 +++ new/reload4j-1.2.20/README.md 2022-04-05 22:14:47.000000000 +0200 @@ -1,6 +1,6 @@ [](https://maven-badges.herokuapp.com/maven-central/ch.qos.reload4j/reload4j) -[](https://github.com/qos-ch/reload4j/actions?query=branch%3Abranch_1.2.18) +[](https://github.com/qos-ch/reload4j/actions?query=branch%3Amaster) ## What is reload4j? diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reload4j-1.2.19/pom.xml new/reload4j-1.2.20/pom.xml --- old/reload4j-1.2.19/pom.xml 2022-02-08 09:07:33.000000000 +0100 +++ new/reload4j-1.2.20/pom.xml 2022-04-05 22:14:47.000000000 +0200 @@ -22,7 +22,7 @@ <artifactId>reload4j</artifactId> <packaging>jar</packaging> <name>reload4j</name> - <version>1.2.19</version> + <version>1.2.20</version> <description>Reload4j revives EOLed log4j 1.x</description> <url>https://reload4j.qos.ch</url> @@ -48,7 +48,7 @@ <properties> <!-- yyyy-MM-dd'T'HH:mm:ss'Z' --> - <project.build.outputTimestamp>2022-02-08T08:07:00Z</project.build.outputTimestamp> + <project.build.outputTimestamp>2022-04-05T21:13:00Z</project.build.outputTimestamp> <jdk.version>1.5</jdk.version> <maven.compiler.source>${jdk.version}</maven.compiler.source> <maven.compiler.target>${jdk.version}</maven.compiler.target> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reload4j-1.2.19/src/main/java/org/apache/log4j/helpers/AppenderAttachableImpl.java new/reload4j-1.2.20/src/main/java/org/apache/log4j/helpers/AppenderAttachableImpl.java --- old/reload4j-1.2.19/src/main/java/org/apache/log4j/helpers/AppenderAttachableImpl.java 2022-02-08 09:07:33.000000000 +0100 +++ new/reload4j-1.2.20/src/main/java/org/apache/log4j/helpers/AppenderAttachableImpl.java 2022-04-05 22:14:47.000000000 +0200 @@ -17,12 +17,12 @@ package org.apache.log4j.helpers; -import org.apache.log4j.spi.AppenderAttachable; -import org.apache.log4j.spi.LoggingEvent; +import java.util.Collections; +import java.util.Enumeration; import org.apache.log4j.Appender; -import java.util.Vector; -import java.util.Enumeration; +import org.apache.log4j.spi.AppenderAttachable; +import org.apache.log4j.spi.LoggingEvent; /** * A straightforward implementation of the {@link AppenderAttachable} interface. @@ -32,8 +32,7 @@ */ public class AppenderAttachableImpl implements AppenderAttachable { - /** Array of appenders. */ - protected Vector appenderList; + final private COWArrayList<Appender> appenderList = new COWArrayList<Appender>(new Appender[0]); /** * Attach an appender. If the appender is already in the list in won't be added @@ -44,11 +43,7 @@ if (newAppender == null) return; - if (appenderList == null) { - appenderList = new Vector(1); - } - if (!appenderList.contains(newAppender)) - appenderList.addElement(newAppender); + appenderList.addIfAbsent(newAppender); } /** @@ -56,14 +51,11 @@ */ public int appendLoopOnAppenders(LoggingEvent event) { int size = 0; - Appender appender; - - if (appenderList != null) { - size = appenderList.size(); - for (int i = 0; i < size; i++) { - appender = (Appender) appenderList.elementAt(i); - appender.doAppend(event); - } + final Appender[] appenderArray = appenderList.asTypedArray(); + final int len = appenderArray.length; + for (int i = 0; i < len; i++) { + appenderArray[i].doAppend(event); + size++; } return size; } @@ -78,7 +70,7 @@ if (appenderList == null) return null; else - return appenderList.elements(); + return Collections.enumeration(appenderList); } /** @@ -92,12 +84,10 @@ if (appenderList == null || name == null) return null; - int size = appenderList.size(); - Appender appender; - for (int i = 0; i < size; i++) { - appender = (Appender) appenderList.elementAt(i); - if (name.equals(appender.getName())) + for (Appender appender : appenderList) { + if (name.equals(appender.getName())) { return appender; + } } return null; } @@ -112,10 +102,7 @@ if (appenderList == null || appender == null) return false; - int size = appenderList.size(); - Appender a; - for (int i = 0; i < size; i++) { - a = (Appender) appenderList.elementAt(i); + for (Appender a : appenderList) { if (a == appender) return true; } @@ -126,15 +113,10 @@ * Remove and close all previously attached appenders. */ public void removeAllAppenders() { - if (appenderList != null) { - int len = appenderList.size(); - for (int i = 0; i < len; i++) { - Appender a = (Appender) appenderList.elementAt(i); - a.close(); - } - appenderList.removeAllElements(); - appenderList = null; + for (Appender a : appenderList) { + a.close(); } + appenderList.clear(); } /** @@ -143,7 +125,7 @@ public void removeAppender(Appender appender) { if (appender == null || appenderList == null) return; - appenderList.removeElement(appender); + appenderList.remove(appender); } /** @@ -153,10 +135,10 @@ public void removeAppender(String name) { if (name == null || appenderList == null) return; - int size = appenderList.size(); - for (int i = 0; i < size; i++) { - if (name.equals(((Appender) appenderList.elementAt(i)).getName())) { - appenderList.removeElementAt(i); + + for (Appender a : appenderList.asTypedArray()) { + if (name.equals((a).getName())) { + appenderList.remove(a); break; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reload4j-1.2.19/src/main/java/org/apache/log4j/helpers/COWArrayList.java new/reload4j-1.2.20/src/main/java/org/apache/log4j/helpers/COWArrayList.java --- old/reload4j-1.2.19/src/main/java/org/apache/log4j/helpers/COWArrayList.java 1970-01-01 01:00:00.000000000 +0100 +++ new/reload4j-1.2.20/src/main/java/org/apache/log4j/helpers/COWArrayList.java 2022-04-05 22:14:47.000000000 +0200 @@ -0,0 +1,248 @@ +/* + * Copyright 2015-2022 QOS.CH Sarl (Switzerland) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.log4j.helpers; + +import java.util.List; +import java.util.ListIterator; +import java.util.Collection; +import java.util.Iterator; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * A GC-free lock-free thread-safe implementation of the {@link List} interface + * for use cases where iterations over the list vastly out-number modifications + * on the list. + * + * <p> + * Underneath, it wraps an instance of {@link CopyOnWriteArrayList} and exposes + * a copy of the array used by that instance. + * + * <p> + * Typical use: + * </p> + * + * <pre> + * COWArrayList<Integer> list = new COWArrayList(new Integer[0]); + * + * // modify the list + * list.add(1); + * list.add(2); + * + * Integer[] intArray = list.asTypedArray(); + * int sum = 0; + * // iteration over the array is thread-safe + * for(int i = 0; i < intArray.length; i++) { + * sum != intArray[i]; + * } + * </pre> + * + * <p> + * If the list is not modified, then repetitive calls to + * {@link #asTypedArray()}, {@link #toArray()} and {@link #toArray(Object[])} + * are guaranteed to be GC-free. Note that iterating over the list using + * {@link COWArrayList#iterator()} and {@link COWArrayList#listIterator()} are + * <b>not</b> GC-free. + * </p> + * + * @author Ceki Gulcu + * @since 1.2.20 + */ +public class COWArrayList<E> implements List<E> { + + AtomicBoolean fresh = new AtomicBoolean(false); + CopyOnWriteArrayList<E> underlyingList = new CopyOnWriteArrayList<E>(); + E[] ourCopy; + final E[] modelArray; + + public COWArrayList(E[] modelArray) { + this.modelArray = modelArray; + } + + @Override + public int size() { + return underlyingList.size(); + } + + @Override + public boolean isEmpty() { + return underlyingList.isEmpty(); + } + + @Override + public boolean contains(Object o) { + return underlyingList.contains(o); + } + + @Override + public Iterator<E> iterator() { + return underlyingList.iterator(); + } + + private void refreshCopyIfNecessary() { + if (!isFresh()) { + refreshCopy(); + } + } + + private boolean isFresh() { + return fresh.get(); + } + + private void refreshCopy() { + ourCopy = underlyingList.toArray(modelArray); + fresh.set(true); + } + + @Override + public Object[] toArray() { + refreshCopyIfNecessary(); + return ourCopy; + } + + @SuppressWarnings("unchecked") + @Override + public <T> T[] toArray(T[] a) { + refreshCopyIfNecessary(); + return (T[]) ourCopy; + } + + /** + * Return an array of type E[]. The returned array is intended to be iterated + * over. If the list is modified, subsequent calls to this method will return + * different/modified array instances. + * + * @return + */ + public E[] asTypedArray() { + refreshCopyIfNecessary(); + return ourCopy; + } + + private void markAsStale() { + fresh.set(false); + } + + public void addIfAbsent(E e) { + underlyingList.addIfAbsent(e); + markAsStale(); + } + + @Override + public boolean add(E e) { + boolean result = underlyingList.add(e); + markAsStale(); + return result; + } + + @Override + public boolean remove(Object o) { + boolean result = underlyingList.remove(o); + markAsStale(); + return result; + } + + @Override + public boolean containsAll(Collection<?> c) { + return underlyingList.containsAll(c); + } + + @Override + public boolean addAll(Collection<? extends E> c) { + markAsStale(); + boolean result = underlyingList.addAll(c); + return result; + } + + @Override + public boolean addAll(int index, Collection<? extends E> col) { + markAsStale(); + boolean result = underlyingList.addAll(index, col); + return result; + } + + @Override + public boolean removeAll(Collection<?> col) { + markAsStale(); + boolean result = underlyingList.removeAll(col); + return result; + } + + @Override + public boolean retainAll(Collection<?> col) { + markAsStale(); + boolean result = underlyingList.retainAll(col); + return result; + } + + @Override + public void clear() { + markAsStale(); + underlyingList.clear(); + } + + @Override + public E get(int index) { + refreshCopyIfNecessary(); + return (E) ourCopy[index]; + } + + @Override + public E set(int index, E element) { + markAsStale(); + E e = underlyingList.set(index, element); + return e; + } + + @Override + public void add(int index, E element) { + markAsStale(); + underlyingList.add(index, element); + } + + @Override + public E remove(int index) { + markAsStale(); + E e = (E) underlyingList.remove(index); + return e; + } + + @Override + public int indexOf(Object o) { + return underlyingList.indexOf(o); + } + + @Override + public int lastIndexOf(Object o) { + return underlyingList.lastIndexOf(o); + } + + @Override + public ListIterator<E> listIterator() { + return underlyingList.listIterator(); + } + + @Override + public ListIterator<E> listIterator(int index) { + return underlyingList.listIterator(index); + } + + @Override + public List<E> subList(int fromIndex, int toIndex) { + return underlyingList.subList(fromIndex, toIndex); + } + +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/reload4j-1.2.19/src/main/resources/org/apache/log4j/lf5/config/defaultconfig.properties new/reload4j-1.2.20/src/main/resources/org/apache/log4j/lf5/config/defaultconfig.properties --- old/reload4j-1.2.19/src/main/resources/org/apache/log4j/lf5/config/defaultconfig.properties 2022-02-08 09:07:33.000000000 +0100 +++ new/reload4j-1.2.20/src/main/resources/org/apache/log4j/lf5/config/defaultconfig.properties 1970-01-01 01:00:00.000000000 +0100 @@ -1,31 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# For the general syntax of property based configuration files see the -# documenation of org.apache.log4j.PropertyConfigurator. - -# The root category uses the appender called A1. Since no priority is -# specified, the root category assumes the default priority for root -# which is DEBUG in log4j. The root category is the only category that -# has a default priority. All other categories need not be assigned a -# priority in which case they inherit their priority from the -# hierarchy. - -log4j.rootCategory=, A1 - -# A1 is set to be a LogMonitorAppender which outputs to a swing -# logging console. - -log4j.appender.A1=org.apache.log4j.lf5.LF5Appender Binary files old/reload4j-1.2.19/src/main/resources/org/apache/log4j/lf5/viewer/images/channelexplorer_new.gif and new/reload4j-1.2.20/src/main/resources/org/apache/log4j/lf5/viewer/images/channelexplorer_new.gif differ Binary files old/reload4j-1.2.19/src/main/resources/org/apache/log4j/lf5/viewer/images/channelexplorer_satellite.gif and new/reload4j-1.2.20/src/main/resources/org/apache/log4j/lf5/viewer/images/channelexplorer_satellite.gif differ Binary files old/reload4j-1.2.19/src/main/resources/org/apache/log4j/lf5/viewer/images/lf5_small_icon.gif and new/reload4j-1.2.20/src/main/resources/org/apache/log4j/lf5/viewer/images/lf5_small_icon.gif differ ++++++ reload4j-build.xml ++++++ --- /var/tmp/diff_new_pack.1NrYwk/_old 2022-04-13 21:04:39.588550552 +0200 +++ /var/tmp/diff_new_pack.1NrYwk/_new 2022-04-13 21:04:39.588550552 +0200 @@ -10,7 +10,7 @@ <property name="project.groupId" value="ch.qos.reload4j"/> <property name="project.artifactId" value="reload4j"/> - <property name="project.version" value="1.2.19"/> + <property name="project.version" value="1.2.20"/> <property name="compiler.source" value="1.8"/> <property name="compiler.target" value="${compiler.source}"/>