java.lang.RuntimeException: [DEX: 12] Invalid object identifier.
This is code that produced it:
public boolean dexBackupTest(Dex dex)
{
System.out.println("DEX BACKUP TEST");
File tempFile;
try
{
tempFile = File.createTempFile("graphPool",".temp");
String dexFile = tempFile.getAbsolutePath();
System.out.println("Dex file:" + dexFile);
Database database = dex.create(dexFile, "dex_test");
Session session = database.newSession();
session.begin();
Graph graph = session.getGraph();
int nodeType = graph.newNodeType("Test Node Type");
int indexAttribute = graph.newAttribute(nodeType, "Index", DataType.Integer, AttributeKind.Unique);
long nodeA = graph.newNode(nodeType);
int numNodes = 50;
int numEdges = 50;
for (int i = 0; i < numNodes; i++)
{
long node = graph.newNode(nodeType);
graph.setAttribute(node, indexAttribute, new Value().setInteger(i));
}
Random generator = new Random();
int edgeType = graph.newEdgeType("Default Edge", true, false);
for (int i = 0; i < numEdges; i++)
{
int indexHead = (int)(generator.nextDouble() * numNodes);
int indexTail = (int)(generator.nextDouble() * numNodes);
long head = graph.findObject(indexAttribute, new Value().setInteger(indexHead));
long tail = graph.findObject(indexAttribute, new Value().setInteger(indexTail));
graph.newEdge(edgeType, tail, head);
}
ArrayList<Long> toDelete = new ArrayList<Long>();
Objects objects = graph.select(edgeType);
for (long oid : objects)
{
if (generator.nextDouble() > .7)
{
toDelete.add(oid);
}
}
objects.close();
for (Long oid : toDelete)
{
graph.drop(oid);
}
session.commit();
graph.backup("backup.test");
session.close();
database.close();
Database restoredDatabase = dex.restore("restore.test", "backup.test");
Session restoredSession = restoredDatabase.newSession();
{
WeakConnectivityDFS connectivity = new WeakConnectivityDFS(restoredSession);
connectivity.addAllNodeTypes();
connectivity.addAllEdgeTypes();
connectivity.run();
connectivity.close();
}
restoredSession.close();
restoredDatabase.close();
}
catch (IOException e)
{
e.printStackTrace();
return false;
}
return true;
}