String systemTableName = MetadataTable.ID.equals(tableId) ? RootTable.NAME : MetadataTable.NAME; MetaDataTableScanner scanner = new MetaDataTableScanner(Monitor.getContext(), new Range(TabletsSection.getRow(tableId, new Text()), TabletsSection.getRow(tableId, null)), systemTableName); while (scanner.hasNext()) { TabletLocationState state = scanner.next(); if (state.current != null) { try { locs.add(state.current.hostPort()); } catch (Exception ex) { scanner.close(); return tabletServers; scanner.close();
@Override public long isReady(long tid, Master master) throws Exception { if (!master.hasCycled(creationTime)) { return 50; } boolean done = true; Range tableRange = new KeyExtent(tableId, null, null).toMetadataRange(); Scanner scanner = master.getContext().createScanner(MetadataTable.NAME, Authorizations.EMPTY); MetaDataTableScanner.configureScanner(scanner, master); scanner.setRange(tableRange); for (Entry<Key,Value> entry : scanner) { TabletLocationState locationState = MetaDataTableScanner .createTabletLocationState(entry.getKey(), entry.getValue()); TabletState state = locationState.getState(master.onlineTabletServers()); if (!state.equals(TabletState.UNASSIGNED)) { // This code will even wait on tablets that are assigned to dead tablets servers. This is // intentional because the master may make metadata writes for these tablets. See #587 log.debug("Still waiting for table to be deleted: " + tableId + " locationState: " + locationState); done = false; break; } } if (!done) return 50; return 0; }
@Override public TabletLocationState next() { return fetch(); }
private TabletLocationState getTabletLocationState(Connector c, String tableId) throws FileNotFoundException, ConfigurationException { Credentials creds = new Credentials(getAdminPrincipal(), getAdminToken()); ClientContext context = new ClientContext(c.getInstance(), creds, getCluster().getClientConfig()); MetaDataTableScanner s = new MetaDataTableScanner(context, new Range(KeyExtent.getMetadataEntry(tableId, null))); TabletLocationState tlState = s.next(); s.close(); return tlState; } }
private void scan(ClientContext ctx, String tableName) throws Exception { Map<String,String> idMap = ctx.getConnector().tableOperations().tableIdMap(); String tableId = Objects.requireNonNull(idMap.get(tableName)); try (MetaDataTableScanner scanner = new MetaDataTableScanner(ctx, new Range())) { while (scanner.hasNext()) { TabletLocationState tls = scanner.next(); if (!tls.extent.getTableId().equals(tableId)) { continue; } locationStates.put(tls.extent, tls); if (tls.suspend != null) { suspended.put(tls.suspend.server, tls.extent); ++suspendedCount; } else if (tls.current != null) { hosted.put(tls.current.getLocation(), tls.extent); ++hostedCount; } else if (tls.future != null) { ++assignedCount; } else { // unassigned case } } } } }
final AtomicBoolean scanning = new AtomicBoolean(false); Instance instance = opts.getInstance(); MetaDataTableScanner rootScanner = new MetaDataTableScanner(instance, SecurityConstants.getSystemCredentials(), Constants.METADATA_ROOT_TABLET_KEYSPACE); MetaDataTableScanner metaScanner = new MetaDataTableScanner(instance, SecurityConstants.getSystemCredentials(), Constants.NON_ROOT_METADATA_KEYSPACE); try { @SuppressWarnings("unchecked") rootScanner.close(); metaScanner.close();
@Override public ClosableIterator<TabletLocationState> iterator() { return new MetaDataTableScanner(context, MetadataSchema.TabletsSection.getRange(), state, RootTable.NAME); }
@Override protected void finalize() { close(); }
MetaDataTableScanner(ClientContext context, Range range, CurrentState state, String tableName) { // scan over metadata table, looking for tablets in the wrong state based on the live servers // and online tables try { mdScanner = context.createBatchScanner(tableName, Authorizations.EMPTY, 8); configureScanner(mdScanner, state); mdScanner.setRanges(Collections.singletonList(range)); iter = mdScanner.iterator(); } catch (Exception ex) { if (mdScanner != null) mdScanner.close(); iter = null; mdScanner = null; throw new RuntimeException(ex); } }
private TabletLocationState fetch() { try { Entry<Key,Value> e = iter.next(); return createTabletLocationState(e.getKey(), e.getValue()); } catch (IOException | BadLocationStateException ex) { throw new RuntimeException(ex); } }
Iterator<TabletLocationState> rootScanner = new MetaDataTableScanner(context, MetadataSchema.TabletsSection.getRange(), RootTable.NAME); if ((offline = checkTablets(rootScanner, tservers)) > 0) MetaDataTableScanner metaScanner = new MetaDataTableScanner(context, range, MetadataTable.NAME); try { return checkTablets(metaScanner, tservers); } finally { metaScanner.close();
@Override public ClosableIterator<TabletLocationState> iterator() { return new MetaDataTableScanner(context, MetadataSchema.TabletsSection.getRange(), state, targetTableName); }
@Override public boolean hasNext() { if (iter == null) return false; boolean result = iter.hasNext(); if (!result) { close(); } return result; }
private int findTabletsNeedingAttention(String table, State state) throws TableNotFoundException { int results = 0; Scanner scanner = getConnector().createScanner(table, Authorizations.EMPTY); MetaDataTableScanner.configureScanner(scanner, state); scanner.updateScanIteratorOption("tabletChange", "debug", "1"); for (Entry<Key,Value> e : scanner) { if (e != null) results++; } return results; }
tls = MetaDataTableScanner.createTabletLocationState(k, v); if (tls == null) return;
private void doTableDetails(HttpServletRequest req, StringBuilder sb, Map<String,String> tidToNameMap, String tableId) { String displayName = Tables.getPrintableTableNameFromId(tidToNameMap, tableId); Instance instance = HdfsZooInstance.getInstance(); MetaDataTableScanner scanner = new MetaDataTableScanner(instance, SecurityConstants.getSystemCredentials(), new Range(KeyExtent.getMetadataEntry(new Text( tableId), new Text()), KeyExtent.getMetadataEntry(new Text(tableId), null))); while (scanner.hasNext()) { TabletLocationState state = scanner.next(); if (state.current != null) { try { scanner.close(); log.debug("Locs: " + locs);
Scanner scanner = accumuloClient .createScanner(extent.isMeta() ? RootTable.NAME : MetadataTable.NAME, Authorizations.EMPTY); MetaDataTableScanner.configureScanner(scanner, master); Text start = extent.getPrevEndRow(); if (start == null) { TabletLocationState tls; try { tls = MetaDataTableScanner.createTabletLocationState(entry.getKey(), entry.getValue()); } catch (BadLocationStateException e) { log.error("{}", e.getMessage(), e);
Iterator<TabletLocationState> rootScanner = new MetaDataTableScanner(context, MetadataSchema.TabletsSection.getRange(), RootTable.NAME); if ((offline = checkTablets(context, rootScanner, tservers)) > 0) try (MetaDataTableScanner metaScanner = new MetaDataTableScanner(context, range, MetadataTable.NAME)) { return checkTablets(context, metaScanner, tservers);
@Override protected void finalize() { close(); }
MetaDataTableScanner(ClientContext context, Range range, CurrentState state, String tableName) { // scan over metadata table, looking for tablets in the wrong state based on the live servers // and online tables try { Connector connector = context.getConnector(); mdScanner = connector.createBatchScanner(tableName, Authorizations.EMPTY, 8); configureScanner(mdScanner, state); mdScanner.setRanges(Collections.singletonList(range)); iter = mdScanner.iterator(); } catch (Exception ex) { if (mdScanner != null) mdScanner.close(); iter = null; mdScanner = null; throw new RuntimeException(ex); } }