@POST @Produces(MediaType.APPLICATION_JSON) @Path("/v2/tables") public Response createNewTable(String tableConfiguration) { CombinedConfig config = null; try { config = Deserializer.deserializeFromString(CombinedConfig.class, tableConfiguration); } catch (Exception e) { LOGGER.warn("Caught exception while deserializing the table configuration", e); return Response.serverError().entity(e.getMessage()).type(MediaType.TEXT_PLAIN_TYPE).build(); } if (config == null) { LOGGER.warn("Failed to deserialize the table configuration: {}", tableConfiguration); return Response.serverError().entity("Failed to deserialize the table configuration") .type(MediaType.TEXT_PLAIN_TYPE).build(); } if (config.getSchema() != null) { _resourceManager.addOrUpdateSchema(config.getSchema()); } if (config.getOfflineTableConfig() != null) { _resourceManager.addTable(config.getOfflineTableConfig()); } if (config.getRealtimeTableConfig() != null) { _resourceManager.addTable(config.getRealtimeTableConfig()); } return Response.ok().build(); }
CombinedConfigLoader.loadCombinedConfig(new File(_tableConfigFile), configurationProfiles); String tableName; if (combinedConfig.getOfflineTableConfig() != null) { tableName = combinedConfig.getOfflineTableConfig().getTableName(); } else if (combinedConfig.getRealtimeTableConfig() != null) { tableName = combinedConfig.getRealtimeTableConfig().getTableName(); } else { throw new RuntimeException("Table config does not contain a valid offline or realtime table definition.");
assertEquals(tableConfigurationObject.getOfflineTableConfig().getTableName(), "mytable_OFFLINE"); assertEquals(tableConfigurationObject.getOfflineTableConfig().getValidationConfig().getReplicationNumber(), 3); assertEquals(tableConfigurationObject.getOfflineTableConfig().getTableName(), "mytable_OFFLINE"); assertEquals(tableConfigurationObject.getOfflineTableConfig().getValidationConfig().getReplicationNumber(), 4); assertEquals(tableConfigurationObject.getOfflineTableConfig().getIndexingConfig().getLoadMode(), "MMAP"); assertEquals(tableConfigurationObject.getOfflineTableConfig().getTableName(), "mytable_OFFLINE"); assertEquals(tableConfigurationObject.getOfflineTableConfig().getValidationConfig().getReplicationNumber(), 3); assertEquals(tableConfigurationObject.getOfflineTableConfig().getIndexingConfig().getLoadMode(), "HEAP");
@GET @Produces({"application/hocon", "text/x-java-properties", "text/plain"}) @Path("/v2/tables/{tableName}") @ApiOperation("Displays the configuration of a table") public Response readTableConfiguration(@PathParam("tableName") String tableName, @Context Request request) { TableConfig offlineTableConfig = _resourceManager.getTableConfig(tableName, CommonConstants.Helix.TableType.OFFLINE); TableConfig realtimeTableConfig = _resourceManager.getTableConfig(tableName, CommonConstants.Helix.TableType.REALTIME); Schema tableSchema = _resourceManager.getTableSchema(tableName); if (offlineTableConfig == null && realtimeTableConfig == null) { return Response.status(Response.Status.NOT_FOUND).build(); } CombinedConfig combinedConfig = new CombinedConfig(offlineTableConfig, realtimeTableConfig, tableSchema); String serializedConfig; List<Variant> variants = Variant.mediaTypes(APPLICATION_HOCON, TEXT_JAVA_PROPERTIES, MediaType.TEXT_PLAIN_TYPE).build(); Variant variant = request.selectVariant(variants); if (variant == null) { return Response.notAcceptable(variants).build(); } else if (APPLICATION_HOCON.equals(variant.getMediaType()) || MediaType.TEXT_PLAIN_TYPE .equals(variant.getMediaType())) { serializedConfig = Serializer.serializeToString(combinedConfig); } else if (TEXT_JAVA_PROPERTIES.equals(variant.getMediaType())) { serializedConfig = Serializer.serializeToPropertiesString(combinedConfig); } else { return Response.notAcceptable(variants).build(); } return Response.ok(serializedConfig, variant).header("Content-Disposition", "inline").build(); }
@Test public void testConfigRoundtrip() throws Exception { // Load the config and check it CombinedConfig combinedConfig = CombinedConfigLoader .loadCombinedConfig(new File(getClass().getClassLoader().getResource("test-table-config.conf").getFile())); TableConfig config = combinedConfig.getOfflineTableConfig(); validateLoadedConfig(config); // Shallow serialization (to a map of objects): serialize to a map of objects, deserialize and check config final Map<String, ?> serialize = Serializer.serialize(config); TableConfig newConfig = Deserializer.deserialize(TableConfig.class, serialize, ""); Assert.assertEquals(config, newConfig); validateLoadedConfig(newConfig); // Serialization to a string (which could be written to a file): serialize to a string, deserialize and check config String configAsString = Serializer.serializeToString(config); TableConfig newConfigFromString = Deserializer.deserializeFromString(TableConfig.class, configAsString); if (!config.equals(newConfigFromString)) { System.out.println("Serialized config is = " + configAsString); System.out.println("Expected a config that contains: " + config); } Assert.assertEquals(config, newConfigFromString); validateLoadedConfig(newConfigFromString); }
protected void completeTableConfiguration() { if (isUsingNewConfigFormat()) { CombinedConfig combinedConfig = new CombinedConfig(_offlineTableConfig, _realtimeTableConfig, _schema); try { sendPostRequest(_controllerRequestURLBuilder.forNewTableCreate(), Serializer.serializeToString(combinedConfig)); } catch (IOException e) { throw new RuntimeException(e); } } }
if (config.getSchema() != null) { _resourceManager.addOrUpdateSchema(config.getSchema()); if (config.getOfflineTableConfig() != null) { if (_resourceManager.getAllTables().contains(config.getOfflineTableConfig().getTableName())) { try { _resourceManager .setExistingTableConfig(config.getOfflineTableConfig(), config.getOfflineTableConfig().getTableName(), CommonConstants.Helix.TableType.OFFLINE); } catch (IOException e) { LOGGER.warn("Failed to update the offline table configuration for table {}", e, config.getOfflineTableConfig().getTableName()); return Response.serverError().entity("Failed to update the offline table configuration") .type(MediaType.TEXT_PLAIN_TYPE).build(); _resourceManager.addTable(config.getOfflineTableConfig()); if (config.getRealtimeTableConfig() != null) { if (_resourceManager.getAllTables().contains(config.getRealtimeTableConfig().getTableName())) { try { _resourceManager .setExistingTableConfig(config.getRealtimeTableConfig(), config.getRealtimeTableConfig().getTableName(), CommonConstants.Helix.TableType.REALTIME); } catch (IOException e) { LOGGER.warn("Failed to update the realtime table configuration for table {}", e, config.getRealtimeTableConfig().getTableName()); return Response.serverError().entity("Failed to update the realtime table configuration") .type(MediaType.TEXT_PLAIN_TYPE).build();
protected void updateTableConfiguration() { if (isUsingNewConfigFormat()) { CombinedConfig combinedConfig = new CombinedConfig(_offlineTableConfig, _realtimeTableConfig, _schema); try { sendPutRequest(_controllerRequestURLBuilder.forNewUpdateTableConfig(_offlineTableConfig.getTableName()), Serializer.serializeToString(combinedConfig)); } catch (IOException e) { throw new RuntimeException(e); } } } }