private String getSegmentsTable() { return dbTables.get().getSegmentsTable(); }
@Override public void createSegmentTable() { if (config.get().isCreateTables()) { createSegmentTable(tablesConfigSupplier.get().getSegmentsTable()); } }
@Inject public SQLMetadataSegmentPublisher( ObjectMapper jsonMapper, MetadataStorageTablesConfig config, SQLMetadataConnector connector ) { this.jsonMapper = jsonMapper; this.config = config; this.connector = connector; this.statement = StringUtils.format( "INSERT INTO %1$s (id, dataSource, created_date, start, %2$send%2$s, partitioned, version, used, payload) " + "VALUES (:id, :dataSource, :created_date, :start, :end, :partitioned, :version, :used, :payload)", config.getSegmentsTable(), connector.getQuoteString() ); }
@Override public List<Map<String, Object>> withHandle(Handle handle) { return handle.createQuery( StringUtils.format("SELECT id FROM %s WHERE id=:id", config.getSegmentsTable()) ) .bind("id", segmentId) .list(); } }
StringUtils.format( sb.toString(), dbTables.getSegmentsTable()
private boolean segmentExists(final Handle handle, final DataSegment segment) { return !handle .createQuery(StringUtils.format("SELECT id FROM %s WHERE id = :identifier", dbTables.getSegmentsTable())) .bind("identifier", segment.getId().toString()) .map(StringMapper.FIRST) .list() .isEmpty(); }
private List<String> getUsedSegmentIds() { final String table = derbyConnectorRule.metadataTablesConfigSupplier().get().getSegmentsTable(); return derbyConnector.retryWithHandle( new HandleCallback<List<String>>() { @Override public List<String> withHandle(Handle handle) { return handle.createQuery("SELECT id FROM " + table + " WHERE used = true ORDER BY id") .map(StringMapper.FIRST) .list(); } } ); }
private void deleteSegment(final Handle handle, final DataSegment segment) { handle.createStatement(StringUtils.format("DELETE from %s WHERE id = :id", dbTables.getSegmentsTable())) .bind("id", segment.getId().toString()) .execute(); }
private void updatePayload(final Handle handle, final DataSegment segment) throws IOException { try { handle .createStatement( StringUtils.format("UPDATE %s SET payload = :payload WHERE id = :id", dbTables.getSegmentsTable()) ) .bind("id", segment.getId().toString()) .bind("payload", jsonMapper.writeValueAsBytes(segment)) .execute(); } catch (IOException e) { log.error(e, "Exception inserting into DB"); throw e; } }
"SELECT created_date, payload FROM %1$s WHERE dataSource = :dataSource " + "AND start >= :start AND %2$send%2$s <= :end AND used = true", dbTables.getSegmentsTable(), connector.getQuoteString()
private void additionalNumberedShardTest(Set<DataSegment> segments) throws IOException { coordinator.announceHistoricalSegments(segments); for (DataSegment segment : segments) { Assert.assertArrayEquals( mapper.writeValueAsString(segment).getBytes(StandardCharsets.UTF_8), derbyConnector.lookup( derbyConnectorRule.metadataTablesConfigSupplier().get().getSegmentsTable(), "id", "payload", segment.getId().toString() ) ); } Assert.assertEquals( segments.stream().map(segment -> segment.getId().toString()).collect(Collectors.toList()), getUsedSegmentIds() ); // Should not update dataSource metadata. Assert.assertEquals(0, metadataUpdateCounter.get()); }
"SELECT payload FROM %1$s WHERE dataSource = :dataSource and start >= :start " + "and start <= :end and %2$send%2$s <= :end and used = false", dbTables.getSegmentsTable(), connector.getQuoteString()
private void resetMetadataStore(Injector injector) { log.info("==========================================================================="); log.info("Deleting all Records from Metadata Storage."); log.info("==========================================================================="); MetadataStorageConnector connector = injector.getInstance(MetadataStorageConnector.class); MetadataStorageTablesConfig tablesConfig = injector.getInstance(MetadataStorageTablesConfig.class); String[] tables = new String[]{ tablesConfig.getDataSourceTable(), tablesConfig.getPendingSegmentsTable(), tablesConfig.getSegmentsTable(), tablesConfig.getRulesTable(), tablesConfig.getConfigTable(), tablesConfig.getTasksTable(), tablesConfig.getTaskLockTable(), tablesConfig.getTaskLogTable(), tablesConfig.getAuditTable(), tablesConfig.getSupervisorTable() }; for (String table : tables) { connector.deleteAllRecords(table); } }
@Test public void testOvershadowingAnnounce() throws IOException { final ImmutableSet<DataSegment> segments = ImmutableSet.of(defaultSegment, defaultSegment2, defaultSegment4); coordinator.announceHistoricalSegments(segments); for (DataSegment segment : segments) { Assert.assertArrayEquals( mapper.writeValueAsString(segment).getBytes(StandardCharsets.UTF_8), derbyConnector.lookup( derbyConnectorRule.metadataTablesConfigSupplier().get().getSegmentsTable(), "id", "payload", segment.getId().toString() ) ); } Assert.assertEquals(ImmutableList.of(defaultSegment4.getId().toString()), getUsedSegmentIds()); }
@Override public Integer withHandle(Handle handle) { String request = StringUtils.format( "UPDATE %s SET used = false WHERE id = :id", derbyConnectorRule.metadataTablesConfigSupplier().get().getSegmentsTable() ); return handle.createStatement(request).bind("id", segment.getId().toString()).execute(); } }
Assert.assertEquals(props.getProperty("druid.metadata.storage.tables.segments"), config.getSegmentsTable()); Assert.assertEquals(props.getProperty("druid.metadata.storage.tables.rules"), config.getRulesTable()); Assert.assertEquals(props.getProperty("druid.metadata.storage.tables.config"), config.getConfigTable());
mapper.writeValueAsString(defaultSegment).getBytes(StandardCharsets.UTF_8), derbyConnector.lookup( derbyConnectorRule.metadataTablesConfigSupplier().get().getSegmentsTable(), "id", "payload", mapper.writeValueAsString(defaultSegment2).getBytes(StandardCharsets.UTF_8), derbyConnector.lookup( derbyConnectorRule.metadataTablesConfigSupplier().get().getSegmentsTable(), "id", "payload",
@Test public void testSimpleAnnounce() throws IOException { coordinator.announceHistoricalSegments(SEGMENTS); for (DataSegment segment : SEGMENTS) { Assert.assertArrayEquals( mapper.writeValueAsString(segment).getBytes(StandardCharsets.UTF_8), derbyConnector.lookup( derbyConnectorRule.metadataTablesConfigSupplier().get().getSegmentsTable(), "id", "payload", segment.getId().toString() ) ); } Assert.assertEquals( ImmutableList.of(defaultSegment.getId().toString(), defaultSegment2.getId().toString()), getUsedSegmentIds() ); // Should not update dataSource metadata. Assert.assertEquals(0, metadataUpdateCounter.get()); }
final String entryType = tablesConfig.getTaskEntryType(); tables.add(tablesConfig.getConfigTable()); tables.add(tablesConfig.getSegmentsTable()); tables.add(tablesConfig.getRulesTable()); tables.add(tablesConfig.getLockTable(entryType));
"INSERT INTO %1$s (id, dataSource, created_date, start, %2$send%2$s, partitioned, version, used, payload) " + "VALUES (:id, :dataSource, :created_date, :start, :end, :partitioned, :version, :used, :payload)", dbTables.getSegmentsTable(), connector.getQuoteString()