Вставка mongodb не удалась из-за исключения сокетаJAVA

Программисты JAVA общаются здесь
Anonymous
Вставка mongodb не удалась из-за исключения сокета

Сообщение Anonymous »

Я работаю над проектом Java в Eclipse. У меня есть промежуточный сервер и живой сервер. У этих двух также есть свои собственные базы данных mongodbs, которые работают на другом сервере и на двух разных портах (29017 и 27017).
С помощью теста Junit я хочу скопировать данные из живого монго в монго для разработки.

Самое странное: иногда это работает, а иногда я получаю ошибку сокета. Интересно, почему монго иногда вообще отказывается писать вставки, а в другие дни работает без нареканий. Вот отрывок из файла журнала mongo (того, куда вставляется код) и тестового сценария Junit:

журнал mongo:

Код: Выделить всё

Thu Mar 14 21:01:04 [initandlisten] connection accepted from xx.xxx.xxx.183:60848 #1    (1 connection now open)
Thu Mar 14 21:01:04 [conn1] run command admin.$cmd { isMaster: 1 }
Thu Mar 14 21:01:04 [conn1] command admin.$cmd command: { isMaster: 1 } ntoreturn:1 keyUpdates:0  reslen:90 0ms
Thu Mar 14 21:01:04 [conn1] opening db:  repgain
Thu Mar 14 21:01:04 [conn1] query repgain.editorconfigs query: { $and: [ { customer: "nokia" }, { category: "restaurant" } ] } ntoreturn:0 keyUpdates:0 locks(micros) W:5302 r:176 nreturned:0 reslen:20 0ms
Thu Mar 14 21:01:04 [conn1] Socket recv() errno:104 Connection reset by peer xx.xxx.xxx.183:60848
Thu Mar 14 21:01:04 [conn1] SocketException: remote: xx.xxx.xxx.183:60848 error: 9001 socket exception [1] server [xx.xxx.xxx.183:60848]
Thu Mar 14 21:01:04 [conn1] end connection xx.xxx.xxx.183:60848 (0 connections now open)
Сценарий тестирования Junit:

Код: Выделить всё

public class CopyEditorConfig {

protected final Log logger = LogFactory.getLog(getClass());

private static final String CUSTOMER = "customerx";
private static final String CATEGORY = "categoryx";

@Test
public void test() {
try {

ObjectMapper om = new ObjectMapper();

// script copies the config from m2 to m1.

Mongo m1 = new Mongo("xxx.xxx.com", 29017); // devel
Mongo m2 = new Mongo("yyy.yyy.com", 27017); // live
Assert.assertNotNull(m1);
Assert.assertNotNull(m2);

logger.info("try to connect to db \"dbname\"");

DB db2 = m2.getDB("dbname");

logger.info("get collection \"config\"");
DBCollection c2 = db2.getCollection("config");
JacksonDBCollection ec2 = JacksonDBCollection.wrap(c2, EditorTabConfig.class, ObjectId.class);

logger.info("find entry with customer {" + CUSTOMER + "} and category {" + CATEGORY + "}");
EditorTabConfig config2 = ec2.findOne(DBQuery.and(DBQuery.is("customer", CUSTOMER), DBQuery.is("category", CATEGORY)));

// config
if (config2 == null) {
logger.info("no customer found to copy.");
} else {
logger.info("Found config with id: {" + config2.objectId + "}");
config2.objectId = null;
logger.info("copy config");
boolean found = false;

DB db1 = m1.getDB("dbname");

DBCollection c1 = db1.getCollection("config");
JacksonDBCollection ec1 = JacksonDBCollection.wrap(c1, EditorTabConfig.class, ObjectId.class);

EditorTabConfig config1 = ec1.findOne(DBQuery.and(DBQuery.is("customer", CUSTOMER), DBQuery.is("category", CATEGORY)));

if (config1 != null) {
found = true;
}

if (found == false) {
WriteResult result = ec1.insert(config2);
ObjectId id = result.getSavedId();
logger.info("INSERT config with id: " + id);
} else {
logger.info("UPDATE config with id: " + config1.objectId);
ec1.updateById(config1.objectId, config2);
}

StringWriter sw = new StringWriter();
om.writeValue(sw, config2);
logger.info(sw);
}

} catch (Exception e) {
logger.error("exception occured: ", e);
}
}
}
Когда я читаю журнал в eclipse, запуск этого сценария кажется успешным. Я получаю идентификатор как для c1, так и для c2, и данные также находятся здесь. В журнале даже указано, что он не нашел конфиг на devel и не вставляет его. Это также верно, если я помещу это туда вручную. Затем он «обновляется». Но журнал mongo остается прежним.
Происходит исключение сокета, и данные никогда не записываются в базу данных.

У меня нет хороших идей для отладки этот. Если бы вы могли, я был бы рад получить несколько советов, как действовать дальше. Также, если какая-то информация отсутствует, сообщите, буду рад поделиться.

С уважением,
Алекс

Подробнее здесь: https://stackoverflow.com/questions/154 ... -exception

Вернуться в «JAVA»