Repository: incubator-blur
Updated Branches:
  refs/heads/master 4744b91ef -> aeb3623da


Fixing threading issue where the system became unresponive due to an issue with 
using a hashmap in the table descriptor object.


Project: http://git-wip-us.apache.org/repos/asf/incubator-blur/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-blur/commit/aeb3623d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-blur/tree/aeb3623d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-blur/diff/aeb3623d

Branch: refs/heads/master
Commit: aeb3623daf08d54731c00a9dbfdb116c3973e59d
Parents: 4744b91
Author: Aaron McCurry <[email protected]>
Authored: Tue Mar 3 09:06:20 2015 -0500
Committer: Aaron McCurry <[email protected]>
Committed: Tue Mar 3 09:06:20 2015 -0500

----------------------------------------------------------------------
 .../org/apache/blur/server/TableContext.java    | 26 ++++++++++++++++----
 1 file changed, 21 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/aeb3623d/blur-core/src/main/java/org/apache/blur/server/TableContext.java
----------------------------------------------------------------------
diff --git a/blur-core/src/main/java/org/apache/blur/server/TableContext.java 
b/blur-core/src/main/java/org/apache/blur/server/TableContext.java
index 7f98a77..6fcf573 100644
--- a/blur-core/src/main/java/org/apache/blur/server/TableContext.java
+++ b/blur-core/src/main/java/org/apache/blur/server/TableContext.java
@@ -142,12 +142,28 @@ public class TableContext implements Cloneable {
     }
     TableContext tableContext = _cache.get(name);
     if (tableContext != null) {
-      TableContext clone = tableContext.clone();
-      TableDescriptor newTd = new TableDescriptor(clone._descriptor);
-      clone._descriptor = newTd;
-      clone._descriptor.setEnabled(tableDescriptor.isEnabled());
-      return clone;
+      return clone(tableDescriptor, tableContext);
     }
+    synchronized (_cache) {
+      tableContext = _cache.get(name);
+      if (tableContext != null) {
+        return clone(tableDescriptor, tableContext);
+      }
+      return createInternal(tableDescriptor, remote, client, name, tableUri);
+    }
+  }
+
+  private static TableContext clone(TableDescriptor tableDescriptor, 
TableContext tableContext) {
+    TableContext clone = tableContext.clone();
+    TableDescriptor newTd = new TableDescriptor(clone._descriptor);
+    clone._descriptor = newTd;
+    clone._descriptor.setEnabled(tableDescriptor.isEnabled());
+    return clone;
+  }
+
+  private static TableContext createInternal(TableDescriptor tableDescriptor, 
boolean remote, Iface client,
+      String name, String tableUri) {
+    TableContext tableContext;
     LOG.info("Creating table context for table [{0}]", name);
     Configuration configuration = getSystemConfiguration();
     BlurConfiguration blurConfiguration = getSystemBlurConfiguration();

Reply via email to