Project

General

Profile

Bug #9852

Portal "C_10" does not exist error

Added by Alexandru Lungu over 1 year ago. Updated over 1 year ago.

Status:
WIP
Priority:
Normal
Target version:
-
Start date:
Due date:
% Done:

0%

billable:
No
vendor_id:
GCD
case_num:
version_reported:
version_resolved:
reviewer:
production:
No
env_name:
topics:

fwd_server_20250331_103112_0.log Magnifier (50.2 KB) Dănuț Filimon, 03/31/2025 03:38 AM

fwd.df (15.9 KB) Dănuț Filimon, 03/31/2025 03:41 AM

History

#1 Updated by Alexandru Lungu over 1 year ago

  • Assignee set to Dănuț Filimon
def var i as int.
def var nk as int.
def var n as int init 600.

do nk = 1 to n:
do transaction:
   for each book:
     delete book.
   end.

   do i = 1 to n: // to have multiple progressive brackets...
      create book.
      assign 
         book.isbn = string(i)
         book.book-id = i
         book.book-title = string(i).
      release book.
   end.

   for each customer: delete customer. end.
   create customer.
   customer.customer = 1.
   release customer.
end.

for each book:
   // message book.isbn.

   if book.book-id >= nk - 1 then 
   do transaction:
      find first customer exclusive-lock.
      customer.customer = customer - 1.
      release customer.

      if book.book-id = nk + 1 then do:
         delete book.
      end.
   end.
end.

end.

Example fails with portal "C_10" does not exist.

#2 Updated by Dănuț Filimon over 1 year ago

  • Status changed from New to WIP

#3 Updated by Dănuț Filimon over 1 year ago

Alex, I can't reproduce this error with latest trunk/15829.

#4 Updated by Constantin Asofiei over 1 year ago

Dănuț Filimon wrote:

Alex, I can't reproduce this error with latest trunk/15829.

I've tested now and it fails:

5/03/31 10:22:51.527+0300 |  SEVERE | com.goldencode.p2j.persist.orm.ScrollableResults | ThreadName:Conversation [00000001:bogus], Session:00000001, ThreadId:00000005, User:bogus | 
org.postgresql.util.PSQLException: ERROR: portal "C_28" does not exist
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2725)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2412)
    at org.postgresql.core.v3.QueryExecutorImpl.fetch(QueryExecutorImpl.java:2610)
    at org.postgresql.jdbc.PgResultSet.next(PgResultSet.java:2308)
    at com.mchange.v2.c3p0.impl.NewProxyResultSet.next(NewProxyResultSet.java:685)
    at com.goldencode.p2j.persist.orm.ScrollableResults.next(ScrollableResults.java:218)
    at com.goldencode.p2j.persist.ForwardResults.next(ForwardResults.java:209)
    at com.goldencode.p2j.persist.ResultsAdapter.next(ResultsAdapter.java:161)
    at com.goldencode.p2j.persist.AdaptiveQuery.next(AdaptiveQuery.java:1829)
    at com.goldencode.p2j.persist.PreselectQuery.next(PreselectQuery.java:2801)
    at com.goldencode.p2j.util.BlockManager.forEachWorker(BlockManager.java:11624)
    at com.goldencode.p2j.util.BlockManager.forEach(BlockManager.java:4739)
    at com.goldencode.testcases.Booktest2.lambda$0(Booktest2.java:98)
    at com.goldencode.p2j.util.Block.body(Block.java:636)
    at com.goldencode.p2j.util.BlockManager.processBody(BlockManager.java:9389)
    at com.goldencode.p2j.util.BlockManager.topLevelBlock(BlockManager.java:9013)
    at com.goldencode.p2j.util.BlockManager.externalProcedure(BlockManager.java:683)
    at com.goldencode.p2j.util.BlockManager.externalProcedure(BlockManager.java:656)
    at com.goldencode.testcases.Booktest2.execute(Booktest2.java:49)

#5 Updated by Dănuț Filimon over 1 year ago

This is the server log of the test, takes more than 5 minutes to run the test.

