@Override public void onConfigChange(ConfigChangeEvent changeEvent) throws MetaException { if (changeEvent.getKey().equals(MetastoreConf.ConfVars.CLIENT_SOCKET_TIMEOUT.getVarname()) || changeEvent.getKey().equals(MetastoreConf.ConfVars.CLIENT_SOCKET_TIMEOUT.getHiveName())) { // TODO: this only applies to current thread, so it's not useful at all. Deadline.resetTimeout(MetastoreConf.convertTimeStr(changeEvent.getNewValue(), TimeUnit.SECONDS, TimeUnit.MILLISECONDS)); } } }
/** * Internal function to notify listeners for meta config change events */ private void notifyMetaListeners(String key, String oldValue, String newValue) throws MetaException { for (MetaStoreEventListener listener : listeners) { listener.onConfigChange(new ConfigChangeEvent(this, key, oldValue, newValue)); } if (transactionalListeners.size() > 0) { // All the fields of this event are final, so no reason to create a new one for each // listener ConfigChangeEvent cce = new ConfigChangeEvent(this, key, oldValue, newValue); for (MetaStoreEventListener transactionalListener : transactionalListeners) { transactionalListener.onConfigChange(cce); } } }
@Test public void testMetaConfSameHandler() throws Exception { HiveMetaStoreClient closingClient = new HiveMetaStoreClient(conf, null); closingClient.setMetaConf(metaConfKey, "[test pattern modified]"); ConfigChangeEvent event = (ConfigChangeEvent) DummyListener.getLastEvent(); int beforeCloseNotificationEventCounts = DummyListener.notifyList.size(); IHMSHandler beforeHandler = event.getHandler(); closingClient.close(); Thread.sleep(2 * 1000); event = (ConfigChangeEvent) DummyListener.getLastEvent(); int afterCloseNotificationEventCounts = DummyListener.notifyList.size(); IHMSHandler afterHandler = event.getHandler(); // Meta-conf cleanup should trigger an event to listener assertNotSame(beforeCloseNotificationEventCounts, afterCloseNotificationEventCounts); // Both the handlers should be same assertEquals(beforeHandler, afterHandler); } }
@Test public void testMetaConfNotifyListenersClosingClient() throws Exception { HiveMetaStoreClient closingClient = new HiveMetaStoreClient(conf, null); closingClient.setMetaConf(metaConfKey, "[test pattern modified]"); ConfigChangeEvent event = (ConfigChangeEvent) DummyListener.getLastEvent(); assertEquals(event.getOldValue(), metaConfVal); assertEquals(event.getNewValue(), "[test pattern modified]"); closingClient.close(); Thread.sleep(2 * 1000); event = (ConfigChangeEvent) DummyListener.getLastEvent(); assertEquals(event.getOldValue(), "[test pattern modified]"); assertEquals(event.getNewValue(), metaConfVal); }
assertEquals("metastore.try.direct.sql", event.getKey()); assertEquals("true", event.getOldValue()); assertEquals("false", event.getNewValue());
@Test public void testMetaConfSameHandler() throws Exception { HiveMetaStoreClient closingClient = new HiveMetaStoreClient(conf, null); closingClient.setMetaConf(metaConfKey, "[test pattern modified]"); ConfigChangeEvent event = (ConfigChangeEvent) DummyListener.getLastEvent(); int beforeCloseNotificationEventCounts = DummyListener.notifyList.size(); IHMSHandler beforeHandler = event.getIHMSHandler(); closingClient.close(); Thread.sleep(2 * 1000); event = (ConfigChangeEvent) DummyListener.getLastEvent(); int afterCloseNotificationEventCounts = DummyListener.notifyList.size(); IHMSHandler afterHandler = event.getIHMSHandler(); // Meta-conf cleanup should trigger an event to listener assertNotSame(beforeCloseNotificationEventCounts, afterCloseNotificationEventCounts); // Both the handlers should be same assertEquals(beforeHandler, afterHandler); } }
@Test public void testMetaConfNotifyListenersClosingClient() throws Exception { HiveMetaStoreClient closingClient = new HiveMetaStoreClient(conf, null); closingClient.setMetaConf(metaConfKey, "[test pattern modified]"); ConfigChangeEvent event = (ConfigChangeEvent) DummyListener.getLastEvent(); assertEquals(event.getOldValue(), metaConfVal); assertEquals(event.getNewValue(), "[test pattern modified]"); closingClient.close(); Thread.sleep(2 * 1000); event = (ConfigChangeEvent) DummyListener.getLastEvent(); assertEquals(event.getOldValue(), "[test pattern modified]"); assertEquals(event.getNewValue(), metaConfVal); }
String key = tableEvent.getKey(); if (key.equals(ConfVars.EVENT_DB_LISTENER_TTL.toString()) || key.equals(ConfVars.EVENT_DB_LISTENER_TTL.getHiveName())) { long time = MetastoreConf.convertTimeStr(tableEvent.getNewValue(), TimeUnit.SECONDS, TimeUnit.SECONDS); MetastoreConf.setTimeVar(getConf(), MetastoreConf.ConfVars.EVENT_DB_LISTENER_TTL, time, long time = MetastoreConf.convertTimeStr(tableEvent.getNewValue(), TimeUnit.SECONDS, TimeUnit.SECONDS); MetastoreConf.setTimeVar(getConf(), MetastoreConf.ConfVars.EVENT_DB_LISTENER_CLEAN_INTERVAL, time,
@Test public void testMetaConfNotifyListenersNonClosingClient() throws Exception { HiveMetaStoreClient nonClosingClient = new HiveMetaStoreClient(conf, null); nonClosingClient.setMetaConf(metaConfKey, "[test pattern modified]"); ConfigChangeEvent event = (ConfigChangeEvent) DummyListener.getLastEvent(); assertEquals(event.getOldValue(), metaConfVal); assertEquals(event.getNewValue(), "[test pattern modified]"); // This should also trigger meta listener notification via TServerEventHandler#deleteContext nonClosingClient.getTTransport().close(); Thread.sleep(2 * 1000); event = (ConfigChangeEvent) DummyListener.getLastEvent(); assertEquals(event.getOldValue(), "[test pattern modified]"); assertEquals(event.getNewValue(), metaConfVal); }
/** * Internal function to notify listeners for meta config change events */ private void notifyMetaListeners(String key, String oldValue, String newValue) throws MetaException { for (MetaStoreEventListener listener : listeners) { listener.onConfigChange(new ConfigChangeEvent(this, key, oldValue, newValue)); } if (transactionalListeners.size() > 0) { // All the fields of this event are final, so no reason to create a new one for each // listener ConfigChangeEvent cce = new ConfigChangeEvent(this, key, oldValue, newValue); for (MetaStoreEventListener transactionalListener : transactionalListeners) { transactionalListener.onConfigChange(cce); } } }
@Override public void onConfigChange(ConfigChangeEvent changeEvent) throws MetaException { if (changeEvent.getKey().equals(HiveConf.ConfVars.METASTORE_CLIENT_SOCKET_TIMEOUT.varname)) { Deadline.resetTimeout(HiveConf.toTime(changeEvent.getNewValue(), TimeUnit.SECONDS, TimeUnit.MILLISECONDS)); } } }
@Test public void testMetaConfNotifyListenersNonClosingClient() throws Exception { HiveMetaStoreClient nonClosingClient = new HiveMetaStoreClient(conf, null); nonClosingClient.setMetaConf(metaConfKey, "[test pattern modified]"); ConfigChangeEvent event = (ConfigChangeEvent) DummyListener.getLastEvent(); assertEquals(event.getOldValue(), metaConfVal); assertEquals(event.getNewValue(), "[test pattern modified]"); // This should also trigger meta listener notification via TServerEventHandler#deleteContext nonClosingClient.getTTransport().close(); Thread.sleep(2 * 1000); event = (ConfigChangeEvent) DummyListener.getLastEvent(); assertEquals(event.getOldValue(), "[test pattern modified]"); assertEquals(event.getNewValue(), metaConfVal); }
@Override public void setMetaConf(String key, String value) throws MetaException { ConfVars confVar = HiveConf.getMetaConf(key); if (confVar == null) { throw new MetaException("Invalid configuration key " + key); } String validate = confVar.validate(value); if (validate != null) { throw new MetaException("Invalid configuration value " + value + " for key " + key + " by " + validate); } Configuration configuration = getConf(); String oldValue = configuration.get(key); configuration.set(key, value); for (MetaStoreEventListener listener : listeners) { listener.onConfigChange(new ConfigChangeEvent(this, key, oldValue, value)); } }
@Override public void onConfigChange(ConfigChangeEvent changeEvent) throws MetaException { if (changeEvent.getKey().equals(HiveConf.ConfVars.METASTORE_CLIENT_SOCKET_TIMEOUT.varname)) { Deadline.resetTimeout(HiveConf.toTime(changeEvent.getNewValue(), TimeUnit.SECONDS, TimeUnit.MILLISECONDS)); } } }
@Override public void setMetaConf(String key, String value) throws MetaException { ConfVars confVar = HiveConf.getMetaConf(key); if (confVar == null) { throw new MetaException("Invalid configuration key " + key); } String validate = confVar.validate(value); if (validate != null) { throw new MetaException("Invalid configuration value " + value + " for key " + key + " by " + validate); } Configuration configuration = getConf(); String oldValue = configuration.get(key); configuration.set(key, value); for (MetaStoreEventListener listener : listeners) { listener.onConfigChange(new ConfigChangeEvent(this, key, oldValue, value)); } }
@Override public void onConfigChange(ConfigChangeEvent changeEvent) throws MetaException { if (changeEvent.getKey().equals(MetastoreConf.ConfVars.CLIENT_SOCKET_TIMEOUT.getVarname()) || changeEvent.getKey().equals(MetastoreConf.ConfVars.CLIENT_SOCKET_TIMEOUT.getHiveName())) { // TODO: this only applies to current thread, so it's not useful at all. Deadline.resetTimeout(MetastoreConf.convertTimeStr(changeEvent.getNewValue(), TimeUnit.SECONDS, TimeUnit.MILLISECONDS)); } } }
/** * @param tableEvent table event. * @throws org.apache.hadoop.hive.metastore.api.MetaException */ public void onConfigChange(ConfigChangeEvent tableEvent) throws MetaException { String key = tableEvent.getKey(); if (key.equals(HiveConf.ConfVars.METASTORE_EVENT_DB_LISTENER_TTL.toString())) { // This weirdness of setting it in our hiveConf and then reading back does two things. // One, it handles the conversion of the TimeUnit. Two, it keeps the value around for // later in case we need it again. hiveConf.set(HiveConf.ConfVars.METASTORE_EVENT_DB_LISTENER_TTL.name(), tableEvent.getNewValue()); cleaner.setTimeToLive(hiveConf.getTimeVar(HiveConf.ConfVars.METASTORE_EVENT_DB_LISTENER_TTL, TimeUnit.SECONDS)); } }
/** * @param tableEvent table event. * @throws org.apache.hadoop.hive.metastore.api.MetaException */ public void onConfigChange(ConfigChangeEvent tableEvent) throws MetaException { String key = tableEvent.getKey(); if (key.equals(HiveConf.ConfVars.METASTORE_EVENT_DB_LISTENER_TTL.toString())) { // This weirdness of setting it in our hiveConf and then reading back does two things. // One, it handles the conversion of the TimeUnit. Two, it keeps the value around for // later in case we need it again. hiveConf.set(HiveConf.ConfVars.METASTORE_EVENT_DB_LISTENER_TTL.name(), tableEvent.getNewValue()); cleaner.setTimeToLive(hiveConf.getTimeVar(HiveConf.ConfVars.METASTORE_EVENT_DB_LISTENER_TTL, TimeUnit.SECONDS)); } }
/** * @param tableEvent table event. * @throws org.apache.hadoop.hive.metastore.api.MetaException */ @Override public void onConfigChange(ConfigChangeEvent tableEvent) throws MetaException { String key = tableEvent.getKey(); if (key.equals(ConfVars.EVENT_DB_LISTENER_TTL.toString()) || key.equals(ConfVars.EVENT_DB_LISTENER_TTL.getHiveName())) { // This weirdness of setting it in our conf and then reading back does two things. // One, it handles the conversion of the TimeUnit. Two, it keeps the value around for // later in case we need it again. long time = MetastoreConf.convertTimeStr(tableEvent.getNewValue(), TimeUnit.SECONDS, TimeUnit.SECONDS); MetastoreConf.setTimeVar(getConf(), MetastoreConf.ConfVars.EVENT_DB_LISTENER_TTL, time, TimeUnit.SECONDS); cleaner.setTimeToLive(MetastoreConf.getTimeVar(getConf(), MetastoreConf.ConfVars.EVENT_DB_LISTENER_TTL, TimeUnit.SECONDS)); } }