use of org.restlet.representation.StringRepresentation in project pinot by linkedin.
the class PinotSchemaRestletResource method deleteSchema.
@HttpVerb("delete")
@Summary("Deletes a schema")
@Tags({ "schema" })
@Paths({ "/schemas/{schemaName}", "/schemas/{schemaName}/" })
@Responses({ @Response(statusCode = "200", description = "The schema was deleted"), @Response(statusCode = "404", description = "The schema does not exist"), @Response(statusCode = "409", description = "The schema could not be deleted due to being in use"), @Response(statusCode = "500", description = "There was an error while deleting the schema") })
StringRepresentation deleteSchema(@Parameter(name = "schemaName", in = "path", description = "The name of the schema to get", required = true) String schemaName) throws JSONException, IOException {
Schema schema = _pinotHelixResourceManager.getSchema(schemaName);
if (schema == null) {
LOGGER.error("Error: could not find schema {}", schemaName);
setStatus(Status.CLIENT_ERROR_NOT_FOUND);
return new StringRepresentation("Error: Could not find schema " + schemaName);
}
// If the schema is associated with a table, we should not delete it.
List<String> tableNames = _pinotHelixResourceManager.getAllRealtimeTables();
for (String tableName : tableNames) {
AbstractTableConfig config = _pinotHelixResourceManager.getTableConfig(tableName, CommonConstants.Helix.TableType.REALTIME);
String tableSchema = config.getValidationConfig().getSchemaName();
if (schemaName.equals(tableSchema)) {
LOGGER.error("Cannot delete schema {}, as it is associated with table {}", schemaName, tableName);
setStatus(Status.CLIENT_ERROR_CONFLICT);
return new StringRepresentation("Error: Cannot delete schema " + schemaName + " as it is associated with table: " + TableNameBuilder.extractRawTableName(tableName));
}
}
LOGGER.info("Trying to delete schema {}", schemaName);
if (_pinotHelixResourceManager.deleteSchema(schema)) {
LOGGER.info("Success: Deleted schema {}", schemaName);
setStatus(Status.SUCCESS_OK);
return new StringRepresentation("Success: Deleted schema " + schemaName);
} else {
LOGGER.error("Error: could not delete schema {}", schemaName);
ControllerRestApplication.getControllerMetrics().addMeteredGlobalValue(ControllerMeter.CONTROLLER_SCHEMA_DELETE_ERROR, 1L);
setStatus(Status.SERVER_ERROR_INTERNAL);
return new StringRepresentation("Error: Could not delete schema " + schemaName);
}
}
use of org.restlet.representation.StringRepresentation in project pinot by linkedin.
the class PinotSchemaRestletResource method uploadSchema.
@HttpVerb("put")
@Summary("Updates an existing schema")
@Tags({ "schema" })
@Paths({ "/schemas/{schemaName}", "/schemas/{schemaName}/" })
@Responses({ @Response(statusCode = "200", description = "The schema was updated"), @Response(statusCode = "500", description = "There was an error while updating the schema") })
private Representation uploadSchema(@Parameter(name = "schemaName", in = "path", description = "The name of the schema to get") String schemaName) throws Exception {
File dataFile = getUploadContents();
if (dataFile != null) {
Schema schema = Schema.fromFile(dataFile);
try {
if (schema.getSchemaName().equals(schemaName)) {
_pinotHelixResourceManager.addOrUpdateSchema(schema);
return new StringRepresentation(dataFile + " sucessfully added", MediaType.TEXT_PLAIN);
} else {
final String message = "Schema name mismatch for uploaded schema, tried to add schema with name " + schema.getSchemaName() + " as " + schemaName;
LOGGER.warn(message);
ControllerRestApplication.getControllerMetrics().addMeteredGlobalValue(ControllerMeter.CONTROLLER_SCHEMA_UPLOAD_ERROR, 1L);
setStatus(Status.SERVER_ERROR_INTERNAL);
return new StringRepresentation(message, MediaType.TEXT_PLAIN);
}
} catch (Exception e) {
LOGGER.error("error adding schema ", e);
LOGGER.error("Caught exception in file upload", e);
ControllerRestApplication.getControllerMetrics().addMeteredGlobalValue(ControllerMeter.CONTROLLER_SCHEMA_UPLOAD_ERROR, 1L);
setStatus(Status.SERVER_ERROR_INTERNAL);
return PinotSegmentUploadRestletResource.exceptionToStringRepresentation(e);
}
} else {
// Some problem occurs, send back a simple line of text.
LOGGER.warn("No file was uploaded");
ControllerRestApplication.getControllerMetrics().addMeteredGlobalValue(ControllerMeter.CONTROLLER_SCHEMA_UPLOAD_ERROR, 1L);
setStatus(Status.SERVER_ERROR_INTERNAL);
return new StringRepresentation("schema not added", MediaType.TEXT_PLAIN);
}
}
use of org.restlet.representation.StringRepresentation in project pinot by linkedin.
the class PinotTableInstances method getTableInstances.
@HttpVerb("get")
@Summary("Lists table instances for a given table")
@Tags({ "instance", "table" })
@Paths({ "/tables/{tableName}/instances" })
private Representation getTableInstances(@Parameter(name = "tableName", in = "path", description = "The name of the table for which to list instances", required = true) String tableName, String type) throws JSONException, IOException {
JSONObject ret = new JSONObject();
ret.put("tableName", tableName);
JSONArray brokers = new JSONArray();
JSONArray servers = new JSONArray();
if (type == null || type.toLowerCase().equals("broker")) {
if (_pinotHelixResourceManager.hasOfflineTable(tableName)) {
JSONObject e = new JSONObject();
e.put("tableType", "offline");
JSONArray a = new JSONArray();
for (String ins : _pinotHelixResourceManager.getBrokerInstancesForTable(tableName, TableType.OFFLINE)) {
a.add(ins);
}
e.put("instances", a);
brokers.add(e);
}
if (_pinotHelixResourceManager.hasRealtimeTable(tableName)) {
JSONObject e = new JSONObject();
e.put("tableType", "realtime");
JSONArray a = new JSONArray();
for (String ins : _pinotHelixResourceManager.getBrokerInstancesForTable(tableName, TableType.REALTIME)) {
a.add(ins);
}
e.put("instances", a);
brokers.add(e);
}
}
if (type == null || type.toLowerCase().equals("server")) {
if (_pinotHelixResourceManager.hasOfflineTable(tableName)) {
JSONObject e = new JSONObject();
e.put("tableType", "offline");
JSONArray a = new JSONArray();
for (String ins : _pinotHelixResourceManager.getServerInstancesForTable(tableName, TableType.OFFLINE)) {
a.add(ins);
}
e.put("instances", a);
servers.add(e);
}
if (_pinotHelixResourceManager.hasRealtimeTable(tableName)) {
JSONObject e = new JSONObject();
e.put("tableType", "realtime");
JSONArray a = new JSONArray();
for (String ins : _pinotHelixResourceManager.getServerInstancesForTable(tableName, TableType.REALTIME)) {
a.add(ins);
}
e.put("instances", a);
servers.add(e);
}
}
ret.put("brokers", brokers);
ret.put("server", servers);
return new StringRepresentation(ret.toString());
}
use of org.restlet.representation.StringRepresentation in project pinot by linkedin.
the class PinotTableMetadataConfigs method updateTableMetadata.
@Deprecated
@HttpVerb("put")
@Summary("DEPRECATED: Updates the metadata configuration for a table")
@Tags({ "table" })
@Paths({ "/tables/{tableName}/metadataConfigs" })
private Representation updateTableMetadata(@Parameter(name = "tableName", in = "path", description = "The name of the table for which to update the metadata configuration", required = true) String tableName, Representation entity) throws Exception {
AbstractTableConfig config = AbstractTableConfig.init(entity.getText());
_pinotHelixResourceManager.updateMetadataConfigFor(config.getTableName(), TableType.valueOf(config.getTableType().toUpperCase()), config.getCustomConfigs());
return new StringRepresentation("done");
}
use of org.restlet.representation.StringRepresentation in project pinot by linkedin.
the class PinotTableRestletResource method getTable.
@HttpVerb("get")
@Summary("Views a table's configuration")
@Tags({ "table" })
@Paths({ "/tables/{tableName}", "/tables/{tableName}/" })
private Representation getTable(@Parameter(name = "tableName", in = "path", description = "The name of the table for which to toggle its state", required = true) String tableName, @Parameter(name = "type", in = "query", description = "Type of table, Offline or Realtime", required = true) String tableType) throws JSONException, JsonParseException, JsonMappingException, JsonProcessingException, IOException {
JSONObject ret = new JSONObject();
if ((tableType == null || TableType.OFFLINE.name().equalsIgnoreCase(tableType)) && _pinotHelixResourceManager.hasOfflineTable(tableName)) {
AbstractTableConfig config = _pinotHelixResourceManager.getTableConfig(tableName, TableType.OFFLINE);
ret.put(TableType.OFFLINE.name(), config.toJSON());
}
if ((tableType == null || TableType.REALTIME.name().equalsIgnoreCase(tableType)) && _pinotHelixResourceManager.hasRealtimeTable(tableName)) {
AbstractTableConfig config = _pinotHelixResourceManager.getTableConfig(tableName, TableType.REALTIME);
ret.put(TableType.REALTIME.name(), config.toJSON());
}
return new StringRepresentation(ret.toString(2));
}
Aggregations