@Override public Map<Sha256Hash, Long> lookupStreamIdsByHash(Transaction t, final Set<Sha256Hash> hashes) { if (hashes.isEmpty()) { return ImmutableMap.of(); } SnapshotsStreamHashAidxTable idx = tables.getSnapshotsStreamHashAidxTable(t); Set<SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxRow> rows = getHashIndexRowsForHashes(hashes); Multimap<SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxRow, SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumnValue> m = idx.getRowsMultimap(rows); Map<Long, Sha256Hash> hashForStreams = Maps.newHashMap(); for (SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxRow r : m.keySet()) { for (SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumnValue v : m.get(r)) { Long streamId = v.getColumnName().getStreamId(); Sha256Hash hash = r.getHash(); if (hashForStreams.containsKey(streamId)) { AssertUtils.assertAndLog(log, hashForStreams.get(streamId).equals(hash), "(BUG) Stream ID has 2 different hashes: " + streamId); } hashForStreams.put(streamId, hash); } } Map<Long, StreamMetadata> metadata = getMetadata(t, hashForStreams.keySet()); Map<Sha256Hash, Long> ret = Maps.newHashMap(); for (Map.Entry<Long, StreamMetadata> e : metadata.entrySet()) { if (e.getValue().getStatus() != Status.STORED) { continue; } Sha256Hash hash = hashForStreams.get(e.getKey()); ret.put(hash, e.getKey()); } return ret; }
SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumn column = SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumn.of(streamId); shToDelete.put(hashRow, column);
SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumn column = SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumn.of(streamId); shToDelete.put(hashRow, column);
@Override public Map<Sha256Hash, Long> lookupStreamIdsByHash(Transaction t, final Set<Sha256Hash> hashes) { if (hashes.isEmpty()) { return ImmutableMap.of(); } SnapshotsStreamHashAidxTable idx = tables.getSnapshotsStreamHashAidxTable(t); Set<SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxRow> rows = getHashIndexRowsForHashes(hashes); Multimap<SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxRow, SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumnValue> m = idx.getRowsMultimap(rows); Map<Long, Sha256Hash> hashForStreams = Maps.newHashMap(); for (SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxRow r : m.keySet()) { for (SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumnValue v : m.get(r)) { Long streamId = v.getColumnName().getStreamId(); Sha256Hash hash = r.getHash(); if (hashForStreams.containsKey(streamId)) { AssertUtils.assertAndLog(log, hashForStreams.get(streamId).equals(hash), "(BUG) Stream ID has 2 different hashes: " + streamId); } hashForStreams.put(streamId, hash); } } Map<Long, StreamMetadata> metadata = getMetadata(t, hashForStreams.keySet()); Map<Sha256Hash, Long> ret = Maps.newHashMap(); for (Map.Entry<Long, StreamMetadata> e : metadata.entrySet()) { if (e.getValue().getStatus() != Status.STORED) { continue; } Sha256Hash hash = hashForStreams.get(e.getKey()); ret.put(hash, e.getKey()); } return ret; }
private void putHashIndexTask(Transaction t, Map<SnapshotsStreamMetadataTable.SnapshotsStreamMetadataRow, StreamMetadata> rowsToMetadata) { Multimap<SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxRow, SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumnValue> indexMap = HashMultimap.create(); for (Entry<SnapshotsStreamMetadataTable.SnapshotsStreamMetadataRow, StreamMetadata> e : rowsToMetadata.entrySet()) { SnapshotsStreamMetadataTable.SnapshotsStreamMetadataRow row = e.getKey(); StreamMetadata metadata = e.getValue(); Preconditions.checkArgument( metadata.getStatus() == Status.STORED, "Should only index successfully stored streams."); Sha256Hash hash = Sha256Hash.EMPTY; if (metadata.getHash() != com.google.protobuf.ByteString.EMPTY) { hash = new Sha256Hash(metadata.getHash().toByteArray()); } SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxRow hashRow = SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxRow.of(hash); SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumn column = SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumn.of(row.getId()); SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumnValue columnValue = SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumnValue.of(column, 0L); indexMap.put(hashRow, columnValue); } SnapshotsStreamHashAidxTable hiTable = tables.getSnapshotsStreamHashAidxTable(t); hiTable.put(indexMap); }
@Override public byte[] persistColumnName() { return columnName.persistToBytes(); }
public static SnapshotsStreamHashAidxColumn of(long streamId) { return new SnapshotsStreamHashAidxColumn(streamId); }
@Override public SnapshotsStreamHashAidxColumn apply(Long row) { return SnapshotsStreamHashAidxColumn.of(row); } };
@Override public SnapshotsStreamHashAidxColumn hydrateFromBytes(byte[] __input) { int __index = 0; Long streamId = Long.MIN_VALUE ^ PtBytes.toLong(__input, __index); __index += 8; return new SnapshotsStreamHashAidxColumn(streamId); } };
private void putHashIndexTask(Transaction t, Map<SnapshotsStreamMetadataTable.SnapshotsStreamMetadataRow, StreamMetadata> rowsToMetadata) { Multimap<SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxRow, SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumnValue> indexMap = HashMultimap.create(); for (Entry<SnapshotsStreamMetadataTable.SnapshotsStreamMetadataRow, StreamMetadata> e : rowsToMetadata.entrySet()) { SnapshotsStreamMetadataTable.SnapshotsStreamMetadataRow row = e.getKey(); StreamMetadata metadata = e.getValue(); Preconditions.checkArgument( metadata.getStatus() == Status.STORED, "Should only index successfully stored streams."); Sha256Hash hash = Sha256Hash.EMPTY; if (metadata.getHash() != com.google.protobuf.ByteString.EMPTY) { hash = new Sha256Hash(metadata.getHash().toByteArray()); } SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxRow hashRow = SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxRow.of(hash); SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumn column = SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumn.of(row.getId()); SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumnValue columnValue = SnapshotsStreamHashAidxTable.SnapshotsStreamHashAidxColumnValue.of(column, 0L); indexMap.put(hashRow, columnValue); } SnapshotsStreamHashAidxTable hiTable = tables.getSnapshotsStreamHashAidxTable(t); hiTable.put(indexMap); }
@Override public byte[] persistColumnName() { return columnName.persistToBytes(); }
public static SnapshotsStreamHashAidxColumn of(long streamId) { return new SnapshotsStreamHashAidxColumn(streamId); }
@Override public SnapshotsStreamHashAidxColumn hydrateFromBytes(byte[] __input) { int __index = 0; Long streamId = Long.MIN_VALUE ^ PtBytes.toLong(__input, __index); __index += 8; return new SnapshotsStreamHashAidxColumn(streamId); } };
@Override public SnapshotsStreamHashAidxColumn apply(Long row) { return SnapshotsStreamHashAidxColumn.of(row); } };