use of org.apache.druid.query.lookup.namespace.JdbcExtractionNamespace in project druid by druid-io.
the class JdbcExtractionNamespaceTest method ensureEntry.
private CacheScheduler.Entry ensureEntry() throws InterruptedException {
final JdbcExtractionNamespace extractionNamespace = new JdbcExtractionNamespace(derbyConnectorRule.getMetadataConnectorConfig(), TABLE_NAME, KEY_NAME, VAL_NAME, tsColumn, null, new Period(10), null, new JdbcAccessSecurityConfig());
CacheScheduler.Entry entry = scheduler.schedule(extractionNamespace);
waitForUpdates(1_000L, 2L);
Assert.assertEquals("sanity check not correct", "bar", entry.getCache().get("foo"));
return entry;
}
use of org.apache.druid.query.lookup.namespace.JdbcExtractionNamespace in project druid by druid-io.
the class JdbcExtractionNamespaceTest method setup.
@Before
public void setup() throws Exception {
lifecycle = new Lifecycle();
updates = new AtomicLong(0L);
updateLock = new ReentrantLock(true);
closer = Closer.create();
setupTeardownService = MoreExecutors.listeningDecorator(Execs.multiThreaded(2, "JDBCExtractionNamespaceTeardown--%s"));
final ListenableFuture<Handle> setupFuture = setupTeardownService.submit(new Callable<Handle>() {
@Override
public Handle call() {
final Handle handle = derbyConnectorRule.getConnector().getDBI().open();
Assert.assertEquals(0, handle.createStatement(StringUtils.format("CREATE TABLE %s (%s TIMESTAMP, %s VARCHAR(64), %s VARCHAR(64), %s VARCHAR(64))", TABLE_NAME, TS_COLUMN, FILTER_COLUMN, KEY_NAME, VAL_NAME)).setQueryTimeout(1).execute());
handle.createStatement(StringUtils.format("TRUNCATE TABLE %s", TABLE_NAME)).setQueryTimeout(1).execute();
handle.commit();
closer.register(new Closeable() {
@Override
public void close() throws IOException {
handle.createStatement("DROP TABLE " + TABLE_NAME).setQueryTimeout(1).execute();
final ListenableFuture future = setupTeardownService.submit(new Runnable() {
@Override
public void run() {
handle.close();
}
});
try (Closeable closeable = new Closeable() {
@Override
public void close() {
future.cancel(true);
}
}) {
future.get(10, TimeUnit.SECONDS);
} catch (InterruptedException | ExecutionException | TimeoutException e) {
throw new IOException("Error closing handle", e);
}
}
});
closer.register(new Closeable() {
@Override
public void close() {
if (scheduler == null) {
return;
}
Assert.assertEquals(0, scheduler.getActiveEntries());
}
});
for (Map.Entry<String, String[]> entry : RENAMES.entrySet()) {
try {
String key = entry.getKey();
String value = entry.getValue()[0];
String filter = entry.getValue()[1];
insertValues(handle, key, value, filter, "2015-01-01 00:00:00");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException(e);
}
}
NoopServiceEmitter noopServiceEmitter = new NoopServiceEmitter();
scheduler = new CacheScheduler(noopServiceEmitter, ImmutableMap.of(JdbcExtractionNamespace.class, new CacheGenerator<JdbcExtractionNamespace>() {
private final JdbcCacheGenerator delegate = new JdbcCacheGenerator();
@Override
public CacheScheduler.VersionedCache generateCache(final JdbcExtractionNamespace namespace, final CacheScheduler.EntryImpl<JdbcExtractionNamespace> id, final String lastVersion, final CacheScheduler scheduler) throws InterruptedException {
updateLock.lockInterruptibly();
try {
log.debug("Running cache generator");
try {
return delegate.generateCache(namespace, id, lastVersion, scheduler);
} finally {
updates.incrementAndGet();
}
} finally {
updateLock.unlock();
}
}
}), new OnHeapNamespaceExtractionCacheManager(lifecycle, noopServiceEmitter, new NamespaceExtractionConfig()));
try {
lifecycle.start();
} catch (Exception e) {
throw new RuntimeException(e);
}
closer.register(new Closeable() {
@Override
public void close() throws IOException {
final ListenableFuture future = setupTeardownService.submit(new Runnable() {
@Override
public void run() {
lifecycle.stop();
}
});
try (final Closeable closeable = new Closeable() {
@Override
public void close() {
future.cancel(true);
}
}) {
future.get(30, TimeUnit.SECONDS);
} catch (InterruptedException | ExecutionException | TimeoutException e) {
throw new IOException("Error stopping lifecycle", e);
}
}
});
return handle;
}
});
try (final Closeable ignore = () -> setupFuture.cancel(true)) {
handleRef = setupFuture.get(10, TimeUnit.SECONDS);
}
Assert.assertNotNull(handleRef);
}
use of org.apache.druid.query.lookup.namespace.JdbcExtractionNamespace in project druid by druid-io.
the class JdbcExtractionNamespaceTest method testSerde.
@Test
public void testSerde() throws IOException {
final JdbcAccessSecurityConfig securityConfig = new JdbcAccessSecurityConfig();
final JdbcExtractionNamespace extractionNamespace = new JdbcExtractionNamespace(derbyConnectorRule.getMetadataConnectorConfig(), TABLE_NAME, KEY_NAME, VAL_NAME, tsColumn, "some filter", new Period(10), null, securityConfig);
final ObjectMapper mapper = new DefaultObjectMapper();
mapper.setInjectableValues(new Std().addValue(JdbcAccessSecurityConfig.class, securityConfig));
final ExtractionNamespace extractionNamespace2 = mapper.readValue(mapper.writeValueAsBytes(extractionNamespace), ExtractionNamespace.class);
Assert.assertEquals(extractionNamespace, extractionNamespace2);
}
use of org.apache.druid.query.lookup.namespace.JdbcExtractionNamespace in project druid by druid-io.
the class JdbcCacheGeneratorTest method indicatesMissingJdbcJarsWithTsColumn.
@Test
public void indicatesMissingJdbcJarsWithTsColumn() {
String tsColumn = "tsColumn";
JdbcExtractionNamespace missingJarNamespace = createJdbcExtractionNamespace(MISSING_METADATA_STORAGE_CONNECTOR_CONFIG, tsColumn);
exception.expect(IllegalStateException.class);
exception.expectMessage(MISSING_JDB_DRIVER_JAR_MSG);
target.generateCache(missingJarNamespace, KEY, LAST_VERSION, SCHEDULER);
}
use of org.apache.druid.query.lookup.namespace.JdbcExtractionNamespace in project druid by druid-io.
the class JdbcCacheGeneratorTest method indicatesMissingJdbcJarsWithoutTsColumn.
@Test
public void indicatesMissingJdbcJarsWithoutTsColumn() {
String missingTsColumn = null;
// for missingTsColumn
@SuppressWarnings("ConstantConditions") JdbcExtractionNamespace missingJarNamespace = createJdbcExtractionNamespace(MISSING_METADATA_STORAGE_CONNECTOR_CONFIG, missingTsColumn);
exception.expect(IllegalStateException.class);
exception.expectMessage(MISSING_JDB_DRIVER_JAR_MSG);
target.generateCache(missingJarNamespace, KEY, LAST_VERSION, SCHEDULER);
}
Aggregations