Slice front-end request messages
[controller.git] / opendaylight / md-sal / cds-access-client / src / main / java / org / opendaylight / controller / cluster / access / client / ClientActorContext.java
index 3ed207ef6f393c5b84b8c4641b39099758d7df57..7e392af37570b4c735339276fb8586ff78d878c9 100644 (file)
@@ -14,10 +14,13 @@ 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;
@@ -40,6 +43,7 @@ public class ClientActorContext extends AbstractClientActorContext implements Id
     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 String persistenceId, final ActorSystem system,
@@ -50,6 +54,11 @@ public class ClientActorContext extends AbstractClientActorContext implements Id
         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
@@ -68,6 +77,11 @@ public class ClientActorContext extends AbstractClientActorContext implements Id
         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