Apicurio / apicurio-registry

An API/Schema registry - stores APIs and Schemas.
https://www.apicur.io/registry/
Apache License 2.0
587 stars 260 forks source link

JSON Schema diff/compatibility exception not caught (showing up in Sentry) #2549

Closed EricWittmann closed 4 months ago

EricWittmann commented 2 years ago

An exception during schema loading in the JSON schema compatibility layer is resulting in an exception logged in Sentry. We should be catching it and reporting it more appropriately. Probably as some sort of 4xx http response.

Endpoint: http://bu98.serviceregistry.rhcloud.com/apis/registry/v2/groups/default/artifacts/person-schema/versions Error message: #: could not determine version Stack trace:

    org.everit.json.schema.loader.SchemaLoader in <init> at line 338
    org.everit.json.schema.loader.SchemaLoader$SchemaLoaderBuilder in build at line 149
    io.apicurio.registry.rules.compatibility.jsonschema.JsonSchemaDiffLibrary in findDifferences at line 54
    io.apicurio.registry.rules.compatibility.jsonschema.JsonSchemaDiffLibrary in getIncompatibleDifferences at line 76
    io.apicurio.registry.rules.compatibility.JsonSchemaCompatibilityChecker in testCompatibility at line 57
    io.apicurio.registry.rules.compatibility.CompatibilityRuleExecutor in execute at line 63
    io.apicurio.registry.rules.compatibility.CompatibilityRuleExecutor_Subclass in execute$$superforward1
    io.apicurio.registry.rules.compatibility.CompatibilityRuleExecutor_Subclass$$function$$3 in apply
    io.quarkus.arc.impl.AroundInvokeInvocationContext in proceed at line 54
    io.apicurio.common.apps.logging.LoggingInterceptor in logMethodEntry at line 53
    io.apicurio.common.apps.logging.LoggingInterceptor_Bean in intercept
    io.quarkus.arc.impl.InterceptorInvocation in invoke at line 41
    io.quarkus.arc.impl.AroundInvokeInvocationContext in perform at line 41
    io.quarkus.arc.impl.InvocationContexts in performAroundInvoke at line 32
    io.apicurio.registry.rules.compatibility.CompatibilityRuleExecutor_Subclass in execute
    io.apicurio.registry.rules.compatibility.CompatibilityRuleExecutor_ClientProxy in execute
    io.apicurio.registry.rules.RulesServiceImpl in applyRule at line 131
    io.apicurio.registry.rules.RulesServiceImpl in applyGlobalAndArtifactRules at line 99
    io.apicurio.registry.rules.RulesServiceImpl in applyRules at line 73
    io.apicurio.registry.rules.RulesServiceImpl_ClientProxy in applyRules
    io.apicurio.registry.rest.v2.GroupsResourceImpl in createArtifactVersionWithRefs at line 773
    io.apicurio.registry.rest.v2.GroupsResourceImpl in createArtifactVersion at line 717
    io.apicurio.registry.rest.v2.GroupsResourceImpl_Subclass in createArtifactVersion$$superforward1
    io.apicurio.registry.rest.v2.GroupsResourceImpl_Subclass$$function$$16 in apply
    io.quarkus.arc.impl.AroundInvokeInvocationContext in proceed at line 54
    io.apicurio.common.apps.logging.LoggingInterceptor in logMethodEntry at line 53
    io.apicurio.common.apps.logging.LoggingInterceptor_Bean in intercept
    io.quarkus.arc.impl.InterceptorInvocation in invoke at line 41
    io.quarkus.arc.impl.AroundInvokeInvocationContext in proceed at line 50
    io.apicurio.registry.auth.AuthorizedInterceptor in authorizeMethod at line 129
    io.apicurio.registry.auth.AuthorizedInterceptor_Bean in intercept
    io.quarkus.arc.impl.InterceptorInvocation in invoke at line 41
    io.quarkus.arc.impl.AroundInvokeInvocationContext in proceed at line 50
    io.apicurio.common.apps.logging.audit.AuditedInterceptor in auditMethod at line 76
    io.apicurio.common.apps.logging.audit.AuditedInterceptor_Bean in intercept
    io.quarkus.arc.impl.InterceptorInvocation in invoke at line 41
    io.quarkus.arc.impl.AroundInvokeInvocationContext in perform at line 41
    io.quarkus.arc.impl.InvocationContexts in performAroundInvoke at line 32
    io.apicurio.registry.rest.v2.GroupsResourceImpl_Subclass in createArtifactVersion
    io.apicurio.registry.rest.v2.GroupsResourceImpl_ClientProxy in createArtifactVersion
    jdk.internal.reflect.GeneratedMethodAccessor140 in invoke
    jdk.internal.reflect.DelegatingMethodAccessorImpl in invoke at line 43
    java.lang.reflect.Method in invoke at line 566
    org.jboss.resteasy.core.MethodInjectorImpl in invoke at line 170
    org.jboss.resteasy.core.MethodInjectorImpl in invoke at line 130
    org.jboss.resteasy.core.ResourceMethodInvoker in internalInvokeOnTarget at line 660
    org.jboss.resteasy.core.ResourceMethodInvoker in invokeOnTargetAfterFilter at line 524
    org.jboss.resteasy.core.ResourceMethodInvoker in lambda$invokeOnTarget$2 at line 474
    org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext in filter at line 364
    org.jboss.resteasy.core.ResourceMethodInvoker in invokeOnTarget at line 476
    org.jboss.resteasy.core.ResourceMethodInvoker in invoke at line 434
    org.jboss.resteasy.core.ResourceMethodInvoker in invoke at line 408
    org.jboss.resteasy.core.ResourceMethodInvoker in invoke at line 69
    org.jboss.resteasy.core.SynchronousDispatcher in invoke at line 492
    org.jboss.resteasy.core.SynchronousDispatcher in lambda$invoke$4 at line 261
    org.jboss.resteasy.core.SynchronousDispatcher in lambda$preprocess$0 at line 161
    org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext in filter at line 364
    org.jboss.resteasy.core.SynchronousDispatcher in preprocess at line 164
    org.jboss.resteasy.core.SynchronousDispatcher in invoke at line 247
    org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher in service at line 249
    io.quarkus.resteasy.runtime.ResteasyFilter in doFilter at line 35
    io.undertow.servlet.core.ManagedFilter in doFilter at line 61
    io.undertow.servlet.handlers.FilterHandler$FilterChainImpl in doFilter at line 131
    io.undertow.servlet.handlers.FilterHandler in handleRequest at line 84
    io.undertow.servlet.handlers.security.ServletSecurityRoleHandler in handleRequest at line 63
    io.undertow.servlet.handlers.ServletChain$1 in handleRequest at line 68
    io.undertow.servlet.handlers.ServletDispatchingHandler in handleRequest at line 36
    io.undertow.servlet.handlers.RedirectDirHandler in handleRequest at line 67
    io.undertow.server.handlers.PredicateHandler in handleRequest at line 43
    1
    io.undertow.servlet.handlers.ServletInitialHandler in dispatchRequest at line 229
    io.undertow.servlet.handlers.ServletInitialHandler in dispatchToPath at line 164
    io.undertow.servlet.spec.RequestDispatcherImpl in forwardImpl at line 227
    io.undertow.servlet.spec.RequestDispatcherImpl in forwardImplSetup at line 149
    io.undertow.servlet.spec.RequestDispatcherImpl in forward at line 111
    io.apicurio.registry.rest.RegistryApplicationServletFilter in doFilter at line 154
    io.apicurio.registry.rest.RegistryApplicationServletFilter_ClientProxy in doFilter
    io.undertow.servlet.core.ManagedFilter in doFilter at line 61
    io.undertow.servlet.handlers.FilterHandler$FilterChainImpl in doFilter at line 131
    io.undertow.servlet.handlers.FilterHandler in handleRequest at line 84
    io.undertow.servlet.handlers.security.ServletSecurityRoleHandler in handleRequest at line 63
    io.undertow.servlet.handlers.ServletChain$1 in handleRequest at line 68
    io.undertow.servlet.handlers.ServletDispatchingHandler in handleRequest at line 36
    io.undertow.servlet.handlers.RedirectDirHandler in handleRequest at line 67
    io.undertow.servlet.handlers.security.SSLInformationAssociationHandler in handleRequest at line 133
    io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler in handleRequest at line 57
    io.undertow.server.handlers.PredicateHandler in handleRequest at line 43
    io.undertow.security.handlers.AbstractConfidentialityHandler in handleRequest at line 46
    io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler in handleRequest at line 65
    io.undertow.security.handlers.AuthenticationMechanismsHandler in handleRequest at line 60
    io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler in handleRequest at line 77
    io.undertow.security.handlers.NotificationReceiverHandler in handleRequest at line 50
    io.undertow.security.handlers.AbstractSecurityContextAssociationHandler in handleRequest at line 43
    io.undertow.server.handlers.PredicateHandler in handleRequest at line 43
    1
    io.undertow.servlet.handlers.ServletInitialHandler in handleFirstRequest at line 247
    io.undertow.servlet.handlers.ServletInitialHandler in access$100 at line 56
    io.undertow.servlet.handlers.ServletInitialHandler$2 in call at line 111
    io.undertow.servlet.handlers.ServletInitialHandler$2 in call at line 108
    io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1 in call at line 48
    io.undertow.servlet.core.ContextClassLoaderSetupAction$1 in call at line 43
    io.quarkus.undertow.runtime.UndertowDeploymentRecorder$9$1 in call at line 590
    io.undertow.servlet.handlers.ServletInitialHandler in dispatchRequest at line 227
    io.undertow.servlet.handlers.ServletInitialHandler in handleRequest at line 152
    io.quarkus.undertow.runtime.UndertowDeploymentRecorder$1 in handleRequest at line 119
    io.undertow.server.Connectors in executeRootHandler at line 284
    io.undertow.server.DefaultExchangeHandler in handle at line 18
    io.quarkus.undertow.runtime.UndertowDeploymentRecorder$5$1 in run at line 412
    java.util.concurrent.Executors$RunnableAdapter in call at line 515
    java.util.concurrent.FutureTask in run at line 264
    io.quarkus.vertx.core.runtime.VertxCoreRecorder$13 in runWith at line 543
    org.jboss.threads.EnhancedQueueExecutor$Task in run at line 2449
    org.jboss.threads.EnhancedQueueExecutor$ThreadBody in run at line 1478
    org.jboss.threads.DelegatingRunnable in run at line 29
    org.jboss.threads.ThreadLocalResettingRunnable in run at line 29
    io.netty.util.concurrent.FastThreadLocalRunnable in run at line 30
    java.lang.Thread in run at line 829
EricWittmann commented 2 years ago

Note: as a result of not being properly caught, this is likely impacting liveness checks.

carlesarnal commented 4 months ago

Closing as this was coming from the managed service.