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.

Reply via email to