It holds no state and thus can be readily reused.
Change-Id: I7aba9266a476ddb79f456ce66dd46697c2e5ddb5
Signed-off-by: Robert Varga <rovarga@cisco.com>
*
* @author Thomas Pantelis
*/
-public class Shutdown implements Serializable {
+public final class Shutdown implements Serializable {
private static final long serialVersionUID = 1L;
+ public static final Shutdown INSTANCE = new Shutdown();
+
+ private Shutdown() {
+ // Hidden on purpose
+ }
+
+ @SuppressWarnings({ "static-method", "unused" })
+ private Shutdown readResolve() {
+ return INSTANCE;
+ }
}
testLog.info("sendShutDown for {} starting", actor.path());
FiniteDuration duration = FiniteDuration.create(5, TimeUnit.SECONDS);
- Future<Boolean> stopFuture = Patterns.gracefulStop(actor, duration, new Shutdown());
+ Future<Boolean> stopFuture = Patterns.gracefulStop(actor, duration, Shutdown.INSTANCE);
Boolean stopped = Await.result(stopFuture, duration);
assertEquals("Stopped", Boolean.TRUE, stopped);
clearMessages(follower3NotifierActor);
FiniteDuration duration = FiniteDuration.create(5, TimeUnit.SECONDS);
- Future<Boolean> stopFuture = Patterns.gracefulStop(leaderActor, duration, new Shutdown());
+ Future<Boolean> stopFuture = Patterns.gracefulStop(leaderActor, duration, Shutdown.INSTANCE);
assertNullLeaderIdChange(leaderNotifierActor);
assertNullLeaderIdChange(follower1NotifierActor);
}
private void onShutDown() {
- Shutdown shutdown = new Shutdown();
List<Future<Boolean>> stopFutures = new ArrayList<>(localShards.size());
for (ShardInformation info : localShards.values()) {
if (info.getActor() != null) {
LOG.debug("{}: Issuing gracefulStop to shard {}", persistenceId(), info.getShardId());
FiniteDuration duration = info.getDatastoreContext().getShardRaftConfig().getElectionTimeOutInterval().$times(2);
- stopFutures.add(Patterns.gracefulStop(info.getActor(), duration, shutdown));
+ stopFutures.add(Patterns.gracefulStop(info.getActor(), duration, Shutdown.INSTANCE));
}
}
return;
} else if(shardInformation.getActor() != null) {
LOG.debug("{} : Sending Shutdown to Shard actor {}", persistenceId(), shardInformation.getActor());
- shardInformation.getActor().tell(new Shutdown(), self());
+ shardInformation.getActor().tell(Shutdown.INSTANCE, self());
}
LOG.debug("{} : Local Shard replica for shard {} has been removed", persistenceId(), shardId.getShardName());
persistShardList();
public void shutdown() {
FiniteDuration duration = datastoreContext.getShardRaftConfig().getElectionTimeOutInterval().$times(3);
try {
- Await.ready(Patterns.gracefulStop(shardManager, duration, new Shutdown()), duration);
+ Await.ready(Patterns.gracefulStop(shardManager, duration, Shutdown.INSTANCE), duration);
} catch(Exception e) {
LOG.warn("ShardManager for {} data store did not shutdown gracefully", getDataStoreName(), e);
}
Future<ActorRef> future = leaderDistributedDataStore.getActorContext().findLocalShardAsync("cars");
ActorRef leaderActor = Await.result(future, duration);
- Future<Boolean> stopFuture = Patterns.gracefulStop(leaderActor, duration, new Shutdown());
+ Future<Boolean> stopFuture = Patterns.gracefulStop(leaderActor, duration, Shutdown.INSTANCE);
// Commit the 2 transactions. They should finish and succeed.
shardManager.tell(new ActorInitialized(), shard2);
FiniteDuration duration = FiniteDuration.create(5, TimeUnit.SECONDS);
- Future<Boolean> stopFuture = Patterns.gracefulStop(shardManager, duration, new Shutdown());
+ Future<Boolean> stopFuture = Patterns.gracefulStop(shardManager, duration, Shutdown.INSTANCE);
MessageCollectorActor.expectFirstMatching(shard1, Shutdown.class);
MessageCollectorActor.expectFirstMatching(shard2, Shutdown.class);