Storing globals in global logfile, Jindra please look at DuplicatesTest, it starts to fall after this commit, I am not sure why. Thanks.
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