Which version are you using? I remember similar exceptions before switching
to 1.7, seems they had some bugs.
Also I don't know if Luca suggested exactly that setup but running such a
DB with 2 nodes doesn't seem like a great idea - should you have a link (or
well any sort of network error) between them or if one of them should go
down for some time you will have inconsistent data (since both quorums are
set to only 1). An odd number of servers with quorum (N/2)+1 is a better
idea.
Mateusz
On Wednesday, April 16, 2014 9:22:31 PM UTC+9, Daniel wrote:
>
> Because we've had daily outages of 15 minutes due to the backup of the
> DB, we follwed the advice of Luca to set up a distributed environment
> with two nodes.
>
> Here is the config:
>
>
> default-distributed-db-config.json
>
> {
> "replication": true,
> "autoDeploy": true,
> "hotAlignment": true,
> "resyncEvery": 15,
> "clusters": {
> "internal": {
> "replication": false
> },
> "index": {
> "replication": false
> },
> "ODistributedConflict": {
> "replication": false
> },
> "*": {
> "replication": true,
> "readQuorum": 1,
> "writeQuorum": 1,
> "failureAvailableNodesLessQuorum": false,
> "readYourWrites": true,
> "partitioning": {
> "strategy": "round-robin",
> "default": 0,
> "partitions": [
> [ "<NEW_NODE>" ]
> ]
> }
> }
> }
> }
>
>
> So now here is what happended and finally led to a corrupted DB:
>
>
> - Stopped the application server
> - Setup and configured replication with the settings above
> - Two nodes: node01 and node02
> - node02 had no existing database, so node01 exported and zipped the db
> and sent it to node02
> - node02 extracted the db successfully, log message: INFO [node02]
> installed database [OHazelcastPlugin]
> - We started the application server
> - After some time the following exception (sometimes) appeares in the
> orient-server.log:
>
> Cannot route TX operation against distributed node
> Error on committing distributed transaction
> ->
> com.orientechnologies.orient.server.distributed.ODistributedStorage.commit(ODistributedStorage.java:502)
> ->
> com.orientechnologies.orient.core.tx.OTransactionOptimistic.commit(OTransactionOptimistic.java:109)
> ->
> com.orientechnologies.orient.core.db.record.ODatabaseRecordTx.commit(ODatabaseRecordTx.java:146)
> ->
> com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.commit(ODatabaseDocumentTx.java:440)
> ->
> com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.commit(ODatabaseDocumentTx.java:435)
> ->
> com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary.commit(ONetworkProtocolBinary.java:1253)
> ->
> com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary.executeRequest(ONetworkProtocolBinary.java:325)
> ->
> com.orientechnologies.orient.server.network.protocol.binary.OBinaryNetworkProtocolAbstract.execute(OBinaryNetworkProtocolAbstract.java:126)
> -> com.orientechnologies.common.thread.OSoftThread.run(OSoftThread.java:45)
>
>
> - After a while the following exception appeared in our application with
> increased frequency:
>
> Caused by:
> com.orientechnologies.orient.core.exception.OTransactionException: Cannot
> insert item in mvrb-tree because the transactional item was not found.
> at
> com.orientechnologies.orient.core.type.tree.OMVRBTreeRID.internalPut(OMVRBTreeRID.java:156)
> at
> com.orientechnologies.orient.core.type.tree.OMVRBTreeRID.internalPut(OMVRBTreeRID.java:57)
> at
> com.orientechnologies.orient.core.type.tree.OMVRBTreePersistent.put(OMVRBTreePersistent.java:468)
> at
> com.orientechnologies.orient.core.type.tree.provider.OMVRBTreeRIDProvider.lazyUnmarshall(OMVRBTreeRIDProvider.java:227)
> at
> com.orientechnologies.orient.core.type.tree.OMVRBTreeRID.getTreeSize(OMVRBTreeRID.java:332)
> at
> com.orientechnologies.orient.core.type.tree.OMVRBTreeRID.size(OMVRBTreeRID.java:318)
> at
> com.orientechnologies.orient.core.type.tree.OMVRBTreeRIDSet.size(OMVRBTreeRIDSet.java:91)
> at
> com.orientechnologies.common.collection.OMultiValue.getSize(OMultiValue.java:82)
> at
> com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerSchemaAware2CSV.toString(ORecordSerializerSchemaAware2CSV.java:165)
> at
> com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerStringAbstract.toStream(ORecordSerializerStringAbstract.java:92)
> at
> com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerSchemaAware2CSV.toStream(ORecordSerializerSchemaAware2CSV.java:518)
> at
> com.orientechnologies.orient.core.record.ORecordSchemaAwareAbstract.toStream(ORecordSchemaAwareAbstract.java:127)
> at
> com.orientechnologies.orient.core.record.ORecordSchemaAwareAbstract.toStream(ORecordSchemaAwareAbstract.java:122)
> at
> com.orientechnologies.orient.core.record.impl.ODocument.toStream(ODocument.java:391)
> at
> com.orientechnologies.orient.client.remote.OStorageRemote.commitEntry(OStorageRemote.java:1919)
> ... 75 more
>
>
> - Then we took a look at the corresponding dataset to those exception via
> the orientdb console, i.e.:
>
> select from #12:155580
>
> Error:
> com.orientechnologies.orient.core.exception.OTransactionException:
> Cannot insert item in mvrb-tree because the transactional item was not
> found.
>
>
> - Simple properties could be selected without problems, i.e.:
>
> select email from #12:155580
> ----+-----+---------
> # |@RID |email
> ----+-----+---------
> 0 |#-2:1|<removed>
> ----+-----+---------
>
>
> - Selections of linked Edges resulted sometimes in errors, i.e.:
>
> select out_Friend from #12:155580
> Error:
> com.orientechnologies.orient.core.exception.OTransactionException:
> Cannot insert item in mvrb-tree because the transactional item was not
> found.
>
>
> - Whereas others worked
>
> select in_Friend from #12:155580
> ----+-----+---------
> # |@RID |in_Friend
> ----+-----+---------
> 0 |#-2:1|[63]
> ----+-----+---------
> 1 item(s) found. Query executed in 0.004 sec(s).
>
>
> Any idea or hint for us?
>
> Thanks a million
> Daniel
>
--
---
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.