MongoDB WriteConcern Java Driver

I have a simple mongo application that happens to be async (using Akka). I send a message to an actor, which in turn write 3 records to a database. I'm using WriteConcern.SAFE because I want to be sure the write happened (also tried WriteConcern.FSYNC_SAFE).

I pause for a second to let the writes happen then do a read--and get nothing.

So my write code might be:

collection.save( myObj, WriteConcern.SAFE )
println("--1--")
collection.save( myObj, WriteConcern.SAFE )
println("--2--")
collection.save( myObj, WriteConcern.SAFE )
println("--3--")

then in my test code (running outside the actor--in another thread) I print out the # of records I find:

println( collection.findAll(...) )

My output looks like this:

--1--
--2--
--3--
(pauses)
0

Indeed if I look in the database I see no records. Sometimes I actually do see data there and the test works. Async code can be tricky and it's possible the test code is being hit before the writes happen, so I also tried printing out timestamps to ensure these are being executed in the order presented--they are. The data should be there. Sample output below w/timestamps:

Saved: brand_1 / dev  1375486024040
Saved: brand_1 / dev2 1375486024156
Saved: brand_1 / dev3 1375486024261
                      1375486026593 0 found

So the 3 saves clearly happened (and should have written) a full 2 seconds before the read was attempted.

I understand for more liberal WriteConcerns you could get this behavior, but I thought the two safest ones would assure me the write actually happened before proceeding.

Answers


Subtle but simple problem. I was using a def to create my connection... which I then proceeded to call twice as if it was a val. So I actually had 2 different writers so that explained the sometimes-difference in my results. Refactored to a val and all was predictable. Agonizing to identify, easy to understand/fix.


Need Your Help

multidimensional associative array - difference

php

How to compare multidimensional associative arrays.

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.