You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fluo.apache.org by kt...@apache.org on 2017/06/22 20:00:57 UTC

[incubator-fluo] branch master updated: fixes - #833 (#863) made internal column data immutable

This is an automated email from the ASF dual-hosted git repository.

kturner pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-fluo.git


The following commit(s) were added to refs/heads/master by this push:
     new ca22d6c  fixes - #833 (#863) made internal column data immutable
ca22d6c is described below

commit ca22d6c8e30be9f735835a81c5b79966517f86e7
Author: Christopher McTague <cj...@apache.org>
AuthorDate: Thu Jun 22 16:00:56 2017 -0400

    fixes - #833 (#863) made internal column data immutable
---
 .../fluo/core/observer/v1/ObserverStoreV1.java       | 18 +++++++++---------
 .../fluo/core/observer/v2/ObserverStoreV2.java       | 20 +++++++++++++-------
 2 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/fluo/core/observer/v1/ObserverStoreV1.java b/modules/core/src/main/java/org/apache/fluo/core/observer/v1/ObserverStoreV1.java
index 754ca28..6f814b3 100644
--- a/modules/core/src/main/java/org/apache/fluo/core/observer/v1/ObserverStoreV1.java
+++ b/modules/core/src/main/java/org/apache/fluo/core/observer/v1/ObserverStoreV1.java
@@ -21,12 +21,12 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
+import com.google.common.collect.ImmutableMap;
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.fluo.accumulo.util.ZookeeperPath;
 import org.apache.fluo.api.config.FluoConfiguration;
@@ -38,9 +38,9 @@ import org.apache.fluo.api.observer.Observer;
 import org.apache.fluo.api.observer.Observer.NotificationType;
 import org.apache.fluo.api.observer.Observer.ObservedColumn;
 import org.apache.fluo.core.impl.Environment;
-import org.apache.fluo.core.observer.RegisteredObservers;
-import org.apache.fluo.core.observer.Observers;
 import org.apache.fluo.core.observer.ObserverStore;
+import org.apache.fluo.core.observer.Observers;
+import org.apache.fluo.core.observer.RegisteredObservers;
 import org.apache.fluo.core.util.ColumnUtil;
 import org.apache.fluo.core.util.CuratorUtil;
 import org.apache.hadoop.io.WritableUtils;
@@ -161,7 +161,8 @@ public class ObserverStoreV1 implements ObserverStore {
   private static Map<Column, ObserverSpecification> readObservers(DataInputStream dis)
       throws IOException {
 
-    HashMap<Column, ObserverSpecification> omap = new HashMap<>();
+    ImmutableMap.Builder<Column, ObserverSpecification> omapBuilder =
+        new ImmutableMap.Builder<Column, ObserverSpecification>();
 
     int num = WritableUtils.readVInt(dis);
     for (int i = 0; i < num; i++) {
@@ -176,10 +177,9 @@ public class ObserverStoreV1 implements ObserverStore {
       }
 
       ObserverSpecification ospec = new ObserverSpecification(clazz, params);
-      omap.put(col, ospec);
+      omapBuilder.put(col, ospec);
     }
-
-    return omap;
+    return omapBuilder.build();
   }
 
   @Override
@@ -197,8 +197,8 @@ public class ObserverStoreV1 implements ObserverStore {
     }
     DataInputStream dis = new DataInputStream(bais);
 
-    observers = Collections.unmodifiableMap(readObservers(dis));
-    weakObservers = Collections.unmodifiableMap(readObservers(dis));
+    observers = readObservers(dis);
+    weakObservers = readObservers(dis);
 
 
     return new RegisteredObservers() {
diff --git a/modules/core/src/main/java/org/apache/fluo/core/observer/v2/ObserverStoreV2.java b/modules/core/src/main/java/org/apache/fluo/core/observer/v2/ObserverStoreV2.java
index 2e544cd..768271c 100644
--- a/modules/core/src/main/java/org/apache/fluo/core/observer/v2/ObserverStoreV2.java
+++ b/modules/core/src/main/java/org/apache/fluo/core/observer/v2/ObserverStoreV2.java
@@ -16,7 +16,6 @@
 package org.apache.fluo.core.observer.v2;
 
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Objects;
@@ -24,6 +23,7 @@ import java.util.Set;
 import java.util.function.BiConsumer;
 
 import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
 import com.google.gson.Gson;
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.fluo.api.config.FluoConfiguration;
@@ -32,9 +32,9 @@ import org.apache.fluo.api.exceptions.FluoException;
 import org.apache.fluo.api.observer.Observer.NotificationType;
 import org.apache.fluo.api.observer.ObserverProvider;
 import org.apache.fluo.core.impl.Environment;
-import org.apache.fluo.core.observer.RegisteredObservers;
-import org.apache.fluo.core.observer.Observers;
 import org.apache.fluo.core.observer.ObserverStore;
+import org.apache.fluo.core.observer.Observers;
+import org.apache.fluo.core.observer.RegisteredObservers;
 import org.apache.fluo.core.util.CuratorUtil;
 import org.apache.zookeeper.KeeperException.NoNodeException;
 
@@ -46,6 +46,9 @@ import static org.apache.fluo.accumulo.util.ZookeeperPath.CONFIG_FLUO_OBSERVERS2
  */
 public class ObserverStoreV2 implements ObserverStore {
 
+  ImmutableSet<Column> weakColumns = ImmutableSet.of();
+  ImmutableSet<Column> strongColumns = ImmutableSet.of();
+
   @Override
   public boolean handles(FluoConfiguration config) {
     return !config.getObserverProvider().isEmpty();
@@ -102,22 +105,25 @@ public class ObserverStoreV2 implements ObserverStore {
     String json = new String(data, UTF_8);
     JsonObservers jco = new Gson().fromJson(json, JsonObservers.class);
 
-    Set<Column> weakColumns = new HashSet<>();
-    Set<Column> strongColumns = new HashSet<>();
+    ImmutableSet.Builder<Column> weakColumnsBuilder = new ImmutableSet.Builder<Column>();
+    ImmutableSet.Builder<Column> strongColumnsBuilder = new ImmutableSet.Builder<Column>();
 
     for (Entry<Column, NotificationType> entry : jco.getObservedColumns().entrySet()) {
       switch (entry.getValue()) {
         case STRONG:
-          strongColumns.add(entry.getKey());
+          strongColumnsBuilder.add(entry.getKey());
           break;
         case WEAK:
-          weakColumns.add(entry.getKey());
+          weakColumnsBuilder.add(entry.getKey());
           break;
         default:
           throw new IllegalStateException("Unknown notification type " + entry.getValue());
       }
     }
 
+    strongColumns = strongColumnsBuilder.build();
+    weakColumns = weakColumnsBuilder.build();
+
     return new RegisteredObservers() {
 
       @Override

-- 
To stop receiving notification emails like this one, please contact
['"commits@fluo.apache.org" <co...@fluo.apache.org>'].