Class MicroserviceInstance

java.lang.Object
desmoj.core.simulator.NamedObject
desmoj.core.simulator.ModelComponent
desmoj.core.simulator.Schedulable
desmoj.core.simulator.Entity
cambio.simulator.entities.NamedEntity
cambio.simulator.entities.networking.RequestSender
cambio.simulator.entities.microservice.MicroserviceInstance
All Implemented Interfaces:
IRequestUpdateListener, Comparable<IRequestUpdateListener>

public class MicroserviceInstance extends RequestSender implements IRequestUpdateListener
A MicroserviceInstance (in the following just called instance) represents an actual, running instance of a Microservice.

An instance has responsibility to handle incoming requests. This is done by either:
1. Sending an answer back to the requester, if the request is completed
2. Creating child requests for satisfying the dependencies of a request
3. Submitting the request to its CPU for handling of its computational demand.

During its lifetime an instances is aware of all requests it currently handles and of all dependencies it is currently waiting for.

An instance can have different states, which are defined and described by the enum InstanceState.

Author:
Lion Wagner
See Also:
  • Field Details

  • Constructor Details

    • MicroserviceInstance

      public MicroserviceInstance(desmoj.core.simulator.Model model, String name, boolean showInTrace, Microservice microservice, int instanceID)
      Creates a new MicroserviceInstance for the given Microservice parent.
      Parameters:
      model - Base model of the simulation.
      name - Name of the instance.
      showInTrace - Whether the instance outputs should be shown in the trace.
      microservice - Parent microservice of the instance.
      instanceID - ID of the instance.
  • Method Details

    • activatePatterns

      public void activatePatterns(InstanceOwnedPatternConfiguration[] patterns)
      Activates the patterns that are owned by this instance. This will call registers IRequestUpdateListeners on this instance and call the IPatternLifeCycleHooks.start() method on each pattern instance.
    • getUsage

      public double getUsage()
      Gets the current usage of the instance.
      See Also:
    • getRelativeWorkDemand

      public double getRelativeWorkDemand()
      Gets the relative work demand.
      Returns:
      the relative work demand.
      See Also:
    • getState

      public InstanceState getState()
      Gets the state of the instance.
    • handle

      public void handle(Request request)
      Submits a Request at this instance for handling.
      Parameters:
      request - Request that should be handled by this instance.
    • checkIfCanHandle

      public boolean checkIfCanHandle(Request request)
      Checks whether this Instance can handle the Request.
      Parameters:
      request - request that may should be handled by this instance.
      Returns:
      true if this request will be handled, false otherwise
    • handleRequestAnswer

      protected void handleRequestAnswer(RequestAnswer answer)
    • handleIncomingRequest

      protected void handleIncomingRequest(Request request)
    • submitProcessToCPU

      protected void submitProcessToCPU(CPUProcess newProcess)
    • start

      public void start()
      Starts this instance, reading it to receive requests.

      Currently, the startup process completes immediately.

    • startShutdown

      public final void startShutdown()
      Starts the shutdown sequence of this instance. The service will not accept new requests, but will complete open requests.
    • endShutdown

      public final void endShutdown()
      Completes the shutdown and transitions the instance into the InstanceState.SHUTDOWN state. The instance will not handle any requests in this state.
    • die

      public final void die()
      Immediately kills this instance. All currently active requests (computed and cascading) will be canceled.
    • getOwner

      public final Microservice getOwner()
    • getInstanceID

      public final int getInstanceID()
    • onRequestFailed

      public boolean onRequestFailed(Request request, desmoj.core.simulator.TimeInstant when, RequestFailedReason reason)
      Description copied from interface: IRequestUpdateListener
      Listener for the failure of the sending process. This could for example be due to the receiving service not being available, the request being canceled or timed out. Provides a reference to the failed request.
      Specified by:
      onRequestFailed in interface IRequestUpdateListener
      Parameters:
      request - request that triggered this event
      when - time of this event
      reason - reason why the request failed
      Returns:
      true if the request was terminally handled (consumed) by this instance
    • onRequestArrivalAtTarget

      public boolean onRequestArrivalAtTarget(Request request, desmoj.core.simulator.TimeInstant when)
      Description copied from interface: IRequestUpdateListener
      Listener for the successful completion of the sending process. Provides a reference to the successfully arrived request.
      Specified by:
      onRequestArrivalAtTarget in interface IRequestUpdateListener
      Parameters:
      request - request that triggered this event
      when - time of this event
      Returns:
      true if the request was terminally handled (consumed) by this instance
    • onRequestSend

      public boolean onRequestSend(Request request, desmoj.core.simulator.TimeInstant when)
      Description copied from interface: IRequestUpdateListener
      Listener for the send-off of a request. Provides the send request.
      Specified by:
      onRequestSend in interface IRequestUpdateListener
      Parameters:
      request - request that triggered this event
      when - time of this event
      Returns:
      true if the request was terminally handled (consumed) by this instance
    • onRequestResultArrivedAtRequester

      public boolean onRequestResultArrivedAtRequester(Request request, desmoj.core.simulator.TimeInstant when)
      Description copied from interface: IRequestUpdateListener
      Listener for the successful receiving of the answer of a request.
      Specified by:
      onRequestResultArrivedAtRequester in interface IRequestUpdateListener
      Parameters:
      request - request that triggered this event
      when - time of this event
      Returns:
      true if the request was terminally handled (consumed) by this instance
    • getCpu

      public CPU getCpu()
    • getPatterns

      public Set<InstanceOwnedPattern> getPatterns()
    • setState

      public void setState(InstanceState state)