Cleaning up the inconsistency for graph database in orientdb

173 views
Skip to first unread message

Nitish Gangal

unread,
Aug 12, 2014, 3:16:58 AM8/12/14
to orient-...@googlegroups.com
Hello,

I am using orientdb v1.6.
I have a structure like:

User vertex( user 1) -> connected with edge "isFriendOf" edge class -> with other user vertex(user 2).

All the positive scenarios work just fine.
But in in certain scenarios when, we delete edge of "isFriendOf" class, its @rid references does not get cleaned up from user 1 and user 2 vertices.
This causes complete inconsistency in graph database and any query over these vertices and "isFriendOf" edge classes just returns an exception.
We tried to identify and clean up such references through web admin interface and through orientdb console, still I get the exceptions.

Completely stuck with it for now. Also, this looks kind of a severe thing for me.
Any pointers regarding this will be extremely helpful.

Please help me with following two things asap:
1. When such inconsistency can arise in orientdb?
2. How to clean up such things?

Please help me at the earliest.

Thanks,
Nitish Gangal
 

Luca Garulli

unread,
Aug 12, 2014, 3:27:07 AM8/12/14
to orient-database

Hi,
How do you delete vertex/edge?

Lvc@

Sent from Mobile device

--

---
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 orient-databa...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Nitish Gangal

unread,
Aug 12, 2014, 5:00:31 AM8/12/14
to orient-...@googlegroups.com
Hi,

Thanks for your reply.

Ideally, we use,

delete vertex @rid - for deleting vertices and
delete edge @rid - for deleting edges

I think, we read somewhere that by doing "delete from @rid" directly, it does not delete edge references from vertices.
hence, we are using queries as mentioned above.

Please correct if we are missing something.

Thanks,
Nitish Gangal

Luca Garulli

unread,
Aug 12, 2014, 5:46:19 AM8/12/14
to orient-database
Hi Nitish,
that is correct, so you shouldn't have such problem. Both DELETE VERTEX and DELETE EDGE are transactional, so in case of problem the tx is rolled back.

Can you post the query that gives you the Exception and what exception?

Lvc@

Nitish Gangal

unread,
Aug 12, 2014, 7:47:18 AM8/12/14
to orient-...@googlegroups.com
Hi,

Following are the steps to reproduce the issue I am facing:

1. Create a user vertex class and create two nodes (User 1 and User 2).
2. Create isFriendOf edge class.
3. Create a isFriendOf edge connecting user 1 and user 2.
4. Now, edge is created with unique rid having its references in user 1 and user 2 vertices.
5. Now, Delete edge using its unique rid with following query:
    delete from @rid;
6. Now, this edge is deleted but the references are still there in user 1 vertex and user 2 vertex.
7. Now, hit the query: select expand(in_isFriendOf) from user where name="user 1";
    This query returns "java.lang.NullPointerException"

These are the steps to reproduce the issue I am facing.
Please note that, in my case, in step no 5, we are using "delete edge @rid" but since, we are not able to reproduce, we have found above steps that replicates exact sceanrio and issue.

Request you to provide your inputs for deleting the references from user 1 vertex and user 2 vertex in order to clean up such null references.

Thanks,
Nitish Gangal

Luca Garulli

unread,
Aug 12, 2014, 9:20:08 AM8/12/14
to orient-database
Hi Nitish,
I can't reproduce your problem, everything works perfectly even if I brutally remove the edge with the DELETE command (not DELETE EDGE). Below the steps:

create class User extends V
create vertex User set name = 'a'
create vertex User set name = 'b'

create class isFriendOf extends E
create edge isFriendOf from (select from User where name = 'a') to (select from User where name = 'b') set a = 33
delete from #14:0
select expand(in_isFriendOf) from user where name="a"

So my suggestions is to upgrade to 1.7.7 (or 1.7.8 available in a couple of hours).

Lvc@

Nitish Gangal

unread,
Aug 12, 2014, 11:29:01 AM8/12/14
to orient-...@googlegroups.com
Hello Luca,

We will surely upgrade to version 1.7.7 but for now we are extensively using version 1.6.
Please could you provide us some pointers so that we can clean up the inconsistency created.
Your help in this will be very much helpful to us.

Thanks,
Nitish

Nitish Gangal

unread,
Aug 18, 2014, 11:02:29 AM8/18/14
to orient-...@googlegroups.com
Hi Luca,

Any pointers on cleaning up such inconsistency in the database forcefully?
Still facing same issue.

Thanks,
Nitish Gangal

Nitish Gangal

unread,
Aug 25, 2014, 11:56:54 AM8/25/14
to orient-...@googlegroups.com
Hi Luca,

We are using following two approaches to delete an edge:
1. delete edge isFriendOf where in ='#15:0' and '#15:1'
2. delete edge #14:0

From the above which is the more robust one.
Also the data corruption issue that we are facing is mostly in the area where the query 1 is used. When we are executing query 2, we are not getting any issues. Also when there are a lot of queries executing in parallel  query 1 executed gives the un-deleted references (But we are not able to trace the exact situation).

Please can you help us in the above situation. Also can you provide your views on using above queries.

Thanks,
Nitish Gangal


--

---
You received this message because you are subscribed to a topic in the Google Groups "OrientDB" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/orient-database/FEE6paL7hOw/unsubscribe.
To unsubscribe from this group and all its topics, send an email to orient-databa...@googlegroups.com.

Luca Garulli

unread,
Aug 25, 2014, 12:05:57 PM8/25/14
to orient-database
Hi Nitish,
Query (1) should be:

delete edge isFriendOf FROM '#15:0' TO '#15:1'

You can try to execute this in transactions with SQL batch:

begin;
delete edge isFriendOf FROM '#15:0' TO '#15:1'
commit retry 100;

Lvc@

Reply all
Reply to author
Forward
0 new messages