You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by de...@apache.org on 2013/12/12 17:02:19 UTC

svn commit: r1550441 - /uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/CacheManager.java

Author: degenaro
Date: Thu Dec 12 16:02:18 2013
New Revision: 1550441

URL: http://svn.apache.org/r1550441
Log:
UIMA-3494 DUCC webserver (WS) improved Jobs page performance by caching Work Items data for active Jobs each OR publication interval

Added:
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/CacheManager.java

Added: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/CacheManager.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/CacheManager.java?rev=1550441&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/CacheManager.java (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/CacheManager.java Thu Dec 12 16:02:18 2013
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+package org.apache.uima.ducc.ws;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.uima.ducc.common.jd.files.WorkItemStateManager;
+import org.apache.uima.ducc.common.utils.DuccLogger;
+import org.apache.uima.ducc.common.utils.DuccLoggerComponents;
+import org.apache.uima.ducc.common.utils.id.DuccId;
+import org.apache.uima.ducc.transport.event.common.DuccWorkMap;
+import org.apache.uima.ducc.transport.event.common.IDuccWork;
+import org.apache.uima.ducc.transport.event.common.IDuccWorkJob;
+
+public class CacheManager {
+	
+	private static DuccLogger logger = DuccLoggerComponents.getWsLogger(CacheManager.class.getName());
+	
+	private static CacheManager instance = new CacheManager();
+	
+	private volatile HashMap<String,WorkItemStateManager> wisMap = null;
+	
+	private AtomicBoolean inProgress = new AtomicBoolean(false);
+	
+	public static CacheManager getInstance() {
+		return instance;
+	}
+	
+	public void update(DuccWorkMap map) {
+		String location = "update";
+		DuccId jobid = null;
+		if(inProgress.compareAndSet(false, true)) {
+			try {
+				HashMap<String,WorkItemStateManager> updatedWisMap = new HashMap<String,WorkItemStateManager>();
+				Iterator<DuccId> iterator = map.keySet().iterator();
+				while(iterator.hasNext()) {
+					jobid = iterator.next();
+					IDuccWork duccWork = map.findDuccWork(jobid);
+					switch(duccWork.getDuccType()) {
+					case Job:
+						IDuccWorkJob job = (IDuccWorkJob)duccWork;
+						String jobNo = job.getId();
+						String userId = job.getStandardInfo().getUser();
+						String jobDir = job.getLogDirectory()+jobNo;
+						WorkItemStateManager workItemStateManager = new WorkItemStateManager(jobDir);
+						workItemStateManager.importData(userId);
+						updatedWisMap.put(jobNo, workItemStateManager);
+						break;
+					}
+				}
+				wisMap = updatedWisMap;
+				logger.debug(location, jobid, "size:"+wisMap.size());
+			}
+			catch(Exception e) {
+				logger.error(location, jobid, e);
+			}
+		}
+		else {
+			logger.warn(location, jobid, "skipping: already in progress...");
+		}
+		inProgress.set(false);
+	}
+	
+	public WorkItemStateManager getWorkItemStateManager(String jobNo) {
+		WorkItemStateManager retVal = wisMap.get(jobNo);
+		return retVal;
+	}
+	
+}