Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change point detection deadlocks #2135

Open
johnaohara opened this issue Oct 25, 2024 · 0 comments
Open

Change point detection deadlocks #2135

johnaohara opened this issue Oct 25, 2024 · 0 comments
Labels
area/backend branch/stable The stable branch priority/high High priority type/bug Something isn't working

Comments

@johnaohara
Copy link
Member

Describe the bug

During change point recalculation, a deadlock in the database prevented the change detection recalculation from proceeding.

Server log;

2024-10-25 15:36:23,572 e7a24a43692c /usr/lib/jvm/java-17-openjdk-17.0.12.0.7-2.el9.x86_64/bin/java[7] ERROR [io.sma.rea.mes.amqp] (vert.x-eventloop-thread-4) SRMSG16219: A message sent to channel `dataset-event-in` has been nacked, rejecting the AMQP message and fail-stop
2024-10-25 15:36:23,572 e7a24a43692c /usr/lib/jvm/java-17-openjdk-17.0.12.0.7-2.el9.x86_64/bin/java[7] ERROR [io.sma.rea.mes.amqp] (vert.x-eventloop-thread-4) SRMSG16225: Failure reported for channel `dataset-event-in`, closing client: jakarta.persistence.OptimisticLockException: org.hibernate.exception.LockAcquisitionException: JDBC exception executing SQL [DELETE FROM change cc WHERE cc.id IN (SELECT id FROM change c LEFT JOIN fingerprint fp ON c.dataset_id = fp.dataset_id WHERE NOT c.confirmed AND c.variable_id = ? AND (c.timestamp > ? OR (c.timestamp = ? AND ?)) AND json_equals(fp.fingerprint, ?))] [ERROR: deadlock detected
  Detail: Process 1173907 waits for ShareLock on transaction 7564090; blocked by process 1178486.
Process 1178486 waits for ShareLock on transaction 7564089; blocked by process 1173907.
  Hint: See server log for query details.
  Where: while deleting tuple (536,18) in relation "change"] [n/a]
        at org.hibernate.internal.ExceptionConverterImpl.wrapLockException(ExceptionConverterImpl.java:254)
        at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:100)
        at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:167)
        at org.hibernate.query.spi.AbstractQuery.executeUpdate(AbstractQuery.java:659)
        at io.hyperfoil.tools.horreum.svc.AlertingServiceImpl.runChangeDetection(AlertingServiceImpl.java:662)
        at io.hyperfoil.tools.horreum.svc.AlertingServiceImpl.onNewDataPoint(AlertingServiceImpl.java:618)
        at io.hyperfoil.tools.horreum.svc.AlertingServiceImpl_Subclass.onNewDataPoint$$superforward(Unknown Source)
        at io.hyperfoil.tools.horreum.svc.AlertingServiceImpl_Subclass$$function$$20.apply(Unknown Source)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext$NextAroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:97)
        at io.hyperfoil.tools.horreum.server.RolesInterceptor.intercept(RolesInterceptor.java:75)
        at io.hyperfoil.tools.horreum.server.RolesInterceptor_Bean.intercept(Unknown Source)
        at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:70)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInCallerTx(TransactionalInterceptorBase.java:335)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:40)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:32)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Unknown Source)
        at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30)
        at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)
        at io.hyperfoil.tools.horreum.svc.AlertingServiceImpl_Subclass.onNewDataPoint(Unknown Source)
        at io.hyperfoil.tools.horreum.svc.AlertingServiceImpl.createDataPoint(AlertingServiceImpl.java:555)
        at io.hyperfoil.tools.horreum.svc.AlertingServiceImpl_Subclass.createDataPoint$$superforward(Unknown Source)
        at io.hyperfoil.tools.horreum.svc.AlertingServiceImpl_Subclass$$function$$14.apply(Unknown Source)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInCallerTx(TransactionalInterceptorBase.java:335)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:40)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:32)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Unknown Source)
        at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30)
        at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)
        at io.hyperfoil.tools.horreum.svc.AlertingServiceImpl_Subclass.createDataPoint(Unknown Source)
        at io.hyperfoil.tools.horreum.svc.AlertingServiceImpl.lambda$emitDatapoints$20(AlertingServiceImpl.java:515)
        at io.hyperfoil.tools.horreum.svc.Util.evaluateWithCombinationFunction(Util.java:635)
        at io.hyperfoil.tools.horreum.svc.AlertingServiceImpl.emitDatapoints(AlertingServiceImpl.java:465)
        at io.hyperfoil.tools.horreum.svc.AlertingServiceImpl.recalculateDatapointsForDataset(AlertingServiceImpl.java:328)
        at io.hyperfoil.tools.horreum.svc.AlertingServiceImpl.onLabelsUpdated(AlertingServiceImpl.java:278)
        at io.hyperfoil.tools.horreum.svc.AlertingServiceImpl_Subclass.onLabelsUpdated$$superforward(Unknown Source)
        at io.hyperfoil.tools.horreum.svc.AlertingServiceImpl_Subclass$$function$$19.apply(Unknown Source)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext$NextAroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:97)
        at io.hyperfoil.tools.horreum.server.RolesInterceptor.intercept(RolesInterceptor.java:75)
        at io.hyperfoil.tools.horreum.server.RolesInterceptor_Bean.intercept(Unknown Source)
        at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:70)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInCallerTx(TransactionalInterceptorBase.java:335)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:40)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:32)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Unknown Source)
        at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30)
        at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)
        at io.hyperfoil.tools.horreum.svc.AlertingServiceImpl_Subclass.onLabelsUpdated(Unknown Source)
        at io.hyperfoil.tools.horreum.svc.AlertingServiceImpl_ClientProxy.onLabelsUpdated(Unknown Source)
        at io.hyperfoil.tools.horreum.svc.ServiceMediator.updateLabels(ServiceMediator.java:149)
        at io.hyperfoil.tools.horreum.svc.ServiceMediator_Subclass.updateLabels$$superforward(Unknown Source)
        at io.hyperfoil.tools.horreum.svc.ServiceMediator_Subclass$$function$$15.apply(Unknown Source)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInCallerTx(TransactionalInterceptorBase.java:335)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:40)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:32)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Unknown Source)
        at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30)
        at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)
        at io.hyperfoil.tools.horreum.svc.ServiceMediator_Subclass.updateLabels(Unknown Source)
        at io.hyperfoil.tools.horreum.svc.ServiceMediator_ClientProxy.updateLabels(Unknown Source)
        at io.hyperfoil.tools.horreum.svc.DatasetServiceImpl.calculateLabelValues(DatasetServiceImpl.java:462)
        at io.hyperfoil.tools.horreum.svc.DatasetServiceImpl_Subclass.calculateLabelValues$$superforward(Unknown Source)
        at io.hyperfoil.tools.horreum.svc.DatasetServiceImpl_Subclass$$function$$6.apply(Unknown Source)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext$NextAroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:97)
        at io.hyperfoil.tools.horreum.server.RolesInterceptor.intercept(RolesInterceptor.java:75)
        at io.hyperfoil.tools.horreum.server.RolesInterceptor_Bean.intercept(Unknown Source)
        at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:70)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:136)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:107)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:38)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:32)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Unknown Source)
        at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30)
        at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)
        at io.hyperfoil.tools.horreum.svc.DatasetServiceImpl_Subclass.calculateLabelValues(Unknown Source)
        at io.hyperfoil.tools.horreum.svc.DatasetServiceImpl.onNewDatasetNoLock(DatasetServiceImpl.java:579)
        at io.hyperfoil.tools.horreum.svc.DatasetServiceImpl_ClientProxy.onNewDatasetNoLock(Unknown Source)
        at io.hyperfoil.tools.horreum.svc.ServiceMediator.processDatasetEvents(ServiceMediator.java:168)
        at io.hyperfoil.tools.horreum.svc.ServiceMediator_Subclass.processDatasetEvents$$superforward(Unknown Source)
        at io.hyperfoil.tools.horreum.svc.ServiceMediator_Subclass$$function$$6.apply(Unknown Source)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext$NextAroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:97)
        at io.hyperfoil.tools.horreum.server.RolesInterceptor.intercept(RolesInterceptor.java:75)
        at io.hyperfoil.tools.horreum.server.RolesInterceptor_Bean.intercept(Unknown Source)
        at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:70)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62)
        at io.quarkus.arc.impl.ActivateRequestContextInterceptor.invoke(ActivateRequestContextInterceptor.java:129)
        at io.quarkus.arc.impl.ActivateRequestContextInterceptor.aroundInvoke(ActivateRequestContextInterceptor.java:33)
        at io.quarkus.arc.impl.ActivateRequestContextInterceptor_Bean.intercept(Unknown Source)
        at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30)
        at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)
        at io.hyperfoil.tools.horreum.svc.ServiceMediator_Subclass.processDatasetEvents(Unknown Source)
        at io.hyperfoil.tools.horreum.svc.ServiceMediator_ClientProxy.processDatasetEvents(Unknown Source)
        at io.hyperfoil.tools.horreum.svc.ServiceMediator_SmallRyeMessagingInvoker_processDatasetEvents_ebe511ee548f91c634de3d182c814a6da94b30b1.invoke(Unknown Source)
        at io.smallrye.reactive.messaging.providers.AbstractMediator.lambda$invokeBlocking$15(AbstractMediator.java:191)
        at io.smallrye.context.impl.wrappers.SlowContextualSupplier.get(SlowContextualSupplier.java:21)
        at io.smallrye.mutiny.operators.uni.builders.UniCreateFromDeferredSupplier.subscribe(UniCreateFromDeferredSupplier.java:25)
        at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:36)
        at io.smallrye.mutiny.groups.UniSubscribe.withSubscriber(UniSubscribe.java:51)
        at io.smallrye.mutiny.groups.UniSubscribe.with(UniSubscribe.java:110)
        at io.smallrye.mutiny.groups.UniSubscribe.with(UniSubscribe.java:88)
        at io.vertx.mutiny.core.WorkerExecutor$1.handle(WorkerExecutor.java:105)
        at io.vertx.mutiny.core.WorkerExecutor$1.handle(WorkerExecutor.java:103)
        at io.vertx.core.impl.ContextImpl.lambda$executeBlocking$1(ContextImpl.java:191)
       at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:270)
        at io.vertx.core.impl.ContextImpl.lambda$internalExecuteBlocking$2(ContextImpl.java:210)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2516)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2495)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1521)
        at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)
        at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: org.hibernate.exception.LockAcquisitionException: JDBC exception executing SQL [DELETE FROM change cc WHERE cc.id IN (SELECT id FROM change c LEFT JOIN fingerprint fp ON c.dataset_id = fp.dataset_id WHERE NOT c.confirmed AND c.variable_id = ? AND (c.timestamp > ? OR (c.timestamp = ? AND ?)) AND json_equals(fp.fingerprint, ?))] [ERROR: deadlock detected
  Detail: Process 1173907 waits for ShareLock on transaction 7564090; blocked by process 1178486.
Process 1178486 waits for ShareLock on transaction 7564089; blocked by process 1173907.
  Hint: See server log for query details.
  Where: while deleting tuple (536,18) in relation "change"] [n/a]
        at org.hibernate.dialect.PostgreSQLDialect.lambda$buildSQLExceptionConversionDelegate$1(PostgreSQLDialect.java:1055)
        at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:58)
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108)
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:94)
        at org.hibernate.sql.exec.internal.StandardJdbcMutationExecutor.execute(StandardJdbcMutationExecutor.java:104)
        at org.hibernate.query.sql.internal.NativeNonSelectQueryPlanImpl.executeUpdate(NativeNonSelectQueryPlanImpl.java:76)
        at org.hibernate.query.sql.internal.NativeQueryImpl.doExecuteUpdate(NativeQueryImpl.java:895)
        at org.hibernate.query.spi.AbstractQuery.executeUpdate(AbstractQuery.java:651)
        ... 134 more
