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;
}
}