Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
MasterLoggingAggregator |
|
| 2.3333333333333335;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 | } |