@Test public void testMultipleCellsInMultipleFamiliesAreConverted() { byte[] row = dataHelper.randomData("rk-"); byte[] family1 = dataHelper.randomData("f1"); byte[] family2 = dataHelper.randomData("f2"); byte[] qualifier1 = dataHelper.randomData("qual1"); byte[] qualifier2 = dataHelper.randomData("qual2"); byte[] value1 = dataHelper.randomData("v1"); byte[] value2 = dataHelper.randomData("v1"); long timestamp1 = 1L; long timestamp2 = 2L; Put hbasePut = new Put(row); hbasePut.addColumn(family1, qualifier1, timestamp1, value1); hbasePut.addColumn(family2, qualifier2, timestamp2, value2); MutateRowRequest request = adapt(hbasePut); Assert.assertArrayEquals(row, request.getRowKey().toByteArray()); Assert.assertEquals(2, request.getMutationsCount()); Mutation mutation1 = request.getMutations(0); Assert.assertEquals(MutationCase.SET_CELL, mutation1.getMutationCase()); SetCell setCell = mutation1.getSetCell(); Assert.assertArrayEquals(family1, setCell.getFamilyNameBytes().toByteArray()); Assert.assertArrayEquals(qualifier1, setCell.getColumnQualifier().toByteArray()); Assert.assertEquals(TimeUnit.MILLISECONDS.toMicros(timestamp1), setCell.getTimestampMicros()); Assert.assertArrayEquals(value1, setCell.getValue().toByteArray()); Mutation mutation2 = request.getMutations(1); SetCell setCell2 = mutation2.getSetCell(); Assert.assertArrayEquals(family2, setCell2.getFamilyNameBytes().toByteArray()); Assert.assertArrayEquals(qualifier2, setCell2.getColumnQualifier().toByteArray()); Assert.assertEquals(TimeUnit.MILLISECONDS.toMicros(timestamp2), setCell2.getTimestampMicros()); Assert.assertArrayEquals(value2, setCell2.getValue().toByteArray()); }
@Override public void adapt( Put operation, com.google.cloud.bigtable.data.v2.models.MutationApi<?> mutation) { if (operation.isEmpty()) { throw new IllegalArgumentException("No columns to insert"); } long currentTimestampMicros = setClientTimestamp ? clock.currentTimeMillis() * 1000 : -1; final int rowLength = operation.getRow().length; for (Entry<byte[], List<Cell>> entry : operation.getFamilyCellMap().entrySet()) { ByteString familyString = ByteString.copyFrom(entry.getKey()); int familySize = familyString.size(); for (Cell cell : entry.getValue()) { int qualifierLength = cell.getQualifierLength(); int valueLength = cell.getValueLength(); int keyValueSize = (20 + rowLength + familySize + qualifierLength + valueLength); if (maxKeyValueSize > 0 && keyValueSize > maxKeyValueSize) { throw new IllegalArgumentException("KeyValue size too large"); } ByteString cellQualifierByteString = ByteString.copyFrom( cell.getQualifierArray(), cell.getQualifierOffset(), qualifierLength); ByteString value = ByteString.copyFrom(cell.getValueArray(), cell.getValueOffset(), valueLength); long timestampMicros = currentTimestampMicros; if (cell.getTimestamp() != HConstants.LATEST_TIMESTAMP) { timestampMicros = TimestampConverter.hbase2bigtable(cell.getTimestamp()); } mutation.setCell( familyString.toStringUtf8(), cellQualifierByteString, timestampMicros, value); } } }
PutAdapter extends MutationAdapter<Put> { @Override public void adapt( Put operation, com.google.cloud.bigtable.data.v2.models.MutationApi<?> mutation) { if (operation.isEmpty()) { throw new IllegalArgumentException("No columns to insert"); } long currentTimestampMicros = setClientTimestamp ? clock.currentTimeMillis() * 1000 : -1; final int rowLength = operation.getRow().length; for (Entry<byte[], List<Cell>> entry : operation.getFamilyCellMap().entrySet()) { ByteString familyString = ByteString.copyFrom(entry.getKey()); int familySize = familyString.size(); for (Cell cell : entry.getValue()) { int qualifierLength = cell.getQualifierLength(); int valueLength = cell.getValueLength(); int keyValueSize = (20 + rowLength + familySize + qualifierLength + valueLength); if (maxKeyValueSize > 0 && keyValueSize > maxKeyValueSize) { throw new IllegalArgumentException("KeyValue size too large"); } ByteString cellQualifierByteString = ByteString.copyFrom( cell.getQualifierArray(), cell.getQualifierOffset(), qualifierLength); ByteString value = ByteString.copyFrom(cell.getValueArray(), cell.getValueOffset(), valueLength); long timestampMicros = currentTimestampMicros; if (cell.getTimestamp() != HConstants.LATEST_TIMESTAMP) { timestampMicros = TimestampConverter.hbase2bigtable(cell.getTimestamp()); } mutation.setCell( familyString.toStringUtf8(), cellQualifierByteString, timestampMicros, value); } } } }
PutAdapter extends MutationAdapter<Put> { @Override public void adapt( Put operation, com.google.cloud.bigtable.data.v2.models.MutationApi<?> mutation) { if (operation.isEmpty()) { throw new IllegalArgumentException("No columns to insert"); } long currentTimestampMicros = setClientTimestamp ? clock.currentTimeMillis() * 1000 : -1; final int rowLength = operation.getRow().length; for (Entry<byte[], List<Cell>> entry : operation.getFamilyCellMap().entrySet()) { ByteString familyString = ByteString.copyFrom(entry.getKey()); int familySize = familyString.size(); for (Cell cell : entry.getValue()) { int qualifierLength = cell.getQualifierLength(); int valueLength = cell.getValueLength(); int keyValueSize = (20 + rowLength + familySize + qualifierLength + valueLength); if (maxKeyValueSize > 0 && keyValueSize > maxKeyValueSize) { throw new IllegalArgumentException("KeyValue size too large"); } ByteString cellQualifierByteString = ByteString.copyFrom( cell.getQualifierArray(), cell.getQualifierOffset(), qualifierLength); ByteString value = ByteString.copyFrom(cell.getValueArray(), cell.getValueOffset(), valueLength); long timestampMicros = currentTimestampMicros; if (cell.getTimestamp() != HConstants.LATEST_TIMESTAMP) { timestampMicros = TimestampConverter.hbase2bigtable(cell.getTimestamp()); } mutation.setCell( familyString.toStringUtf8(), cellQualifierByteString, timestampMicros, value); } } } PutAdapter(int maxKeyValueSize);  PutAdapter(int maxKeyValueSize, boolean setClientTimestamp); }
PutAdapter extends MutationAdapter<Put> { @Override public void adapt( Put operation, com.google.cloud.bigtable.data.v2.models.MutationApi<?> mutation) { if (operation.isEmpty()) { throw new IllegalArgumentException("No columns to insert"); } long currentTimestampMicros = setClientTimestamp ? clock.currentTimeMillis() * 1000 : -1; final int rowLength = operation.getRow().length; for (Entry<byte[], List<Cell>> entry : operation.getFamilyCellMap().entrySet()) { ByteString familyString = ByteString.copyFrom(entry.getKey()); int familySize = familyString.size(); for (Cell cell : entry.getValue()) { int qualifierLength = cell.getQualifierLength(); int valueLength = cell.getValueLength(); int keyValueSize = (20 + rowLength + familySize + qualifierLength + valueLength); if (maxKeyValueSize > 0 && keyValueSize > maxKeyValueSize) { throw new IllegalArgumentException("KeyValue size too large"); } ByteString cellQualifierByteString = ByteString.copyFrom( cell.getQualifierArray(), cell.getQualifierOffset(), qualifierLength); ByteString value = ByteString.copyFrom(cell.getValueArray(), cell.getValueOffset(), valueLength); long timestampMicros = currentTimestampMicros; if (cell.getTimestamp() != HConstants.LATEST_TIMESTAMP) { timestampMicros = TimestampConverter.hbase2bigtable(cell.getTimestamp()); } mutation.setCell( familyString.toStringUtf8(), cellQualifierByteString, timestampMicros, value); } } } PutAdapter(int maxKeyValueSize);  PutAdapter(int maxKeyValueSize, boolean setClientTimestamp); @Override void adapt(
      Put operation, com.google.cloud.bigtable.data.v2.models.MutationApi<?> mutation); }
