@Override public Map<String, TotalNum> getTotalUsage_Schema2(Scan scan) throws IOException { // System.err.println("scanning"); scan.addFamily(colFamilyStat); InternalScanner scanner = ((RegionCoprocessorEnvironment) getEnvironment()).getRegion().getScanner(scan); List<KeyValue> res = new ArrayList<KeyValue>(); Map<String, TotalNum> result = new HashMap<String, TotalNum>(); boolean hasMoreResult = false; try { do { hasMoreResult = scanner.next(res); for (KeyValue kv : res) { String stationId = Bytes.toString(kv.getRow()).split("-")[1]; String value = new String(kv.getValue()); Long usage = Long.parseLong(value.split(";")[1]); if (result.containsKey(stationId)) { TotalNum tn = result.get(stationId); tn.add(usage); result.put(stationId, tn); } else { TotalNum tn = new TotalNum(); tn.add(usage); result.put(stationId, tn); } } res.clear(); } while (hasMoreResult); } finally { scanner.close(); } return result; }
@Override public Map<String, TotalNum> giveTotalUsage(List<String> stationIds, Scan scan) throws IOException { for (String qualifier : stationIds) { log.debug("adding qualifier: " + qualifier); String colName = Integer.toString(Integer.parseInt(qualifier)); scan.addColumn(colFamily, colName.getBytes()); } InternalScanner scanner = ((RegionCoprocessorEnvironment) getEnvironment()).getRegion().getScanner(scan); List<KeyValue> res = new ArrayList<KeyValue>(); Map<String, TotalNum> result = new HashMap<String, TotalNum>(); boolean hasMoreResult = false; try { do { hasMoreResult = scanner.next(res); for (KeyValue kv : res) { // log.debug("got a kv: " + kv); long emptyDocks = getEmptyDocks(kv); String id = Bytes.toString(kv.getQualifier()); TotalNum tn; if (result.containsKey(id)) { tn = result.get(id); } else { tn = new TotalNum(); } tn.add(emptyDocks); // emptyDocks = emptyDocks + (prevVal != null ? prevVal.intValue() : 0); // log.debug("result to be added is: " + emptyDocks + " id: " + id); result.put(id, tn); } res.clear(); } while (hasMoreResult); } finally { scanner.close(); } return result; }