#6 Updated by Constantin Asofiei over 1 year ago

Please attach the .df file; what postgresql version do you use?

#7 Updated by Dănuț Filimon over 1 year ago

Constantin Asofiei wrote:

Please attach the .df file; what postgresql version do you use?

Just realized I have to use PG for this test, I was using MariaDB. Thanks for pointing that out, I will retest right away.

Attached df.

#8 Updated by Dănuț Filimon over 1 year ago

I was able to reproduce the issue.

#9 Updated by Dănuț Filimon over 1 year ago

The issue is:

25/03/31 11:09:07.291+0300 |  SEVERE | com.goldencode.p2j.persist.orm.ScrollableResults | ThreadName:Conversation [00000005:bogus], Session:00000005, ThreadId:00000008, User:bogus | 
org.postgresql.util.PSQLException: ERROR: portal "C_229" does not exist
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2725)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2412)
    at org.postgresql.core.v3.QueryExecutorImpl.fetch(QueryExecutorImpl.java:2610)
    at org.postgresql.jdbc.PgResultSet.isLast(PgResultSet.java:986)
    at com.mchange.v2.c3p0.impl.NewProxyResultSet.isLast(NewProxyResultSet.java:4163)
    at com.goldencode.p2j.persist.orm.ScrollableResults.execute(ScrollableResults.java:578)
    at com.goldencode.p2j.persist.orm.ScrollableResults.isLast(ScrollableResults.java:257)
    at com.goldencode.p2j.persist.ForwardResults.isLast(ForwardResults.java:257)
    at com.goldencode.p2j.persist.ForwardResults.next(ForwardResults.java:202)
    at com.goldencode.p2j.persist.ResultsAdapter.next(ResultsAdapter.java:161)
    at com.goldencode.p2j.persist.AdaptiveQuery.next(AdaptiveQuery.java:1829)
    at com.goldencode.p2j.persist.PreselectQuery.next(PreselectQuery.java:2801)
    at com.goldencode.p2j.util.BlockManager.forEachWorker(BlockManager.java:11624)
    at com.goldencode.p2j.util.BlockManager.forEach(BlockManager.java:4739)
    at com.goldencode.dataset.Start.lambda$execute$11(Start.java:98)
    at com.goldencode.p2j.util.Block.body(Block.java:636)
    at com.goldencode.p2j.util.BlockManager.processBody(BlockManager.java:9389)
    at com.goldencode.p2j.util.BlockManager.topLevelBlock(BlockManager.java:9013)
    at com.goldencode.p2j.util.BlockManager.externalProcedure(BlockManager.java:683)
    at com.goldencode.p2j.util.BlockManager.externalProcedure(BlockManager.java:656)
    at com.goldencode.dataset.Start.execute(Start.java:49)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.goldencode.p2j.util.Utils.invoke(Utils.java:1809)
    at com.goldencode.p2j.main.StandardServer$MainInvoker.execute(StandardServer.java:2956)
    at com.goldencode.p2j.main.StandardServer.invoke(StandardServer.java:2230)
    at com.goldencode.p2j.main.StandardServer.standardEntry(StandardServer.java:705)
    at com.goldencode.p2j.main.StandardServerMethodAccess.invoke(Unknown Source)
    at com.goldencode.p2j.util.MethodInvoker.invoke(MethodInvoker.java:156)
    at com.goldencode.p2j.net.Dispatcher.processInbound(Dispatcher.java:807)
    at com.goldencode.p2j.net.Conversation.block(Conversation.java:422)
    at com.goldencode.p2j.net.Conversation.run(Conversation.java:235)
    at java.lang.Thread.run(Thread.java:750)
