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.comm.aggregators;
20
21 import com.google.common.collect.Maps;
22
23 import java.util.Map;
24
25 /**
26 * Cache which counts the number of flushes per task id (destination worker
27 * id), so we know how many requests were sent to the worker
28 */
29 public abstract class CountingCache {
30 /** Counts the number of flushes for each worker */
31 private Map<Integer, Long> countMap = Maps.newHashMap();
32
33 /**
34 * Increase count of flushes for worker with desired task id. Subclasses
35 * should call this method whenever flush is called.
36 *
37 * @param taskId Task id of worker
38 */
39 protected void incrementCounter(Integer taskId) {
40 Long currentCount = countMap.get(taskId);
41 countMap.put(taskId,
42 (currentCount == null) ? 1 : (currentCount + 1));
43 }
44
45 /**
46 * Get number of flushes for worker with desired task id
47 *
48 * @param taskId Task id of worker
49 * @return Number of objects for the worker
50 */
51 protected long getCount(Integer taskId) {
52 Long count = countMap.get(taskId);
53 if (count == null) {
54 return 0;
55 } else {
56 return count.longValue();
57 }
58 }
59
60 /**
61 * Reset the counts
62 */
63 public void reset() {
64 countMap.clear();
65 }
66 }