List of usage examples for org.apache.commons.collections.iterators CollatingIterator CollatingIterator
public CollatingIterator(final Comparator comp)
CollatingIterator
that will used the specified comparator for ordering. From source file:com.bigdata.dastor.service.RangeSliceResponseResolver.java
public List<Row> resolve(Collection<Message> responses) throws DigestMismatchException, IOException { CollatingIterator collator = new CollatingIterator(new Comparator<Pair<Row, InetAddress>>() { public int compare(Pair<Row, InetAddress> o1, Pair<Row, InetAddress> o2) { return partitioner.getToken(o1.left.key).compareTo(partitioner.getToken(o2.left.key)); }//from w ww . j a v a2s . com }); int n = 0; for (Message response : responses) { RangeSliceReply reply = RangeSliceReply.read(response.getMessageBody()); n = Math.max(n, reply.rows.size()); collator.addIterator(new RowIterator(reply.rows.iterator(), response.getFrom())); } // for each row, compute the combination of all different versions seen, and repair incomplete versions ReducingIterator<Pair<Row, InetAddress>, Row> iter = new ReducingIterator<Pair<Row, InetAddress>, Row>( collator) { List<ColumnFamily> versions = new ArrayList<ColumnFamily>(sources.size()); List<InetAddress> versionSources = new ArrayList<InetAddress>(sources.size()); String key; @Override protected boolean isEqual(Pair<Row, InetAddress> o1, Pair<Row, InetAddress> o2) { return o1.left.key.equals(o2.left.key); } public void reduce(Pair<Row, InetAddress> current) { key = current.left.key; versions.add(current.left.cf); versionSources.add(current.right); } protected Row getReduced() { ColumnFamily resolved = ReadResponseResolver.resolveSuperset(versions); ReadResponseResolver.maybeScheduleRepairs(resolved, table, key, versions, versionSources); versions.clear(); versionSources.clear(); return new Row(key, resolved); } }; List<Row> resolvedRows = new ArrayList<Row>(n); while (iter.hasNext()) resolvedRows.add(iter.next()); return resolvedRows; }
From source file:com.bigdata.dastor.utils.FBUtilities.java
public static <T extends Comparable<T>> CollatingIterator getCollatingIterator() { // CollatingIterator will happily NPE if you do not specify a comparator explicitly return new CollatingIterator(new Comparator<T>() { public int compare(T o1, T o2) { return o1.compareTo(o2); }/*from ww w . java 2 s . c o m*/ }); }
From source file:org.apache.cassandra.service.RangeSliceResponseResolver.java
public Iterable<Row> resolve() throws IOException { CollatingIterator collator = new CollatingIterator(new Comparator<Pair<Row, InetAddress>>() { public int compare(Pair<Row, InetAddress> o1, Pair<Row, InetAddress> o2) { return o1.left.key.compareTo(o2.left.key); }/*from www .ja v a 2s. c o m*/ }); int n = 0; for (Message response : responses) { RangeSliceReply reply = RangeSliceReply.read(response.getMessageBody(), response.getVersion()); n = Math.max(n, reply.rows.size()); collator.addIterator(new RowIterator(reply.rows.iterator(), response.getFrom())); } // for each row, compute the combination of all different versions seen, and repair incomplete versions return new ReducingIterator<Pair<Row, InetAddress>, Row>(collator) { List<ColumnFamily> versions = new ArrayList<ColumnFamily>(sources.size()); List<InetAddress> versionSources = new ArrayList<InetAddress>(sources.size()); DecoratedKey key; @Override protected boolean isEqual(Pair<Row, InetAddress> o1, Pair<Row, InetAddress> o2) { return o1.left.key.equals(o2.left.key); } public void reduce(Pair<Row, InetAddress> current) { key = current.left.key; versions.add(current.left.cf); versionSources.add(current.right); } protected Row getReduced() { ColumnFamily resolved = RowRepairResolver.resolveSuperset(versions); RowRepairResolver.maybeScheduleRepairs(resolved, table, key, versions, versionSources); versions.clear(); versionSources.clear(); return new Row(key, resolved); } }; }
From source file:org.apache.cassandra.service.RowRepairResolver.java
static ColumnFamily resolveSuperset(List<ColumnFamily> versions) { assert versions.size() > 0; ColumnFamily resolved = null;//from ww w.j a va 2 s. com for (ColumnFamily cf : versions) { if (cf == null) continue; if (resolved == null) resolved = cf.cloneMeShallow(); else resolved.delete(cf); } if (resolved == null) return null; // mimic the collectCollatedColumn + removeDeleted path that getColumnFamily takes. // this will handle removing columns and subcolumns that are supressed by a row or // supercolumn tombstone. QueryFilter filter = new QueryFilter(null, new QueryPath(resolved.metadata().cfName), new IdentityQueryFilter()); CollatingIterator iter = new CollatingIterator(resolved.metadata().comparator.columnComparator); for (ColumnFamily version : versions) { if (version == null) continue; iter.addIterator(version.getColumnsMap().values().iterator()); } filter.collectCollatedColumns(resolved, iter, Integer.MIN_VALUE); return ColumnFamilyStore.removeDeleted(resolved, Integer.MIN_VALUE); }
From source file:org.apache.cassandra.utils.FBUtilities.java
public static CollatingIterator getCollatingIterator() { // CollatingIterator will happily NPE if you do not specify a comparator explicitly return new CollatingIterator(new Comparator() { public int compare(Object o1, Object o2) { return ((Comparable) o1).compareTo(o2); }// w w w. ja v a 2 s . c om }); }