Search in sources :

Example 6 with OperationNotPermittedException

use of io.confluent.kafka.schemaregistry.exceptions.OperationNotPermittedException in project schema-registry by confluentinc.

the class KafkaSchemaRegistry method deleteSubjectMode.

public void deleteSubjectMode(String subject) throws SchemaRegistryStoreException, OperationNotPermittedException {
    if (!allowModeChanges) {
        throw new OperationNotPermittedException("Mode changes are not allowed");
    }
    try {
        kafkaStore.waitUntilKafkaReaderReachesLastOffset(subject, kafkaStoreTimeoutMs);
        deleteMode(subject);
    } catch (StoreException e) {
        throw new SchemaRegistryStoreException("Failed to delete subject config value from store", e);
    }
}
Also used : SchemaRegistryStoreException(io.confluent.kafka.schemaregistry.exceptions.SchemaRegistryStoreException) OperationNotPermittedException(io.confluent.kafka.schemaregistry.exceptions.OperationNotPermittedException) SchemaRegistryStoreException(io.confluent.kafka.schemaregistry.exceptions.SchemaRegistryStoreException) StoreException(io.confluent.kafka.schemaregistry.storage.exceptions.StoreException)

Example 7 with OperationNotPermittedException

use of io.confluent.kafka.schemaregistry.exceptions.OperationNotPermittedException in project schema-registry by confluentinc.

the class KafkaSchemaRegistry method deleteCompatibilityConfig.

public void deleteCompatibilityConfig(String subject) throws SchemaRegistryStoreException, OperationNotPermittedException {
    if (isReadOnlyMode(subject)) {
        throw new OperationNotPermittedException("Subject " + subject + " is in read-only mode");
    }
    try {
        kafkaStore.waitUntilKafkaReaderReachesLastOffset(subject, kafkaStoreTimeoutMs);
        deleteCompatibility(subject);
    } catch (StoreException e) {
        throw new SchemaRegistryStoreException("Failed to delete subject config value from store", e);
    }
}
Also used : SchemaRegistryStoreException(io.confluent.kafka.schemaregistry.exceptions.SchemaRegistryStoreException) OperationNotPermittedException(io.confluent.kafka.schemaregistry.exceptions.OperationNotPermittedException) SchemaRegistryStoreException(io.confluent.kafka.schemaregistry.exceptions.SchemaRegistryStoreException) StoreException(io.confluent.kafka.schemaregistry.storage.exceptions.StoreException)

Example 8 with OperationNotPermittedException

use of io.confluent.kafka.schemaregistry.exceptions.OperationNotPermittedException in project schema-registry by confluentinc.

the class KafkaSchemaRegistry method setMode.

public void setMode(String subject, Mode mode, boolean force) throws SchemaRegistryStoreException, OperationNotPermittedException {
    if (!allowModeChanges) {
        throw new OperationNotPermittedException("Mode changes are not allowed");
    }
    ModeKey modeKey = new ModeKey(subject);
    try {
        kafkaStore.waitUntilKafkaReaderReachesLastOffset(subject, kafkaStoreTimeoutMs);
        if (mode == Mode.IMPORT && getMode(subject) != Mode.IMPORT && !force) {
            // Changing to import mode requires that no schemas exist with matching subjects.
            if (hasSubjects(subject, false)) {
                throw new OperationNotPermittedException("Cannot import since found existing subjects");
            }
            // At this point no schemas should exist with matching subjects.
            // Write an event to clear deleted schemas from the caches.
            kafkaStore.put(new ClearSubjectKey(subject), new ClearSubjectValue(subject));
        }
        kafkaStore.put(modeKey, new ModeValue(subject, mode));
        log.debug("Wrote new mode: " + mode.name() + " to the" + " Kafka data store with key " + modeKey.toString());
    } catch (StoreException e) {
        throw new SchemaRegistryStoreException("Failed to write new mode to the store", e);
    }
}
Also used : SchemaRegistryStoreException(io.confluent.kafka.schemaregistry.exceptions.SchemaRegistryStoreException) OperationNotPermittedException(io.confluent.kafka.schemaregistry.exceptions.OperationNotPermittedException) SchemaRegistryStoreException(io.confluent.kafka.schemaregistry.exceptions.SchemaRegistryStoreException) StoreException(io.confluent.kafka.schemaregistry.storage.exceptions.StoreException)

