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 <[email protected]>:
> 
> 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='" + 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("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("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("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 <[email protected]>:
>>>>>>> 
>>>>>>> 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");  
>>>>>>>         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("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 [email protected].
>>>>>>>>> For more options, visit 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.
>>>>> 
>>>>> 
>>>>> -- 
>>>>> 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.
>>> 
>>> -- 
>>> 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.
> 
> -- 
> 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.

-- 
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