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();