Coverage Report - org.apache.giraph.ooc.policy.OutOfCoreOracle
 
Classes in this File Line Coverage Branch Coverage Complexity
OutOfCoreOracle
N/A
N/A
1
OutOfCoreOracle$IOAction
0%
0/8
N/A
1
 
 1  
 /*
 2  
  * Licensed to the Apache Software Foundation (ASF) under one
 3  
  * or more contributor license agreements.  See the NOTICE file
 4  
  * distributed with this work for additional information
 5  
  * regarding copyright ownership.  The ASF licenses this file
 6  
  * to you under the Apache License, Version 2.0 (the
 7  
  * "License"); you may not use this file except in compliance
 8  
  * with the License.  You may obtain a copy of the License at
 9  
  *
 10  
  *     http://www.apache.org/licenses/LICENSE-2.0
 11  
  *
 12  
  * Unless required by applicable law or agreed to in writing, software
 13  
  * distributed under the License is distributed on an "AS IS" BASIS,
 14  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 15  
  * See the License for the specific language governing permissions and
 16  
  * limitations under the License.
 17  
  */
 18  
 
 19  
 package org.apache.giraph.ooc.policy;
 20  
 
 21  
 import com.sun.management.GarbageCollectionNotificationInfo;
 22  
 import org.apache.giraph.ooc.command.IOCommand;
 23  
 
 24  
 /**
 25  
  * Interface for any out-of-core oracle. An out-of-core oracle is the brain of
 26  
  * the out-of-core mechanism, determining/deciding on out-of-core actions (load
 27  
  * or store) that should happen.
 28  
  * Note: any class implementing this interface should have one and only one
 29  
  *       constructor taking only two arguments of types
 30  
  *       <code>ImmutableClassesGiraphConfiguration</code> and
 31  
  *       <code>OutOfCoreEngine</code>
 32  
  */
 33  
 public interface OutOfCoreOracle {
 34  
   /**
 35  
    * Different types of IO actions that can potentially lead to a more desired
 36  
    * state of computation for out-of-core mechanism. These actions are issued
 37  
    * based on the status of the memory (memory pressure, rate of data transfer
 38  
    * to memory, etc.)
 39  
    */
 40  0
   enum IOAction {
 41  
     /**
 42  
      * Either of:
 43  
      *    - storing incoming messages of any partition currently on disk, or
 44  
      *    - storing incoming messages' raw data buffer of any partition
 45  
      *      currently on disk, or
 46  
      *    - storing partitions' raw data buffer for those partitions that are
 47  
      *      currently on disk.
 48  
      */
 49  0
     STORE_MESSAGES_AND_BUFFERS,
 50  
     /**
 51  
      * Storing a partition that is *processed* in the current iteration cycle.
 52  
      * This action is also known as "soft store"
 53  
      */
 54  0
     STORE_PROCESSED_PARTITION,
 55  
     /**
 56  
      * Storing a partition from memory on disk, prioritizing to *processed*
 57  
      * partitions on memory. However, if there is no *processed* partition,
 58  
      * store should happen at any cost, even if an *unprocessed* partition has
 59  
      * to be stored. This action is also know as "hard store".
 60  
      */
 61  0
     STORE_PARTITION,
 62  
     /**
 63  
      * Loading an *unprocessed* partition from disk to memory, only if there are
 64  
      * *processed* partitions in memory. This action basically initiates a swap
 65  
      * operation.
 66  
      */
 67  0
     LOAD_TO_SWAP_PARTITION,
 68  
     /**
 69  
      * Loading an *unprocessed* partition from disk to memory. This action is
 70  
      * also known as "soft load".
 71  
      */
 72  0
     LOAD_UNPROCESSED_PARTITION,
 73  
     /**
 74  
      * Loading a partition (prioritizing *unprocessed* over *processed*) from
 75  
      * disk to memory. Loading a *processed* partition to memory is a prefetch
 76  
      * of that partition to be processed in the next superstep. This action is
 77  
      * also known as "hard load".
 78  
      */
 79  0
     LOAD_PARTITION,
 80  
     /**
 81  
      * Loading a partition regardless of the memory situation. An out-of-core
 82  
      * mechanism may use this action to signal IO threads that it is allowed to
 83  
      * load a partition that is specifically requested.
 84  
      */
 85  0
     URGENT_LOAD_PARTITION
 86  
   }
 87  
 
 88  
   /**
 89  
    * Get the next set of viable IO actions to help bring memory to a more
 90  
    * desired state.
 91  
    *
 92  
    * @return an array of viable IO actions, sorted from highest priority to
 93  
    *         lowest priority
 94  
    */
 95  
   IOAction[] getNextIOActions();
 96  
 
 97  
   /**
 98  
    * Whether a command is appropriate to bring the memory to a more desired
 99  
    * state. A command is not executed unless it is approved by the oracle. This
 100  
    * method is specially important where there are multiple IO threads
 101  
    * performing IO operations for the out-of-core mechanism. The approval
 102  
    * becomes significantly important to prevent all IO threads from performing
 103  
    * identical command type, if that is a necessity. For instance, execution of
 104  
    * a particular command type by only one thread may bring the memory to a
 105  
    * desired state, and the rest of IO threads may perform other types of
 106  
    * commands.
 107  
    *
 108  
    * @param command the IO command that is about to execute
 109  
    * @return 'true' if the command is approved for execution. 'false' if the
 110  
    *         command should not be executed
 111  
    */
 112  
   boolean approve(IOCommand command);
 113  
 
 114  
   /**
 115  
    * Notification of command completion. Oracle may update its status and commit
 116  
    * the changes a command may cause.
 117  
    *
 118  
    * @param command the IO command that is completed
 119  
    */
 120  
   void commandCompleted(IOCommand command);
 121  
 
 122  
   /**
 123  
    * Notification of GC completion. Oracle may take certain decisions based on
 124  
    * GC information (such as amount of time it took, memory it reclaimed, etc.)
 125  
    *
 126  
    * @param gcInfo GC information
 127  
    */
 128  
   void gcCompleted(GarbageCollectionNotificationInfo gcInfo);
 129  
 
 130  
   /**
 131  
    * Called at the beginning of a superstep.
 132  
    */
 133  
   void startIteration();
 134  
 }