25/03/31 11:09:13.386+0300 |  SEVERE | com.goldencode.p2j.persist.orm.ScrollableResults | ThreadName:Conversation [00000005:bogus], Session:00000005, ThreadId:00000008, User:bogus | 
org.postgresql.util.PSQLException: ERROR: portal "C_229" does not exist
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2725)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2412)
    at org.postgresql.core.v3.QueryExecutorImpl.fetch(QueryExecutorImpl.java:2610)
    at org.postgresql.jdbc.PgResultSet.next(PgResultSet.java:2308)
    at com.mchange.v2.c3p0.impl.NewProxyResultSet.next(NewProxyResultSet.java:685)
    at com.goldencode.p2j.persist.orm.ScrollableResults.next(ScrollableResults.java:218)
    at com.goldencode.p2j.persist.ForwardResults.next(ForwardResults.java:209)
    at com.goldencode.p2j.persist.ResultsAdapter.next(ResultsAdapter.java:161)
    at com.goldencode.p2j.persist.AdaptiveQuery.next(AdaptiveQuery.java:1829)
    at com.goldencode.p2j.persist.PreselectQuery.next(PreselectQuery.java:2801)
    at com.goldencode.p2j.util.BlockManager.forEachWorker(BlockManager.java:11624)
    at com.goldencode.p2j.util.BlockManager.forEach(BlockManager.java:4739)
    at com.goldencode.dataset.Start.lambda$execute$11(Start.java:98)
    at com.goldencode.p2j.util.Block.body(Block.java:636)
    at com.goldencode.p2j.util.BlockManager.processBody(BlockManager.java:9389)
    at com.goldencode.p2j.util.BlockManager.topLevelBlock(BlockManager.java:9013)
    at com.goldencode.p2j.util.BlockManager.externalProcedure(BlockManager.java:683)
    at com.goldencode.p2j.util.BlockManager.externalProcedure(BlockManager.java:656)
    at com.goldencode.dataset.Start.execute(Start.java:49)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.goldencode.p2j.util.Utils.invoke(Utils.java:1809)
    at com.goldencode.p2j.main.StandardServer$MainInvoker.execute(StandardServer.java:2956)
    at com.goldencode.p2j.main.StandardServer.invoke(StandardServer.java:2230)
    at com.goldencode.p2j.main.StandardServer.standardEntry(StandardServer.java:705)
    at com.goldencode.p2j.main.StandardServerMethodAccess.invoke(Unknown Source)
    at com.goldencode.p2j.util.MethodInvoker.invoke(MethodInvoker.java:156)
    at com.goldencode.p2j.net.Dispatcher.processInbound(Dispatcher.java:807)
    at com.goldencode.p2j.net.Conversation.block(Conversation.java:422)
    at com.goldencode.p2j.net.Conversation.run(Conversation.java:235)
    at java.lang.Thread.run(Thread.java:750)

Errors are thrown when i = 601, nk = 1.

#10 Updated by Dănuț Filimon over 1 year ago

            AdaptiveQuery query2 = new AdaptiveQuery();
            forEach(query2, "loopLabel4", new Block((Init) () -> 
            {
               query2.initialize(book, ((String) null), null, "book.bookId asc");
            }, 
            (Body) () -> 
            {
               //  message book.isbn.
               if (_isGreaterThanOrEqual(book.getBookId(), minus(nk, 1)))
               {
                  doBlock(TransactionType.FULL, "blockLabel1", new Block((Body) () -> 
                  {
                     new FindQuery(customer, (String) null, null, "customer.recid asc", LockType.EXCLUSIVE).first();
                     customer.setCustomer(minus(customer.getCustomer(), 1));
                     customer.release();

                     if (_isEqual(book.getBookId(), plus(nk, 1)))
                     {
                        book.deleteRecord(() -> isNotEqual(book.getBookTitle(), "Bogus Programming"), "Bogus Programming may not be deleted!!!");
                     }
                  }));
               }
            }));

The first time the DO block is executed, we end up caching the FOR EACH query (all 600 records). But the second time we end up executing the DO block, we end up invalidating the cached query and it needs to be executed again.

#11 Updated by Constantin Asofiei over 1 year ago

This seems solved with trunk 15839 (after rollback of #7991). Looks it is related to FORWARD-RESULTS fix.

#13 Updated by Dănuț Filimon over 1 year ago

I think making all FOR EACH queries FORWARD-ONLY was the main cause of this problem. I will revisit this after reviewing the changes removed in trunk/15839.

Also available in: Atom PDF