You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@curator.apache.org by ra...@apache.org on 2018/06/24 15:51:39 UTC

[2/4] curator git commit: Merge branch 'CURATOR-470' of github.com:JerryChin/curator into CURATOR-470

Merge branch 'CURATOR-470' of github.com:JerryChin/curator into CURATOR-470


Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/6b1522c5
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/6b1522c5
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/6b1522c5

Branch: refs/heads/CURATOR-470
Commit: 6b1522c5f2892451be45df89e6537799f146ab51
Parents: ba8ade0 88e8d9a
Author: randgalt <ra...@apache.org>
Authored: Sun Jun 24 09:26:35 2018 -0500
Committer: randgalt <ra...@apache.org>
Committed: Sun Jun 24 09:26:35 2018 -0500

----------------------------------------------------------------------
 .../details/ServiceCacheEventListener.java      |  50 ++++++++
 .../x/discovery/details/ServiceCacheImpl.java   | 115 +++++++++++++------
 .../curator/x/discovery/TestServiceCache.java   |  80 +++++++++++++
 3 files changed, 213 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/6b1522c5/curator-x-discovery/src/main/java/org/apache/curator/x/discovery/details/ServiceCacheImpl.java
----------------------------------------------------------------------
diff --cc curator-x-discovery/src/main/java/org/apache/curator/x/discovery/details/ServiceCacheImpl.java
index d1a31ad,df6696a..ffaf1a4
--- a/curator-x-discovery/src/main/java/org/apache/curator/x/discovery/details/ServiceCacheImpl.java
+++ b/curator-x-discovery/src/main/java/org/apache/curator/x/discovery/details/ServiceCacheImpl.java
@@@ -97,23 -91,9 +97,23 @@@ public class ServiceCacheImpl<T> implem
          Preconditions.checkState(state.compareAndSet(State.LATENT, State.STARTED), "Cannot be started more than once");
  
          cache.start(true);
 +        if ( debugStartLatch != null )
 +        {
 +            debugStartLatch.countDown();
 +            debugStartLatch = null;
 +        }
 +        if ( debugStartWaitLatch != null )
 +        {
 +            debugStartWaitLatch.await();
 +            debugStartWaitLatch = null;
 +        }
 +
          for ( ChildData childData : cache.getCurrentData() )
          {
 -            addInstanceOnlyIfAbsent(childData);
 +            if ( childData.getData() != null )  // else already processed by the cache listener
 +            {
-                 addInstance(childData, true);
++                addInstanceOnlyIfAbsent(childData);
 +            }
          }
          discovery.cacheOpened(this);
      }
@@@ -166,21 -146,69 +166,75 @@@
      @Override
      public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception
      {
-         boolean         notifyListeners = false;
-         switch ( event.getType() )
+ 	    final Tuple<T> tuple;
+ 	    switch ( event.getType() )
          {
              case CHILD_ADDED:
+ 	            tuple = addOrUpdateInstance(event.getData());
+                 listenerContainer.forEach(
+                     new Function<ServiceCacheListener, Void>()
+                     {
+                         @Override
+                         public Void apply(ServiceCacheListener listener)
+                         {
+                             listener.cacheChanged();
+ 
 -                            if(listener instanceof  ServiceCacheEventListener) {
++                            if ( listener instanceof ServiceCacheEventListener )
++                            {
++                                //noinspection unchecked
+                                 ((ServiceCacheEventListener) listener).cacheAdded(tuple.newInstance);
+                             }
+ 
+                             return null;
+                         }
+                     }
+                 );
+                 break;
              case CHILD_UPDATED:
              {
-                 addInstance(event.getData(), false);
-                 notifyListeners = true;
+ 	            tuple = addOrUpdateInstance(event.getData());
+ 	            listenerContainer.forEach(
+ 			            new Function<ServiceCacheListener, Void>()
+ 			            {
+ 				            @Override
+ 				            public Void apply(ServiceCacheListener listener)
+ 				            {
+ 					            listener.cacheChanged();
+ 
 -					            if(listener instanceof  ServiceCacheEventListener) {
 -						            ((ServiceCacheEventListener) listener).cacheUpdated(tuple.oldInstance, tuple.newInstance);
++					            if( listener instanceof ServiceCacheEventListener )
++					            {
++                                    //noinspection unchecked
++                                    ((ServiceCacheEventListener) listener).cacheUpdated(tuple.oldInstance, tuple.newInstance);
+ 					            }
+ 
+ 					            return null;
+ 				            }
+ 			            }
+ 	            );
                  break;
              }
  
              case CHILD_REMOVED:
              {
-                 instances.remove(instanceIdFromData(event.getData()));
-                 notifyListeners = true;
+                 final ServiceInstance<T> serviceInstance = instances.remove(instanceIdFromData(event.getData()));
+ 	            listenerContainer.forEach(
+ 			            new Function<ServiceCacheListener, Void>()
+ 			            {
+ 				            @Override
+ 				            public Void apply(ServiceCacheListener listener)
+ 				            {
+ 					            listener.cacheChanged();
+ 
 -					            if(listener instanceof ServiceCacheEventListener) {
 -						            ((ServiceCacheEventListener) listener).cacheDeleted(serviceInstance);
++					            if ( listener instanceof ServiceCacheEventListener )
++					            {
++                                    //noinspection unchecked
++                                    ((ServiceCacheEventListener) listener).cacheDeleted(serviceInstance);
+ 					            }
+ 
+ 					            return null;
+ 				            }
+ 			            }
+ 	            );
                  break;
              }
          }