Example 9 with OperationNotPermittedException

use of io.confluent.kafka.schemaregistry.exceptions.OperationNotPermittedException in project schema-registry by confluentinc.

the class ConfigResource method deleteSubjectConfig.

@DELETE
@Path("/{subject}")
@Operation(summary = "Deletes the specified subject-level compatibility level config and " + "revert to the global default.", responses = { @ApiResponse(content = @Content(schema = @Schema(implementation = CompatibilityLevel.class))), @ApiResponse(responseCode = "404", description = "Error code 40401 -- Subject not found"), @ApiResponse(responseCode = "500", description = "Error code 50001 -- Error in the backend " + "datastore") })
public void deleteSubjectConfig(@Suspended final AsyncResponse asyncResponse, @Context HttpHeaders headers, @Parameter(description = "Name of the subject", required = true) @PathParam("subject") String subject) {
    log.info("Deleting compatibility setting for subject {}", subject);
    subject = QualifiedSubject.normalize(schemaRegistry.tenant(), subject);
    Config deletedConfig;
    try {
        CompatibilityLevel currentCompatibility = schemaRegistry.getCompatibilityLevel(subject);
        if (currentCompatibility == null) {
            throw Errors.subjectNotFoundException(subject);
        }
        Map<String, String> headerProperties = requestHeaderBuilder.buildRequestHeaders(headers, schemaRegistry.config().whitelistHeaders());
        schemaRegistry.deleteCompatibilityConfigOrForward(subject, headerProperties);
        deletedConfig = new Config(currentCompatibility.name);
    } catch (OperationNotPermittedException e) {
        throw Errors.operationNotPermittedException(e.getMessage());
    } catch (SchemaRegistryStoreException e) {
        throw Errors.storeException("Failed to delete compatibility level", e);
    } catch (UnknownLeaderException e) {
        throw Errors.unknownLeaderException("Failed to delete compatibility level", e);
    } catch (SchemaRegistryRequestForwardingException e) {
        throw Errors.requestForwardingFailedException("Error while forwarding delete config request" + " to the leader", e);
    }
    asyncResponse.resume(deletedConfig);
}
Also used : CompatibilityLevel(io.confluent.kafka.schemaregistry.CompatibilityLevel) UnknownLeaderException(io.confluent.kafka.schemaregistry.exceptions.UnknownLeaderException) SchemaRegistryRequestForwardingException(io.confluent.kafka.schemaregistry.exceptions.SchemaRegistryRequestForwardingException) Config(io.confluent.kafka.schemaregistry.client.rest.entities.Config) SchemaRegistryStoreException(io.confluent.kafka.schemaregistry.exceptions.SchemaRegistryStoreException) OperationNotPermittedException(io.confluent.kafka.schemaregistry.exceptions.OperationNotPermittedException) Path(javax.ws.rs.Path) DELETE(javax.ws.rs.DELETE) Operation(io.swagger.v3.oas.annotations.Operation)

Example 10 with OperationNotPermittedException

use of io.confluent.kafka.schemaregistry.exceptions.OperationNotPermittedException in project schema-registry by confluentinc.

the class ConfigResource method updateSubjectLevelConfig.

