Xie Xiaodong wrote:
> Do we really need to synchronize on "this" rather than separate some
> individual locks for better lock granularity?

Looking at the benchmarks and the times for 10,000,000 iterations even with
additional competition for locks I don't think we need the complexity. I'd want
to see evidence (benchmark, user report etc) that a problem exists before making
more changes, particularly ones that add complexity.

If you want to look at this then I'd be happy to review a patch that added
benchmark to test exactly this issue.

Mark

> 
> 
> 
> 2009/6/18 <ma...@apache.org>
> 
>> Author: markt
>> Date: Thu Jun 18 09:25:00 2009
>> New Revision: 785983
>>
>> URL: http://svn.apache.org/viewvc?rev=785983&view=rev
>> Log:
>> Expand sync within rotatable block to fix a couple of issues:
>>  - fileDateFormatter is a SimpleDateFormat which is not thread safe
>>  - the rotationLastChecked needs to be volatile to ensure we don't execute
>> the sync'd block multiple times
>> Although this is a sync on 'this' in log which gets called for every
>> request:
>>  - a similar sync occurs in getDate() for every request with minimal
>> performance impact
>>  - microbenchmarks suggest that a sync on 'this' has similar performance to
>> using ThreadLocals
>>
>>  Based on kkolinko's patch for Tomcat 5.5.x
>>
>>  Note there remains an issue with writing to the log if the log files
>> happens to be in the process of rotating
>>
>> Modified:
>>    tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java
>>
>> Modified: tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java
>> URL:
>> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java?rev=785983&r1=785982&r2=785983&view=diff
>>
>> ==============================================================================
>> --- tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java
>> (original)
>> +++ tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java Thu
>> Jun 18 09:25:00 2009
>> @@ -295,7 +295,7 @@
>>     /**
>>      * Instant when the log daily rotation was last checked.
>>      */
>> -    private long rotationLastChecked = 0L;
>> +    private volatile long rotationLastChecked = 0L;
>>
>>     /**
>>      * Do we check for log file existence? Helpful if an external
>> @@ -649,19 +649,21 @@
>>             // Only do a logfile switch check once a second, max.
>>             long systime = System.currentTimeMillis();
>>             if ((systime - rotationLastChecked) > 1000) {
>> -
>> -                rotationLastChecked = systime;
>> -
>> -                // Check for a change of date
>> -                String tsDate = fileDateFormatter.format(new
>> Date(systime));
>> -
>> -                // If the date has changed, switch log files
>> -                if (!dateStamp.equals(tsDate)) {
>> -                    synchronized (this) {
>> +                synchronized(this) {
>> +                    if ((systime - rotationLastChecked) > 1000) {
>> +                        rotationLastChecked = systime;
>> +
>> +                        String tsDate;
>> +                        // Check for a change of date
>> +                        tsDate = fileDateFormatter.format(new
>> Date(systime));
>> +
>> +                        // If the date has changed, switch log files
>>                         if (!dateStamp.equals(tsDate)) {
>> -                            close();
>> -                            dateStamp = tsDate;
>> -                            open();
>> +                            if (!dateStamp.equals(tsDate)) {
>> +                                close();
>> +                                dateStamp = tsDate;
>> +                                open();
>> +                            }
>>                         }
>>                     }
>>                 }
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
>> For additional commands, e-mail: dev-h...@tomcat.apache.org
>>
>>
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to