INTERNAL: fix a bug that cannot insert whole data at stress test 07/34907/1
authorgreatim <jaewon81.lim@samsung.com>
Wed, 4 Feb 2015 09:09:08 +0000 (18:09 +0900)
committergreatim <jaewon81.lim@samsung.com>
Wed, 4 Feb 2015 09:11:50 +0000 (18:11 +0900)
fix a bug that page data manager thread is terminated before whole data inserted.

Change-Id: I20e850ebcc5c4cac8c80e3f31ee406d03b681d86
Signed-off-by: greatim <jaewon81.lim@samsung.com>
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerConstants.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/PageDataManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/info/callstack/CallStackInserter.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/opentrace/OpenTraceProgressManager.java

index b478036..971a450 100644 (file)
@@ -87,6 +87,7 @@ public class AnalyzerConstants {
        public static final String USER_INTERFACE_PAGE_MANAGER_THREAD = "User Interface Page Managerthread"; //$NON-NLS-1$ 
        public static final String SQL_INSERTER_THREAD = "sql_inserter_thread"; //$NON-NLS-1$
        public static final String HEART_BEAT_THREAD = "heart beat thread"; //$NON-NLS-1$
+       public static final String CALLSTACK_INSERTER_THREAD =  "Callstack inserter"; //$NON-NLS-1$
        
        /* timer names */
        public static final String SCREENSHOT_TIMER = "Periodic screenshot timer"; //$NON-NLS-1$
index a6a730f..7c200f0 100644 (file)
@@ -93,9 +93,7 @@ public abstract class PageDataManager implements Runnable {
                                state = State.TO_BE_STOPED;
                                sendNotify();
                                thread.join(AnalyzerConstants.THREAD_JOIN_WAIT_TIME);
-                               state = State.NOT_RUNNING;
                                thread = null;
-                               logPackQueue.clear();
                                Logger.debug(getName() + " thread joined!"); //$NON-NLS-1$
                        } catch (InterruptedException e) {
                                Logger.exception(e);
@@ -103,6 +101,11 @@ public abstract class PageDataManager implements Runnable {
                }
        }
 
+       private final void clear() {
+               state = State.NOT_RUNNING;
+               logPackQueue.clear();
+       }
+
        public final boolean isThreadAlive() {
                if (null == thread || !thread.isAlive()) {
                        return false;
@@ -133,8 +136,9 @@ public abstract class PageDataManager implements Runnable {
 
                onThreadStop();
 
-               /* log for debug */
                Logger.debug(getName() + " thread end!!"); //$NON-NLS-1$
+
+               clear();
        }
 
        protected abstract void makeData(LogPackage pack);
index db631e3..66d8d32 100755 (executable)
@@ -110,8 +110,6 @@ public class SWAPLogParser implements Runnable {
                                Logger.exception(e);
                        }
                }
-               functionEntryStackByTidMap.clear();
-               DataManagerRegistry.stopThreads();
        }
 
        /*** log parsing thread ***/
@@ -129,6 +127,10 @@ public class SWAPLogParser implements Runnable {
 
                /* log for debug */
                Logger.debug("log parsing thread end!!"); //$NON-NLS-1$
+               
+               functionEntryStackByTidMap.clear();
+               DataManagerRegistry.stopThreads();
+
                AnalyzerManager.setLogParsingComplete(true);
        }
 
index 753702a..b019117 100644 (file)
@@ -54,7 +54,7 @@ public class CallStackInserter implements Runnable {
        private static final int FULL_COUNT = 5000;
        private static boolean stopTrace = false;
        private static long lastInsertSeq = -1;
-       
+
        private CallStackDataDBTable callStackDataTable = null;
        private CallStackUnitDBTable callStackUnitTable = null;
 
@@ -62,18 +62,18 @@ public class CallStackInserter implements Runnable {
                callStackDataTable = new CallStackDataDBTable();
                callStackUnitTable = new CallStackUnitDBTable();
        }
-       
+
        public synchronized static CallStackInserter getInstance() {
                if (null == instance) {
                        instance = new CallStackInserter();
                }
                return instance;
        }
-       
+
        public CallStackDataDBTable getCallStackDataTable() {
                return callStackDataTable;
        }
-       
+
        public CallStackUnitDBTable getCallStackUnitTable() {
                return callStackUnitTable;
        }
@@ -81,7 +81,8 @@ public class CallStackInserter implements Runnable {
        public synchronized void startInserterThread() {
                if (inserterThread == null) {
                        stopTrace = false;
-                       inserterThread = new Thread(null, getInstance());
+                       inserterThread = new Thread(null, getInstance(),
+                                       AnalyzerConstants.CALLSTACK_INSERTER_THREAD);
                        inserterThread.start();
                }
        }
@@ -135,7 +136,7 @@ public class CallStackInserter implements Runnable {
                while ((csd = callstackDataQueue.poll()) != null) {
                        List<Long> addrs = csd.getAddrs();
 
-                       List<Object> insertRowData = new ArrayList<Object>();                           
+                       List<Object> insertRowData = new ArrayList<Object>();
                        try {
                                insertRowData.add(new Long(csd.getSeq()));
                                insertRowData.add(addrs);
@@ -143,7 +144,7 @@ public class CallStackInserter implements Runnable {
                                Logger.exception(e);
                        }
                        insertData.add(insertRowData);
-                       
+
                        lastInsertSeq = csd.getSeq();
                        if ((insertCount-- <= 0) && (stopTrace == false)) {
                                break;
@@ -154,7 +155,7 @@ public class CallStackInserter implements Runnable {
                }
                // remove unnecessary callstackdata from memory
                TargetData target = SettingDataManager.getInstance().getConnectedTarget();
-               if (target.isSelectedFeature(SettingConstants.FEATURE_NAME_INDEX_FUNCTION_SAMPLING)) {          
+               if (target.isSelectedFeature(SettingConstants.FEATURE_NAME_INDEX_FUNCTION_SAMPLING)) {
                        // sample feature is on
                        long lastSampleSeq = FunctionUsageProfiler.getInstance().getLastSampleSeq();
                        if (lastSampleSeq != -1) {
@@ -166,15 +167,14 @@ public class CallStackInserter implements Runnable {
                        }
                } else { // sample feature is off
                        // callstackdata is not needed in memory after insertion to DB
-                       removeCallstackData(lastInsertSeq);                     
+                       removeCallstackData(lastInsertSeq);
                }
                // clear SeqTimeMap if number of entries over > 1M
                List<Integer> tids = AnalyzerManager.getCallstackManager().getTidsOfSeqTimeMap();
                int size = tids.size();
                for (int i = 0; i < size; i++) {
-                       NavigableMap<Long, Long> seqByTimeMap = 
-                                       AnalyzerManager.getCallstackManager()
-                                       .getSeqTimeByTidMap(tids.get(i));                       
+                       NavigableMap<Long, Long> seqByTimeMap = AnalyzerManager.getCallstackManager()
+                                       .getSeqTimeByTidMap(tids.get(i));
                        if (seqByTimeMap.size() > DALimit.MAX_CALLSTACK_SEQTIMEMAP_SIZE) {
                                seqByTimeMap.clear();
                        }
@@ -192,10 +192,10 @@ public class CallStackInserter implements Runnable {
                        callstackDataQueue.offer(csd);
                }
        }
-       
+
        private void removeCallstackData(long seq) {
-               NavigableMap<Long, CallStackData> callstackDataMap = AnalyzerManager
-                               .getCallstackManager().getCallStackDataBySeqMap();
+               NavigableMap<Long, CallStackData> callstackDataMap = AnalyzerManager.getCallstackManager()
+                               .getCallStackDataBySeqMap();
                SortedMap<Long, CallStackData> headMap = callstackDataMap.headMap(seq);
                Iterator<Map.Entry<Long, CallStackData>> itr = headMap.entrySet().iterator();
                while (itr.hasNext()) {
index c86f6d8..2fb85bb 100644 (file)
@@ -189,23 +189,6 @@ public class OpenTraceProgressManager implements Runnable {
                DataManagerRegistry.startThreads();
        }
 
-       private void waitingThreads() {
-               while (!AnalyzerManager.isExit()) {
-                       OpenTraceInputReader.stopOpenTraceInputReader();
-                       DataManagerRegistry.stopThreads();
-                       try {
-                               if (!DataManagerRegistry.isAnyoneAlive()) {
-                                       break;
-                               } else {
-                                       Thread.sleep(AnalyzerConstants.LOG_CHECK_INTERVAL);
-                               }
-                       } catch (InterruptedException e) {
-                               /** thread stop by interrupt */
-                               break;
-                       }
-               }
-       }
-
        @Override
        public void run() {
                AnalyzerUtil.executeCommand(ClearHandler.ID);