public MultiKeySliceQuery getQuery(final CompositeIndexType index, List<Object[]> values) { final List<KeySliceQuery> ksqs = new ArrayList<>(values.size()); for (final Object[] value : values) { ksqs.add(new KeySliceQuery(getIndexKey(index,value), BufferUtil.zeroBuffer(1), BufferUtil.oneBuffer(1))); } return new MultiKeySliceQuery(ksqs); }
/** * Returns a byte buffer representation for the given partition id * @param partition * @return */ protected StaticBuffer getPartitionKey(int partition) { return BufferUtil.getIntBuffer(partition); }
public static StaticBuffer getBuffer(int no) { return BufferUtil.getLongBuffer(no + idOffset); }
final SliceQuery columnSlice = new SliceQuery(BufferUtil.zeroBuffer(8), BufferUtil.oneBuffer(8)).setLimit(1); keys = store.getKeys(new KeyRangeQuery(BufferUtil.getLongBuffer(minKey), BufferUtil.getLongBuffer(maxKey), columnSlice), tx); assertEquals(expectedKeyCount, KeyValueStoreUtil.count(keys)); keys = store.getKeys(new KeyRangeQuery(BufferUtil.getLongBuffer(minKey), BufferUtil.getLongBuffer(maxKey), columnSlice), tx); assertEquals(expectedKeyCount, KeyValueStoreUtil.count(keys));
public static StaticBuffer nextBiggerBufferAllowOverflow(StaticBuffer buffer) { return nextBiggerBuffer(buffer, true); }
private static StaticBuffer nextBiggerBuffer(StaticBuffer buffer, boolean allowOverflow) { int len = buffer.length(); byte[] next = new byte[len]; boolean carry = true; for (int i = len - 1; i >= 0; i--) { byte b = buffer.getByte(i); if (carry) { b++; if (b != 0) carry = false; } next[i]=b; } if (carry && allowOverflow) { return zeroBuffer(len); } else if (carry) { throw new IllegalArgumentException("Buffer overflow incrementing " + buffer); } else { return StaticArrayBuffer.of(next); } }
StaticBuffer startCol = BufferUtil.getIntBuffer(start); StaticBuffer endCol = BufferUtil.getIntBuffer(end); SliceQuery sq = new SliceQuery(startCol, endCol); expected.add(BufferUtil.getLongBuffer(l)); StaticBuffer startCol = BufferUtil.getIntBuffer(start); StaticBuffer endCol = BufferUtil.getIntBuffer(end); SliceQuery sq = new SliceQuery(startCol, endCol); StaticBuffer keyStart = BufferUtil.getLongBuffer(start); StaticBuffer keyEnd = BufferUtil.getLongBuffer(end); KeyRangeQuery krq = new KeyRangeQuery(keyStart, keyEnd, sq); expected.add(BufferUtil.getLongBuffer(l));
public static boolean containsKey(KeyColumnValueStore store, StaticBuffer key, int maxColumnLength, StoreTransaction txh) throws BackendException { final StaticBuffer end; if (maxColumnLength>32) { end = BufferUtil.oneBuffer(maxColumnLength); } else { end = END; } return !store.getSlice(new KeySliceQuery(key, START, end).setLimit(1),txh).isEmpty(); }
KeySliceQuery query = new KeySliceQuery(logKey, BufferUtil.getLongBuffer(times.getTime(messageTimeStart)), BufferUtil.getLongBuffer(times.getTime(messageTimeEnd))); query.setLimit(maxReadMsg); log.trace("Converted MessagePuller time window to {}", query); log.debug("Extended time window to {}", messageTimeEnd); query = new KeySliceQuery(logKey, BufferUtil.nextBiggerBuffer(lastEntry.getColumn()), BufferUtil.getLongBuffer(times.getTime(messageTimeEnd))); log.debug("Converted extended MessagePuller time window to {}", query); List<Entry> extraEntries = BackendOperation.execute(getOperation(query),KCVSLog.this,times,maxReadTime);
public static StaticBuffer oneBuffer(int len) { return fillBuffer(len,(byte)-1); }
protected StaticBuffer decodeValue(final AttributeValue val) { if (null == val) { return null; } // Dynamo does not allow empty binary values, so we use a placeholder // for empty values if (Constants.EMPTY_BUFFER_PLACEHOLDER.equals(val.getS())) { return BufferUtil.emptyBuffer(); } return StaticArrayBuffer.of(val.getB()); }
public static StaticBuffer nextBiggerBuffer(StaticBuffer buffer) { return nextBiggerBuffer(buffer,false); }
public static StaticBuffer emptyBuffer() { return fillBuffer(0,(byte)0); }
private List<Entry> decodeSlice(final Map<String, AttributeValue> item) { final List<Entry> entries = new EntryBuilder(item).buildAll(); final Entry sliceStartEntry = StaticArrayEntry.of(sliceQuery.getSliceStart(), BufferUtil.emptyBuffer()); final Entry sliceEndEntry = StaticArrayEntry.of(sliceQuery.getSliceEnd(), BufferUtil.emptyBuffer()); final List<Entry> filteredEntries = new ArrayList<>(entries.size()); for (Entry entry : entries) { if (entry.compareTo(sliceStartEntry) >= 0 && entry.compareTo(sliceEndEntry) < 0) { filteredEntries.add(entry); } } return filteredEntries.subList(0, Math.min(filteredEntries.size(), sliceQuery.getLimit())); }
public static KeyIterator getKeys(KeyColumnValueStore store, StoreFeatures features, int keyLength, int sliceLength, StoreTransaction txh) throws BackendException { return getKeys(store,new SliceQuery(BufferUtil.zeroBuffer(1), BufferUtil.oneBuffer(sliceLength)).setLimit(1), features,keyLength,txh); }
public TransactionLogHeader(long transactionId, Instant txTimestamp, TimestampProvider times) { this.transactionId = transactionId; this.txTimestamp = txTimestamp; this.times = times; Preconditions.checkArgument(this.transactionId > 0); Preconditions.checkNotNull(this.txTimestamp); logKey = HashingUtil.hashPrefixKey(HashingUtil.HashLength.SHORT, BufferUtil.getLongBuffer(transactionId)); }
public static StaticBuffer pointRange(StaticBuffer point) { return BufferUtil.nextBiggerBuffer(point); }
private StaticBuffer getPartitionKey(int partition, int idNamespace, int uniqueId) { assert partition>=0 && partition<(1<< partitionBitWidth); assert idNamespace>=0; assert uniqueId>=0 && uniqueId<(1<<uniqueIdBitWidth); int[] components = new int[2]; components[0] = (partitionBitWidth >0?(partition<<(Integer.SIZE- partitionBitWidth)):0) + uniqueId; components[1]=idNamespace; return BufferUtil.getIntBuffer(components); }
public static StaticBuffer zeroBuffer(int len) { return fillBuffer(len,(byte)0); }
public List<Entry> buildAll() { if (null == item) { return Collections.emptyList(); } final Entry sliceStartEntry; final Entry sliceEndEntry; if (slice) { sliceStartEntry = StaticArrayEntry.of(start, BufferUtil.emptyBuffer()); sliceEndEntry = StaticArrayEntry.of(end, BufferUtil.emptyBuffer()); } else { sliceStartEntry = null; sliceEndEntry = null; } //TODO(amcp) Arrays.parallelSort(filteredEntries)? //https://github.com/awslabs/dynamodb-titan-storage-backend/issues/159 return item.entrySet().stream() .map(entry -> { final StaticBuffer columnKey = decodeKey(entry.getKey()); final AttributeValue valueValue = entry.getValue(); final StaticBuffer value = decodeValue(valueValue); return StaticArrayEntry.of(columnKey, value); }) .filter(entry -> !slice || entry.compareTo(sliceStartEntry) >= 0 && entry.compareTo(sliceEndEntry) < 0) .sorted() .limit(limit) .collect(Collectors.toList()); }