/** * Delete a DerefMap. This will delete the corresponding hbase tables. * * @param indexName name of the index to delete * @param hbaseConfiguration hbase configuration * @throws IOException * @throws IndexNotFoundException if the index doesn't exist (maybe it was already deleted?) */ public static void delete(final String indexName, final Configuration hbaseConfiguration) throws IOException, IndexNotFoundException { final IndexManager manager = new IndexManager(hbaseConfiguration); manager.deleteIndex(forwardIndexName(indexName)); manager.deleteIndex(backwardIndexName(indexName)); }
@PostConstruct public void start() throws InterruptedException, KeeperException, IOException, IndexNotFoundException, RepositoryException { if (linkIndexEnabled) { // assure the subscription exists sepModel.addSubscriptionSilent("LinkIndexUpdater"); } else { // assure the subscription doesn't exist sepModel.removeSubscriptionSilent("LinkIndexUpdater"); } if (linkIndexEnabled) { IndexManager indexManager = new IndexManager(hbaseConf, tableFactory); LinkIndex linkIndex = new LinkIndex(indexManager, /* TODO multiple repositories */ repositoryManager); LinkIndexUpdater linkIndexUpdater = new LinkIndexUpdater(repositoryManager, linkIndex); sepConsumer = new SepConsumer("LinkIndexUpdater", 0L, linkIndexUpdater, threads, hostName, new ZooKeeperItfAdapter(zk), hbaseConf, new LilyPayloadExtractor()); sepConsumer.start(); } }
/** * Private constructor. Clients should use static factory methods {@link #delete(String, * org.apache.hadoop.conf.Configuration)} and {@link #create(String, Configuration, HBaseTableFactory, * IdGenerator)} */ private DerefMapHbaseImpl(final String owningRepoName, final String indexName, final Configuration hbaseConfiguration, final HBaseTableFactory tableFactory, final IdGenerator idGenerator) throws IndexNotFoundException, IOException, InterruptedException { this.serializationUtil = new DerefMapSerializationUtil(idGenerator); final IndexManager indexManager = new IndexManager(hbaseConfiguration, tableFactory); IndexDefinition forwardIndexDef = new IndexDefinition(forwardIndexName(indexName)); // For the record ID we use a variable length byte array field of which the first two bytes are fixed length // The first byte is actually the record identifier byte. // The second byte really is the first byte of the record id. We put this in the fixed length part // (safely because a record id should at least be a single byte long) because this prevents BCD encoding // on the first byte, thus making it easier to configure table splitting based on the original input. forwardIndexDef.addVariableLengthByteField("dependant_recordid", 2); forwardIndexDef.addByteField("dependant_vtag", DerefMapSerializationUtil.SCHEMA_ID_BYTE_LENGTH); forwardDerefIndex = indexManager.getIndex(owningRepoName, forwardIndexDef); IndexDefinition backwardIndexDef = new IndexDefinition(backwardIndexName(indexName)); // Same remark as in the forward index. backwardIndexDef.addVariableLengthByteField("dependency_masterrecordid", 2); backwardIndexDef.addByteField("dependant_vtag", DerefMapSerializationUtil.SCHEMA_ID_BYTE_LENGTH); backwardIndexDef.addVariableLengthByteField("variant_properties_pattern"); backwardDerefIndex = indexManager.getIndex(owningRepoName, backwardIndexDef); }