appsmithorg / appsmith

Platform to build admin panels, internal tools, and dashboards. Integrates with 25+ databases and any API.
https://www.appsmith.com
Apache License 2.0
34.68k stars 3.75k forks source link

[Bug]: Subabase API GET Request #30102

Closed NickImmoflow closed 10 months ago

NickImmoflow commented 10 months ago

Is there an existing issue for this?

Description

[Business Edition] When I execute a GET API request to Subabase (OAuth get User Details), appsmith instance load the request without timeout. After that i see an error in backend logs of docker container: "backend stdout | com.appsmith.server.exceptions.AppsmithException: Please enter a valid parameter workspaceId. backend stdout | at com.appsmith.server.datasources.base.DatasourceServiceImpl.getTrueEnvironmentId(DatasourceServiceImpl.java:102) backend stdout | Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: backend stdout | Error has been observed at the following site(s): backend stdout | *__checkpoint ⇢ Handler com.appsmith.server.controllers.ActionController#executeAction(Flux, String, String, String) [DispatcherHandler] backend stdout | Original Stack Trace: backend stdout | at com.appsmith.server.datasources.base.DatasourceServiceImpl.getTrueEnvironmentId(DatasourceServiceImpl.java:102) backend stdout | at com.appsmith.server.solutions.ce.ActionExecutionSolutionCEImpl.lambda$executeAction$0(ActionExecutionSolutionCEImpl.java:197) backend stdout | at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:132) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onNext(MDCConfig.java:53) backend stdout | at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:137) backend stdout | at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:245) backend stdout | at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:305) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onNext(MDCConfig.java:53) backend stdout | at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2545) backend stdout | at reactor.core.publisher.MonoFlatMap$FlatMapInner.onSubscribe(MonoFlatMap.java:291) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onSubscribe(MDCConfig.java:47) backend stdout | at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55) backend stdout | at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) backend stdout | at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:165) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onNext(MDCConfig.java:53) backend stdout | at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onNext(MDCConfig.java:53) backend stdout | at reactor.core.publisher.MonoUsingWhen$MonoUsingWhenSubscriber.deferredComplete(MonoUsingWhen.java:268) backend stdout | at reactor.core.publisher.FluxUsingWhen$CommitInner.onComplete(FluxUsingWhen.java:527) backend stdout | at reactor.core.publisher.Operators.complete(Operators.java:137) backend stdout | at reactor.core.publisher.MonoEmpty.subscribe(MonoEmpty.java:46) backend stdout | at reactor.core.publisher.Mono.subscribe(Mono.java:4495) backend stdout | at reactor.core.publisher.FluxUsingWhen$UsingWhenSubscriber.onComplete(FluxUsingWhen.java:384) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onComplete(MDCConfig.java:63) backend stdout | at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:246) backend stdout | at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:305) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onNext(MDCConfig.java:53) backend stdout | at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:245) backend stdout | at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:305) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onNext(MDCConfig.java:53) backend stdout | at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2545) backend stdout | at reactor.core.publisher.MonoFlatMap$FlatMapInner.onSubscribe(MonoFlatMap.java:291) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onSubscribe(MDCConfig.java:47) backend stdout | at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55) backend stdout | at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) backend stdout | at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:165) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onNext(MDCConfig.java:53) backend stdout | at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:137) backend stdout | at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:245) backend stdout | at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:305) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onNext(MDCConfig.java:53) backend stdout | at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2545) backend stdout | at reactor.core.publisher.MonoFlatMap$FlatMapInner.onSubscribe(MonoFlatMap.java:291) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onSubscribe(MDCConfig.java:47) backend stdout | at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55) backend stdout | at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) backend stdout | at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:165) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onNext(MDCConfig.java:53) backend stdout | at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:137) backend stdout | at reactor.core.publisher.Operators$BaseFluxToMonoOperator.completePossiblyEmpty(Operators.java:2071) backend stdout | at reactor.core.publisher.MonoCollectList$MonoCollectListSubscriber.onComplete(MonoCollectList.java:118) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onComplete(MDCConfig.java:63) backend stdout | at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onComplete(Operators.java:2205) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onComplete(MDCConfig.java:63) backend stdout | at reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onComplete(MonoFlatMapMany.java:260) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onComplete(MDCConfig.java:63) backend stdout | at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.onComplete(FluxConcatMapNoPrefetch.java:240) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onComplete(MDCConfig.java:63) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onComplete(MDCConfig.java:63) backend stdout | at reactor.core.publisher.FluxCreate$BaseSink.complete(FluxCreate.java:460) backend stdout | at reactor.core.publisher.FluxCreate$BufferAsyncSink.drain(FluxCreate.java:805) backend stdout | at reactor.core.publisher.FluxCreate$BufferAsyncSink.complete(FluxCreate.java:753) backend stdout | at reactor.core.publisher.FluxCreate$SerializedFluxSink.drainLoop(FluxCreate.java:247) backend stdout | at reactor.core.publisher.FluxCreate$SerializedFluxSink.drain(FluxCreate.java:213) backend stdout | at reactor.core.publisher.FluxCreate$SerializedFluxSink.complete(FluxCreate.java:204) backend stdout | at com.mongodb.reactivestreams.client.internal.BatchCursorFlux.lambda$recurseCursor$4(BatchCursorFlux.java:102) backend stdout | at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:171) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onNext(MDCConfig.java:53) backend stdout | at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:137) backend stdout | at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onNext(MDCConfig.java:53) backend stdout | at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:200) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onNext(MDCConfig.java:53) backend stdout | at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:172) backend stdout | at com.mongodb.reactivestreams.client.internal.MongoOperationPublisher.lambda$sinkToCallback$31(MongoOperationPublisher.java:577) backend stdout | at com.mongodb.internal.operation.AsyncQueryBatchCursor.next(AsyncQueryBatchCursor.java:173) backend stdout | at com.mongodb.reactivestreams.client.internal.BatchCursor.lambda$next$0(BatchCursor.java:38) backend stdout | at reactor.core.publisher.MonoCreate.subscribe(MonoCreate.java:58) backend stdout | at reactor.core.publisher.Mono.subscribe(Mono.java:4495) backend stdout | at reactor.core.publisher.Mono.subscribeWith(Mono.java:4561) backend stdout | at reactor.core.publisher.Mono.subscribe(Mono.java:4323) backend stdout | at com.mongodb.reactivestreams.client.internal.BatchCursorFlux.recurseCursor(BatchCursorFlux.java:108) backend stdout | at com.mongodb.reactivestreams.client.internal.BatchCursorFlux.lambda$subscribe$0(BatchCursorFlux.java:60) backend stdout | at reactor.core.publisher.LambdaMonoSubscriber.onNext(LambdaMonoSubscriber.java:171) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onNext(MDCConfig.java:53) backend stdout | at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onNext(MDCConfig.java:53) backend stdout | at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) backend stdout | at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onNext(MDCConfig.java:53) backend stdout | at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:245) backend stdout | at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:305) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onNext(MDCConfig.java:53) backend stdout | at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180) backend stdout | at com.appsmith.server.configurations.MDCConfig$MdcContextLifter.onNext(MDCConfig.java:53) backend stdout | at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:172) backend stdout | at com.mongodb.reactivestreams.client.internal.MongoOperationPublisher.lambda$sinkToCallback$31(MongoOperationPublisher.java:577) backend stdout | at com.mongodb.reactivestreams.client.internal.OperationExecutorImpl.lambda$execute$2(OperationExecutorImpl.java:94) backend stdout | at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:46) backend stdout | at com.mongodb.internal.async.function.AsyncCallbackSupplier.lambda$whenComplete$1(AsyncCallbackSupplier.java:97) backend stdout | at com.mongodb.internal.async.function.RetryingAsyncCallbackSupplier$RetryingCallback.onResult(RetryingAsyncCallbackSupplier.java:116) backend stdout | at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:46) backend stdout | at com.mongodb.internal.async.function.AsyncCallbackSupplier.lambda$whenComplete$1(AsyncCallbackSupplier.java:97) backend stdout | at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:46) backend stdout | at com.mongodb.internal.async.function.AsyncCallbackSupplier.lambda$whenComplete$1(AsyncCallbackSupplier.java:97) backend stdout | at com.mongodb.internal.operation.FindOperation$1.onResult(FindOperation.java:379) backend stdout | at com.mongodb.internal.operation.CommandOperationHelper.lambda$transformingReadCallback$10(CommandOperationHelper.java:332) backend stdout | at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:46) backend stdout | at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor$1.onResult(DefaultServer.java:242) backend stdout | at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:46) backend stdout | at com.mongodb.internal.connection.CommandProtocolImpl$1.onResult(CommandProtocolImpl.java:84) backend stdout | at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection$1.onResult(DefaultConnectionPool.java:683) backend stdout | at com.mongodb.internal.connection.UsageTrackingInternalConnection$2.onResult(UsageTrackingInternalConnection.java:159) backend stdout | at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:46) backend stdout | at com.mongodb.internal.connection.InternalStreamConnection$2$1.onResult(InternalStreamConnection.java:524) backend stdout | at com.mongodb.internal.connection.InternalStreamConnection$2$1.onResult(InternalStreamConnection.java:501) backend stdout | at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback$MessageCallback.onResult(InternalStreamConnection.java:824) backend stdout | at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback$MessageCallback.onResult(InternalStreamConnection.java:788) backend stdout | at com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:648) backend stdout | at com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:645) backend stdout | at com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:319) backend stdout | at com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:266) backend stdout | at com.mongodb.internal.connection.InternalStreamConnection.readAsync(InternalStreamConnection.java:645) backend stdout | at com.mongodb.internal.connection.InternalStreamConnection.access$600(InternalStreamConnection.java:89) backend stdout | at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback.onResult(InternalStreamConnection.java:778) backend stdout | at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback.onResult(InternalStreamConnection.java:763) backend stdout | at com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:648) backend stdout | at com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:645) backend stdout | at com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:319) backend stdout | at com.mongodb.connection.netty.NettyStream.handleReadResponse(NettyStream.java:347) backend stdout | at com.mongodb.connection.netty.NettyStream.access$1100(NettyStream.java:105) backend stdout | at com.mongodb.connection.netty.NettyStream$InboundBufferHandler.channelRead0(NettyStream.java:421) backend stdout | at com.mongodb.connection.netty.NettyStream$InboundBufferHandler.channelRead0(NettyStream.java:418) backend stdout | at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) backend stdout | at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) backend stdout | at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) backend stdout | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) backend stdout | at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) backend stdout | at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) backend stdout | at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) backend stdout | at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) backend stdout | at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) backend stdout | at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) backend stdout | at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) backend stdout | at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) backend stdout | at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) backend stdout | at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) backend stdout | at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) backend stdout | at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) backend stdout | at java.base/java.lang.Thread.run(Thread.java:840)"