Caused by: org.postgresql.util.PSQLException: ERROR: deadlock detected
  Detail: Process 1173907 waits for ShareLock on transaction 7564090; blocked by process 1178486.
Process 1178486 waits for ShareLock on transaction 7564089; blocked by process 1173907.
  Hint: See server log for query details.
  Where: while deleting tuple (536,18) in relation "change"
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2733)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2420)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:372)
        at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:517)
        at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:434)
        at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:194)
        at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:155)
        at io.agroal.pool.wrapper.PreparedStatementWrapper.executeUpdate(PreparedStatementWrapper.java:90)
        at org.hibernate.sql.exec.internal.StandardJdbcMutationExecutor.execute(StandardJdbcMutationExecutor.java:90)
        ... 137 more


Messages on the message queue at the time of deadlock;


Data{{"datasetId":143294,"testId":298,"runId":0,"labelId":13768,"isRecalculation":true}}

Data{{"datasetId":143295,"testId":298,"runId":0,"labelId":13768,"isRecalculation":true}}

Data{{"datasetId":143296,"testId":298,"runId":0,"labelId":13768,"isRecalculation":true}}

Data{{"datasetId":143645,"testId":262,"runId":0,"labelId":13768,"isRecalculation":true}}

Data{{"datasetId":143679,"testId":298,"runId":0,"labelId":13768,"isRecalculation":true}}

