You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2010/09/17 09:39:13 UTC

svn commit: r998009 - in /mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender: TreeClusteringRecommender.java TreeClusteringRecommender2.java

Author: srowen
Date: Fri Sep 17 07:39:12 2010
New Revision: 998009

URL: http://svn.apache.org/viewvc?rev=998009&view=rev
Log:
Don't rebuild clusters when already built in certain multi-thread situations

Modified:
    mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java
    mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java?rev=998009&r1=998008&r2=998009&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java Fri Sep 17 07:39:12 2010
@@ -205,7 +205,7 @@ public final class TreeClusteringRecomme
     if (howMany < 1) {
       throw new IllegalArgumentException("howMany must be at least 1");
     }
-    checkClustersBuilt();
+    buildClusters();
     
     log.debug("Recommending items for user ID '{}'", userID);
     
@@ -240,7 +240,7 @@ public final class TreeClusteringRecomme
     if (actualPref != null) {
       return actualPref;
     }
-    checkClustersBuilt();
+    buildClusters();
     List<RecommendedItem> topRecsForUser = topRecsByUserID.get(userID);
     if (topRecsForUser != null) {
       for (RecommendedItem item : topRecsForUser) {
@@ -255,26 +255,26 @@ public final class TreeClusteringRecomme
   
   @Override
   public FastIDSet getCluster(long userID) throws TasteException {
-    checkClustersBuilt();
+    buildClusters();
     FastIDSet cluster = clustersByUserID.get(userID);
     return cluster == null ? new FastIDSet() : cluster;
   }
   
   @Override
   public FastIDSet[] getClusters() throws TasteException {
-    checkClustersBuilt();
+    buildClusters();
     return allClusters;
   }
-  
-  private void checkClustersBuilt() throws TasteException {
-    if (!clustersBuilt) {
-      buildClusters();
-    }
-  }
-  
+
   private void buildClusters() throws TasteException {
+    if (clustersBuilt) {
+      return;
+    }
     buildClustersLock.lock();
     try {
+      if (clustersBuilt) {
+        return;
+      }
       DataModel model = getDataModel();
       int numUsers = model.getNumUsers();
       if (numUsers > 0) {

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java?rev=998009&r1=998008&r2=998009&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java Fri Sep 17 07:39:12 2010
@@ -161,7 +161,7 @@ public final class TreeClusteringRecomme
     if (howMany < 1) {
       throw new IllegalArgumentException("howMany must be at least 1");
     }
-    checkClustersBuilt();
+    buildClusters();
     
     log.debug("Recommending items for user ID '{}'", userID);
     
@@ -195,7 +195,7 @@ public final class TreeClusteringRecomme
     if (actualPref != null) {
       return actualPref;
     }
-    checkClustersBuilt();
+    buildClusters();
     List<RecommendedItem> topRecsForUser = topRecsByUserID.get(userID);
     if (topRecsForUser != null) {
       for (RecommendedItem item : topRecsForUser) {
@@ -210,23 +210,17 @@ public final class TreeClusteringRecomme
   
   @Override
   public FastIDSet getCluster(long userID) throws TasteException {
-    checkClustersBuilt();
+    buildClusters();
     FastIDSet cluster = clustersByUserID.get(userID);
     return cluster == null ? new FastIDSet() : cluster;
   }
   
   @Override
   public FastIDSet[] getClusters() throws TasteException {
-    checkClustersBuilt();
+    buildClusters();
     return allClusters;
   }
   
-  private void checkClustersBuilt() throws TasteException {
-    if (!clustersBuilt) {
-      buildClusters();
-    }
-  }
-  
   private static final class ClusterClusterPair implements Comparable<ClusterClusterPair> {
     
     private final FastIDSet cluster1;
@@ -282,8 +276,14 @@ public final class TreeClusteringRecomme
   }
   
   private void buildClusters() throws TasteException {
+    if (clustersBuilt) {
+      return;
+    }
     buildClustersLock.lock();
     try {
+      if (clustersBuilt) {
+        return;
+      }
       DataModel model = getDataModel();
       int numUsers = model.getNumUsers();