package org.opendaylight.controller.cluster.access.client;
import akka.actor.ActorRef;
+import akka.actor.ActorSystem;
import akka.actor.Cancellable;
import akka.actor.Scheduler;
import com.google.common.annotations.Beta;
import com.google.common.base.Preconditions;
import com.google.common.base.Ticker;
+import java.util.concurrent.TimeUnit;
import javax.annotation.Nonnull;
import javax.annotation.concurrent.ThreadSafe;
import org.opendaylight.controller.cluster.access.concepts.ClientIdentifier;
+import org.opendaylight.controller.cluster.common.actor.Dispatchers;
+import org.opendaylight.controller.cluster.io.FileBackedOutputStreamFactory;
+import org.opendaylight.controller.cluster.messaging.MessageSlicer;
import org.opendaylight.yangtools.concepts.Identifiable;
import scala.concurrent.ExecutionContext;
import scala.concurrent.duration.FiniteDuration;
private final ExecutionContext executionContext;
private final ClientIdentifier identifier;
private final Scheduler scheduler;
+ private final Dispatchers dispatchers;
private final ClientActorConfig config;
+ private final MessageSlicer messageSlicer;
// Hidden to avoid subclassing
- ClientActorContext(final ActorRef self, final Scheduler scheduler, final ExecutionContext executionContext,
- final String persistenceId, final ClientIdentifier identifier, final ClientActorConfig config) {
+ ClientActorContext(final ActorRef self, final String persistenceId, final ActorSystem system,
+ final ClientIdentifier identifier, final ClientActorConfig config) {
super(self, persistenceId);
this.identifier = Preconditions.checkNotNull(identifier);
- this.scheduler = Preconditions.checkNotNull(scheduler);
- this.executionContext = Preconditions.checkNotNull(executionContext);
+ this.scheduler = Preconditions.checkNotNull(system).scheduler();
+ this.executionContext = system.dispatcher();
+ this.dispatchers = new Dispatchers(system.dispatchers());
this.config = Preconditions.checkNotNull(config);
+
+ messageSlicer = MessageSlicer.builder().messageSliceSize(config.getMaximumMessageSliceSize())
+ .logContext(persistenceId).expireStateAfterInactivity(config.getRequestTimeout(), TimeUnit.NANOSECONDS)
+ .fileBackedStreamFactory(new FileBackedOutputStreamFactory(config.getFileBackedStreamingThreshold(),
+ config.getTempFileDirectory())).build();
}
@Override
return config;
}
+ @Nonnull
+ public Dispatchers dispatchers() {
+ return dispatchers;
+ }
+
+ @Nonnull
+ public MessageSlicer messageSlicer() {
+ return messageSlicer;
+ }
+
/**
* Return the time ticker for this {@link ClientActorContext}. This should be used for in all time-tracking
* done within a client actor. Subclasses of {@link ClientActorBehavior} are encouraged to use