/** {@inheritDoc} */ @Override public NavigableMap<Long, FijiTableLayout> getTimedTableLayoutVersions( String table, int numVersions) throws IOException { Preconditions.checkArgument(numVersions >= 1, "numVersions must be positive"); // Gather the layout data from the Htable. final Get get = new Get(Bytes.toBytes(table)) .addColumn(mFamilyBytes, QUALIFIER_LAYOUT_BYTES) .setMaxVersions(numVersions); final Result result = mTable.get(get); /** Map from timestamp to table layout. */ final NavigableMap<Long, FijiTableLayout> timedLayouts = Maps.newTreeMap(); // Pull out the full map: family -> qualifier -> timestamp -> TableLayoutDesc. // Family and qualifier are already specified : the 2 outer maps must be size 11. final NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> familyMap = result.getMap(); Preconditions.checkState(familyMap.size() == 1); final NavigableMap<byte[], NavigableMap<Long, byte[]>> qualifierMap = familyMap.get(familyMap.firstKey()); Preconditions.checkState(qualifierMap.size() == 1); final NavigableMap<Long, byte[]> timeSerieMap = qualifierMap.get(qualifierMap.firstKey()); for (Map.Entry<Long, byte[]> timeSerieEntry : timeSerieMap.entrySet()) { final long timestamp = timeSerieEntry.getKey(); final byte[] bytes = timeSerieEntry.getValue(); final FijiTableLayout layout = FijiTableLayout.newLayout(decodeTableLayoutDesc(bytes)); Preconditions.checkState(timedLayouts.put(timestamp, layout) == null); } return timedLayouts; }
/** {@inheritDoc} */ @Override public List<FijiTableLayout> getTableLayoutVersions(String table, int numVersions) throws IOException { Preconditions.checkArgument(numVersions >= 1, "numVersions must be positive"); final Get get = new Get(Bytes.toBytes(table)) .addColumn(mFamilyBytes, QUALIFIER_LAYOUT_BYTES) .setMaxVersions(numVersions); final Result result = mTable.get(get); final List<FijiTableLayout> layouts = Lists.newArrayList(); for (KeyValue column : result.getColumn(mFamilyBytes, QUALIFIER_LAYOUT_BYTES)) { layouts.add(FijiTableLayout.newLayout(decodeTableLayoutDesc(column.getValue()))); } return layouts; }
final TableLayoutDesc layout = decodeTableLayoutDesc(serieEntry.getValue()); TableLayoutDesc update = null; if (updateSerieMap != null) { final byte[] bytes = updateSerieMap.get(timestamp); if (bytes != null) { update = decodeTableLayoutDesc(bytes);