INT-4220: Leaders: warn event publishing errors
JIRA: https://jira.spring.io/browse/INT-4220 Currently when an error is thrown from the event publishing the role granting is broken and we just go to the role revoking. * Since it's just an event publishing it shouldn't effect the original leader election. * `try...catch` event publishing in the `LeaderInitiator` and `logger.warn` an `Exception` * Make `leader/Context` as `@FunctionalInterface` for simple Lambda use-case like `NULL_CONTEXT` - `() -> false` * Remove all the internal `NullContext` implementations in favor of above mention Lambda * In the `LockRegistryLeaderInitiator` use `CustomizableThreadFactory` instead of custom `ThreadFactory` for prefixing * Add `zookeeper/leader/LeaderInitiator#getContext()` for external usage and consistency with other similar components * Fix `CuratorContext.toString()` typo
This commit is contained in:
committed by
Gary Russell
parent
a4bfd2cc42
commit
9616cc72a1
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2015-2016 the original author or authors.
|
||||
* Copyright 2015-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -35,7 +35,10 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.integration.leader.Context;
|
||||
import org.springframework.integration.leader.DefaultCandidate;
|
||||
import org.springframework.integration.leader.event.AbstractLeaderEvent;
|
||||
import org.springframework.integration.leader.event.DefaultLeaderEventPublisher;
|
||||
import org.springframework.integration.leader.event.OnGrantedEvent;
|
||||
import org.springframework.integration.leader.event.OnRevokedEvent;
|
||||
import org.springframework.integration.zookeeper.ZookeeperTestSupport;
|
||||
@@ -84,6 +87,34 @@ public class LeaderInitiatorFactoryBeanTests extends ZookeeperTestSupport {
|
||||
assertThat(this.config.events.get(1), instanceOf(OnRevokedEvent.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExceptionFromEvent() throws Exception {
|
||||
CountDownLatch onGranted = new CountDownLatch(1);
|
||||
|
||||
LeaderInitiator initiator = new LeaderInitiator(client, new DefaultCandidate());
|
||||
|
||||
initiator.setLeaderEventPublisher(new DefaultLeaderEventPublisher() {
|
||||
|
||||
@Override
|
||||
public void publishOnGranted(Object source, Context context, String role) {
|
||||
try {
|
||||
throw new RuntimeException("intentional");
|
||||
}
|
||||
finally {
|
||||
onGranted.countDown();
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
initiator.start();
|
||||
|
||||
assertTrue(onGranted.await(10, TimeUnit.SECONDS));
|
||||
assertTrue(initiator.getContext().isLeader());
|
||||
|
||||
initiator.stop();
|
||||
}
|
||||
|
||||
@Configuration
|
||||
public static class Config {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user