Bug #9852
Portal "C_10" does not exist error
0%
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
- File fwd_server_20250331_103112_0.log
added
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
- File fwd.df added
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.