This API request worked fine 2 days before. On weekends the automatic scheduled appsmith update and automatic backup of appsmith is running, maybe there could something happen.

And after that I got the entry in my repository: "formToNativeQuery": { "data": "Unable to find resource XXX", "status": "ERROR"} and "isValid": false, "invalids": [ "Unable to find datasource XXX", "Unable to find plugin XXX" ]

Steps To Reproduce

  1. Set up OAuth 2.0 to Supabase.
  2. Login your user and get Bearer Token.
  3. Send a GET Request to Supabase. (API Docs you find in your supabase account)

Public Sample App

No response

Environment

Production

Issue video log

No response

Version

Self hosted/1.9.58

NickImmoflow commented 10 months ago

@Nikhil-Nandagopal The Get API request works fine with Postman.

NickImmoflow commented 10 months ago

FYI: Your support has got the test credentials and the invitation to our workspace and application. (Sent from nick@immoflow.io). Discord thread: https://discord.com/channels/725602949748752515/1193881843926310932

NickImmoflow commented 10 months ago

@rohan-arthur I guess, I have found the issue for this behavior and I would like to ask you for confirmation of my thinking. I tested the API Call on other page in the app and it worked fast as expected. The main difference between the pages is that the page where is call does need long time to load has many TypeError (80+) because of undefined widgets or queries, I think that appsmith instance firstly checks all widgets and queries on page, secondly handle all other call e.g. API calls. That means that die to overload of appsmith instance on that page, it can't proceed the API call while it checks all the TypeErrors.

