public KylinUserManager(KylinConfig config) throws IOException { logger.info("Initializing KylinUserManager with config " + config); this.config = config; this.userMap = new CaseInsensitiveStringCache<>(config, "user"); this.crud = new CachedCrudAssist<ManagedUser>(getStore(), USER_ROOT, "", ManagedUser.class, userMap, false) { @Override protected ManagedUser initEntityAfterReload(ManagedUser user, String resourceName) { return user; } }; crud.reloadAll(); Broadcaster.getInstance(config).registerListener(new ManagedUserSyncListener(), "user"); }
public void annouceWipeCache(String entity, String event, String cacheKey) { Broadcaster broadcaster = Broadcaster.getInstance(getConfig()); broadcaster.announce(entity, event, cacheKey); }
@Test public void testBasics() throws IOException { Broadcaster broadcaster = Broadcaster.getInstance(getTestConfig()); final AtomicInteger i = new AtomicInteger(0); broadcaster.registerStaticListener(new Listener() { @Override public void onEntityChange(Broadcaster broadcaster, String entity, Event event, String cacheKey) throws IOException { Assert.assertEquals(2, i.incrementAndGet()); } }, "test"); broadcaster.registerListener(new Listener() { @Override public void onEntityChange(Broadcaster broadcaster, String entity, Event event, String cacheKey) throws IOException { Assert.assertEquals(1, i.incrementAndGet()); } }, "test"); broadcaster.notifyListener("test", Event.UPDATE, ""); broadcaster.stopAnnounce(); Broadcaster.staticListenerMap.clear(); }
public void notifyMetadataChange(String entity, Event event, String cacheKey) throws IOException { Broadcaster broadcaster = Broadcaster.getInstance(getConfig()); broadcaster.notifyListener(entity, event, cacheKey); }
@Override public void afterPropertiesSet() throws Exception { Broadcaster.getInstance(getConfig()).registerStaticListener(cacheSyncListener, "cube"); }
@Test public void testNotifyNonStatic() throws IOException { Broadcaster broadcaster = Broadcaster.getInstance(getTestConfig()); final AtomicInteger i = new AtomicInteger(0); broadcaster.registerStaticListener(new Listener() { @Override public void onEntityChange(Broadcaster broadcaster, String entity, Event event, String cacheKey) throws IOException { throw new IllegalStateException("Should not notify static listener."); } }, "test"); broadcaster.registerListener(new Listener() { @Override public void onEntityChange(Broadcaster broadcaster, String entity, Event event, String cacheKey) throws IOException { Assert.assertEquals(1, i.incrementAndGet()); } }, "test"); broadcaster.notifyNonStaticListener("test", Event.UPDATE, ""); broadcaster.stopAnnounce(); Broadcaster.staticListenerMap.clear(); }
private void verify() { try { Broadcaster.getInstance(config).notifyClearAll(); } catch (IOException e) { throw new RuntimeException(e); } DataModelManager.getInstance(config); CubeDescManager.getInstance(config); CubeManager.getInstance(config); ProjectManager.getInstance(config); }
@Test public void testAnnounceErrorHandler() throws IOException, InterruptedException { System.setProperty("kylin.server.cluster-servers", "localhost:717"); System.setProperty("kylin.metadata.sync-error-handler", MockupErrHandler.class.getName()); try { Broadcaster broadcaster = Broadcaster.getInstance(getTestConfig()); broadcaster.announce("all", "update", "all"); for (int i = 0; i < 30 && MockupErrHandler.atom.get() == 0; i++) { Thread.sleep(1000); } broadcaster.stopAnnounce(); Broadcaster.staticListenerMap.clear(); } finally { System.clearProperty("kylin.server.cluster-servers"); System.clearProperty("kylin.metadata.sync-error-handler"); } Assert.assertTrue(MockupErrHandler.atom.get() > 0); }
public Broadcaster getBroadcaster() { return Broadcaster.getInstance(config); }
public void notifyProjectACLUpdate(String project) throws IOException { notifyListener(SYNC_PRJ_ACL, Event.UPDATE, project); }
/** * Announce an event out to peer kylin servers */ public void announce(String entity, String event, String key) { announce(new BroadcastEvent(entity, event, key)); }
@Override public void onEntityChange(Broadcaster broadcaster, String entity, Event event, String cacheKey) throws IOException { try (AutoLock lock = srcTableMapLock.lockForWrite()) { if (event == Event.DROP) srcTableMap.removeLocal(cacheKey); else srcTableCrud.reloadQuietly(cacheKey); } Pair<String, String> pair = TableDesc.parseResourcePath(cacheKey); String table = pair.getFirst(); String prj = pair.getSecond(); if (prj == null) { for (ProjectInstance p : ProjectManager.getInstance(config).findProjectsByTable(table)) { broadcaster.notifyProjectSchemaUpdate(p.getName()); } } else { broadcaster.notifyProjectSchemaUpdate(prj); } } }
@Override public void onEntityChange(Broadcaster broadcaster, String entity, Event event, String cacheKey) throws IOException { String project = cacheKey; if (event == Event.DROP) { removeProjectLocal(project); return; } reloadProjectQuietly(project); broadcaster.notifyProjectSchemaUpdate(project); broadcaster.notifyProjectDataUpdate(project); } }
@Override public void afterPropertiesSet() throws Exception { Broadcaster.getInstance(KylinConfig.getInstanceFromEnv()).registerStaticListener(new AclRecordSyncListener(), "acl"); }
private void injest(File metaRoot) throws IOException { KylinConfig srcConfig = KylinConfig.createInstanceFromUri(metaRoot.getAbsolutePath()); TableMetadataManager srcMetadataManager = TableMetadataManager.getInstance(srcConfig); DataModelManager srcModelManager = DataModelManager.getInstance(srcConfig); HybridManager srcHybridManager = HybridManager.getInstance(srcConfig); CubeManager srcCubeManager = CubeManager.getInstance(srcConfig); CubeDescManager srcCubeDescManager = CubeDescManager.getInstance(srcConfig); checkAndMark(srcMetadataManager, srcModelManager, srcHybridManager, srcCubeManager, srcCubeDescManager); new ResourceTool().copy(srcConfig, kylinConfig, Lists.newArrayList(requiredResources)); // clear the cache Broadcaster.getInstance(kylinConfig).notifyClearAll(); ProjectManager projectManager = ProjectManager.getInstance(kylinConfig); for (TableDesc tableDesc : srcMetadataManager.listAllTables(null)) { logger.info("add " + tableDesc + " to " + targetProjectName); projectManager.addTableDescToProject(Lists.newArrayList(tableDesc.getIdentity()).toArray(new String[0]), targetProjectName); } for (CubeInstance cube : srcCubeManager.listAllCubes()) { logger.info("add " + cube + " to " + targetProjectName); projectManager.addModelToProject(cube.getModel().getName(), targetProjectName); projectManager.moveRealizationToProject(RealizationType.CUBE, cube.getName(), targetProjectName, null); } }
public Broadcaster getBroadcaster() { return Broadcaster.getInstance(config); }
public void notifyClearAll() throws IOException { notifyListener(SYNC_ALL, Event.UPDATE, SYNC_ALL); }
public void remove(K key) { boolean exists = innerCache.containsKey(key); innerCache.remove(key); if (exists) { getBroadcaster().announce(syncEntity, Broadcaster.Event.DROP.getType(), key.toString()); } }
@Override public void onEntityChange(Broadcaster broadcaster, String entity, Event event, String cacheKey) throws IOException { try (AutoLock lock = modelMapLock.lockForWrite()) { if (event == Event.DROP) dataModelDescMap.removeLocal(cacheKey); else crud.reloadQuietly(cacheKey); } for (ProjectInstance prj : ProjectManager.getInstance(config).findProjectsByModel(cacheKey)) { broadcaster.notifyProjectSchemaUpdate(prj.getName()); } } }
@Override public void onEntityChange(Broadcaster broadcaster, String entity, Event event, String cacheKey) throws IOException { String project = cacheKey; if (event == Event.DROP) { removeProjectLocal(project); return; } reloadProjectQuietly(project); broadcaster.notifyProjectSchemaUpdate(project); broadcaster.notifyProjectDataUpdate(project); } }