- for(String shardName : localShards){
- switchShardState(shardName, newState, term);
+ @SuppressWarnings("checkstyle:IllegalCatch")
+ private void requestSwitchShardState(final ShardIdentifier shardId, final String newState, final long term) {
+ // Validates strings argument
+ final RaftState state = RaftState.valueOf(newState);
+
+ // Leader and Follower are the only states to which we can switch externally
+ switch (state) {
+ case Follower:
+ case Leader:
+ try {
+ Await.result(Patterns.ask(shardManager, new SwitchShardBehavior(shardId, state, term),
+ ASK_TIMEOUT_MILLIS), Duration.Inf());
+ } catch (RuntimeException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ break;
+ case Candidate:
+ case IsolatedLeader:
+ default:
+ throw new IllegalArgumentException("Illegal target state " + state);