From 362480356ec6e43c67d6baad78109670597a7f58 Mon Sep 17 00:00:00 2001 From: Andy Schlaikjer Date: Fri, 13 Apr 2012 12:44:31 -0700 Subject: [PATCH 1/2] Adds support for construction of a TopicModel instance with zero numThreads, in case client doesn't want internal thread pool initialized Future work should improve client management of topic model thread pool e.g. to be able to shut it down. --- .../org/apache/mahout/clustering/lda/cvb/TopicModel.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/src/main/java/org/apache/mahout/clustering/lda/cvb/TopicModel.java b/core/src/main/java/org/apache/mahout/clustering/lda/cvb/TopicModel.java index 828a470d1..83162410e 100644 --- a/core/src/main/java/org/apache/mahout/clustering/lda/cvb/TopicModel.java +++ b/core/src/main/java/org/apache/mahout/clustering/lda/cvb/TopicModel.java @@ -153,6 +153,12 @@ private static Vector viewRowSums(Matrix m) { } private void initializeThreadPool() { + // avoid initializing thread pool if client has specified less than one thread + if (numThreads < 1) { + log.info("Skipping thread pool initialization"); + return; + } + log.info("Initializing thread pool with {} threads", numThreads); ThreadPoolExecutor threadPool = new ThreadPoolExecutor(numThreads, numThreads, 0, TimeUnit.SECONDS, new ArrayBlockingQueue(numThreads * 10)); threadPool.allowCoreThreadTimeOut(false); From 4f74872124a76d89616394056175f422ef5198cc Mon Sep 17 00:00:00 2001 From: Andy Schlaikjer Date: Fri, 13 Apr 2012 16:23:10 -0700 Subject: [PATCH 2/2] Adds Precondition to TopicModel.update(Matrix) This will catch poorly behaved clients who request less than one thread on TopicModel instantiation, but then attempt to use the multithreaded update method. --- .../java/org/apache/mahout/clustering/lda/cvb/TopicModel.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/src/main/java/org/apache/mahout/clustering/lda/cvb/TopicModel.java b/core/src/main/java/org/apache/mahout/clustering/lda/cvb/TopicModel.java index 83162410e..6a55676a3 100644 --- a/core/src/main/java/org/apache/mahout/clustering/lda/cvb/TopicModel.java +++ b/core/src/main/java/org/apache/mahout/clustering/lda/cvb/TopicModel.java @@ -16,6 +16,7 @@ */ package org.apache.mahout.clustering.lda.cvb; +import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import org.apache.hadoop.conf.Configurable; import org.apache.hadoop.conf.Configuration; @@ -329,6 +330,8 @@ public Vector infer(Vector original, Vector docTopicPrior, double minRelPerplexi } public void update(Matrix docTopicCounts) { + Preconditions.checkState(updaters.length > 0, + "Unable to update model; No threads requested during TopicModel instantiation"); for(int x = 0; x < numTopics; x++) { updaters[x % updaters.length].update(x, docTopicCounts.viewRow(x)); }