Мы используем OrientDB в нашем продукте, и после обновления с версии 2.1.15 до версии 2.2.34 у нас возникла проблема, описанная ниже, которая возникает спорадически.Можем ли мы что-нибудь сделать, чтобы смягчить это или определить фактический источник ошибок?Мы благодарны за любую помощь!
Примечание: Это кросс-пост https://groups.google.com/forum/#!topic/orient-database/8UE029Na4jE.
Наши попытки воспроизвести проблему пока были очень неудовлетворительными.Тем не менее, проблема возникает снова и снова (без распознаваемого шаблона), в разных средах выполнения разных клиентов и в разных ситуациях.Кажется, это происходит в случайных ситуациях, когда к базе данных обращаются.Бывает, что один запрос выполнен успешно, а следующий - неудачно (с указанной ниже ошибкой), а затем каждый последующий запрос также завершается неудачей.
Симптомы: Иногда при запросе базы данных возникает исключение InvalidClassException:
Caused by: com.orientechnologies.common.io.OIOException: com.o; serializable and externalizable flags conflict
at com.orientechnologies.orient.client.remote.OStorageRemote.handleIOException(OStorageRemote.java:321)
at com.orientechnologies.orient.client.remote.OStorageRemote.baseNetworkOperation(OStorageRemote.java:292)
at com.orientechnologies.orient.client.remote.OStorageRemote.networkOperationRetry(OStorageRemote.java:204)
at com.orientechnologies.orient.client.remote.OStorageRemote.networkOperation(OStorageRemote.java:215)
at com.orientechnologies.orient.client.remote.OStorageRemote.command(OStorageRemote.java:1187)
at com.orientechnologies.orient.core.command.OCommandRequestTextAbstract.execute(OCommandRequestTextAbstract.java:69)
at com.tinkerpop.blueprints.impls.orient.OrientGraphCommand.execute(OrientGraphCommand.java:49)
at com.mycompany.BaseDAOImpl.query(OrientConnection.java:188)
... 13 common frames omitted
Caused by: java.io.InvalidClassException: com.o; serializable and externalizable flags conflict
at java.base/java.io.ObjectStreamClass.readNonProxy(Unknown Source)
at java.base/java.io.ObjectInputStream.readClassDescriptor(Unknown Source)
at java.base/java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.base/java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
at com.orientechnologies.orient.client.binary.OChannelBinaryAsynchClient.throwSerializedException(OChannelBinaryAsynchClient.java:436)
at com.orientechnologies.orient.client.binary.OChannelBinaryAsynchClient.handleStatus(OChannelBinaryAsynchClient.java:400)
at com.orientechnologies.orient.client.binary.OChannelBinaryAsynchClient.beginResponse(OChannelBinaryAsynchClient.java:283)
at com.orientechnologies.orient.client.binary.OChannelBinaryAsynchClient.beginResponse(OChannelBinaryAsynchClient.java:167)
at com.orientechnologies.orient.client.remote.OStorageRemote.beginResponse(OStorageRemote.java:2365)
at com.orientechnologies.orient.client.remote.OStorageRemote$27.execute(OStorageRemote.java:1211)
at com.orientechnologies.orient.client.remote.OStorageRemote$2.execute(OStorageRemote.java:207)
at com.orientechnologies.orient.client.remote.OStorageRemote.baseNetworkOperation(OStorageRemote.java:252)
... 19 common frames omitted
BaseDAOImpl.query выглядит следующим образом:
public Iterable<Vertex> query(String query, Object... params) throws PersistenceException {
OrientBaseGraph graph = OrientGraph.getActiveGraph();
try {
OCommandSQL command = new OCommandSQL(query);
graph.clearCache();
return graph.command(command).execute(params);
} catch (Exception e) {
throw new PersistenceException("Query triggered an exception", e);
}
}
Он вызывается в следующем контексте:
OrientGraphFactory factory = new OrientGraphFactory("remote:localhost/mydb", user, password).setupPool(10, 50);
setRequireTransaction(true);
setAutoStartTx(false);
OrientGraph db = factory.getTx();
...
baseDAO.query("select from MyClass");
...
db.shutdown();