Mercurial Hosting > luan
changeset 855:fa6158f29c45
remove BufferDateCache and DateCache
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 20 Sep 2016 21:38:44 -0600 |
parents | 359012f4e797 |
children | ea1768c00d03 |
files | src/org/eclipse/jetty/http/HttpFields.java src/org/eclipse/jetty/io/BufferDateCache.java src/org/eclipse/jetty/server/NCSARequestLog.java src/org/eclipse/jetty/server/Request.java src/org/eclipse/jetty/util/DateCache.java |
diffstat | 5 files changed, 35 insertions(+), 419 deletions(-) [+] |
line wrap: on
line diff
--- a/src/org/eclipse/jetty/http/HttpFields.java Tue Sep 20 01:05:37 2016 -0600 +++ b/src/org/eclipse/jetty/http/HttpFields.java Tue Sep 20 21:38:44 2016 -0600 @@ -42,7 +42,6 @@ import org.eclipse.jetty.io.Buffer; import org.eclipse.jetty.io.BufferCache; import org.eclipse.jetty.io.BufferCache.CachedBuffer; -import org.eclipse.jetty.io.BufferDateCache; import org.eclipse.jetty.io.BufferUtil; import org.eclipse.jetty.io.ByteArrayBuffer; import org.eclipse.jetty.util.LazyList; @@ -67,14 +66,6 @@ /* ------------------------------------------------------------ */ public static final String __COOKIE_DELIM="\"\\\n\r\t\f\b%+ ;="; public static final TimeZone __GMT = TimeZone.getTimeZone("GMT"); - public static final BufferDateCache __dateCache = new BufferDateCache("EEE, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US); - - /* -------------------------------------------------------------- */ - static - { - __GMT.setID("GMT"); - __dateCache.setTimeZone(__GMT); - } /* ------------------------------------------------------------ */ private static final String[] DAYS =
--- a/src/org/eclipse/jetty/io/BufferDateCache.java Tue Sep 20 01:05:37 2016 -0600 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.io; - -import java.text.DateFormatSymbols; -import java.util.Locale; - -import org.eclipse.jetty.util.DateCache; - -public class BufferDateCache extends DateCache -{ - Buffer _buffer; - String _last; - - public BufferDateCache() - { - super(); - } - - public BufferDateCache(String format, DateFormatSymbols s) - { - super(format,s); - } - - public BufferDateCache(String format, Locale l) - { - super(format,l); - } - - public BufferDateCache(String format) - { - super(format); - } - - public synchronized Buffer formatBuffer(long date) - { - String d = super.format(date); - if (d==_last) - return _buffer; - _last=d; - _buffer=new ByteArrayBuffer(d); - - return _buffer; - } -}
--- a/src/org/eclipse/jetty/server/NCSARequestLog.java Tue Sep 20 01:05:37 2016 -0600 +++ b/src/org/eclipse/jetty/server/NCSARequestLog.java Tue Sep 20 21:38:44 2016 -0600 @@ -24,13 +24,14 @@ import java.io.Writer; import java.io.File; import java.io.FileOutputStream; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.Locale; import java.util.TimeZone; import javax.servlet.http.Cookie; import org.eclipse.jetty.http.HttpHeaders; -import org.eclipse.jetty.util.DateCache; import org.eclipse.jetty.util.component.AbstractLifeCycle; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -60,14 +61,14 @@ private boolean _preferProxiedForAddress; private String _logDateFormat = "dd/MMM/yyyy:HH:mm:ss Z"; private Locale _logLocale = Locale.getDefault(); - private String _logTimeZone = "GMT"; + public TimeZone timeZone = TimeZone.getTimeZone("GMT"); private boolean _logLatency = false; private boolean _logCookies = false; private boolean _logServer = false; private boolean _logDispatch = false; private transient OutputStream _out; - private transient DateCache _logDateCache; + private transient DateFormat dateFormat; private transient Writer _writer; /* ------------------------------------------------------------ */ @@ -171,28 +172,6 @@ /* ------------------------------------------------------------ */ /** - * Set the timezone of the request log. - * - * @param tz timezone string - */ - public void setLogTimeZone(String tz) - { - _logTimeZone = tz; - } - - /* ------------------------------------------------------------ */ - /** - * Retrieve the timezone of the request log. - * - * @return timezone string - */ - public String getLogTimeZone() - { - return _logTimeZone; - } - - /* ------------------------------------------------------------ */ - /** * Set the extended request log format flag. * * @param extended true - log the extended request information, @@ -361,13 +340,11 @@ addr = request.getRemoteAddr(); buf.append(addr); - buf.append(" - "); + buf.append(" - ["); - buf.append(" ["); - if (_logDateCache != null) - buf.append(_logDateCache.format(request.getTimeStamp())); - else - buf.append(request.getTimeStampBuffer().toString()); + synchronized(dateFormat) { + buf.append(dateFormat.format(request.getTimeStamp())); + } buf.append("] \""); buf.append(request.getMethod()); @@ -520,11 +497,8 @@ @Override protected synchronized void doStart() throws Exception { - if (_logDateFormat != null) - { - _logDateCache = new DateCache(_logDateFormat,_logLocale); - _logDateCache.setTimeZoneID(_logTimeZone); - } + dateFormat = new SimpleDateFormat(_logDateFormat,_logLocale); + dateFormat.setTimeZone(timeZone); if (_filename != null) { File file = new File(_filename); @@ -582,7 +556,7 @@ _out = null; _closeOut = false; - _logDateCache = null; + dateFormat = null; _writer = null; } }
--- a/src/org/eclipse/jetty/server/Request.java Tue Sep 20 01:05:37 2016 -0600 +++ b/src/org/eclipse/jetty/server/Request.java Tue Sep 20 21:38:44 2016 -0600 @@ -28,6 +28,9 @@ import java.net.InetAddress; import java.nio.ByteBuffer; import java.security.Principal; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.TimeZone; import java.util.Collection; import java.util.Collections; import java.util.Enumeration; @@ -1226,7 +1229,7 @@ public Buffer getTimeStampBuffer() { if (_timeStampBuffer == null && _timeStamp > 0) - _timeStampBuffer = HttpFields.__dateCache.formatBuffer(_timeStamp); + _timeStampBuffer = formatBuffer(_timeStamp); return _timeStampBuffer; } @@ -1981,4 +1984,24 @@ setParameters(parameters); setQueryString(query); } + + + private static Buffer _buffer; + private static String _last; + private static final DateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US); + static { + dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); + } + + private static Buffer formatBuffer(long date) { + synchronized(dateFormat) { + String d = dateFormat.format(date); + if (d==_last) + return _buffer; + _last=d; + _buffer=new ByteArrayBuffer(d); + return _buffer; + } + } + }
--- a/src/org/eclipse/jetty/util/DateCache.java Tue Sep 20 01:05:37 2016 -0600 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,311 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.util; - -import java.text.DateFormatSymbols; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Locale; -import java.util.TimeZone; - -/* ------------------------------------------------------------ */ -/** Date Format Cache. - * Computes String representations of Dates and caches - * the results so that subsequent requests within the same minute - * will be fast. - * - * Only format strings that contain either "ss" or "ss.SSS" are - * handled. - * - * The timezone of the date may be included as an ID with the "zzz" - * format string or as an offset with the "ZZZ" format string. - * - * If consecutive calls are frequently very different, then this - * may be a little slower than a normal DateFormat. - * - * - * - */ - -public class DateCache -{ - public static String DEFAULT_FORMAT="EEE MMM dd HH:mm:ss zzz yyyy"; - private static long __hitWindow=60*60; - - private String _formatString; - private String _tzFormatString; - private SimpleDateFormat _tzFormat; - - private String _minFormatString; - private SimpleDateFormat _minFormat; - - private String _secFormatString; - private String _secFormatString0; - private String _secFormatString1; - - private long _lastMinutes = -1; - private long _lastSeconds = -1; - private int _lastMs = -1; - private String _lastResult = null; - - private Locale _locale = null; - private DateFormatSymbols _dfs = null; - - /* ------------------------------------------------------------ */ - /** Constructor. - * Make a DateCache that will use a default format. The default format - * generates the same results as Date.toString(). - */ - public DateCache() - { - this(DEFAULT_FORMAT); - getFormat().setTimeZone(TimeZone.getDefault()); - } - - /* ------------------------------------------------------------ */ - /** Constructor. - * Make a DateCache that will use the given format - */ - public DateCache(String format) - { - _formatString=format; - setTimeZone(TimeZone.getDefault()); - - } - - /* ------------------------------------------------------------ */ - public DateCache(String format,Locale l) - { - _formatString=format; - _locale = l; - setTimeZone(TimeZone.getDefault()); - } - - /* ------------------------------------------------------------ */ - public DateCache(String format,DateFormatSymbols s) - { - _formatString=format; - _dfs = s; - setTimeZone(TimeZone.getDefault()); - } - - /* ------------------------------------------------------------ */ - /** Set the timezone. - * @param tz TimeZone - */ - public synchronized void setTimeZone(TimeZone tz) - { - setTzFormatString(tz); - if( _locale != null ) - { - _tzFormat=new SimpleDateFormat(_tzFormatString,_locale); - _minFormat=new SimpleDateFormat(_minFormatString,_locale); - } - else if( _dfs != null ) - { - _tzFormat=new SimpleDateFormat(_tzFormatString,_dfs); - _minFormat=new SimpleDateFormat(_minFormatString,_dfs); - } - else - { - _tzFormat=new SimpleDateFormat(_tzFormatString); - _minFormat=new SimpleDateFormat(_minFormatString); - } - _tzFormat.setTimeZone(tz); - _minFormat.setTimeZone(tz); - _lastSeconds=-1; - _lastMinutes=-1; - } - - /* ------------------------------------------------------------ */ - public TimeZone getTimeZone() - { - return _tzFormat.getTimeZone(); - } - - /* ------------------------------------------------------------ */ - /** Set the timezone. - * @param timeZoneId TimeZoneId the ID of the zone as used by - * TimeZone.getTimeZone(id) - */ - public void setTimeZoneID(String timeZoneId) - { - setTimeZone(TimeZone.getTimeZone(timeZoneId)); - } - - /* ------------------------------------------------------------ */ - private synchronized void setTzFormatString(final TimeZone tz ) - { - int zIndex = _formatString.indexOf( "ZZZ" ); - if( zIndex >= 0 ) - { - String ss1 = _formatString.substring( 0, zIndex ); - String ss2 = _formatString.substring( zIndex+3 ); - int tzOffset = tz.getRawOffset(); - - StringBuilder sb = new StringBuilder(_formatString.length()+10); - sb.append(ss1); - sb.append("'"); - if( tzOffset >= 0 ) - sb.append( '+' ); - else - { - tzOffset = -tzOffset; - sb.append( '-' ); - } - - int raw = tzOffset / (1000*60); // Convert to seconds - int hr = raw / 60; - int min = raw % 60; - - if( hr < 10 ) - sb.append( '0' ); - sb.append( hr ); - if( min < 10 ) - sb.append( '0' ); - sb.append( min ); - sb.append( '\'' ); - - sb.append(ss2); - _tzFormatString=sb.toString(); - } - else - _tzFormatString=_formatString; - setMinFormatString(); - } - - - /* ------------------------------------------------------------ */ - private void setMinFormatString() - { - int i = _tzFormatString.indexOf("ss.SSS"); - int l = 6; - if (i>=0) - throw new IllegalStateException("ms not supported"); - i = _tzFormatString.indexOf("ss"); - l=2; - - // Build a formatter that formats a second format string - String ss1=_tzFormatString.substring(0,i); - String ss2=_tzFormatString.substring(i+l); - _minFormatString =ss1+"'ss'"+ss2; - } - - /* ------------------------------------------------------------ */ - /** Format a date according to our stored formatter. - * @param inDate - * @return Formatted date - */ - public synchronized String format(Date inDate) - { - return format(inDate.getTime()); - } - - /* ------------------------------------------------------------ */ - /** Format a date according to our stored formatter. - * @param inDate - * @return Formatted date - */ - public synchronized String format(long inDate) - { - long seconds = inDate / 1000; - - // Is it not suitable to cache? - if (seconds<_lastSeconds || - _lastSeconds>0 && seconds>_lastSeconds+__hitWindow) - { - // It's a cache miss - Date d = new Date(inDate); - return _tzFormat.format(d); - - } - - // Check if we are in the same second - // and don't care about millis - if (_lastSeconds==seconds ) - return _lastResult; - - Date d = new Date(inDate); - - // Check if we need a new format string - long minutes = seconds/60; - if (_lastMinutes != minutes) - { - _lastMinutes = minutes; - _secFormatString=_minFormat.format(d); - - int i=_secFormatString.indexOf("ss"); - int l=2; - _secFormatString0=_secFormatString.substring(0,i); - _secFormatString1=_secFormatString.substring(i+l); - } - - // Always format if we get here - _lastSeconds = seconds; - StringBuilder sb=new StringBuilder(_secFormatString.length()); - sb.append(_secFormatString0); - int s=(int)(seconds%60); - if (s<10) - sb.append('0'); - sb.append(s); - sb.append(_secFormatString1); - _lastResult=sb.toString(); - - - return _lastResult; - } - - /* ------------------------------------------------------------ */ - /** Format to string buffer. - * @param inDate Date the format - * @param buffer StringBuilder - */ - public void format(long inDate, StringBuilder buffer) - { - buffer.append(format(inDate)); - } - - /* ------------------------------------------------------------ */ - /** Get the format. - */ - public SimpleDateFormat getFormat() - { - return _minFormat; - } - - /* ------------------------------------------------------------ */ - public String getFormatString() - { - return _formatString; - } - - /* ------------------------------------------------------------ */ - public String now() - { - long now=System.currentTimeMillis(); - _lastMs=(int)(now%1000); - return format(now); - } - - /* ------------------------------------------------------------ */ - public int lastMs() - { - return _lastMs; - } -}