Hi team,
Using the 2.10 branch code and the transaction function of cpp thin
client, the transaction with id 1 not found error will be throw. the
reproduce steps are as follows:
1.start a node use the following config file:
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<beanid="grid.cfg"class="org.apache.ignite.configuration.IgniteConfiguration">
<propertyname="clientMode"value="false"/>
<propertyname="peerClassLoadingEnabled"value="true"/>
<propertyname="binaryConfiguration">
<beanclass="org.apache.ignite.configuration.BinaryConfiguration">
<propertyname="compactFooter"value="false"/>
<propertyname="idMapper">
<beanclass="org.apache.ignite.binary.BinaryBasicIdMapper">
<propertyname="lowerCase"value="true"/>
</bean>
</property>
</bean>
</property>
<propertyname="dataStorageConfiguration">
<beanclass="org.apache.ignite.configuration.DataStorageConfiguration">
<propertyname="defaultDataRegionConfiguration">
<beanclass="org.apache.ignite.configuration.DataRegionConfiguration">
<propertyname="name"value="default"/>
<propertyname="maxSize"value="#{1L * 1024 * 1024 * 1024}"/>
<propertyname="persistenceEnabled"value="false"/>
</bean>
</property>
</bean>
</property>
</bean>
</beans>
2.test code are as follows:
Usually only the first few loop operations may throw an exception, and
the subsequent operations are normal.
#include<stdint.h>
#include<iostream>
#include<ignite/thin/ignite_client.h>
#include<ignite/thin/cache/cache_client.h>
#include"ignite/examples/organization.h"
usingnamespaceignite;
usingnamespacethin;
usingnamespacecache;
usingnamespaceexamples;
intmain()
{
IgniteClientConfiguration cfg;
cfg.SetEndPoints("X.X.X.X");
try
{
IgniteClient client = IgniteClient::Start(cfg);
CacheClient<int32_t, Organization> cache =
client.GetOrCreateCache<int32_t, Organization>("PutGetExample");
cache.Clear();
intloop = 100;
for(inti = 0; i < loop; i++)
{
ignite::thin::transactions::ClientTransaction transaction =
client.ClientTransactions().TxStart();
Organization org("Microsoft", Address("1096 Eddy Street, San Francisco,
CA", i));
cache.Put(1, org);
transaction.Commit();
}
Organization orgFromCache = cache.Get(1);
}
catch(IgniteError& err)
{
std::cout << "An error occurred: "<< err.GetText() << std::endl;
returnerr.GetCode();
}
return0;
}
3.server side's log are as follows:
[11:25:35,496][SEVERE][client-connector-#117][ClientListenerNioListener]
Failed to process client request
[req=o.a.i.i.processors.platform.client.tx.ClientTxEndRequest@569bc2e0]
class
org.apache.ignite.internal.processors.platform.client.IgniteClientException:
Transaction with id 1not found.
at
org.apache.ignite.internal.processors.platform.client.tx.ClientTxEndRequest.process(ClientTxEndRequest.java:59)
at
org.apache.ignite.internal.processors.platform.client.ClientRequestHandler.handle(ClientRequestHandler.java:98)
at
org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:195)
at
org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:49)
at
org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279)
at
org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109)
at
org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97)
at
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
at
org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)