private void deleteFamily(String family, String row, long version) throws IOException { Delete del = new Delete(Bytes.toBytes(row)); del.addFamily(Bytes.toBytes(family + "_ROWCOL"), version); del.addFamily(Bytes.toBytes(family + "_ROW"), version); del.addFamily(Bytes.toBytes(family + "_NONE"), version); region.delete(del); }
@Test public void testDelete_CheckFamily() throws IOException { byte[] row1 = Bytes.toBytes("row1"); byte[] fam1 = Bytes.toBytes("fam1"); byte[] fam2 = Bytes.toBytes("fam2"); byte[] fam3 = Bytes.toBytes("fam3"); byte[] fam4 = Bytes.toBytes("fam4"); // Setting up region this.region = initHRegion(tableName, method, CONF, fam1, fam2, fam3); List<Cell> kvs = new ArrayList<>(); kvs.add(new KeyValue(row1, fam4, null, null)); // testing existing family byte[] family = fam2; NavigableMap<byte[], List<Cell>> deleteMap = new TreeMap<>(Bytes.BYTES_COMPARATOR); deleteMap.put(family, kvs); region.delete(deleteMap, Durability.SYNC_WAL); // testing non existing family boolean ok = false; family = fam4; try { deleteMap = new TreeMap<>(Bytes.BYTES_COMPARATOR); deleteMap.put(family, kvs); region.delete(deleteMap, Durability.SYNC_WAL); } catch (Exception e) { ok = true; } assertTrue("Family " + new String(family, StandardCharsets.UTF_8) + " does exist", ok); }
LOG.debug("put iteration = {}", numPutsFinished); Delete delete = new Delete(row, (long) numPutsFinished - 30); region.delete(delete);
private void deleteColumns(HRegion r, String value, String keyPrefix) throws IOException { InternalScanner scanner = buildScanner(keyPrefix, value, r); int count = 0; boolean more = false; List<Cell> results = new ArrayList<>(); do { more = scanner.next(results); if (results != null && !results.isEmpty()) count++; else break; Delete delete = new Delete(CellUtil.cloneRow(results.get(0))); delete.addColumn(Bytes.toBytes("trans-tags"), Bytes.toBytes("qual2")); r.delete(delete); results.clear(); } while (more); assertEquals("Did not perform correct number of deletes", 3, count); }
@Test public void testDeleteRowWithFutureTs() throws IOException { byte[] fam = Bytes.toBytes("info"); byte[][] families = { fam }; this.region = initHRegion(tableName, method, CONF, families); byte[] row = Bytes.toBytes("table_name"); // column names byte[] serverinfo = Bytes.toBytes("serverinfo"); // add data in the far future Put put = new Put(row); put.addColumn(fam, serverinfo, HConstants.LATEST_TIMESTAMP - 5, Bytes.toBytes("value")); region.put(put); // now delete something in the present Delete delete = new Delete(row); region.delete(delete); // make sure we still see our data Get get = new Get(row).addColumn(fam, serverinfo); Result result = region.get(get); assertEquals(1, result.size()); // delete the future row delete = new Delete(row, HConstants.LATEST_TIMESTAMP - 3); region.delete(delete); // make sure it is gone get = new Get(row).addColumn(fam, serverinfo); result = region.get(get); assertEquals(0, result.size()); }
@Test public void testDelete_multiDeleteColumn() throws IOException { byte[] row1 = Bytes.toBytes("row1"); byte[] fam1 = Bytes.toBytes("fam1"); byte[] qual = Bytes.toBytes("qualifier"); byte[] value = Bytes.toBytes("value"); Put put = new Put(row1); put.addColumn(fam1, qual, 1, value); put.addColumn(fam1, qual, 2, value); this.region = initHRegion(tableName, method, CONF, fam1); region.put(put); // We do support deleting more than 1 'latest' version Delete delete = new Delete(row1); delete.addColumn(fam1, qual); delete.addColumn(fam1, qual); region.delete(delete); Get get = new Get(row1); get.addFamily(fam1); Result r = region.get(get); assertEquals(0, r.size()); }
region.delete(delete); region.flush(true);
@Test public void testScanner_DeleteOneFamilyNotAnother() throws IOException { byte[] fam1 = Bytes.toBytes("columnA"); byte[] fam2 = Bytes.toBytes("columnB"); this.region = initHRegion(tableName, method, CONF, fam1, fam2); byte[] rowA = Bytes.toBytes("rowA"); byte[] rowB = Bytes.toBytes("rowB"); byte[] value = Bytes.toBytes("value"); Delete delete = new Delete(rowA); delete.addFamily(fam1); region.delete(delete); // now create data. Put put = new Put(rowA); put.addColumn(fam2, null, value); region.put(put); put = new Put(rowB); put.addColumn(fam1, null, value); put.addColumn(fam2, null, value); region.put(put); Scan scan = new Scan(); scan.addFamily(fam1).addFamily(fam2); InternalScanner s = region.getScanner(scan); List<Cell> results = new ArrayList<>(); s.next(results); assertTrue(CellUtil.matchingRows(results.get(0), rowA)); results.clear(); s.next(results); assertTrue(CellUtil.matchingRows(results.get(0), rowB)); }
@Test public void testDelete_CheckTimestampUpdated() throws IOException { byte[] row1 = Bytes.toBytes("row1"); byte[] col1 = Bytes.toBytes("col1"); byte[] col2 = Bytes.toBytes("col2"); byte[] col3 = Bytes.toBytes("col3"); // Setting up region this.region = initHRegion(tableName, method, CONF, fam1); // Building checkerList List<Cell> kvs = new ArrayList<>(); kvs.add(new KeyValue(row1, fam1, col1, null)); kvs.add(new KeyValue(row1, fam1, col2, null)); kvs.add(new KeyValue(row1, fam1, col3, null)); NavigableMap<byte[], List<Cell>> deleteMap = new TreeMap<>(Bytes.BYTES_COMPARATOR); deleteMap.put(fam1, kvs); region.delete(deleteMap, Durability.SYNC_WAL); // extract the key values out the memstore: // This is kinda hacky, but better than nothing... long now = System.currentTimeMillis(); AbstractMemStore memstore = (AbstractMemStore)region.getStore(fam1).memstore; Cell firstCell = memstore.getActive().first(); assertTrue(firstCell.getTimestamp() <= now); now = firstCell.getTimestamp(); for (Cell cell : memstore.getActive().getCellSet()) { assertTrue(cell.getTimestamp() <= now); now = cell.getTimestamp(); } }
region.delete(del); region.flush(true);
@Test public void testIndexesScanWithOneDeletedRow() throws IOException { byte[] family = Bytes.toBytes("family"); // Setting up region this.region = initHRegion(tableName, method, CONF, family); Put put = new Put(Bytes.toBytes(1L)); put.addColumn(family, qual1, 1L, Bytes.toBytes(1L)); region.put(put); region.flush(true); Delete delete = new Delete(Bytes.toBytes(1L), 1L); region.delete(delete); put = new Put(Bytes.toBytes(2L)); put.addColumn(family, qual1, 2L, Bytes.toBytes(2L)); region.put(put); Scan idxScan = new Scan(); idxScan.addFamily(family); idxScan.setFilter(new FilterList(FilterList.Operator.MUST_PASS_ALL, Arrays.<Filter> asList( new SingleColumnValueFilter(family, qual1, CompareOp.GREATER_OR_EQUAL, new BinaryComparator(Bytes.toBytes(0L))), new SingleColumnValueFilter(family, qual1, CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes(3L)))))); InternalScanner scanner = region.getScanner(idxScan); List<Cell> res = new ArrayList<>(); while (scanner.next(res)) { // Ignore res value. } assertEquals(1L, res.size()); }
region.delete(dc); region.flush(true);
List<Cell> results = new ArrayList<>(); boolean result = s.next(results); r.delete(new Delete(CellUtil.cloneRow(results.get(0)))); if (!result) break; originalCount++;
boolean result = s.next(results); assertTrue(!results.isEmpty()); r.delete(new Delete(CellUtil.cloneRow(results.get(0)))); if (!result) { break;
region.delete(d);
region.delete(delete);
@Test public void testWriteRequestsCounter() throws IOException { byte[] fam = Bytes.toBytes("info"); byte[][] families = { fam }; this.region = initHRegion(tableName, method, CONF, families); Assert.assertEquals(0L, region.getWriteRequestsCount()); Put put = new Put(row); put.addColumn(fam, fam, fam); Assert.assertEquals(0L, region.getWriteRequestsCount()); region.put(put); Assert.assertEquals(1L, region.getWriteRequestsCount()); region.put(put); Assert.assertEquals(2L, region.getWriteRequestsCount()); region.put(put); Assert.assertEquals(3L, region.getWriteRequestsCount()); region.delete(new Delete(row)); Assert.assertEquals(4L, region.getWriteRequestsCount()); }
region.delete(d);
region.delete(d);