瀏覽代碼

Merge branch 'master' into feature/zhangbo_rank

zhangbo 1 年之前
父節點
當前提交
655a625fd1

+ 1 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/AbstractFilterService.java

@@ -273,6 +273,7 @@ public abstract class AbstractFilterService {
         strategies.add(ServiceBeanFactory.getBean(PreViewedStrategy.class));
         strategies.add(ServiceBeanFactory.getBean(ViewedStrategy.class));
         strategies.add(ServiceBeanFactory.getBean(RecommendStatusStrategy.class));
+        strategies.add(ServiceBeanFactory.getBean(SupplyExpStrategy.class));
         switch (param.getAppType()) {
             case 0:
             case 4:

+ 65 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/strategy/SupplyExpStrategy.java

@@ -0,0 +1,65 @@
+package com.tzld.piaoquan.recommend.server.service.filter.strategy;
+
+import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
+import com.google.common.collect.Lists;
+import com.tzld.piaoquan.recommend.server.service.filter.FilterParam;
+import com.tzld.piaoquan.recommend.server.service.filter.FilterStrategy;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.lang.math.NumberUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @author dyp
+ */
+@Component
+public class SupplyExpStrategy implements FilterStrategy {
+    @ApolloJsonValue("${supply.exp.list:[6]}")
+    private Set<Integer> supplyExps;
+
+    @Value("${supply.exp.id:666}")
+    private int supplyExpId;
+
+    @ApolloJsonValue("${supply.exp.video.list:[]}")
+    private Set<Long> supplyExpVideos;
+    @ApolloJsonValue("${not.supply.exp.video.list:[]}")
+    private Set<Long> notSupplyExpVideos;
+
+    @Override
+    public List<Long> filter(FilterParam param) {
+
+        if (param == null) {
+            return Collections.emptyList();
+        }
+        if (StringUtils.isBlank(param.getMid())
+                || CollectionUtils.isEmpty(param.getVideoIds())) {
+            return param.getVideoIds();
+        }
+
+        if (!supplyExps.contains(param.getAppType())) {
+            return Lists.newArrayList(param.getVideoIds());
+        }
+        if (MapUtils.isEmpty(param.getExpIdMap())) {
+            return Lists.newArrayList(param.getVideoIds());
+        }
+        // 供给实验
+        if (supplyExpId == NumberUtils.toInt(param.getExpIdMap().get("supply"), -1)) {
+            // 对照组视频只在对照组出
+            return param.getVideoIds().stream()
+                    .filter(l -> !notSupplyExpVideos.contains(l))
+                    .collect(Collectors.toList());
+        } else {
+            // 实验组视频只在实验组出
+            return param.getVideoIds().stream()
+                    .filter(l -> !supplyExpVideos.contains(l))
+                    .collect(Collectors.toList());
+        }
+    }
+}

+ 23 - 4
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/model/ModelManager.java

@@ -99,7 +99,7 @@ public class ModelManager {
             ModelLoadTask task = new ModelLoadTask(path, modelClass);
             task.refCount++;
             loadTasks.put(path, task);
-            loadModel(task, false, true);
+            loadModelWithRetry(task, false, true);
         }
     }
 
@@ -162,7 +162,23 @@ public class ModelManager {
         for (String modelPath : loadTasks.keySet()) {
             log.debug("load task model path [{}]", modelPath);
             ModelLoadTask task = loadTasks.get(modelPath);
-            loadModel(task, isForceLoads, false);
+            loadModelWithRetry(task, isForceLoads, false);
+        }
+    }
+
+    private void loadModelWithRetry(final ModelLoadTask loadTask, final boolean isForceLoads,
+                                    final boolean isRegister) {
+        try {
+            int retry = 3;
+            int delay = 10000;
+            while (retry-- > 0) {
+                if (loadModel(loadTask, isForceLoads, isRegister)) {
+                    break;
+                }
+                Thread.sleep(delay);
+            }
+        } catch (InterruptedException e) {
+            log.error("loadModelWithRetry fail", e);
         }
     }
 
@@ -174,12 +190,13 @@ public class ModelManager {
      *
      * @param loadTask
      */
-    private void loadModel(final ModelLoadTask loadTask, final boolean isForceLoads, final boolean isRegister) {
+    private boolean loadModel(final ModelLoadTask loadTask, final boolean isForceLoads, final boolean isRegister) {
         if (loadTask.isLoading) {
-            return;
+            return true;
         }
         loadTask.isLoading = true;
         OSSObject ossObj = null;
+
         try {
             ossObj = client.getObject(bucketName, loadTask.path);
             long timeStamp = ossObj.getObjectMetadata().getLastModified().getTime();
@@ -196,6 +213,7 @@ public class ModelManager {
             ossObj.close();
         } catch (Exception e) {
             log.error("update model fail", e);
+            return false;
         } finally {
             loadTask.isLoading = false;
             if (ossObj != null) {
@@ -206,6 +224,7 @@ public class ModelManager {
                 }
             }
         }
+        return true;
     }
 
     public class ModelRegisterException extends Exception {