Coverage Report - org.apache.giraph.utils.MasterLoggingAggregator
 
Classes in this File Line Coverage Branch Coverage Complexity
MasterLoggingAggregator
0%
0/22
0%
0/8
2.333
 
 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.utils;
 20  
 
 21  
 import org.apache.giraph.aggregators.TextAppendAggregator;
 22  
 import org.apache.giraph.master.MasterAggregatorUsage;
 23  
 import org.apache.giraph.worker.WorkerAggregatorUsage;
 24  
 import org.apache.hadoop.conf.Configuration;
 25  
 import org.apache.hadoop.io.Text;
 26  
 import org.apache.log4j.Logger;
 27  
 
 28  
 /**
 29  
  * Helper class for using aggregator which gathers log messages from workers
 30  
  * and prints them on master.
 31  
  *
 32  
  * If you want to track what's going on in your application,
 33  
  * and want to have all those logs accessible in a single place in the end of
 34  
  * each superstep, you can use option from this class.
 35  
  *
 36  
  * If you use a lot of log messages this might slow down your application,
 37  
  * but it can easily be turned on/off without changing your code just by
 38  
  * switching the option.
 39  
  */
 40  
 public class MasterLoggingAggregator {
 41  
   /** Whether or not to use master logging aggregator */
 42  
   public static final String USE_MASTER_LOGGING_AGGREGATOR =
 43  
       "giraph.useMasterLoggingAggregator";
 44  
   /** Default is not using master logging aggregator */
 45  
   public static final boolean USE_MASTER_LOGGING_AGGREGATOR_DEFAULT = false;
 46  
   /** Name of aggregator which will be gathering the logs */
 47  
   public static final String MASTER_LOGGING_AGGREGATOR_NAME =
 48  
       "masterLoggingAggregator";
 49  
 
 50  
   /** Class logger */
 51  0
   private static final Logger LOG =
 52  0
       Logger.getLogger(MasterLoggingAggregator.class);
 53  
 
 54  
   /** Do not instantiate */
 55  0
   private MasterLoggingAggregator() {
 56  0
   }
 57  
 
 58  
   /**
 59  
    * Check if master logging aggregator is used.
 60  
    *
 61  
    * @param conf Configuration
 62  
    * @return True iff master logging aggregator is used
 63  
    */
 64  
   public static boolean useMasterLoggingAggregator(Configuration conf) {
 65  0
     return conf.getBoolean(USE_MASTER_LOGGING_AGGREGATOR,
 66  
         USE_MASTER_LOGGING_AGGREGATOR_DEFAULT);
 67  
   }
 68  
 
 69  
   /**
 70  
    * Set whether or not master logging aggregator should be used
 71  
    *
 72  
    * @param useMasterLoggingAggregator Whether or not we want
 73  
    *                                   master logging aggregator to be used
 74  
    * @param conf                       Configuration
 75  
    */
 76  
   public static void setUseMasterLoggingAggregator(
 77  
       boolean useMasterLoggingAggregator, Configuration conf) {
 78  0
     conf.setBoolean(USE_MASTER_LOGGING_AGGREGATOR, useMasterLoggingAggregator);
 79  0
   }
 80  
 
 81  
   /**
 82  
    * Aggregate some message to master logging aggregator,
 83  
    * if the option for using it is set in the configuration.
 84  
    *
 85  
    * This is the method application implementation should use
 86  
    * in order to add message to the aggregator.
 87  
    *
 88  
    * @param message               Message to log
 89  
    * @param workerAggregatorUsage Worker aggregator usage
 90  
    *                              (can be Vertex, WorkerContext, etc)
 91  
    * @param conf                  Configuration
 92  
    */
 93  
   public static void aggregate(String message,
 94  
       WorkerAggregatorUsage workerAggregatorUsage, Configuration conf) {
 95  0
     if (useMasterLoggingAggregator(conf)) {
 96  0
       workerAggregatorUsage.aggregate(
 97  
           MASTER_LOGGING_AGGREGATOR_NAME, new Text(message));
 98  
     }
 99  0
   }
 100  
 
 101  
   /**
 102  
    * Register master logging aggregator,
 103  
    * if the option for using it is set in the configuration.
 104  
    *
 105  
    * This method will be called by Giraph infrastructure on master.
 106  
    *
 107  
    * @param masterAggregatorUsage Master aggregator usage
 108  
    * @param conf                  Configuration
 109  
    */
 110  
   public static void registerAggregator(
 111  
       MasterAggregatorUsage masterAggregatorUsage, Configuration conf) {
 112  0
     if (useMasterLoggingAggregator(conf)) {
 113  
       try {
 114  0
         masterAggregatorUsage.registerAggregator(MASTER_LOGGING_AGGREGATOR_NAME,
 115  
             TextAppendAggregator.class);
 116  0
       } catch (InstantiationException e) {
 117  0
         throw new IllegalStateException("registerAggregator: " +
 118  
             "InstantiationException occurred");
 119  0
       } catch (IllegalAccessException e) {
 120  0
         throw new IllegalStateException("registerAggregator: " +
 121  
             "IllegalAccessException occurred");
 122  0
       }
 123  
     }
 124  0
   }
 125  
 
 126  
   /**
 127  
    * Print value of master logging aggregator on the master log,
 128  
    * if the option for using it is set in the configuration.
 129  
    *
 130  
    * This method will be called by Giraph infrastructure on master.
 131  
    *
 132  
    * @param masterAggregatorUsage Master aggregator usage
 133  
    * @param conf                  Configuration
 134  
    */
 135  
   public static void logAggregatedValue(
 136  
       MasterAggregatorUsage masterAggregatorUsage, Configuration conf) {
 137  0
     if (useMasterLoggingAggregator(conf) && LOG.isInfoEnabled()) {
 138  0
       LOG.info("logAggregatedValue: \n" +
 139  0
           masterAggregatorUsage.getAggregatedValue(
 140  
               MASTER_LOGGING_AGGREGATOR_NAME));
 141  
     }
 142  0
   }
 143  
 }