repositoryModel.create(repositoryName); } catch (RepositoryExistsException e) { existed = true; System.out.println("Waiting for repository to become active. This will only work when a Lily server is running."); System.out.println("You can safely interrupt this with ctrl+c"); while (!repositoryModel.repositoryExistsAndActive(repositoryName)) { System.out.print("."); Thread.sleep(1000L);
@Override public int run(CommandLine cmd) throws Exception { int result = super.run(cmd); if (result != 0) { return result; } List<RepositoryDefinition> repositories = new ArrayList<RepositoryDefinition>(repositoryModel.getRepositories()); Collections.sort(repositories, new RepositoryDefinitionComparator()); System.out.println("Repositories:"); for (RepositoryDefinition repository : repositories) { System.out.println(" * " + repository.getName() + " - " + repository.getLifecycleState().toString()); } return 0; }
repositoryModel.delete(repositoryName); } catch (RepositoryNotFoundException e) { exists = false;
public void setupRepository(String repositoryName) throws Exception { if (repositoryManagerSetup) { return; } setupTypeManager(); if (!repositoryModel.repositoryExistsAndActive(repositoryName)) { repositoryModel.create(repositoryName); repositoryModel.waitUntilRepositoryInState(repositoryName, RepositoryDefinition.RepositoryLifecycleState .ACTIVE, 100000); } blobStoreAccessFactory = createBlobAccess(); blobManager = new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory, false); RecordFactory recordFactory = new RecordFactoryImpl(); repositoryManager = new HBaseRepositoryManager(typeManager, idGenerator, recordFactory, hbaseTableFactory, blobManager, hadoopConf, repositoryModel) { @Override protected Repository createRepository(RepoTableKey key) throws InterruptedException, RepositoryException { HBaseRepository repository = (HBaseRepository)super.createRepository(key); repository.setRecordUpdateHooks(recordUpdateHooks); return repository; } }; sepModel = new SepModelImpl(new ZooKeeperItfAdapter(zk), hadoopConf); eventPublisherManager = new LilyEventPublisherManager(hbaseTableFactory); tableManager = new TableManagerImpl(repositoryName, hadoopConf, hbaseTableFactory); if (!tableManager.tableExists(Table.RECORD.name)) { tableManager.createTable(Table.RECORD.name); } repositoryManagerSetup = true; }
public Repository getRepository(String repositoryName, String tableName) throws InterruptedException, RepositoryException { if (!repositoryModel.repositoryExistsAndActive(repositoryName)) { throw new RepositoryUnavailableException("Repository does not exist or is not active: " + repositoryName); } RepoTableKey key = new RepoTableKey(repositoryName, tableName); if (!repositoryCache.containsKey(key)) { synchronized (repositoryCache) { if (!repositoryCache.containsKey(key)) { repositoryCache.put(key, createRepository(key)); } } } return repositoryCache.get(key); }
RepositoryDefinition repoDef = repositoryModel.getRepository(event.getRepositoryName()); if (repoDef.getLifecycleState() == RepositoryLifecycleState.CREATE_REQUESTED) { for (RepositoryMasterHook hook : hooks) { repositoryModel.updateRepository(updatedRepoDef); } else if (repoDef.getLifecycleState() == RepositoryLifecycleState.DELETE_REQUESTED) { for (RepositoryMasterHook hook : hooks) { repositoryModel.deleteDirect(repoDef.getName());
@Override public void deactivateAsLeader() throws Exception { log.info("Shutting down as repository master."); repositoryModel.unregisterListener(listener); // Argument false for shutdown: we do not interrupt the event worker thread: if there // was something running there that is blocked until the ZK connection comes back up // we want it to finish eventWorker.shutdown(false); log.info("Shutdown as repository master successful."); lilyInfo.setRepositoryMaster(false); } }
@Override public void activateAsLeader() throws Exception { log.info("Starting up as repository master."); // Start these processes, but it is not until we have registered our model listener // that these will receive work. eventWorker.start(); Set<RepositoryDefinition> repoDefs = repositoryModel.getRepositories(listener); // Perform an initial run over the repository definitions by generating fake events for (RepositoryDefinition repoDef : repoDefs) { eventWorker.putEvent(new RepositoryModelEvent(RepositoryModelEventType.REPOSITORY_UPDATED, repoDef.getName())); } log.info("Startup as repository master successful."); lilyInfo.setRepositoryMaster(true); }