Ah interesting, but good that you figured it out.

Yes as the result is a closable, you have to close it if you don't exhaust it.

I talk to our team to update the documentation on that.

Thanks so much,

Michael

> Am 26.03.2015 um 07:59 schrieb S C Kannan <[email protected]>:
> 
> Michael,
> 
> We have finally traced the root cause of the issue(Unable to Create Nodes). 
> The issue is we are having Open Transaction Connections and we traced it via 
> JMX console.
> The open Transaction connections are happening because of not closing the 
> Execution Result after executing the cipher Queries.
>     result.close(); 
> I have added an Sample Code which solved the issue for us.
> 
> public static Node executeCypherQuerySingleResult(String strCypherQuery, 
> String strResultColumnName) {
>     ExecutionResult result = null;
>     Iterator<Node> n_column = null;
>     ExecutionEngine engine = null;
> 
>     try {
> 
>         engine = NeoDbConnection.getExecutionEngine(); // This will return 
> the Execution Engine Instance from Neo DB Connection Singleton Class 
>         result = engine.execute(strCypherQuery);
>         n_column = result.columnAs(strResultColumnName);
>         while (n_column.hasNext()) {
>             Node node = n_column.next();
>             return node;
>         }
>     } catch (Exception e) {
>         log.warn("Exception on Executing Cypher Query : " + strCypherQuery + 
> ".. Error is : " + e.getLocalizedMessage());
>     } finally {
>         // 
>         if (null != result) {
>             result.close(); // After I add this the issue was solved
>         }
>         result = null;
>         n_column = null;
>         engine = null;
>     }
>     return null;
> }
> 
> Thanks everyone who helped to solve the issue.A special thanks to Michael who 
> helped us to trace the root cause of the issue, tool to find open connections.
> 
> Kudo's to Neo4j Team and the group.
> 
> Best Regards,
> Kannan S C
> 
> 
> On Wednesday, 25 March 2015 22:01:07 UTC, Michael Hunger wrote:
> You could put a breakpoint into beginTx and find them with that
> 
> Otherwise I don't think transactions are logged to trace them anywhere
> 
> Von meinem iPhone gesendet
> 
> Am 25.03.2015 um 14:59 schrieb S C Kannan <sckan...@ <>gmail.com 
> <http://gmail.com/>>:
> 
>> Hello Michael,
>> 
>> Thanks for the guidance and advise regarding the JMX. It is really helpful 
>> to trace transactions related to neo4j. 
>> 
>> Your assumption was correct. We have found 2 open transactions during start 
>> up of our web applications. We are using 1.9.8 Embedded Neo4j for Java EE 
>> application.
>> 
>> Can you please advise any tools to find what place the open transaction 
>> occur.. 
>> 
>> We are forced to restart the application to close the open transaction. Is 
>> there any other way to close the open transaction in neo4j?
>> 
>> With Regards,
>> Kannan S C
>> 
>> On Monday, 23 March 2015 23:06:18 UTC, Michael Hunger wrote:
>> 
>> 
>> Von meinem iPhone gesendet
>> 
>> Am 23.03.2015 um 23:44 schrieb S C Kannan <[email protected] <>>:
>> 
>>> Hello Michael,
>>> 
>>> can we use ONE instance of ExecutionEngine for all cipher Query Execution?
>> 
>> Yes
>> 
>>> Or we want to create separate Instance ExecutionEngine  for each Cipher 
>>> query execution?  
>> 
>> No
>> 
>>> Kindly advise..
>>> 
>>> With Regards,
>>> Kannan S C
>>> 
>>> On Sunday, 22 March 2015 08:41:24 UTC, Michael Hunger wrote:
>>> You create two instances of GraphDatabaseService?
>>> 
>>> Also as you create connections to the root node you might get contention on 
>>> that root node too.
>>> 
>>> Please do create only ONE instance of ExecutionEngine and keep it with the 
>>> GraphDatabaseService.
>>> 
>>> I'd probably switch to an index based approach than a reference node based 
>>> approach and use the NodeUniqueFactory with an index instead which is less 
>>> lock sensitive.
>>> 
>>> I can only recommed to you to trace your open transactions (e.g. via JMX 
>>> and find the one that's still open e.g. for the root node).
>>> Those might be other transactions which are missing a tx.success() that 
>>> lock the root node.
>>> 
>>> Michael
>>> 
>>>> Am 22.03.2015 um 00:20 schrieb S C Kannan <[email protected] <>>:
>>>> 
>>>> Hello Michael,
>>>> 
>>>> Thanks for quick response. I have added the two class files below. 
>>>> (NeoUtil & DataSource) which are used in the code provided.
>>>> 
>>>> Minimum Heap Size 128MB
>>>> Maximum Heap Size 1024MB
>>>> 
>>>> Yes we have hidden transaction there which was stated on NeoUtil class 
>>>> findParentNode method. If Parent Node Not available, the method will 
>>>> create the parent Node. We have stated the respective methods code in the 
>>>> Neo Util class.
>>>> 
>>>> 
>>>> NeoUtil Class
>>>> ==============================
>>>> =====================================================================
>>>> public class NeoUtil {
>>>>     public static Node findParentNode(String nodeName) {
>>>>         String strCipherQuery = "START root=node(1) MATCH root"
>>>>                 + "-[:TABLE]->tb "
>>>>                 + " WHERE tb.name <http://tb.name/>='" + nodeName + "' "
>>>>                 + " RETURN tb";
>>>>         try {
>>>> 
>>>>             Node node = executeCypherQuerySingleResult(strCipherQuery, 
>>>> "tb");
>>>>             if (null != node) {
>>>>                 return node;
>>>>             } else {
>>>>                 createReferenceNode(nodeName);
>>>>             }
>>>>             
>>>>         } catch (Exception e) {
>>>>             e.printStackTrace();
>>>>             log.warn("Exception while find Node using Name : " + nodeName 
>>>> + ".. Error is : " + e.getLocalizedMessage());
>>>>         }
>>>>         return null;
>>>>     }
>>>> 
>>>>     public static Node executeCypherQuerySingleResult(String 
>>>> strCypherQuery, String strResultColumnName) {
>>>>         ExecutionResult result = null;
>>>>         ExecutionEngine engine = null;
>>>>         try {
>>>>             engine = new ExecutionEngine(DataSource.getGraphDBAPI(), 
>>>> StringLogger.SYSTEM);
>>>>             result = engine.execute(strCypherQuery);
>>>>         } catch (Exception e) {
>>>>             log.warn("Exception on Executing Cypher Query : " + 
>>>> strCypherQuery + ".. Error is : " + e.getLocalizedMessage());
>>>>         } finally {
>>>>             engine = null;
>>>>         }
>>>>         return nodeFromResult(result, strResultColumnName);
>>>>     }
>>>>     
>>>>     public static Node nodeFromResult(ExecutionResult result, String 
>>>> column) {
>>>>         Iterator<Node> n_column;
>>>>         try {
>>>>             n_column = result.columnAs(column);
>>>>             Node node = null;
>>>>             while (n_column.hasNext()) {
>>>>                 node = n_column.next();
>>>>                 return node;
>>>>             }
>>>>             return null;
>>>>         } catch (Exception e) {
>>>>             return null;
>>>>         } finally {
>>>>             n_column = null;
>>>>         }
>>>>     }
>>>>     
>>>>     public static Node createReferenceNode(String refNode) {
>>>>         log.info <http://log.info/>("refNode : " + refNode);
>>>>         Transaction tx = DataSource.getGraphDBAPI().beginTx();
>>>> 
>>>>         try {
>>>>             //Get the root Node
>>>>             Node rootNode = executeCypherQuerySingleResult("start 
>>>> rt=node(1) return rt", "rt");
>>>> 
>>>>             //Create the new node
>>>>             Node neoNode = DataSource.getGraphDB().createNode();
>>>>             //Set the name for that node
>>>>             neoNode.setProperty("name", refNode);
>>>> 
>>>>             //relate the new node to the parent node
>>>>             rootNode.createRelationshipTo(neoNode, TABLE);
>>>>             tx.success();
>>>>         } catch (Exception e) {
>>>>             tx.failure();
>>>>             log.warn("Exception on Creating Reference Node." + ".. Error 
>>>> is : " + e.getLocalizedMessage());
>>>>         } finally {
>>>>             tx.finish();
>>>>         }
>>>>     }
>>>> }
>>>> ===============================================================================================
>>>> DataSource Class
>>>> ===============================================================================================
>>>> public class DataSource {
>>>> 
>>>>     static GraphDatabaseService graphDb = null;
>>>> 
>>>>     public static GraphDatabaseService getGraphDBAPI() {
>>>> 
>>>>         return graphDb;
>>>>     }
>>>> 
>>>>     public static GraphDatabaseService dbStart() {
>>>>         String glassfishInstanceRootPropertyName = 
>>>> "com.sun.aas.instanceRoot";
>>>>         String serverLocation = 
>>>> System.getProperty(glassfishInstanceRootPropertyName) ;
>>>>         String fileName = serverLocation + "/config/neoDb.conf";
>>>>       
>>>>         log.info <http://log.info/>("Database Config File Path : " + 
>>>> fileName);
>>>>         Properties prop = new Properties();
>>>>         try {
>>>>             // the configuration file name
>>>>             InputStream is = new FileInputStream(fileName);
>>>> 
>>>>             // load the properties file
>>>>             prop.load(is);
>>>>         } catch (IOException e) {
>>>>             log.warn("Exception With Db Setup : " + 
>>>> e.getLocalizedMessage());
>>>>         }
>>>>         DB_PATH = prop.getProperty("graphdb.location");
>>>>         DB_EMBED_PORT = prop.getProperty("graphdb.port");
>>>>         SERVER_HOSTNAME = prop.getProperty("graphdb.server.hostname");
>>>>         UPLOAD_FILE_LOC = serverLocation + prop.getProperty("upload.dir");
>>>> 
>>>>         DB_TUNE_FILE = serverLocation+"/config/neo4j.properties";
>>>>        
>>>>         log.info <http://log.info/>("Properties File : " + DB_PATH);
>>>>         
>>>>         // Create Database with Properties
>>>>         GraphDatabaseAPI graphdb = (GraphDatabaseAPI) new 
>>>> GraphDatabaseFactory().newEmbeddedDatabaseBuilder(DB_PATH).
>>>>                 setConfig(GraphDatabaseSettings.node_keys_indexable, 
>>>> prop.getProperty("node_keys_indexable")).
>>>>                 setConfig(GraphDatabaseSettings.node_auto_indexing, 
>>>> prop.getProperty("node_auto_indexing")).
>>>>                 setConfig(GraphDatabaseSettings.cache_type, 
>>>> prop.getProperty("cache_type")).
>>>>                 setConfig(GraphDatabaseSettings.allow_store_upgrade, 
>>>> prop.getProperty("allow_store_upgrade")).
>>>>                 
>>>> setConfig(GraphDatabaseSettings.nodestore_propertystore_mapped_memory_size,
>>>>  prop.getProperty("nodestore_propertystore_mapped_memory_size")).
>>>>                 
>>>> setConfig(GraphDatabaseSettings.nodestore_mapped_memory_size, 
>>>> prop.getProperty("nodestore_mapped_memory_size")).
>>>>                 
>>>> setConfig(GraphDatabaseSettings.relationshipstore_mapped_memory_size, 
>>>> prop.getProperty("relationshipstore_mapped_memory_size")).
>>>>                 
>>>> setConfig(GraphDatabaseSettings.strings_mapped_memory_size, 
>>>> prop.getProperty("strings_mapped_memory_size")).
>>>>                 setConfig(GraphDatabaseSettings.use_memory_mapped_buffers, 
>>>> prop.getProperty("use_memory_mapped_buffers")).
>>>>                 
>>>> setConfig(GraphDatabaseSettings.relationship_auto_indexing, 
>>>> prop.getProperty("relationship_auto_indexing")).
>>>>                 newGraphDatabase();
>>>>         
>>>>         
>>>> GraphDatabaseFactory().newEmbeddedDatabaseBuilder(DB_PATH).setConfig(ShellSettings.remote_shell_enabled,
>>>>  GraphDatabaseSetting.TRUE).newGraphDatabase();
>>>>         
>>>>         // Server Configuration
>>>>         ServerConfigurator config;
>>>>         config = new ServerConfigurator(graphdb);
>>>>         
>>>> config.configuration().setProperty(Configurator.WEBSERVER_PORT_PROPERTY_KEY,
>>>>  DB_EMBED_PORT);
>>>>         
>>>> config.configuration().setProperty(Configurator.DB_TUNING_PROPERTY_FILE_KEY,
>>>>  DB_TUNE_FILE);
>>>>         
>>>> config.configuration().setProperty(Configurator.WEBSERVER_ADDRESS_PROPERTY_KEY,
>>>>  SERVER_HOSTNAME);
>>>> 
>>>>         try {
>>>>             srv = new WrappingNeoServerBootstrapper(graphdb, config);
>>>>             srv.start();
>>>>         } catch (Exception e) {
>>>>             log.warn("DS Error : " + e.getLocalizedMessage());
>>>>             e.printStackTrace();
>>>>         }
>>>> 
>>>>         graphDb = graphdb;
>>>>         registerShutdownHook(graphDb);
>>>>         return graphDb;
>>>>     }
>>>>     
>>>>     private static void registerShutdownHook(final GraphDatabaseService 
>>>> graphDb) {
>>>>         Runtime.getRuntime().addShutdownHook(new Thread() {
>>>> 
>>>>             @Override
>>>>             public void run() {
>>>>                 graphDb.shutdown();
>>>>                 srv.stop();
>>>>             }
>>>>         });
>>>>     }
>>>> }
>>>>  
>>>> ======================================================================================================
>>>> 
>>>> The Node find Query(Point 7) was done on console. Not from Source.
>>>> 
>>>> Best Regards,
>>>> Kannan S C 
>>>> 
>>>> 
>>>> On Saturday, 21 March 2015 20:20:59 UTC, Michael Hunger wrote:
>>>> In principle your code looks ok,
>>>> 
>>>> It's not clear which code/database your neoUtil.findParentNode("Test"); 
>>>> uses
>>>> and what DataSource.getGraphDBAPI() does
>>>> 
>>>> how much heap do you provide to your application?
>>>> 
>>>> 
>>>>> Am 21.03.2015 um 20:04 schrieb S C Kannan <sckan...@ <>gmail.com 
>>>>> <http://gmail.com/>>:
>>>>> 
>>>>> Hi Michael,
>>>>> 
>>>>> Thanks for the response.  I have added the exact fail case scenario with 
>>>>> codes and configuration as  follows,
>>>>> 
>>>>> We are using single threaded only.
>>>>> 
>>>>> I am using Neo4j 1.9.8 Embedded Database. The steps used to create node 
>>>>> are as follows,
>>>>> 
>>>>> 1. Start the Transaction
>>>>> 2. Create the Node.
>>>>> 3. Set few properties to the node
>>>>> 4. Create two relationships with other nodes
>>>> I see only one relationship-creation in your code
>>>>> 5. Commit the transaction
>>>>> 6. Print the Node Id (eg. 13456)
>>>> where is that?
>>>>> 7. Fetch the particular Node with the Node Id above with following query. 
>>>>> START root=node(13456) RETURN root;But the following error throws
>>>> I think somehow you either leak transactions so you still have a write 
>>>> lock at the node(s) (probably the parent-node) which is not unlocked yet 
>>>> and your second tx hangs on the same lock.
>>>> Do you have outer transactions that you don't show here?
>>>> 
>>>>> 
>>>>>     EntityNotFoundException: Node 13456 not found
>>>>> 
>>>>> When I try to do the above transaction again, the program hangs at point 
>>>>> no 4.
>>>>> 
>>>>> The Java Class used to create node with property and relation ship are as 
>>>>> follows,
>>>>> 
>>>>>     Transaction trx = DataSource.getGraphDBAPI().beginTx();  
>>>>>     try{
>>>>>         Node ndeTest= DataSource.getGraphDB().createNode();  
>>>>>         ndeTest.setId("1");  
>>>>>         ndeTest.setName("Test API");  
>>>>>         ndeTest.setURL("www.test.com <http://www.test.com/>");  
>>>>>         Node parentNode = neoUtil.findParentNode("Test");
>>>>>         parentNode.createRelationshipTo(ndeTest,        
>>>>>         KnoxxiRelationshipType.API);  
>>>>>         ndeTest.setStatus("1");
>>>>>         trx.success();
>>>>>     }catch (Exception e) {
>>>>>         trx.failure();
>>>>>         log.error("Test Node Creation Failed," + e.getLocalizedMessage);
>>>>>     } finally {trx.finish();} 
>>>>>     log.info <http://log.info/>("Node Id : "+ ndeTest.getId());
>>>>> 
>>>>> The neo4j Configuration are as follows:
>>>>> 
>>>>>     node_auto_indexing=true
>>>>>     cache_type=gcr
>>>>>     nodestore_propertystore_mapped_memory_size=150M
>>>>>     nodestore_mapped_memory_size=100M
>>>>>     relationshipstore_mapped_memory_size=500M
>>>>>     strings_mapped_memory_size=150M
>>>>>     relationship_auto_indexing=true
>>>>> 
>>>>> The last few lines on neo4j message.log file are as follows:
>>>>> 
>>>>> 
>>>>>     2015-03-20 09:25:08.030+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC 
>>>>> Monitor: Application threads blocked for an additional 385ms [total block 
>>>>> time: 5.365s]
>>>>>     2015-03-20 09:25:25.766+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC 
>>>>> Monitor: Application threads blocked for an additional 395ms [total block 
>>>>> time: 5.76s]
>>>>> 
>>>>> Please guide me if i miss something out.
>>>>> 
>>>>> Best Regards,
>>>>> Kannan S C
>>>>> 
>>>>> On Friday, 20 March 2015 10:27:14 UTC, Michael Hunger wrote:
>>>>> Please share you code, best a failing test, neo4j version, data model.
>>>>> Are you running single threaded or multi threaded, ...
>>>>> 
>>>>> M
>>>>> 
>>>>>> Am 20.03.2015 um 11:12 schrieb S C Kannan <[email protected] <>>:
>>>>>> 
>>>>>> Hi Experts,
>>>>>> 
>>>>>> I am facing an issue which was stated as follows,
>>>>>> 
>>>>>> 1. I can able to use cipher query to fetch records. But when i save a 
>>>>>> new node and Create relationship to the someother node, Neo4j hangs and 
>>>>>> nothing happens after that. There are no error logs on  Message.log.
>>>>>> 
>>>>>> Please help to sort this out'
>>>>>> 
>>>>>> With Regards,
>>>>>> Kannan S C
>>>>>> 
>>>>>> -- 
>>>>>> You received this message because you are subscribed to the Google 
>>>>>> Groups "Neo4j" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>>> an email to neo4j+un...@ <>googlegroups.com <http://googlegroups.com/>.
>>>>>> For more options, visit https://groups.google.com/d/optout 
>>>>>> <https://groups.google.com/d/optout>.
>>>>> 
>>>>> 
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google Groups 
>>>>> "Neo4j" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>>>> email to [email protected] <>.
>>>>> For more options, visit https://groups.google.com/d/optout 
>>>>> <https://groups.google.com/d/optout>.
>>>> 
>>>> 
>>>> -- 
>>>> You received this message because you are subscribed to the Google Groups 
>>>> "Neo4j" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>>> email to [email protected] <>.
>>>> For more options, visit https://groups.google.com/d/optout 
>>>> <https://groups.google.com/d/optout>.
>>> 
>>> 
>>> -- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "Neo4j" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to [email protected] <>.
>>> For more options, visit https://groups.google.com/d/optout 
>>> <https://groups.google.com/d/optout>.
>> 
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Neo4j" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <>.
>> For more options, visit https://groups.google.com/d/optout 
>> <https://groups.google.com/d/optout>.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Neo4j" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] 
> <mailto:[email protected]>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
You received this message because you are subscribed to the Google Groups 
"Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to