@Override public boolean accept(Key k, Value v) { long ts = k.getTimestamp(); if ((hasStart && (ts < start)) || (hasEnd && (ts > end))) return false; if (hasStart && !startInclusive && ts == start) return false; return !hasEnd || endInclusive || ts != end; }
/** * Accepts entries whose timestamps are less than currentTime - threshold. * * @see org.apache.accumulo.core.iterators.Filter#accept(org.apache.accumulo.core.data.Key, * org.apache.accumulo.core.data.Value) */ @Override public boolean accept(Key k, Value v) { return currentTime - k.getTimestamp() <= threshold; }
@Override public boolean accept(Key k, Value v) { Long threshold = ttls.getObject(k); if (threshold == null) return true; return currentTime - k.getTimestamp() <= threshold; }
public static LogEntry fromKeyValue(Key key, String value) { String qualifier = key.getColumnQualifierData().toString(); if (qualifier.indexOf('/') < 1) { throw new IllegalArgumentException("Bad key for log entry: " + key); } KeyExtent extent = new KeyExtent(key.getRow(), EMPTY_TEXT); String[] parts = qualifier.split("/", 2); String server = parts[0]; // handle old-style log entries that specify log sets parts = value.split("\\|")[0].split(";"); String filename = parts[parts.length - 1]; long timestamp = key.getTimestamp(); return new LogEntry(extent, timestamp, server, filename); }
/** * Make a new key with a column family, column qualifier, and column visibility. Copy the rest of * the parts of the key (including delete flag) from {@code originalKey}. */ protected Key replaceKeyParts(Key originalKey, Text newColFam, Text newColQual, Text newColVis) { byte[] row = originalKey.getRowData().toArray(); byte[] cf = newColFam.getBytes(); byte[] cq = newColQual.getBytes(); byte[] cv = newColVis.getBytes(); long timestamp = originalKey.getTimestamp(); Key newKey = new Key(row, 0, row.length, cf, 0, newColFam.getLength(), cq, 0, newColQual.getLength(), cv, 0, newColVis.getLength(), timestamp); newKey.setDeleted(originalKey.isDeleted()); return newKey; }
@Override public String next() { Entry<Key,Value> entry = iter.next(); StringBuilder sb = new StringBuilder(); toHex(sb, entry.getKey().getRowData().toArray()); sb.append(" "); toHex(sb, entry.getKey().getColumnFamilyData().toArray()); sb.append(" "); toHex(sb, entry.getKey().getColumnQualifierData().toArray()); sb.append(" ["); sb.append(entry.getKey().getColumnVisibilityData()); sb.append("] "); if (config.willPrintTimestamps()) { sb.append(Long.toString(entry.getKey().getTimestamp())); sb.append(" "); } toHex(sb, entry.getValue().get()); return sb.toString(); }
/** * Make a new key with a column qualifier, and column visibility. Copy the rest of the parts of * the key (including delete flag) from {@code originalKey}. */ protected Key replaceKeyParts(Key originalKey, Text newColQual, Text newColVis) { byte[] row = originalKey.getRowData().toArray(); byte[] cf = originalKey.getColumnFamilyData().toArray(); byte[] cq = newColQual.getBytes(); byte[] cv = newColVis.getBytes(); long timestamp = originalKey.getTimestamp(); Key newKey = new Key(row, 0, row.length, cf, 0, cf.length, cq, 0, newColQual.getLength(), cv, 0, newColVis.getLength(), timestamp); newKey.setDeleted(originalKey.isDeleted()); return newKey; }
@VisibleForTesting public void put(Key key, Value value) { wlock.lock(); try { if (nmPointer == 0) { throw new IllegalStateException("Native Map Deleted"); } modCount++; singleUpdate(nmPointer, key.getRowData().toArray(), key.getColumnFamilyData().toArray(), key.getColumnQualifierData().toArray(), key.getColumnVisibilityData().toArray(), key.getTimestamp(), key.isDeleted(), value.get(), 0); } finally { wlock.unlock(); } }
/** * Make a new key with all parts (including delete flag) coming from {@code originalKey} but use * {@code newColQual} as the column qualifier. */ protected Key replaceColumnQualifier(Key originalKey, Text newColQual) { byte[] row = originalKey.getRowData().toArray(); byte[] cf = originalKey.getColumnFamilyData().toArray(); byte[] cq = newColQual.getBytes(); byte[] cv = originalKey.getColumnVisibilityData().toArray(); long timestamp = originalKey.getTimestamp(); Key newKey = new Key(row, 0, row.length, cf, 0, cf.length, cq, 0, newColQual.getLength(), cv, 0, cv.length, timestamp); newKey.setDeleted(originalKey.isDeleted()); return newKey; }
/** * Make a new key with all parts (including delete flag) coming from {@code originalKey} but use * {@code newColFam} as the column family. */ protected Key replaceColumnFamily(Key originalKey, Text newColFam) { byte[] row = originalKey.getRowData().toArray(); byte[] cf = newColFam.getBytes(); byte[] cq = originalKey.getColumnQualifierData().toArray(); byte[] cv = originalKey.getColumnVisibilityData().toArray(); long timestamp = originalKey.getTimestamp(); Key newKey = new Key(row, 0, row.length, cf, 0, newColFam.getLength(), cq, 0, cq.length, cv, 0, cv.length, timestamp); newKey.setDeleted(originalKey.isDeleted()); return newKey; }
/** * Make a new key with all parts (including delete flag) coming from {@code originalKey} but use * {@code newColVis} as the column visibility. */ protected Key replaceColumnVisibility(Key originalKey, Text newColVis) { byte[] row = originalKey.getRowData().toArray(); byte[] cf = originalKey.getColumnFamilyData().toArray(); byte[] cq = originalKey.getColumnQualifierData().toArray(); byte[] cv = newColVis.getBytes(); long timestamp = originalKey.getTimestamp(); Key newKey = new Key(row, 0, row.length, cf, 0, cf.length, cq, 0, cq.length, cv, 0, newColVis.getLength(), timestamp); newKey.setDeleted(originalKey.isDeleted()); return newKey; }
@Override public void delete() throws MutationsRejectedException { BatchWriter bw = null; try { bw = new BatchWriterImpl(context, tableId, bwConfig); Iterator<Entry<Key,Value>> iter = super.iterator(); while (iter.hasNext()) { Entry<Key,Value> next = iter.next(); Key k = next.getKey(); Mutation m = new Mutation(k.getRow()); m.putDelete(k.getColumnFamily(), k.getColumnQualifier(), new ColumnVisibility(k.getColumnVisibility()), k.getTimestamp()); bw.addMutation(m); } } finally { if (bw != null) bw.close(); } }
NMIterator(Key key) { if (nmPointer == 0) { throw new IllegalStateException(); } expectedModCount = modCount; nmiPointer = createNMI(nmPointer, key.getRowData().toArray(), key.getColumnFamilyData().toArray(), key.getColumnQualifierData().toArray(), key.getColumnVisibilityData().toArray(), key.getTimestamp(), key.isDeleted(), fieldsLens); hasNext = nmiPointer != 0; }
/** * 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 void seek(Range range, Collection<ByteSequence> columnFamilies, boolean inclusive) throws IOException { // do not want to seek to the middle of a value that should be combined... Range seekRange = IteratorUtil.maximizeStartKeyTimeStamp(range); super.seek(seekRange, columnFamilies, inclusive); findTop(); if (range.getStartKey() != null) { while (hasTop() && getTopKey().equals(range.getStartKey(), PartialKey.ROW_COLFAM_COLQUAL_COLVIS) && getTopKey().getTimestamp() > range.getStartKey().getTimestamp()) { // the value has a more recent time stamp, so pass it up // log.debug("skipping "+getTopKey()); next(); } while (hasTop() && range.beforeStartKey(getTopKey())) { next(); } } }
@Override public void next() throws IOException { if (source.hasTop()) { ByteSequence currentRow = source.getTopKey().getRowData(); ByteSequence currentColf = source.getTopKey().getColumnFamilyData(); long ts = source.getTopKey().getTimestamp(); source.next(); int count = 1; while (source.hasTop() && source.getTopKey().getRowData().equals(currentRow) && source.getTopKey().getColumnFamilyData().equals(currentColf)) { count++; source.next(); } this.key = new Key(currentRow.toArray(), currentColf.toArray(), new byte[0], new byte[0], ts); this.value = new Value(Integer.toString(count).getBytes(UTF_8)); } else { this.key = null; this.value = null; } }
public static Range minimizeEndKeyTimeStamp(Range range) { Range seekRange = range; if (range.getEndKey() != null) { Key seekKey = seekRange.getEndKey(); if (range.getEndKey().getTimestamp() != Long.MIN_VALUE) { seekKey = new Key(seekRange.getEndKey()); seekKey.setTimestamp(Long.MIN_VALUE); seekRange = new Range(range.getStartKey(), range.isStartKeyInclusive(), seekKey, true); } else if (!range.isEndKeyInclusive()) { seekRange = new Range(range.getStartKey(), range.isStartKeyInclusive(), seekKey, true); } } return seekRange; }
public static Range maximizeStartKeyTimeStamp(Range range) { Range seekRange = range; if (range.getStartKey() != null) { Key seekKey = range.getStartKey(); if (range.getStartKey().getTimestamp() != Long.MAX_VALUE) { seekKey = new Key(seekRange.getStartKey()); seekKey.setTimestamp(Long.MAX_VALUE); seekRange = new Range(seekKey, true, range.getEndKey(), range.isEndKeyInclusive()); } else if (!range.isStartKeyInclusive()) { seekRange = new Range(seekKey, true, range.getEndKey(), range.isEndKeyInclusive()); } } return seekRange; }
@Override public void seek(Range range, Collection<ByteSequence> columnFamilies, boolean inclusive) throws IOException { topKey = null; topValue = null; Key sk = range.getStartKey(); if (sk != null && sk.getColumnQualifierData().length() == 0 && sk.getColumnVisibilityData().length() == 0 && sk.getTimestamp() == Long.MAX_VALUE && !range.isStartKeyInclusive()) { // assuming that we are seeking using a key previously returned by // this iterator // therefore go to the next row/cf Key followingRowKey = sk.followingKey(PartialKey.ROW_COLFAM); if (range.getEndKey() != null && followingRowKey.compareTo(range.getEndKey()) > 0) return; range = new Range(sk.followingKey(PartialKey.ROW_COLFAM), true, range.getEndKey(), range.isEndKeyInclusive()); } sourceIter.seek(range, columnFamilies, inclusive); prepKeys(); }
@Override public void seek(Range range, Collection<ByteSequence> columnFamilies, boolean inclusive) throws IOException { topKey = null; topValue = null; Key sk = range.getStartKey(); if (sk != null && sk.getColumnFamilyData().length() == 0 && sk.getColumnQualifierData().length() == 0 && sk.getColumnVisibilityData().length() == 0 && sk.getTimestamp() == Long.MAX_VALUE && !range.isStartKeyInclusive()) { // assuming that we are seeking using a key previously returned by this iterator // therefore go to the next row Key followingRowKey = sk.followingKey(PartialKey.ROW); if (range.getEndKey() != null && followingRowKey.compareTo(range.getEndKey()) > 0) return; range = new Range(sk.followingKey(PartialKey.ROW), true, range.getEndKey(), range.isEndKeyInclusive()); } sourceIter.seek(range, columnFamilies, inclusive); prepKeys(); }