public List<T> resolveConflicts(List<T> items) { for(InconsistencyResolver<T> resolver: resolvers) { if(items.size() <= 1) return items; else items = resolver.resolveConflicts(items); } return items; }
@Override public List<Versioned<V>> get(K key, T transforms) throws VoldemortException { return resolver.resolveConflicts(super.get(key, transforms)); }
@Override public Map<K, List<Versioned<V>>> getAll(Iterable<K> keys, Map<K, T> transforms) throws VoldemortException { Map<K, List<Versioned<V>>> m = super.getAll(keys, transforms); for(Map.Entry<K, List<Versioned<V>>> entry: m.entrySet()) m.put(entry.getKey(), resolver.resolveConflicts(entry.getValue())); return m; }
@Override public Map<K, List<Versioned<V>>> getAll(CompositeVoldemortRequest<K, V> request) throws VoldemortException { Map<K, List<Versioned<V>>> m = super.getAll(request); if(request.resolveConflicts()) { for(Map.Entry<K, List<Versioned<V>>> entry: m.entrySet()) { m.put(entry.getKey(), resolver.resolveConflicts(entry.getValue())); } } return m; }
@SuppressWarnings("unchecked") public void testResolveNormal() { assertEquals(later, resolver.resolveConflicts(Arrays.asList(current, prior, later)).get(0)); assertEquals(later, resolver.resolveConflicts(Arrays.asList(prior, current, later)).get(0)); assertEquals(later, resolver.resolveConflicts(Arrays.asList(later, current, prior)).get(0)); }
@Override public List<Versioned<V>> get(CompositeVoldemortRequest<K, V> request) throws VoldemortException { if(request.resolveConflicts()) { return resolver.resolveConflicts(super.get(request)); } return super.get(request); }
@SuppressWarnings("unchecked") public void testDuplicatesResolve() { assertEquals(2, resolver.resolveConflicts(Arrays.asList(concurrent, current, current, concurrent, current)).size()); }
@SuppressWarnings("unchecked") public void testResolveLargerConcurrent() { assertEquals(3, resolver.resolveConflicts(Arrays.asList(concurrent, concurrent2, current, concurrent2, current, concurrent, current)).size()); }
public void testEmptyList() { assertEquals(0, resolver.resolveConflicts(new ArrayList<Versioned<String>>()).size()); }
@SuppressWarnings("unchecked") public void testResolveConcurrent() { List<Versioned<String>> resolved = resolver.resolveConflicts(Arrays.asList(current, concurrent, prior)); assertEquals(2, resolved.size()); assertTrue("Version not found", resolved.contains(current)); assertTrue("Version not found", resolved.contains(concurrent)); }
@SuppressWarnings("unchecked") public void testResolveConcurrentPairWithLater() { Versioned<String> later2 = getVersioned(1, 2, 3, 3, 4, 4); List<Versioned<String>> resolved = resolver.resolveConflicts(Arrays.asList(concurrent, concurrent2, later2)); assertEquals(1, resolved.size()); assertEquals(later2, resolved.get(0)); } }