OConcurrentcreateException при создании записи при фиксации из-за неправильного RID

Версия OrientDB: 3.0.5 Версия Java: 1.8 ОС: Debian

Привет,

Я получаю систематическую ошибку, связанную с RID при выполнении этого простого кода:

orientdb = new OrientDB(dbUrl, dbUser,dbPassword, OrientDBConfig.defaultConfig());
session = orientdb.open(databaseName, dbUser, dbPassword);

session.begin();
OVertex v = session.newVertex("Folder");
v.setProperty("name", "RootFolder");
session.save(v);
session.commit();

Я выполняю код на одном из компьютеров в кластере из 3, но нет другого кода или пользователя, взаимодействующего с кластером. Я также читал об оптимистичных транзакциях, но здесь исключение выбрасывается в 100% случаев. Я полагаю, что Исключение вызвано в session.commit()

Вот ошибка:

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: com.orientechnologies.orient.core.exception.OConcurrentCreateException: Cannot create the record #17:4 because the assigned RID was #17:3 instead
    DB name="FDStest"
    DB name="FDStest"
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.orientechnologies.orient.client.binary.OChannelBinaryAsynchClient.throwSerializedException(OChannelBinaryAsynchClient.java:318)
    at com.orientechnologies.orient.client.binary.OChannelBinaryAsynchClient.handleStatus(OChannelBinaryAsynchClient.java:275)
    at com.orientechnologies.orient.client.binary.OChannelBinaryAsynchClient.beginResponse(OChannelBinaryAsynchClient.java:191)
    at com.orientechnologies.orient.client.binary.OChannelBinaryAsynchClient.beginResponse(OChannelBinaryAsynchClient.java:153)
    at com.orientechnologies.orient.client.remote.OStorageRemote.beginResponse(OStorageRemote.java:1779)
    at com.orientechnologies.orient.client.remote.OStorageRemote.lambda$networkOperationRetryTimeout$2(OStorageRemote.java:226)
    at com.orientechnologies.orient.client.remote.OStorageRemote.baseNetworkOperation(OStorageRemote.java:285)
    at com.orientechnologies.orient.client.remote.OStorageRemote.networkOperationRetryTimeout(OStorageRemote.java:214)
    at com.orientechnologies.orient.client.remote.OStorageRemote.networkOperationNoRetry(OStorageRemote.java:239)
    at com.orientechnologies.orient.client.remote.OStorageRemote.commit(OStorageRemote.java:964)
    at com.orientechnologies.orient.core.db.document.ODatabaseDocumentAbstract.internalCommit(ODatabaseDocumentAbstract.java:2733)
    at com.orientechnologies.orient.core.tx.OTransactionOptimistic.doCommit(OTransactionOptimistic.java:534)
    at com.orientechnologies.orient.core.tx.OTransactionOptimistic.commit(OTransactionOptimistic.java:100)
    at com.orientechnologies.orient.core.db.document.ODatabaseDocumentAbstract.commit(ODatabaseDocumentAbstract.java:2221)
    at com.orientechnologies.orient.core.db.document.ODatabaseDocumentAbstract.commit(ODatabaseDocumentAbstract.java:2191)
    at OrientDb.OrientST.OrientDBDataBaseGenerationToolCluster.<init>(OrientDBDataBaseGenerationToolCluster.java:60)
    at OrientDb.OrientST.App.main(App.java:21)
    ... 5 more

Соответствующая часть:

Cannot create the record #17:4 because the assigned RID was #17:3 instead

Любая помощь приветствуется. Благодарю.

Кроме того, когда я пытаюсь этот код:

OVertex v = session.newVertex("Folder");
session.save(v);

операция имеет 10% шансов на успех.

1 ответ

Оказывается, выполнение действия TRUNCATE, такого как: TRUNCATE CLASS V UNSAFE, будет постоянно портить RID из базы данных.

Другие вопросы по тегам