private static boolean startsAfter(KeyExtent nke, KeyExtent ke) { int tiCmp = ke.getTableId().compareTo(nke.getTableId()); if (tiCmp > 0) { return true; } return ke.getPrevEndRow() != null && nke.getEndRow() != null && ke.getPrevEndRow().compareTo(nke.getEndRow()) >= 0; }
@Override @Deprecated public org.apache.accumulo.core.data.KeyExtent getExtent() { KeyExtent ke = new KeyExtent(tac.getExtent()); org.apache.accumulo.core.data.KeyExtent oke = new org.apache.accumulo.core.data.KeyExtent( new Text(ke.getTableId()), ke.getEndRow(), ke.getPrevEndRow()); return oke; }
/** * Returns a String representing this extent's entry in the Metadata table * */ public Text getMetadataEntry() { return getMetadataEntry(getTableId(), getEndRow()); }
public KeyExtent(KeyExtent extent) { // extent has already deduped table id, so there is no need to do it again this.tableId = extent.tableId; this.setEndRow(extent.getEndRow(), false, true); this.setPrevEndRow(extent.getPrevEndRow(), false, true); check(); }
public static byte[] tableOfMetadataRow(Text row) { KeyExtent ke = new KeyExtent(); ke.decodeMetadataRow(row); return ke.getTableId().getBytes(UTF_8); }
private void deleteTablets(MergeInfo info) throws AccumuloException { KeyExtent extent = info.getExtent(); String targetSystemTable = extent.isMeta() ? RootTable.NAME : MetadataTable.NAME; Master.log.debug("Deleting tablets for " + extent); char timeType = '\0'; KeyExtent followingTablet = null; if (extent.getEndRow() != null) { Key nextExtent = new Key(extent.getEndRow()).followingKey(PartialKey.ROW); followingTablet = getHighTablet( new KeyExtent(extent.getTableId(), nextExtent.getRow(), extent.getEndRow())); Master.log.debug("Found following tablet " + followingTablet); Text start = extent.getPrevEndRow(); if (start == null) { start = new Text(); Range deleteRange = new Range(KeyExtent.getMetadataEntry(extent.getTableId(), start), false, KeyExtent.getMetadataEntry(extent.getTableId(), extent.getEndRow()), true); Scanner scanner = conn.createScanner(targetSystemTable, Authorizations.EMPTY); scanner.setRange(deleteRange); } else { datafiles.add(new FileRef(path, this.master.fs.getFullPath(FileType.TABLE, Path.SEPARATOR + extent.getTableId() + path))); .debug("Updating prevRow of " + followingTablet + " to " + extent.getPrevEndRow()); bw = conn.createBatchWriter(targetSystemTable, new BatchWriterConfig()); try { Mutation m = new Mutation(followingTablet.getMetadataEntry()); TabletsSection.TabletColumnFamily.PREV_ROW_COLUMN.put(m,
static int checkTable(ClientContext context, String tableName, boolean fix) throws Exception { if (tableName.equals(RootTable.NAME)) { throw new IllegalArgumentException("Can not check root table"); } else if (tableName.equals(MetadataTable.NAME)) { return checkTable(context, RootTable.NAME, MetadataSchema.TabletsSection.getRange(), fix); } else { String tableId = Tables.getTableId(context.getInstance(), tableName); Range range = new KeyExtent(tableId, null, null).toMetadataRange(); return checkTable(context, MetadataTable.NAME, range, fix); } }
private static boolean stopRemoving(KeyExtent nke, KeyExtent ke) { return ke.getPrevEndRow() != null && nke.getEndRow() != null && ke.getPrevEndRow().compareTo(nke.getEndRow()) >= 0; }
public boolean needsToBeChopped(KeyExtent otherExtent) { // During a delete, the block after the merge will be stretched to cover the deleted area. // Therefore, it needs to be chopped if (!otherExtent.getTableId().equals(extent.getTableId())) return false; if (isDelete()) return otherExtent.getPrevEndRow() != null && otherExtent.getPrevEndRow().equals(extent.getEndRow()); else return this.extent.overlaps(otherExtent); }
if (tls.extent.overlaps(range)) { for (Text splitPoint : new Text[] {range.getPrevEndRow(), range.getEndRow()}) { if (splitPoint == null) continue; if (!tls.extent.contains(splitPoint)) continue; if (splitPoint.equals(tls.extent.getEndRow())) continue; if (splitPoint.equals(tls.extent.getPrevEndRow())) continue; try {
public Range toMetadataRange() { Text metadataPrevRow = new Text(getTableId()); metadataPrevRow.append(new byte[] {';'}, 0, 1); if (getPrevEndRow() != null) { metadataPrevRow.append(getPrevEndRow().getBytes(), 0, getPrevEndRow().getLength()); } Range range = new Range(metadataPrevRow, getPrevEndRow() == null, getMetadataEntry(), true); return range; }
conn.tableOperations().create(tableName); KeyExtent ke = new KeyExtent("0", null, null); Mutation mut = ke.getPrevRowUpdateMutation(); Mutation mut2 = new Mutation(ke.getMetadataEntry()); mut2.putDelete(DataFileColumnFamily.NAME.toString(), "/default_tablet/0_0.rf"); mut2.put(DataFileColumnFamily.NAME.toString(), "/default_tablet/1_0.rf", scanner.setRange(new KeyExtent("1", null, null).toMetadataRange());
Key prevRowKey = new Key(new Text(KeyExtent.getMetadataEntry(table, metadataPrevEndRow))); if (!scanner2.iterator().hasNext()) { log.info("Rolling back incomplete split " + metadataEntry + " " + metadataPrevEndRow); MetadataTableUtil.rollBackSplit(metadataEntry, KeyExtent.decodePrevEndRow(oper), context, lock); return new KeyExtent(metadataEntry, KeyExtent.decodePrevEndRow(oper)); } else { log.info("Finishing incomplete split " + metadataEntry + " " + metadataPrevEndRow); context, lock); return new KeyExtent(metadataEntry, KeyExtent.encodePrevEndRow(metadataPrevEndRow));
public KeyExtent(Text table, Text endRow, Text prevEndRow) { this.wrapped = new org.apache.accumulo.core.data.impl.KeyExtent(table.toString(), endRow, prevEndRow); }
private static Mutation deleteTablet(String tid, String endRow, String prevRow, String dir, String file) throws Exception { KeyExtent ke = new KeyExtent(tid, endRow == null ? null : new Text(endRow), prevRow == null ? null : new Text(prevRow)); Mutation mut = new Mutation(ke.getMetadataEntry()); TabletsSection.TabletColumnFamily.PREV_ROW_COLUMN.putDelete(mut); TabletsSection.ServerColumnFamily.TIME_COLUMN.putDelete(mut); TabletsSection.ServerColumnFamily.DIRECTORY_COLUMN.putDelete(mut); mut.putDelete(DataFileColumnFamily.NAME.toString(), file); return mut; }
public static Mutation getPrevRowUpdateMutation(KeyExtent ke) { Mutation m = new Mutation(ke.getMetadataEntry()); TabletsSection.TabletColumnFamily.PREV_ROW_COLUMN.put(m, encodePrevEndRow(ke.getPrevEndRow())); return m; }
if (startRow == null || !ke.contains(startRow)) { if (ke.getPrevEndRow() != null) { startKey = followingKey(encoder, getKeyClass(), getBytes(ke.getPrevEndRow())); if (endRow == null || !ke.contains(endRow)) { if (ke.getEndRow() != null) endKey = lastPossibleKey(encoder, getKeyClass(), getBytes(ke.getEndRow())); } else { endKey = fromBytes(getKeyClass(), getBytes(endRow));
public Text getRow() { return extent.getMetadataEntry(); }
String tableId = connector.tableOperations().tableIdMap().get(tableName); KeyExtent extent = new KeyExtent(tableId, null, new Text("b")); Mutation m = extent.getPrevRowUpdateMutation(); KeyExtent.encodePrevEndRow(null)); bw = connector.createBatchWriter(MetadataTable.NAME, new BatchWriterConfig()); bw.addMutation(m); scanner.setRange(extent.toMetadataRange()); scanner.fetchColumnFamily(DataFileColumnFamily.NAME); KeyExtent extent2 = new KeyExtent(tableId, new Text("b"), null); m = extent2.getPrevRowUpdateMutation(); TabletsSection.ServerColumnFamily.DIRECTORY_COLUMN.put(m, new Value("/t2".getBytes())); TabletsSection.ServerColumnFamily.TIME_COLUMN.put(m, new Value("M0".getBytes()));
@Override public String getTable() throws TableNotFoundException { return Tables.getTableName(instance, new KeyExtent(tac.getExtent()).getTableId()); }