NickImmoflow commented 10 months ago

@rohan-arthur My guess was wrong. I reduced errors from 80 to 8 and still the loading of the API request is infinite. But I do not understand why the API request can perfectly be sent from other page but cannot from a specific one.

sneha122 commented 10 months ago

@NickImmoflow We are looking into the issue and we will let you know as soon as we find out the cause of the issue.

sneha122 commented 10 months ago

@NickImmoflow It looks like this action may have gotten corrupted somehow, can you please try to copy the same action from a page where it works to this page where it does not work? We can check if this copied action works or not. If it works we will know for sure that previous action got corrupted somehow, if it does not we can investigate it further to see if there is any issue with the page itself

NickImmoflow commented 10 months ago

@sneha122 Thank you for your suggestion. My actions:

  1. I deleted the GET API Call from page where is doesn't work.
  2. I commited changes.
  3. I copied the GET API request from the page where the call works.
  4. I run the GET API Call again.

The get api call is still not working.

sneha122 commented 10 months ago

@NickImmoflow Thank you for trying out the suggestion. In order to understand the problem in detail, It would be great if you are able to get on a call. I am sharing the calendly link in the discord thread, Please feel free to schedule the call.

sneha122 commented 10 months ago

@NickImmoflow Continuing the conversation over the discord thread, I have posted latest updates on it. Please check

NickImmoflow commented 10 months ago

@sneha122 Thank you for your help. I have already answered in the discord thread and will repeat it here, too. The solution is to clone the problematic page. Short test was successfully and I confirm that now the API call is working as expected. Sad that we couldn't identify the issue why this behavior appeared and I'm glad that we found a quick solution for our problem. @sneha122 Thank you very much for your support and our today's conversation.