Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 49304200C7A for ; Wed, 12 Apr 2017 01:58:42 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 457FD160B9B; Tue, 11 Apr 2017 23:58:42 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 93D80160B9E for ; Wed, 12 Apr 2017 01:58:41 +0200 (CEST) Received: (qmail 53647 invoked by uid 500); 11 Apr 2017 23:58:35 -0000 Mailing-List: contact dev-help@accumulo.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@accumulo.apache.org Delivered-To: mailing list dev@accumulo.apache.org Received: (qmail 53333 invoked by uid 99); 11 Apr 2017 23:58:35 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 11 Apr 2017 23:58:35 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 4B686DFF71; Tue, 11 Apr 2017 23:58:35 +0000 (UTC) From: phrocker To: dev@accumulo.apache.org Reply-To: dev@accumulo.apache.org References: In-Reply-To: Subject: [GitHub] accumulo pull request #247: ACCUMULO-3208 Integration test for the OrIterato... Content-Type: text/plain Message-Id: <20170411235835.4B686DFF71@git1-us-west.apache.org> Date: Tue, 11 Apr 2017 23:58:35 +0000 (UTC) archived-at: Tue, 11 Apr 2017 23:58:42 -0000 Github user phrocker commented on a diff in the pull request: https://github.com/apache/accumulo/pull/247#discussion_r111037495 --- Diff: core/src/main/java/org/apache/accumulo/core/iterators/OrIterator.java --- @@ -80,59 +128,103 @@ public int compareTo(TermSource o) { // sorted after they have been determined to be valid. return this.iter.getTopKey().compareColumnQualifier(o.iter.getTopKey().getColumnQualifier()); } + + /** + * Converts the given {@code Range} into the correct {@code Range} for this TermSource (per this expected table structure) and then seeks this TermSource's + * SKVI. + */ + public void seek(Range originalRange) throws IOException { + // the infinite start key is equivalent to a null startKey on the Range. + if (!originalRange.isInfiniteStartKey()) { + Key originalStartKey = originalRange.getStartKey(); + // Pivot the provided range into the range for this term + Key newKey = new Key(originalStartKey.getRow(), term, originalStartKey.getColumnQualifier(), originalStartKey.getTimestamp()); + // Construct the new range, preserving the other attributes on the provided range. + currentRange = new Range(newKey, originalRange.isStartKeyInclusive(), originalRange.getEndKey(), originalRange.isEndKeyInclusive()); + } else { + currentRange = originalRange; + } + LOG.trace("Seeking {} to {}", this, currentRange); + iter.seek(currentRange, seekColfams, true); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("TermSource{term=").append(term).append(", currentRange=").append(currentRange).append("}"); + return sb.toString(); + } + + /** + * @return True if there is a valid topKey which falls into the range this TermSource's iterator was last seeked to, false otherwise. + */ + boolean hasEntryForTerm() { + if (!iter.hasTop()) { + return false; + } + return currentRange.contains(iter.getTopKey()); + } } public OrIterator() { - this.sources = new ArrayList<>(); + this.sources = Collections.emptyList(); } private OrIterator(OrIterator other, IteratorEnvironment env) { - this.sources = new ArrayList<>(); + ArrayList copiedSources = new ArrayList<>(); for (TermSource TS : other.sources) - this.sources.add(new TermSource(TS.iter.deepCopy(env), TS.term)); + copiedSources.add(new TermSource(TS.iter.deepCopy(env), new Text(TS.term))); + this.sources = Collections.unmodifiableList(copiedSources); } @Override public SortedKeyValueIterator deepCopy(IteratorEnvironment env) { return new OrIterator(this, env); } - public void addTerm(SortedKeyValueIterator source, Text term, IteratorEnvironment env) { - this.sources.add(new TermSource(source.deepCopy(env), term)); + public void setTerms(SortedKeyValueIterator source, Collection terms, IteratorEnvironment env) { + ArrayList newTerms = new ArrayList<>(); + for (String term : terms) { + newTerms.add(new TermSource(source.deepCopy(env), new Text(term))); + } + this.sources = Collections.unmodifiableList(newTerms); } @Override final public void next() throws IOException { - + LOG.trace("next()"); if (currentTerm == null) return; // Advance currentTerm currentTerm.iter.next(); --- End diff -- I could be wrong that one is thrown. I'm currently not in a position to check this, so ignore me if I'm wrong. --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastructure@apache.org or file a JIRA ticket with INFRA. ---