Isn't there a git setting to checkout as Unix line-endings? Or was that in Svn?
Gary On Tue, Apr 12, 2016 at 12:28 PM, Ralph Goers <[email protected]> wrote: > I thought we had standardized on unix line endings. I don’t recall seeing > ^M characters in the files. My IDE automatically converts Windows crap to > Unix. > > Ralph > > On Apr 12, 2016, at 12:12 PM, Gary Gregory <[email protected]> wrote: > > How frugal of you! ;-) I edit on Windows, so that's a two-fer for me ;-) > > Gary > > On Tue, Apr 12, 2016 at 12:04 PM, Matt Sicker <[email protected]> wrote: > >> I like unix endings because there's only one byte instead of two. >> >> On 12 April 2016 at 14:02, Gary Gregory <[email protected]> wrote: >> >>> Sure, pick one. >>> >>> Gary >>> >>> On Tue, Apr 12, 2016 at 12:01 PM, Matt Sicker <[email protected]> wrote: >>> >>>> It would be nice to standardize on a single line ending format at some >>>> point, but it would be such a huge commit. >>>> >>>> On 12 April 2016 at 13:51, Gary Gregory <[email protected]> wrote: >>>> >>>>> I'm so annoyed and apologize for this all lines changed commit. I only >>>>> renamed a variable. >>>>> >>>>> Gary >>>>> >>>>> ---------- Forwarded message ---------- >>>>> From: <[email protected]> >>>>> Date: Tue, Apr 12, 2016 at 11:47 AM >>>>> Subject: logging-log4j2 git commit: I always use "Millis" as the post >>>>> fix to avoid any confusion. >>>>> To: [email protected] >>>>> >>>>> >>>>> Repository: logging-log4j2 >>>>> Updated Branches: >>>>> refs/heads/master c55ace781 -> eb32b2f77 >>>>> >>>>> >>>>> I always use "Millis" as the post fix to avoid any confusion. >>>>> >>>>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo >>>>> Commit: >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/eb32b2f7 >>>>> Tree: >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/eb32b2f7 >>>>> Diff: >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/eb32b2f7 >>>>> >>>>> Branch: refs/heads/master >>>>> Commit: eb32b2f77634609a98c9940fac8e28b7e0d20f38 >>>>> Parents: c55ace7 >>>>> Author: ggregory <[email protected]> >>>>> Authored: Tue Apr 12 11:47:03 2016 -0700 >>>>> Committer: ggregory <[email protected]> >>>>> Committed: Tue Apr 12 11:47:03 2016 -0700 >>>>> >>>>> ---------------------------------------------------------------------- >>>>> .../logging/log4j/core/async/DisruptorUtil.java | 296 >>>>> +++++++++---------- >>>>> 1 file changed, 148 insertions(+), 148 deletions(-) >>>>> ---------------------------------------------------------------------- >>>>> >>>>> >>>>> >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/eb32b2f7/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java >>>>> ---------------------------------------------------------------------- >>>>> diff --git >>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java >>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java >>>>> index 4faa174..3ce30f0 100644 >>>>> --- >>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java >>>>> +++ >>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java >>>>> @@ -1,148 +1,148 @@ >>>>> -/* >>>>> - * 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. >>>>> - */ >>>>> - >>>>> -package org.apache.logging.log4j.core.async; >>>>> - >>>>> -import java.util.concurrent.Callable; >>>>> -import java.util.concurrent.ExecutorService; >>>>> -import java.util.concurrent.Future; >>>>> -import java.util.concurrent.TimeUnit; >>>>> - >>>>> -import com.lmax.disruptor.*; >>>>> -import org.apache.logging.log4j.Logger; >>>>> -import org.apache.logging.log4j.core.util.Constants; >>>>> -import org.apache.logging.log4j.core.util.Integers; >>>>> -import org.apache.logging.log4j.status.StatusLogger; >>>>> -import org.apache.logging.log4j.util.LoaderUtil; >>>>> -import org.apache.logging.log4j.util.PropertiesUtil; >>>>> - >>>>> -/** >>>>> - * Utility methods for getting Disruptor related configuration. >>>>> - */ >>>>> -final class DisruptorUtil { >>>>> - private static final Logger LOGGER = StatusLogger.getLogger(); >>>>> - private static final int RINGBUFFER_MIN_SIZE = 128; >>>>> - private static final int RINGBUFFER_DEFAULT_SIZE = 256 * 1024; >>>>> - private static final int RINGBUFFER_NO_GC_DEFAULT_SIZE = 4 * 1024; >>>>> - >>>>> - private DisruptorUtil() { >>>>> - } >>>>> - >>>>> - static long getTimeout(final String propertyName, final long >>>>> defaultTimeout) { >>>>> - return >>>>> PropertiesUtil.getProperties().getLongProperty(propertyName, >>>>> defaultTimeout); >>>>> - } >>>>> - >>>>> - static WaitStrategy createWaitStrategy(final String propertyName) >>>>> { >>>>> - final String key = propertyName.startsWith("AsyncLogger.") >>>>> - ? "AsyncLogger.Timeout" >>>>> - : "AsyncLoggerConfig.Timeout"; >>>>> - final long timeout = DisruptorUtil.getTimeout(key, 10L); >>>>> - return createWaitStrategy(propertyName, timeout); >>>>> - } >>>>> - >>>>> - static WaitStrategy createWaitStrategy(final String propertyName, >>>>> final long timeoutMs) { >>>>> - final String strategy = >>>>> PropertiesUtil.getProperties().getStringProperty(propertyName); >>>>> - if (strategy != null) { >>>>> - LOGGER.trace("property {}={}", propertyName, strategy); >>>>> - if ("Sleep".equalsIgnoreCase(strategy)) { >>>>> - return new SleepingWaitStrategy(); >>>>> - } else if ("Yield".equalsIgnoreCase(strategy)) { >>>>> - return new YieldingWaitStrategy(); >>>>> - } else if ("Block".equalsIgnoreCase(strategy)) { >>>>> - return new BlockingWaitStrategy(); >>>>> - } else if ("BusySpin".equalsIgnoreCase(strategy)) { >>>>> - return new BusySpinWaitStrategy(); >>>>> - } else if ("Timeout".equalsIgnoreCase(strategy)) { >>>>> - return new TimeoutBlockingWaitStrategy(timeoutMs, >>>>> TimeUnit.MILLISECONDS); >>>>> - } >>>>> - } >>>>> - return new TimeoutBlockingWaitStrategy(timeoutMs, >>>>> TimeUnit.MILLISECONDS); >>>>> - } >>>>> - >>>>> - static int calculateRingBufferSize(final String propertyName) { >>>>> - int ringBufferSize = Constants.ENABLE_THREADLOCALS ? >>>>> RINGBUFFER_NO_GC_DEFAULT_SIZE : RINGBUFFER_DEFAULT_SIZE; >>>>> - final String userPreferredRBSize = >>>>> PropertiesUtil.getProperties().getStringProperty(propertyName, >>>>> - String.valueOf(ringBufferSize)); >>>>> - try { >>>>> - int size = Integer.parseInt(userPreferredRBSize); >>>>> - if (size < RINGBUFFER_MIN_SIZE) { >>>>> - size = RINGBUFFER_MIN_SIZE; >>>>> - LOGGER.warn("Invalid RingBufferSize {}, using minimum >>>>> size {}.", userPreferredRBSize, >>>>> - RINGBUFFER_MIN_SIZE); >>>>> - } >>>>> - ringBufferSize = size; >>>>> - } catch (final Exception ex) { >>>>> - LOGGER.warn("Invalid RingBufferSize {}, using default >>>>> size {}.", userPreferredRBSize, ringBufferSize); >>>>> - } >>>>> - return Integers.ceilingNextPowerOfTwo(ringBufferSize); >>>>> - } >>>>> - >>>>> - static ExceptionHandler<RingBufferLogEvent> >>>>> getAsyncLoggerExceptionHandler() { >>>>> - final String cls = >>>>> PropertiesUtil.getProperties().getStringProperty("AsyncLogger.ExceptionHandler"); >>>>> - if (cls == null) { >>>>> - return new DefaultAsyncLoggerExceptionHandler(); >>>>> - } >>>>> - try { >>>>> - @SuppressWarnings("unchecked") >>>>> - final Class<? extends >>>>> ExceptionHandler<RingBufferLogEvent>> klass = >>>>> - (Class<? extends >>>>> ExceptionHandler<RingBufferLogEvent>>) LoaderUtil.loadClass(cls); >>>>> - return klass.newInstance(); >>>>> - } catch (final Exception ignored) { >>>>> - LOGGER.debug("Invalid AsyncLogger.ExceptionHandler value: >>>>> error creating {}: ", cls, ignored); >>>>> - return new DefaultAsyncLoggerExceptionHandler(); >>>>> - } >>>>> - } >>>>> - >>>>> - static >>>>> ExceptionHandler<AsyncLoggerConfigDisruptor.Log4jEventWrapper> >>>>> getAsyncLoggerConfigExceptionHandler() { >>>>> - final String cls = >>>>> PropertiesUtil.getProperties().getStringProperty("AsyncLoggerConfig.ExceptionHandler"); >>>>> - if (cls == null) { >>>>> - return new DefaultAsyncLoggerConfigExceptionHandler(); >>>>> - } >>>>> - try { >>>>> - @SuppressWarnings("unchecked") >>>>> - final Class<? extends >>>>> ExceptionHandler<AsyncLoggerConfigDisruptor.Log4jEventWrapper>> klass = >>>>> - (Class<? extends >>>>> ExceptionHandler<AsyncLoggerConfigDisruptor.Log4jEventWrapper>>) >>>>> LoaderUtil.loadClass(cls); >>>>> - return klass.newInstance(); >>>>> - } catch (final Exception ignored) { >>>>> - LOGGER.debug("Invalid AsyncLoggerConfig.ExceptionHandler >>>>> value: error creating {}: ", cls, ignored); >>>>> - return new DefaultAsyncLoggerConfigExceptionHandler(); >>>>> - } >>>>> - } >>>>> - >>>>> - /** >>>>> - * Returns the thread ID of the background appender thread. This >>>>> allows us to detect Logger.log() calls initiated >>>>> - * from the appender thread, which may cause deadlock when the >>>>> RingBuffer is full. (LOG4J2-471) >>>>> - * >>>>> - * @param executor runs the appender thread >>>>> - * @return the thread ID of the background appender thread >>>>> - */ >>>>> - public static long getExecutorThreadId(final ExecutorService >>>>> executor) { >>>>> - Future<Long> result = executor.submit(new Callable<Long>() { >>>>> - @Override >>>>> - public Long call() { >>>>> - return Thread.currentThread().getId(); >>>>> - } >>>>> - }); >>>>> - try { >>>>> - return result.get(); >>>>> - } catch (final Exception ex) { >>>>> - final String msg = "Could not obtain executor thread Id. " >>>>> - + "Giving up to avoid the risk of application >>>>> deadlock."; >>>>> - throw new IllegalStateException(msg, ex); >>>>> - } >>>>> - } >>>>> -} >>>>> +/* >>>>> + * 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. >>>>> + */ >>>>> + >>>>> +package org.apache.logging.log4j.core.async; >>>>> + >>>>> +import java.util.concurrent.Callable; >>>>> +import java.util.concurrent.ExecutorService; >>>>> +import java.util.concurrent.Future; >>>>> +import java.util.concurrent.TimeUnit; >>>>> + >>>>> +import com.lmax.disruptor.*; >>>>> +import org.apache.logging.log4j.Logger; >>>>> +import org.apache.logging.log4j.core.util.Constants; >>>>> +import org.apache.logging.log4j.core.util.Integers; >>>>> +import org.apache.logging.log4j.status.StatusLogger; >>>>> +import org.apache.logging.log4j.util.LoaderUtil; >>>>> +import org.apache.logging.log4j.util.PropertiesUtil; >>>>> + >>>>> +/** >>>>> + * Utility methods for getting Disruptor related configuration. >>>>> + */ >>>>> +final class DisruptorUtil { >>>>> + private static final Logger LOGGER = StatusLogger.getLogger(); >>>>> + private static final int RINGBUFFER_MIN_SIZE = 128; >>>>> + private static final int RINGBUFFER_DEFAULT_SIZE = 256 * 1024; >>>>> + private static final int RINGBUFFER_NO_GC_DEFAULT_SIZE = 4 * 1024; >>>>> + >>>>> + private DisruptorUtil() { >>>>> + } >>>>> + >>>>> + static long getTimeout(final String propertyName, final long >>>>> defaultTimeout) { >>>>> + return >>>>> PropertiesUtil.getProperties().getLongProperty(propertyName, >>>>> defaultTimeout); >>>>> + } >>>>> + >>>>> + static WaitStrategy createWaitStrategy(final String propertyName) >>>>> { >>>>> + final String key = propertyName.startsWith("AsyncLogger.") >>>>> + ? "AsyncLogger.Timeout" >>>>> + : "AsyncLoggerConfig.Timeout"; >>>>> + final long timeout = DisruptorUtil.getTimeout(key, 10L); >>>>> + return createWaitStrategy(propertyName, timeout); >>>>> + } >>>>> + >>>>> + static WaitStrategy createWaitStrategy(final String propertyName, >>>>> final long timeoutMillis) { >>>>> + final String strategy = >>>>> PropertiesUtil.getProperties().getStringProperty(propertyName); >>>>> + if (strategy != null) { >>>>> + LOGGER.trace("property {}={}", propertyName, strategy); >>>>> + if ("Sleep".equalsIgnoreCase(strategy)) { >>>>> + return new SleepingWaitStrategy(); >>>>> + } else if ("Yield".equalsIgnoreCase(strategy)) { >>>>> + return new YieldingWaitStrategy(); >>>>> + } else if ("Block".equalsIgnoreCase(strategy)) { >>>>> + return new BlockingWaitStrategy(); >>>>> + } else if ("BusySpin".equalsIgnoreCase(strategy)) { >>>>> + return new BusySpinWaitStrategy(); >>>>> + } else if ("Timeout".equalsIgnoreCase(strategy)) { >>>>> + return new TimeoutBlockingWaitStrategy(timeoutMillis, >>>>> TimeUnit.MILLISECONDS); >>>>> + } >>>>> + } >>>>> + return new TimeoutBlockingWaitStrategy(timeoutMillis, >>>>> TimeUnit.MILLISECONDS); >>>>> + } >>>>> + >>>>> + static int calculateRingBufferSize(final String propertyName) { >>>>> + int ringBufferSize = Constants.ENABLE_THREADLOCALS ? >>>>> RINGBUFFER_NO_GC_DEFAULT_SIZE : RINGBUFFER_DEFAULT_SIZE; >>>>> + final String userPreferredRBSize = >>>>> PropertiesUtil.getProperties().getStringProperty(propertyName, >>>>> + String.valueOf(ringBufferSize)); >>>>> + try { >>>>> + int size = Integer.parseInt(userPreferredRBSize); >>>>> + if (size < RINGBUFFER_MIN_SIZE) { >>>>> + size = RINGBUFFER_MIN_SIZE; >>>>> + LOGGER.warn("Invalid RingBufferSize {}, using minimum >>>>> size {}.", userPreferredRBSize, >>>>> + RINGBUFFER_MIN_SIZE); >>>>> + } >>>>> + ringBufferSize = size; >>>>> + } catch (final Exception ex) { >>>>> + LOGGER.warn("Invalid RingBufferSize {}, using default >>>>> size {}.", userPreferredRBSize, ringBufferSize); >>>>> + } >>>>> + return Integers.ceilingNextPowerOfTwo(ringBufferSize); >>>>> + } >>>>> + >>>>> + static ExceptionHandler<RingBufferLogEvent> >>>>> getAsyncLoggerExceptionHandler() { >>>>> + final String cls = >>>>> PropertiesUtil.getProperties().getStringProperty("AsyncLogger.ExceptionHandler"); >>>>> + if (cls == null) { >>>>> + return new DefaultAsyncLoggerExceptionHandler(); >>>>> + } >>>>> + try { >>>>> + @SuppressWarnings("unchecked") >>>>> + final Class<? extends >>>>> ExceptionHandler<RingBufferLogEvent>> klass = >>>>> + (Class<? extends >>>>> ExceptionHandler<RingBufferLogEvent>>) LoaderUtil.loadClass(cls); >>>>> + return klass.newInstance(); >>>>> + } catch (final Exception ignored) { >>>>> + LOGGER.debug("Invalid AsyncLogger.ExceptionHandler value: >>>>> error creating {}: ", cls, ignored); >>>>> + return new DefaultAsyncLoggerExceptionHandler(); >>>>> + } >>>>> + } >>>>> + >>>>> + static >>>>> ExceptionHandler<AsyncLoggerConfigDisruptor.Log4jEventWrapper> >>>>> getAsyncLoggerConfigExceptionHandler() { >>>>> + final String cls = >>>>> PropertiesUtil.getProperties().getStringProperty("AsyncLoggerConfig.ExceptionHandler"); >>>>> + if (cls == null) { >>>>> + return new DefaultAsyncLoggerConfigExceptionHandler(); >>>>> + } >>>>> + try { >>>>> + @SuppressWarnings("unchecked") >>>>> + final Class<? extends >>>>> ExceptionHandler<AsyncLoggerConfigDisruptor.Log4jEventWrapper>> klass = >>>>> + (Class<? extends >>>>> ExceptionHandler<AsyncLoggerConfigDisruptor.Log4jEventWrapper>>) >>>>> LoaderUtil.loadClass(cls); >>>>> + return klass.newInstance(); >>>>> + } catch (final Exception ignored) { >>>>> + LOGGER.debug("Invalid AsyncLoggerConfig.ExceptionHandler >>>>> value: error creating {}: ", cls, ignored); >>>>> + return new DefaultAsyncLoggerConfigExceptionHandler(); >>>>> + } >>>>> + } >>>>> + >>>>> + /** >>>>> + * Returns the thread ID of the background appender thread. This >>>>> allows us to detect Logger.log() calls initiated >>>>> + * from the appender thread, which may cause deadlock when the >>>>> RingBuffer is full. (LOG4J2-471) >>>>> + * >>>>> + * @param executor runs the appender thread >>>>> + * @return the thread ID of the background appender thread >>>>> + */ >>>>> + public static long getExecutorThreadId(final ExecutorService >>>>> executor) { >>>>> + Future<Long> result = executor.submit(new Callable<Long>() { >>>>> + @Override >>>>> + public Long call() { >>>>> + return Thread.currentThread().getId(); >>>>> + } >>>>> + }); >>>>> + try { >>>>> + return result.get(); >>>>> + } catch (final Exception ex) { >>>>> + final String msg = "Could not obtain executor thread Id. " >>>>> + + "Giving up to avoid the risk of application >>>>> deadlock."; >>>>> + throw new IllegalStateException(msg, ex); >>>>> + } >>>>> + } >>>>> +} >>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> E-Mail: [email protected] | [email protected] >>>>> Java Persistence with Hibernate, Second Edition >>>>> <http://www.manning.com/bauer3/> >>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> >>>>> Spring Batch in Action <http://www.manning.com/templier/> >>>>> Blog: http://garygregory.wordpress.com >>>>> Home: http://garygregory.com/ >>>>> Tweet! http://twitter.com/GaryGregory >>>>> >>>> >>>> >>>> >>>> -- >>>> Matt Sicker <[email protected]> >>>> >>> >>> >>> >>> -- >>> E-Mail: [email protected] | [email protected] >>> Java Persistence with Hibernate, Second Edition >>> <http://www.manning.com/bauer3/> >>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> >>> Spring Batch in Action <http://www.manning.com/templier/> >>> Blog: http://garygregory.wordpress.com >>> Home: http://garygregory.com/ >>> Tweet! http://twitter.com/GaryGregory >>> >> >> >> >> -- >> Matt Sicker <[email protected]> >> > > > > -- > E-Mail: [email protected] | [email protected] > Java Persistence with Hibernate, Second Edition > <http://www.manning.com/bauer3/> > JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> > Spring Batch in Action <http://www.manning.com/templier/> > Blog: http://garygregory.wordpress.com > Home: http://garygregory.com/ > Tweet! http://twitter.com/GaryGregory > > > -- E-Mail: [email protected] | [email protected] Java Persistence with Hibernate, Second Edition <http://www.manning.com/bauer3/> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> Spring Batch in Action <http://www.manning.com/templier/> Blog: http://garygregory.wordpress.com Home: http://garygregory.com/ Tweet! http://twitter.com/GaryGregory
