| 
					
				 | 
			
			
				@@ -1,13 +1,8 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package com.tzld.piaoquan.recommend.server.service.score; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.piaoquan.recommend.server.common.base.RankItem; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.tzld.piaoquan.recommend.server.common.base.RequestContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.piaoquan.recommend.server.common.base.UserFeature; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.tzld.piaoquan.recommend.server.model.Video; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.tzld.piaoquan.recommend.server.service.rank.RankParam; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.tzld.piaoquan.recommend.server.service.rank.RankResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.tzld.piaoquan.recommend.server.service.recall.RecallResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.apache.commons.collections4.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.apache.commons.lang.exception.ExceptionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.slf4j.Logger; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -16,13 +11,10 @@ import org.slf4j.LoggerFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.Arrays; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.concurrent.Callable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.concurrent.ExecutorService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.concurrent.Executors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.concurrent.Future; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.concurrent.TimeUnit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.concurrent.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Slf4j 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class ScorerPipeline { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public static final int corePoolSize = 128; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public static final int SCORE_TIME_OUT = 400; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -37,16 +29,17 @@ public class ScorerPipeline { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * scoring 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public List<RankItem> scoring(final ScoreParam param, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                               final UserFeature userFeature, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                               final List<RankItem> rankItems) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  final UserFeature userFeature, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  final List<RankItem> rankItems) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (CollectionUtils.isEmpty(scorers)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // log.error() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("scorers is empty"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return rankItems; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        long scoreStart = System.currentTimeMillis(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<RankItem> items = rankItems; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (final AbstractScorer scorer : scorers) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -62,12 +55,7 @@ public class ScorerPipeline { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             final String scorerName = scorerNames.length > 0 ? scorerNames[scorerNames.length - 1] : fullScorerName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             final List<RankItem> scoreRankerItems = items; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            Callable<List<RankItem>> callable = new Callable<List<RankItem>>() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                public List<RankItem> call() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    return scorer.scoring(param, userFeature, scoreRankerItems); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Callable<List<RankItem>> callable = () -> scorer.scoring(param, userFeature, scoreRankerItems); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // execute score use thread to protected score worst time 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<RankItem> scoredItems = new ArrayList<RankItem>(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -104,7 +92,7 @@ public class ScorerPipeline { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 item.getRankerScore().put(scorerName, item.getScore()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-           // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             long spentTime = System.currentTimeMillis() - startTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             LOGGER.debug("after scorer [{}], spentTime [{}], before size [{}], remaining size [{}]", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     new Object[]{scorerName, spentTime, beforeSize, scoreRankerItems.size()}); 
			 |