+ private void onRegisterForShardAvailabilityChanges(final RegisterForShardAvailabilityChanges message) {
+ LOG.debug("{}: onRegisterForShardAvailabilityChanges: {}", persistenceId(), message);
+
+ final Consumer<String> callback = message.getCallback();
+ shardAvailabilityCallbacks.add(callback);
+
+ getSender().tell(new Status.Success((Registration)
+ () -> executeInSelf(() -> shardAvailabilityCallbacks.remove(callback))), self());
+ }
+
+ private void onGetShardRole(final GetShardRole message) {
+ LOG.debug("{}: onGetShardRole for shard: {}", persistenceId(), message.getName());
+
+ final String name = message.getName();
+
+ final ShardInformation shardInformation = localShards.get(name);
+
+ if (shardInformation == null) {
+ LOG.info("{}: no shard information for {} found", persistenceId(), name);
+ getSender().tell(new Status.Failure(
+ new IllegalArgumentException("Shard with name " + name + " not present.")), ActorRef.noSender());
+ return;
+ }
+
+ getSender().tell(new GetShardRoleReply(shardInformation.getRole()), ActorRef.noSender());
+ }
+