@Path("/{subject}")
@PUT
@Operation(summary = "Update compatibility level for the specified subject.", responses = { @ApiResponse(responseCode = "422", description = "Error code 42203 -- Invalid compatibility level\n" + "Error code 40402 -- Version not found"), @ApiResponse(responseCode = "500", description = "Error code 50001 -- Error in the backend data store\n" + "Error code 50003 -- Error while forwarding the request to the primary") })
public ConfigUpdateRequest updateSubjectLevelConfig(@Parameter(description = "Name of the subject", required = true) @PathParam("subject") String subject, @Context HttpHeaders headers, @Parameter(description = "Config Update Request", required = true) @NotNull ConfigUpdateRequest request) {
    CompatibilityLevel compatibilityLevel = CompatibilityLevel.forName(request.getCompatibilityLevel());
    if (compatibilityLevel == null) {
        throw new RestInvalidCompatibilityException();
    }
    if (subject != null && (CharMatcher.javaIsoControl().matchesAnyOf(subject) || QualifiedSubject.create(this.schemaRegistry.tenant(), subject).getSubject().equals(GLOBAL_RESOURCE_NAME))) {
        throw Errors.invalidSubjectException(subject);
    }
    subject = QualifiedSubject.normalize(schemaRegistry.tenant(), subject);
    try {
        Map<String, String> headerProperties = requestHeaderBuilder.buildRequestHeaders(headers, schemaRegistry.config().whitelistHeaders());
        schemaRegistry.updateConfigOrForward(subject, compatibilityLevel, headerProperties);
    } catch (OperationNotPermittedException e) {
        throw Errors.operationNotPermittedException(e.getMessage());
    } catch (SchemaRegistryStoreException e) {
        throw Errors.storeException("Failed to update compatibility level", e);
    } catch (UnknownLeaderException e) {
        throw Errors.unknownLeaderException("Failed to update compatibility level", e);
    } catch (SchemaRegistryRequestForwardingException e) {
        throw Errors.requestForwardingFailedException("Error while forwarding update config request" + " to the leader", e);
    }
    return request;
}
Also used : RestInvalidCompatibilityException(io.confluent.kafka.schemaregistry.rest.exceptions.RestInvalidCompatibilityException) CompatibilityLevel(io.confluent.kafka.schemaregistry.CompatibilityLevel) UnknownLeaderException(io.confluent.kafka.schemaregistry.exceptions.UnknownLeaderException) SchemaRegistryRequestForwardingException(io.confluent.kafka.schemaregistry.exceptions.SchemaRegistryRequestForwardingException) SchemaRegistryStoreException(io.confluent.kafka.schemaregistry.exceptions.SchemaRegistryStoreException) OperationNotPermittedException(io.confluent.kafka.schemaregistry.exceptions.OperationNotPermittedException) Path(javax.ws.rs.Path) Operation(io.swagger.v3.oas.annotations.Operation) PUT(javax.ws.rs.PUT)

Aggregations

OperationNotPermittedException (io.confluent.kafka.schemaregistry.exceptions.OperationNotPermittedException)13 SchemaRegistryStoreException (io.confluent.kafka.schemaregistry.exceptions.SchemaRegistryStoreException)13 SchemaRegistryRequestForwardingException (io.confluent.kafka.schemaregistry.exceptions.SchemaRegistryRequestForwardingException)7 UnknownLeaderException (io.confluent.kafka.schemaregistry.exceptions.UnknownLeaderException)7 Operation (io.swagger.v3.oas.annotations.Operation)7 StoreException (io.confluent.kafka.schemaregistry.storage.exceptions.StoreException)6 CompatibilityLevel (io.confluent.kafka.schemaregistry.CompatibilityLevel)4 Path (javax.ws.rs.Path)4 SchemaRegistryTimeoutException (io.confluent.kafka.schemaregistry.exceptions.SchemaRegistryTimeoutException)3 DELETE (javax.ws.rs.DELETE)3 PUT (javax.ws.rs.PUT)3 AvroSchema (io.confluent.kafka.schemaregistry.avro.AvroSchema)2 Config (io.confluent.kafka.schemaregistry.client.rest.entities.Config)2 Mode (io.confluent.kafka.schemaregistry.client.rest.entities.Mode)2 Schema (io.confluent.kafka.schemaregistry.client.rest.entities.Schema)2 ReferenceExistsException (io.confluent.kafka.schemaregistry.exceptions.ReferenceExistsException)2 RestInvalidCompatibilityException (io.confluent.kafka.schemaregistry.rest.exceptions.RestInvalidCompatibilityException)2 StoreTimeoutException (io.confluent.kafka.schemaregistry.storage.exceptions.StoreTimeoutException)2 ParsedSchema (io.confluent.kafka.schemaregistry.ParsedSchema)1 RegisterSchemaResponse (io.confluent.kafka.schemaregistry.client.rest.entities.requests.RegisterSchemaResponse)1