2011-10-28 8 views
0

私はパーサーを作成しようとしていますが、MongoDBをデータベースとして使用しています。基本的には、オブジェクトを作成して保存しています。これは1秒に数回これをやっています。周りの164オブジェクトが保存された後、このエラーでクラッシュ: MongoDbの大量保存 "isOK()checkWriteError"例外

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

が今ある時点で、私はこの同じデータベースに1000以上のオブジェクトを持っていた、私は一度にすべてを挿入しませんでした。だから、それはハードドライブのスペースの問題になることはできません。このエラーはすべてオンラインでは見つかりません。奇妙なことに、私はこのオブジェクトを保存しようとするときだけです。クラッシュ後にオブジェクトBを保存しようとすると、うまく保存されます。最初は大量に保存されたオブジェクトAでクラッシュします。

私は何度もテストを実行しましたが、同じ場所で失敗しました。私はそれが変数問題ではなかったことを証明できたので、私は、ランダムな値を使用:

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."); 
} 

答えて

0

サウンズ:https://jira.mongodb.org/browse/RUBY-324

シャーディングを使用していますか?その場合、設定DBが壊れている可能性があります。ドライバはおそらく "isOk"というメッセージを受け取ることを期待していません。

環境について詳しく教えてください:MongoDBのバージョン、シャーディングの有無、ドライバのバージョンなど

関連する問題