package org.infinispan.xsite.statetransfer;

/**
 * It contains the logic needed to consume the state sent from other site.
 *
 * @author Pedro Ruivo
 * @since 7.0
 */
public interface XSiteStateConsumer {

   /**
    * It notifies the start of state transfer from other site.
    *
    * @param sendingSite the site name that will send the state.
    * @throws org.infinispan.commons.CacheException if this node is received state from a different site name.
    */
   void startStateTransfer(String sendingSite);

   /**
    * It notifies the end of state transfer from other site.
    *
    * @param sendingSite the site name that is sending the state.
    */
   void endStateTransfer(String sendingSite);

   /**
    * It applies state from other site.
    *
    * @param chunk a chunk of keys
    * @throws Exception if something go wrong while applying the state
    */
   void applyState(XSiteState[] chunk) throws Exception;

   /**
    * @return the site name that is sending the state.
    */
   String getSendingSiteName();
}
