Oh and my distributed config is also very basic:
{
"autoDeploy": true,
"hotAlignment": false,
"readQuorum": 2,
"writeQuorum": 2,
"failureAvailableNodesLessQuorum": false,
"readYourWrites": true,
"clusters": {
"internal": {
},
"index": {
},
"ODistributedConflict": {
},
"*": {
"servers": [ "<NEW_NODE>" ]
}
}
}
I also notice similar problems with getRecord(ORID), when I save on one
node and do a getRecord(ORID) on a different one very fast it sometimes
isn't replicated. I thought it might be something with my config which
makes it not wait for a read/write quorum but as I mentioned above I am
sometimes getting "conflict found but quorum (2) has been met" messages so
I guess this part works sometimes?
Mateusz
On Thursday, June 19, 2014 11:18:17 AM UTC+9, Mateusz Dymczyk wrote:
>
> My use case is a very basic SQL Select:
>
> try (ODatabaseDocumentTx db = connect(profile)) {
> String queryString = "select from " + query.getClazz() + " where " +
> query.getFieldName() + " = ?";
> List<ODocument> res = db.command(new OSQLSynchQuery<ODocument>(
> queryString)).execute(query.getFieldValue());
> }
>
> private static ODatabaseDocumentTx connect(DatabaseProfile dbProfile) {
> return new ODatabaseDocumentTx(dbProfile.getFullDBLocation()).open(
> dbProfile.getDbSettings().getUser(), dbProfile.getDbSettings().getPassword
> ());
> }
>
> I have an embedded server in my app started before that. The problem is
> this select only looks at the local node and does not distributed it to
> other nodes. This is because OCommandExecutorSQLSelect which executes SQL
> selects does not implement OCommandDistributedReplicateRequest which is
> required to be replicated to other nodes in ODistributedStorage#command():
>
> if (OScenarioThreadLocal.INSTANCE.get() != RUN_MODE.RUNNING_DISTRIBUTED) {
> if (exec instanceof OCommandDistributedReplicateRequest)
> replicated = ((OCommandDistributedReplicateRequest) exec).
> isReplicated();
> }
>
> The result is that I sometimes get a null response even though "save()" on
> other node returned "OK". After I wait some time or ping other nodes I
> finally get the record. The thing is I have read and write quorums for
> everything set to N/2 + 1 so this should not happen.
>
> Distribution seems to work because first of all after some time data gets
> replicated, secondly I do get conflicts from time to time on save() but
> they get resolved since the quorum has been met.
>
> Am I missing some other parts of the code where the results are aggregated?
>
> Am I opening the DB properly? Or should I get it from my embedded server
> instance like:
>
> server.openDatabase(dbType, dbUrl, user, pass);
>
> Mateusz
>
> On Monday, June 16, 2014 2:35:38 AM UTC+9, Lvc@ wrote:
>>
>> Hi,
>> query are executed on all the involved servers. If you've sharding the
>> query is split against all the servers and the result is aggregated back on
>> the main node.
>>
>> Read-Quorum is used on "record read" operation, so after the query is
>> executed, the record read operations should be called against all the
>> results.
>>
>> May you explain better your use case?
>>
>> Lvc@
>>
>>
>>
>> On 13 June 2014 02:35, Mateusz Dymczyk <[email protected]> wrote:
>>
>>> Correct me if I'm wrong but, even when running in distributed mode, SQL
>>> Select commands are not considered as distributed (since
>>> OCommandExecutorSQLSelect does not implement
>>> OCommandDistributedReplicateRequest). This is quite problematic if I want a
>>> readQuorum bigger than 1. Is there any way to fix this?
>>>
>>> Mateusz
>>>
>>> --
>>>
>>> ---
>>> 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.