Postgres server log;

1173907 [2024-10-25 11:36:23.566 EDT] [horreum] [7564089] ERROR:  deadlock detected
1173907 [2024-10-25 11:36:23.566 EDT] [horreum] [7564089] DETAIL:  Process 1173907 waits for ShareLock on transaction 7564090; blocked by process 1178486.
        Process 1178486 waits for ShareLock on transaction 7564089; blocked by process 1173907.
        Process 1173907: DELETE FROM change cc WHERE cc.id IN (SELECT id FROM change c LEFT JOIN fingerprint fp ON c.dataset_id = fp.dataset_id WHERE NOT c.confirmed AND c.variable_id = $1 AND (c.timestamp > $2 OR (c.timestamp = $3 AND $4)) AND json_equals(fp.fingerprint, $5))
        Process 1178486: DELETE FROM change cc WHERE cc.id IN (SELECT id FROM change c LEFT JOIN fingerprint fp ON c.dataset_id = fp.dataset_id WHERE NOT c.confirmed AND c.variable_id = $1 AND (c.timestamp > $2 OR (c.timestamp = $3 AND $4)) AND json_equals(fp.fingerprint, $5))
1173907 [2024-10-25 11:36:23.566 EDT] [horreum] [7564089] HINT:  See server log for query details.
1173907 [2024-10-25 11:36:23.566 EDT] [horreum] [7564089] CONTEXT:  while deleting tuple (536,18) in relation "change"
1173907 [2024-10-25 11:36:23.566 EDT] [horreum] [7564089] STATEMENT:  DELETE FROM change cc WHERE cc.id IN (SELECT id FROM change c LEFT JOIN fingerprint fp ON c.dataset_id = fp.dataset_id WHERE NOT c.confirmed AND c.variable_id = $1 AND (c.timestamp > $2 OR (c.timestamp = $3 AND $4)) AND json_equals(fp.fingerprint, $5))

@johnaohara johnaohara added type/bug Something isn't working branch/stable The stable branch area/backend priority/high High priority labels Oct 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/backend branch/stable The stable branch priority/high High priority type/bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant