public static void subtract(Mutator<String> mutator, final String mailbox, final Integer labelId, final LabelCounters labelCounters) { Set<Integer> labelIds = new HashSet<Integer>(1); labelIds.add(labelId); subtract(mutator, mailbox, labelIds, labelCounters); }
/** * Delete all label counters * * @param mailbox */ public static void deleteAll(Mutator<String> mutator, final String mailbox) { // reset all counters (since delete won't work in most cases) // see: http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/possible-coming-back-to-life-bug-with-counters-tp6464338p6475427.html Map<Integer, LabelCounters> counters = getAll(mailbox); for (Integer labelId : counters.keySet()) { LabelCounters labelCounters = counters.get(labelId); subtract(mutator, mailbox, labelId, labelCounters); } // delete all label counters mutator.delete(mailbox, CF_COUNTERS, null, strSe); }
@Override public void setCounters(Mailbox mailbox, LabelMap newCounters) { Map<Integer, LabelCounters> existingCounters = LabelCounterPersistence.getAll(mailbox.getId()); // begin batch operation Mutator<String> m = createMutator(keyspace, strSe); // update with the new counter values for (Label label : newCounters.values()) { int labelId = label.getId(); LabelCounters diff = new LabelCounters(label.getCounters()); if (existingCounters.containsKey(labelId)) { diff.add(existingCounters.get(labelId).getInverse()); } logger.debug( "Recalculated counters for label {}:\n\tCurrent: {}\n\tCalculated: {}\n\tDiff: {}", new Object[] { labelId, existingCounters.get(labelId), label.getCounters(), diff }); LabelCounterPersistence.add(m, mailbox.getId(), labelId, diff); } // reset non-existing counters for (int labelId : existingCounters.keySet()) { if (!newCounters.containsId(labelId)) { LabelCounterPersistence.subtract( m, mailbox.getId(), labelId, existingCounters.get(labelId)); } } m.execute(); }
LabelCounterPersistence.subtract(mutator, mailbox.getId(), labelId, labels.get(labelId).getCounters());
subtract(mutator, mailbox, labelId, labelCounters);