On 24 Sep 2014, at 16:31, Luca Garulli <[email protected]> wrote:

> Hi guys,
> I've some updates. Using an queue in the middle improved performance. 
> Furthermore I've extended the asynchronous also to transactions.
> 
> Please could you re-test last version 2.0-M2-SNAPSHOT?

FYI, I get the following error using the latest snapshot in embedded mode with 
Java 7:

        java.lang.NoSuchMethodError: 
java.util.concurrent.ConcurrentHashMap.keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView;

I assume this is because the snapshot was built using Java 8, which changed the 
return type of keySet for ConcurrentHashMap:

        
http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html#keySet--

whereas in Java 7 it’s still the plain Set:

        
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html#keySet()

Possible workarounds (assuming the plan is still to support Java 7) is either 
build with a version of Java before 8, or use Map or ConcurrentMap for the 
field rather than the concrete type:

diff --git 
a/core/src/main/java/com/orientechnologies/orient/core/config/OContextConfiguration.java
 
b/core/src/main/java/com/orientechnologies/orient/core/config/OContextConfiguration.java
index d0dee2b..52c28b4 100644
--- 
a/core/src/main/java/com/orientechnologies/orient/core/config/OContextConfiguration.java
+++ 
b/core/src/main/java/com/orientechnologies/orient/core/config/OContextConfiguration.java
@@ -27,7 +27,7 @@ import java.util.concurrent.ConcurrentHashMap;
  * 
  */
 public class OContextConfiguration implements Serializable {
-  private final ConcurrentHashMap<String, Object> config = new 
ConcurrentHashMap<String, Object>();
+  private final Map<String, Object> config = new ConcurrentHashMap<String, 
Object>();
 
   /**
    * Empty constructor to create just a proxy for the OGlobalConfiguration. No 
values are setted.

( this is the place where the exception originates, there may be a couple of 
other fields using ConcurrentHashMap where they could just as well use Map or 
ConcurrentMap... )

—
Cheers, Stuart

> Lvc@
> 
> On 24 September 2014 11:31, Luca Garulli <[email protected]> wrote:
> Hi Ben,
> I found a bottleneck in Hazelcast: 
> https://github.com/hazelcast/hazelcast/issues/3661.
> 
> I could put a queue between ODistributedStorage and HZ. Let me try it now. 
> Soon a new push.
> 
> Lvc@
> ᐧ
> 
> On 24 September 2014 10:59, <[email protected]> wrote:
> Hi Luca,
> 
> I tested this and now get 0.24sec average inserts, which is the fastest 
> distributed performance I've experienced yet.
> 
> There still seems to be communication with the remote node before releasing 
> the client though.
> 
> Regards,
> - Ben
> 
> On Wednesday, September 24, 2014 1:24:23 AM UTC+2, Lvc@ wrote:
> Hi Ben,
> I've pushed a new version that reads the configuration from file 
> default-distributed-db-config.json, by adding:
> 
>     "executionMode": "asynchronous",
> 
> Lvc@
> ᐧ
> 
> On 23 September 2014 21:53, <[email protected]> wrote:
> Hi Luca,
> 
> Yes, I'm aware of that...
> 
> My reference to 1.7.9 was only concerning Christian's suggestion.
> 
> When I tested 2.0-M2, i still have no improvement. Does it need to be 
> activated for use in the console or binary interface? 
> 
> I do not have Java apps for creating documents.
> 
> Regards,
> - Ben
> 
> On Tuesday, September 23, 2014 9:14:57 PM UTC+2, Lvc@ wrote:
> Hi Ben,
> This is supported only in 2.0-M2.
> 
> Lvc@
> 
> ᐧ
> 
> On 23 September 2014 21:03, <[email protected]> wrote:
> Hi Christian,
> 
> Tried your suggestion too on 1.7.9, unfortunately it hasn't had any influence 
> even though it looked promising.
> 
> Regards,
> - Ben
> 
> 
> On Tuesday, September 23, 2014 8:48:00 AM UTC+2, Christian Laakmann wrote:
> Hi all, Luca,
> 
> it seems as if you wait for synchronous responses from _all_ available Nodes, 
> even if quorum is set to 0. In ODistributedResponseManager#collectResponse, 
> this code handles the notification of waiting threads after all expected 
> responses have been received.
> 
>       if (receivedResponses >= expectedSynchronousResponses && 
> (!waitForLocalNode || receivedCurrentNode)) {
>         if (completed || isMinimumQuorumReached(false)) {
>           // NOTIFY TO THE WAITER THE RESPONSE IS COMPLETE NOW
>           notifyWaiters();
>         }
>       }
> 
> My expectation would be, that #isMinimumQuorumReached() were called as part 
> of the first IF, i.e.:
> 
>       if (completed 
>                 || isMinimumQuorumReached(false) 
>                 || (receivedResponses >= expectedSynchronousResponses && 
> (!waitForLocalNode || receivedCurrentNode))) {
>           // NOTIFY TO THE WAITER THE RESPONSE IS COMPLETE NOW
>           notifyWaiters();
>       }
>       
> From my understanding, this would notify the waiting thread that pushed the 
> task as soon as the quorum is reached or all responses from the available 
> nodes have been collected.
> 
> Cheers,
> Christian
> 
> 
> On Tuesday, 23 September 2014 00:58:55 UTC+2, [email protected] wrote:
> Hi Luca,
> 
> Since I've been hung out to dry, I've toyed around with the orientdb sources. 
> I was able to establish that the bottlenecks are indeed sendRequest and 
> send2Nodes. Removing sleeps in the latest 1.7.9 release already provided a 
> 50% improvement (From ~1.2sec down to ~0.55sec.). Clearly we have different 
> views on what is asynchronous. In your methods, you inarguably wait for a 
> response from the nodes before giving a response to the client. IMHO 
> asynchronous replication should update the local database, respond to the 
> client and care about the rest later. I believe the replication methodology 
> needs a rethink. Whilst in may be suitable to LAN environments, it is 
> certainly not suitable for WAN. I still wonder if this is intended or even if 
> it has ever been tested. I see examples with europe and usa nodes with 
> sharding, etc.. but I can't believe such delays are accepted or the norm. 
> Other technologies can do it, so should OrientDB.
> 
> Anyway, enough of my ramblings.... Have a good evening.
> 
> Regards,
> - Ben
> 
> -- 
> 
> --- 
> You received this message because you are subscribed to the Google Groups 
> "OrientDB" 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 
> "OrientDB" 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 
> "OrientDB" 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 
> "OrientDB" 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 
"OrientDB" 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