MongoDb Массовое сохранение Исключение isOK () checkWriteError - PullRequest
0 голосов
/ 28 октября 2011

Я пытаюсь написать парсер и использую MongoDB в качестве базы данных. По сути, он проходит, создает объекты, а затем сохраняет их. Он делает это несколько раз в секунду. После сохранения около 164 объектов происходит сбой с этой ошибкой:

com.mongodb.MongoException: isOk () в com.mongodb.DBTCPConnector._checkWriteError (DBTCPConnector.java:130) на com.mongodb.DBTCPConnector.say (DBTCPConnector.java:142) на com.mongodb.DBApiLayer $ MyCollection.insert (DBApiLayer.java:141) в com.mongodb.DBApiLayer $ MyCollection.insert (DBApiLayer.java:97) в com.mongodb.DBCollection.insert (DBCollection.java:61) в com.mongodb.DBCollection.save (DBCollection.java:547) в com.google.code.morphia.DatastoreImpl.save (DatastoreImpl.java:638) в com.google.code.morphia.DatastoreImpl.save (DatastoreImpl.java:685) в com.google.code.morphia.DatastoreImpl.save (DatastoreImpl.java:679) в com.soleo.internal.releasenotes.orm.Storage.save (Storage.java:764) в com.soleo.internal.releasenotes.page.MainPage $ 2.onSubmit (MainPage.java:256)

В какой-то момент у меня было более 1000 объектов в этой же базе данных, я просто не вставил их все сразу. Так что это не может быть проблемой с жестким диском. Я не могу найти какую-либо документацию по этой ошибке онлайн. Как ни странно, это только когда я пытаюсь сохранить ЭТОТ объект. Если я попытаюсь сохранить Объект B после сбоя, он сохранится просто отлично. Он просто падает на объекте А, который я изначально сохранил.

Я провел тест несколько раз, и он не прошел в одном и том же месте. Я использовал случайные значения, чтобы доказать, что проблема не в переменной:

FIRST TRY:
==============================
CREATING RELEASE #162
Component: iHateYou
Location: 250344
Version: 8.8.1.5-2
Date: Sun Feb 07 00:00:00 EST 3188 (02-07-3188)
SAVING.............
SUCCESS.
==============================
CREATING RELEASE #163
Component: iHateYou
Location: 227407
Version: 5.5.7.6-7
Date: Sat Mar 04 00:00:00 EST 439 (03-04-439)
SAVING.............
SUCCESS.
==============================
CREATING RELEASE #164
Component: iHateYou
Location: 38694
Version: 3.5.4.7-7
Date: Mon Jan 03 00:00:00 EST 158 (01-03-158)
SAVING.............
Oct 28, 2011 11:17:11 AM org.apache.wicket.RequestCycle logRuntimeException
SEVERE: isOk()
com.mongodb.MongoException: isOk()
        at com.mongodb.DBTCPConnector._checkWriteError(DBTCPConnector.java:130)
        at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:142)


SECOND TRY:
==============================
CREATING RELEASE #162
Component: iHateYou
Location: 64717
Version: 0.1.0.4-8
Date: Sun May 07 00:00:00 EST 971 (05-07-971)
SAVING.............
SUCCESS.
==============================
CREATING RELEASE #163
Component: iHateYou
Location: 19360
Version: 4.5.8.1-3
Date: Wed Aug 04 00:00:00 EST 1339 (08-04-1339)
SAVING.............
SUCCESS.
==============================
CREATING RELEASE #164
Component: iHateYou
Location: 115518
Version: 0.0.8.0-2
Date: Sat Apr 07 00:00:00 EST 143 (04-07-143)
SAVING.............
Oct 28, 2011 11:15:28 AM org.apache.wicket.RequestCycle logRuntimeException
SEVERE: isOk()
com.mongodb.MongoException: isOk()
        at com.mongodb.DBTCPConnector._checkWriteError(DBTCPConnector.java:130)
        at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:142)

Вот некоторый частично запутанный код:

Random blank = new Random();
ObjectRef blah = new ObjectRef("iHateYou");
storage.save(blah);

for(int i = 0; i < 300; i++)
{
    System.out.println("==============================\nCREATING OBJECT #" + i);
    ObjectA saveMe = new ObjectA();
    saveMe.setRef(storage.getRefByName("iHateYou"));
    System.out.println("Component: " + saveMe.getRef.getName());
    saveMe.setLocation(blank.nextInt(300000) + "");
    System.out.println("Location: " + saveMe.getLocation());
    saveMe.setVersion(new Version(blank.nextInt(9) + "." + blank.nextInt(9) + "." + blank.nextInt(9) + "." + blank.nextInt(9) + "-" + blank.nextInt(9)));
    System.out.println("Version: " + saveMe.getVersion());

    try 
    {
        String randomDate = "0" + blank.nextInt(9) + "-0" + blank.nextInt(9) + "-" + blank.nextInt(4000);
        saveMe.setReleaseDate(new SimpleDateFormat("MM-dd-yyyy").parse(randomDate));
        System.out.println("Date: " + saveMe.getReleaseDate() + " (" + randomDate + ") ");
    } 
    catch (ParseException e) 
    {
        e.printStackTrace();
    } 
    System.out.println("SAVING.............");
    storage.save(saveMe);
    System.out.println("SUCCESS.");
}

1 Ответ

0 голосов
/ 28 октября 2011

Похоже, что это может быть вариацией этой ошибки: https://jira.mongodb.org/browse/RUBY-324

Используете ли вы шард? В этом случае ваша конфигурационная база данных может быть повреждена. Водитель, вероятно, не ожидает получения сообщения «isOk» обратно.

Пожалуйста, расскажите нам больше о своей среде: версия MongoDB, использование шардинга или нет, версия драйвера и т. Д.

...