Storing globals in global logfile, Jindra please look at DuplicatesTest, it starts to fall after this commit, I am not sure why. Thanks.
authorjtulach@netbeans.org
Sun, 11 Nov 2007 22:49:21 +0000
changeset 2685295651d52d98
parent 2684 2d0a60e55e92
child 2686 7fd0fb66fd14
Storing globals in global logfile, Jindra please look at DuplicatesTest, it starts to fall after this commit, I am not sure why. Thanks.
logger/uihandlerserver/src/java/org/netbeans/server/uihandler/LogsManager.java
logger/uihandlerserver/test/org/netbeans/server/uihandler/AddLogFileTest.java
logger/uihandlerserver/test/org/netbeans/server/uihandler/DbInsertionTest.java
logger/uihandlerserver/test/org/netbeans/server/uihandler/StatisticsParsingTest.java
     1.1 --- a/logger/uihandlerserver/src/java/org/netbeans/server/uihandler/LogsManager.java	Fri Nov 09 15:12:37 2007 +0000
     1.2 +++ b/logger/uihandlerserver/src/java/org/netbeans/server/uihandler/LogsManager.java	Sun Nov 11 22:49:21 2007 +0000
     1.3 @@ -60,6 +60,7 @@
     1.4  import java.util.concurrent.ExecutorService;
     1.5  import java.util.concurrent.Executors;
     1.6  import java.util.concurrent.Future;
     1.7 +import java.util.concurrent.ScheduledExecutorService;
     1.8  import java.util.concurrent.TimeUnit;
     1.9  import java.util.logging.Handler;
    1.10  import java.util.logging.Level;
    1.11 @@ -101,7 +102,7 @@
    1.12      private List<Integer> initCounts = Collections.nCopies(2, 0);
    1.13      
    1.14      /** executor to use for changing data */
    1.15 -    private static final ExecutorService EXEC = Executors.newSingleThreadScheduledExecutor();
    1.16 +    private static final ScheduledExecutorService EXEC = Executors.newSingleThreadScheduledExecutor();
    1.17      
    1.18      private LogsManager(File userDir) {
    1.19          String msg = "Creating manager for " + userDir;
    1.20 @@ -112,6 +113,7 @@
    1.21          for (Statistics<?> s : Lookup.getDefault().lookupAll(Statistics.class)) {
    1.22              addStatisticsData(this.statistics, s);
    1.23          }
    1.24 +        
    1.25          this.initTask = EXEC.submit(new Verify());
    1.26      }
    1.27      /** For use from tests 
    1.28 @@ -347,6 +349,9 @@
    1.29          return getLogInfo(userdir, uploadnumber, true);
    1.30      }
    1.31      final Logfile getLogInfo(String userdir, int uploadnumber, boolean wait) {
    1.32 +        return getLogInfo(userdir, uploadnumber, wait, true);
    1.33 +    }
    1.34 +    final Logfile getLogInfo(String userdir, int uploadnumber, boolean wait, boolean create) {
    1.35          if (wait) {
    1.36              DbInsertion.waitLogFileInsertFinished();
    1.37          }
    1.38 @@ -360,6 +365,9 @@
    1.39          synchronized (logInfoLock){
    1.40              res = Utils.getPersistenceUtils().executeNamedQuery("Logfile.findByFile", params);
    1.41              if (res.size()==0){
    1.42 +                if (!create) {
    1.43 +                    return null;
    1.44 +                }
    1.45                  Logfile result = new Logfile();
    1.46                  result.setUserdir(userdir);
    1.47                  result.setUploadNumber(uploadnumber);
    1.48 @@ -689,13 +697,19 @@
    1.49      private final class Verify implements Runnable {
    1.50          private File[] files;
    1.51          private int cnt;
    1.52 +        private List<Value> sum;
    1.53          
    1.54          public Verify() {
    1.55 +            init();
    1.56 +        }
    1.57 +        
    1.58 +        private void init() {
    1.59              if (dir == null) {
    1.60                  LOG.warning("Specify dir attribute, otherwise the server cannot work");
    1.61                  return;
    1.62              }
    1.63  
    1.64 +            cnt = 0;
    1.65              files = dir.listFiles();
    1.66              Collections.shuffle(Arrays.asList(files));
    1.67          }
    1.68 @@ -710,7 +724,32 @@
    1.69  
    1.70              EntityManager em = PersistenceUtils.getInstance().createEntityManager();
    1.71  
    1.72 -            for (File f : files) {
    1.73 +            if (sum == null) {
    1.74 +                LOG.log(Level.FINE, "reading previously stored globals");
    1.75 +                Logfile global = getLogInfo("global", 0, false, false);
    1.76 +                if (global == null) {
    1.77 +                    LOG.log(Level.FINE, "no stored globals");
    1.78 +                } else {
    1.79 +                    for (Value<?> v : statistics) {
    1.80 +                        addDataForLog(v, global, em);
    1.81 +                    }
    1.82 +                    LOG.log(Level.FINE, "done reading previously stored globals");
    1.83 +                }
    1.84 +            }
    1.85 +            
    1.86 +            if (cnt == 0) {
    1.87 +                sum = new ArrayList<Value>();
    1.88 +                for (Value<?> v : statistics) {
    1.89 +                    addStatisticsData(sum, v);
    1.90 +                }
    1.91 +            }
    1.92 +            
    1.93 +            for (int i = 0; i < 5; i++) {
    1.94 +                if (cnt == files.length) {
    1.95 +                    break;
    1.96 +                }
    1.97 +                File f = files[cnt];
    1.98 +                
    1.99                  Integer[] counts = {cnt++, files.length};
   1.100  
   1.101                  initCounts = Arrays.asList(counts);
   1.102 @@ -744,7 +783,7 @@
   1.103  
   1.104  
   1.105                      LOG.log(Level.FINE, "Recomputing {0}", log.getFileName());
   1.106 -                    for (Value<?> v : statistics) {
   1.107 +                    for (Value<?> v : sum) {
   1.108                          addDataForLog(v, log, em);
   1.109                      }
   1.110                  } catch (ThreadDeath td) {
   1.111 @@ -755,12 +794,35 @@
   1.112                      em.clear();
   1.113                  }
   1.114              }
   1.115 +            
   1.116 +            if (cnt < files.length) {
   1.117 +                LOG.log(Level.FINE, "Breaking the parsing at {0}", cnt);
   1.118 +                EXEC.schedule(this, 10, TimeUnit.MILLISECONDS);
   1.119 +                return;
   1.120 +            }
   1.121 +            
   1.122  
   1.123              initCounts = Collections.nCopies(2, getNumberOfLogs());
   1.124 +            
   1.125 +            statistics = sum;
   1.126 +            try {
   1.127 +                em.getTransaction().begin();
   1.128 +                LOG.log(Level.FINE, "storing globals");
   1.129 +                Logfile global = getLogInfo("global", 0, false, true);
   1.130 +                for (Value<?> v : sum) {
   1.131 +                    v.persist(global, em);
   1.132 +                }
   1.133 +                LOG.log(Level.FINE, "done storing globals");
   1.134 +            } finally {
   1.135 +                em.getTransaction().commit();
   1.136 +                em.clear();
   1.137 +            }
   1.138  
   1.139              LOG.log(Level.INFO, "Sessions created for {0}", dir);
   1.140              em.close();
   1.141  
   1.142 +            init();
   1.143 +            EXEC.schedule(this, 5 * 60, TimeUnit.SECONDS);
   1.144          }
   1.145          
   1.146      }
     2.1 --- a/logger/uihandlerserver/test/org/netbeans/server/uihandler/AddLogFileTest.java	Fri Nov 09 15:12:37 2007 +0000
     2.2 +++ b/logger/uihandlerserver/test/org/netbeans/server/uihandler/AddLogFileTest.java	Sun Nov 11 22:49:21 2007 +0000
     2.3 @@ -42,11 +42,13 @@
     2.4  package org.netbeans.server.uihandler;
     2.5  
     2.6  import java.io.File;
     2.7 +import java.util.ArrayList;
     2.8  import java.util.List;
     2.9  import org.netbeans.modules.exceptions.entity.Logfile;
    2.10  import org.netbeans.modules.exceptions.entity.Mapping;
    2.11  import org.netbeans.modules.exceptions.entity.Mapping;
    2.12  import org.netbeans.modules.exceptions.entity.MappingPK;
    2.13 +import org.netbeans.modules.exceptions.utils.PersistenceUtils;
    2.14  
    2.15  /**
    2.16   *
    2.17 @@ -74,9 +76,20 @@
    2.18          waitLog(log, IP4);
    2.19          check(4,  "NetBeans IDE Dev (Build 200703011900)", "255255255255", IP4, 6, "NB204081111", "NB204081111.5", "070301");
    2.20      }
    2.21 -    
    2.22 +
    2.23 +    static List<Logfile> logFiles(PersistenceUtils p) {
    2.24 +        List<Logfile> logFiles = p.getAll(Logfile.class);
    2.25 +        List<Logfile> arr = new ArrayList<Logfile>();
    2.26 +        for (Logfile logfile : logFiles) {
    2.27 +            if (logfile.getUserdir().equals("global")) {
    2.28 +                continue;
    2.29 +            }
    2.30 +            arr.add(logfile);
    2.31 +        }
    2.32 +        return arr;
    2.33 +    }
    2.34      private void check(int count, String version, String IP, String IPAddr, int UploadNumber, String userDir, String fileName, String buildNumber){
    2.35 -        List<Logfile> logFiles = perUtils.getAll(Logfile.class);
    2.36 +        List<Logfile> logFiles = logFiles(perUtils);
    2.37          assertEquals("LOG file is INSERTED", count, logFiles.size());
    2.38          Logfile logFile  = logFiles.get(count-1);
    2.39          assertNotNull("Version", logFile.getProductVersionId());
     3.1 --- a/logger/uihandlerserver/test/org/netbeans/server/uihandler/DbInsertionTest.java	Fri Nov 09 15:12:37 2007 +0000
     3.2 +++ b/logger/uihandlerserver/test/org/netbeans/server/uihandler/DbInsertionTest.java	Sun Nov 11 22:49:21 2007 +0000
     3.3 @@ -150,7 +150,7 @@
     3.4          Integer count = perUtils.count(Jarfile.class);
     3.5          assertTrue("THE NUMBER MUST BE NOT 0", count > 0);
     3.6          
     3.7 -        logFiles = perUtils.getAll(Logfile.class);
     3.8 +        logFiles = AddLogFileTest.logFiles(perUtils);
     3.9          assertEquals("JUST ONE logfile: " + logFiles,1, logFiles.size());
    3.10          assertEquals("Build Number", logFiles.get(0).getBuildnumber(), Long.valueOf("070212"));
    3.11          assertEquals("Upload Number", logFiles.get(0).getUploadNumber(), new Integer(session));
    3.12 @@ -217,7 +217,7 @@
    3.13          assertEquals("SUBCOMPONENT FROM COMMENT", exception.getSubcomponent(), "code");
    3.14          
    3.15          
    3.16 -        logFiles = perUtils.getAll(Logfile.class);
    3.17 +        logFiles = AddLogFileTest.logFiles(perUtils);
    3.18          assertEquals("TWO logfile",2, logFiles.size());
    3.19          //--- FIRST --//
    3.20          Logfile logFile = logFiles.get(0);
     4.1 --- a/logger/uihandlerserver/test/org/netbeans/server/uihandler/StatisticsParsingTest.java	Fri Nov 09 15:12:37 2007 +0000
     4.2 +++ b/logger/uihandlerserver/test/org/netbeans/server/uihandler/StatisticsParsingTest.java	Sun Nov 11 22:49:21 2007 +0000
     4.3 @@ -36,6 +36,7 @@
     4.4  import java.util.logging.LogRecord;
     4.5  import java.util.prefs.Preferences;
     4.6  import javax.servlet.jsp.PageContext;
     4.7 +import org.netbeans.junit.Log;
     4.8  import org.netbeans.junit.MockServices;
     4.9  import org.netbeans.junit.NbTestCase;
    4.10  
    4.11 @@ -149,13 +150,19 @@
    4.12          assertEquals(18, obj);
    4.13          
    4.14          int previous = CntngStat.operations;
    4.15 +        CntngStat.joins = 0;
    4.16          // recreate manager and check once more
    4.17          //result.close();
    4.18 +        CharSequence log = Log.enable(LogsManager.class.getName(), Level.FINE);
    4.19          result = LogsManager.createManager(logs());
    4.20          
    4.21          result.preparePageContext(cnt, "log337", null);
    4.22  
    4.23          assertEquals("no new finishSessionUpload", 3, CntngStat.finishSessionUpload.size());
    4.24 +        if (log.toString().indexOf("reading previously stored globals") == -1) {
    4.25 +            fail("Load globals: " + log);
    4.26 +        }
    4.27 +        assertEquals(-1, log.toString().indexOf("no stored globals"));
    4.28  
    4.29          assertEquals("Still the same globals", global, cnt.getAttribute("globalCnts"));
    4.30          assertEquals("Still the same globals", last, cnt.getAttribute("lastCnts"));
    4.31 @@ -165,6 +172,7 @@
    4.32      public static final class CntngStat extends Statistics<Integer> {
    4.33          static List<Object[]> finishSessionUpload = new LinkedList<Object[]>();
    4.34          static int operations;
    4.35 +        static int joins;
    4.36          
    4.37          public CntngStat() {
    4.38              super("Cnts");
    4.39 @@ -182,6 +190,7 @@
    4.40          
    4.41          protected Integer join(Integer one, Integer two) {
    4.42              operations++;
    4.43 +            joins++;
    4.44              return one + two;
    4.45          }
    4.46