PutAdapter extends MutationAdapter<Put> { @Override public void adapt( Put operation, com.google.cloud.bigtable.data.v2.models.MutationApi<?> mutation) { if (operation.isEmpty()) { throw new IllegalArgumentException("No columns to insert"); } long currentTimestampMicros = setClientTimestamp ? clock.currentTimeMillis() * 1000 : -1; final int rowLength = operation.getRow().length; for (Entry<byte[], List<Cell>> entry : operation.getFamilyCellMap().entrySet()) { ByteString familyString = ByteString.copyFrom(entry.getKey()); int familySize = familyString.size(); for (Cell cell : entry.getValue()) { int qualifierLength = cell.getQualifierLength(); int valueLength = cell.getValueLength(); int keyValueSize = (20 + rowLength + familySize + qualifierLength + valueLength); if (maxKeyValueSize > 0 && keyValueSize > maxKeyValueSize) { throw new IllegalArgumentException("KeyValue size too large"); } ByteString cellQualifierByteString = ByteString.copyFrom( cell.getQualifierArray(), cell.getQualifierOffset(), qualifierLength); ByteString value = ByteString.copyFrom(cell.getValueArray(), cell.getValueOffset(), valueLength); long timestampMicros = currentTimestampMicros; if (cell.getTimestamp() != HConstants.LATEST_TIMESTAMP) { timestampMicros = TimestampConverter.hbase2bigtable(cell.getTimestamp()); } mutation.setCell( familyString.toStringUtf8(), cellQualifierByteString, timestampMicros, value); } } } PutAdapter(int maxKeyValueSize);  PutAdapter(int maxKeyValueSize, boolean setClientTimestamp); @Override void adapt(
      Put operation, com.google.cloud.bigtable.data.v2.models.MutationApi<?> mutation);  }