costin      01/02/27 08:20:05

  Modified:    src/share/org/apache/tomcat/modules/loggers
                        AccountingInterceptor.java
  Log:
  Prepare to remove the dependecy on Counters ( an early experiment in
  performance tunning ). The code is still ok, but it doesn't have to
  be hard-coded in the core - a note is enough.
  
  ( BTW, this module shouldn't be part of the "standard" distribution, but
  as a extra module - after we create the proposed modules/ directory )
  
  Revision  Changes    Path
  1.2       +68 -14    
jakarta-tomcat/src/share/org/apache/tomcat/modules/loggers/AccountingInterceptor.java
  
  Index: AccountingInterceptor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/loggers/AccountingInterceptor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AccountingInterceptor.java        2001/01/01 02:01:30     1.1
  +++ AccountingInterceptor.java        2001/02/27 16:20:04     1.2
  @@ -83,6 +83,10 @@
       public static final int ACC_IN_OUT=5;
       public static final int ACC_OUT_COUNT=6;
   
  +    public static final int COUNTERS_COUNT=10;
  +
  +    int reqCountNote=0;
  +
       
       public AccountingInterceptor() {
       }
  @@ -96,6 +100,8 @@
       public void engineInit(ContextManager cm) throws TomcatException {
        try {
            logF=new BufferedOutputStream( new FileOutputStream( trace ));
  +         reqCountNote=cm.getNoteId(ContextManager.REQUEST_NOTE,
  +                                   "counters");
        } catch(IOException ex ) {
            ex.printStackTrace();
        }
  @@ -104,21 +110,33 @@
   
       public int requestMap(Request request ) {
        if( acc ) {
  -         request.getCounters().setCounter( ACC_PRE_RMAP, System.currentTimeMillis() 
);
  +         Counters ct=(Counters)request.getNote(reqCountNote);
  +         if( ct==null ) {
  +             request.setNote( reqCountNote, new Counters(COUNTERS_COUNT));
  +         }
  +         ct.setCounter( ACC_PRE_RMAP, System.currentTimeMillis() );
        }
        return 0;
       }
   
       public int contextMap( Request request ) {
        if( acc ) {
  -         request.getCounters().setCounter( ACC_PRE_CMAP, System.currentTimeMillis() 
);
  +         Counters ct=(Counters)request.getNote(reqCountNote);
  +         if( ct==null ) {
  +             request.setNote( reqCountNote, new Counters(COUNTERS_COUNT));
  +         }
  +         ct.setCounter( ACC_PRE_CMAP, System.currentTimeMillis() );
        }
        return 0;
       }
   
       public int authenticate(Request request, Response response) {
        if( acc  ) {
  -         request.getCounters().setCounter( ACC_POST_MAP, System.currentTimeMillis() 
);
  +         Counters ct=(Counters)request.getNote(reqCountNote);
  +         if( ct==null ) {
  +             request.setNote( reqCountNote, new Counters(COUNTERS_COUNT));
  +         }
  +         ct.setCounter( ACC_POST_MAP, System.currentTimeMillis() );
        }
        return 0;
       }
  @@ -130,7 +148,11 @@
   
       public int preService(Request request, Response response) {
        if( acc ) {
  -         request.getCounters().setCounter( ACC_PRE_SERVICE, 
System.currentTimeMillis() );
  +         Counters ct=(Counters)request.getNote(reqCountNote);
  +         if( ct==null ) {
  +             request.setNote( reqCountNote, new Counters(COUNTERS_COUNT));
  +         }
  +         ct.setCounter( ACC_PRE_SERVICE, System.currentTimeMillis() );
        }
        return 0;
       }
  @@ -150,20 +172,24 @@
   
       public int postService(Request request, Response response) {
        if( acc  ) {
  -         request.getCounters().setCounter( ACC_POST_SERVICE, 
System.currentTimeMillis() );
  +         Counters ct=(Counters)request.getNote(reqCountNote);
  +         if( ct==null ) {
  +             request.setNote( reqCountNote, new Counters(COUNTERS_COUNT));
  +         }
  +         ct.setCounter( ACC_POST_SERVICE, System.currentTimeMillis() );
   
  -         long t1=request.getCounters().getCounter( ACC_PRE_CMAP );
  -         long t2=request.getCounters().getCounter( ACC_PRE_RMAP );
  -         long t3=request.getCounters().getCounter( ACC_POST_MAP );
  -         long t4=request.getCounters().getCounter( ACC_PRE_SERVICE );
  -         long t5=request.getCounters().getCounter( ACC_POST_SERVICE );
  +         long t1=ct.getCounter( ACC_PRE_CMAP );
  +         long t2=ct.getCounter( ACC_PRE_RMAP );
  +         long t3=ct.getCounter( ACC_POST_MAP );
  +         long t4=ct.getCounter( ACC_PRE_SERVICE );
  +         long t5=ct.getCounter( ACC_POST_SERVICE );
   
            long t21=t2-t1;
            long t31=t3-t1;
            long t54=t5-t4;
            long t41=t4-t1;
   
  -         long tout=request.getCounters().getCounter( ACC_OUT_COUNT );
  +         long tout=ct.getCounter( ACC_OUT_COUNT );
            StringBuffer sb=new StringBuffer();
            // ContextMap, Map, Service, Pre-Service-Overhead
            sb.append(t21).append(",");
  @@ -171,10 +197,11 @@
            sb.append(t54).append(",");
            sb.append(tout).append(",");
            sb.append(t41).append("\n");
  -         ct++;
  +         ct.recycle();
  +         cnt++;
            try {
                if( logF!=null ) logF.write(sb.toString().getBytes());
  -             if( (ct % 64) == 0 ) logF.flush();
  +             if( (cnt % 64) == 0 ) logF.flush();
            } catch( IOException ex ) {
                ex.printStackTrace();
            }
  @@ -184,7 +211,34 @@
        return 0;
       }
   
  -    static int ct=0;
  +    static int cnt=0;
       
       
  +}
  +
  +/*
  + */
  +final class Counters {
  +    long accTable[];
  +
  +    public Counters( int len ) {
  +     accTable=new long[len];
  +    }
  +    
  +
  +    public final void touchCounter( int pos ) {
  +     accTable[pos]=System.currentTimeMillis();
  +    }
  +     
  +    public final void setCounter( int pos, long value ) {
  +     accTable[pos]=value;
  +    }
  +
  +    public final long getCounter( int pos ) {
  +     return accTable[pos];
  +    }
  +
  +    public void recycle() {
  +     for( int i=0; i<accTable.length; i++ ) accTable[i]=0;
  +    }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to