-
Type: Task
-
Resolution: Won't Fix
-
Priority: Major - P3
-
None
-
Affects Version/s: 3.3.0
-
Component/s: Async
-
Labels:None
-
Environment:OSX 10.11 / Ubuntu 14.04
Java 8
MongoDB Server: 3.2.7
mongo-java-driver: HEAD
I use async java driver to perform insertions into mongo replicaset with three nodes.
When I kill primary mongo server I see different behaviour with different stream implementation (NettyStream or AsynchronousSocketChannelStream).
With NettyStream several insert requests fails immediately with MongoSocketOpenException: Exception opening socket after primary killing. But with AsynchronousSocketChannelStream no insert requests filed with such exception, all of them are buffered and after primary election completed they actually performed with no errors.
Simple example to reproduce:
import java.io.OutputStream; import java.io.PrintStream; import java.util.Date; import com.mongodb.async.SingleResultCallback; import com.mongodb.async.client.MongoClient; import com.mongodb.async.client.MongoClients; import com.mongodb.async.client.MongoCollection; import com.mongodb.async.client.MongoDatabase; import org.bson.Document; public class StreamTypeTest { static { System.setErr(new PrintStream(new OutputStream() { public void write(int b) { //DO NOTHING } })); } public static void main(String[] args) { String streamType = "nio2"; // nio2 MongoClient client = MongoClients.create( "mongodb://localhost:27017,localhost:27018,localhost:27019/?streamType=" + streamType); MongoDatabase db = client.getDatabase("test"); MongoCollection<Document> col1 = db.getCollection("col1"); for (int i = 0; ; i++) { final int index = i; System.out.println(new Date() + ": inserting" + index); col1.insertOne(new Document("key", "value"), new SingleResultCallback<Void>() { @Override public void onResult(final Void result, final Throwable t) { if (t != null) { System.out.println(new Date() + ": not inserted" + index + ": " + t.getMessage()); } else { System.out.println(new Date() + ": inserted" + index); } } }); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); break; } } } }
With streamType == "netty" I get:
Fri Aug 12 17:08:30 MSK 2016: inserting0 Fri Aug 12 17:08:31 MSK 2016: inserted0 Fri Aug 12 17:08:31 MSK 2016: inserting1 Fri Aug 12 17:08:31 MSK 2016: inserted1 Fri Aug 12 17:08:32 MSK 2016: inserting2 Fri Aug 12 17:08:32 MSK 2016: inserted2 Fri Aug 12 17:08:32 MSK 2016: inserting3 Fri Aug 12 17:08:32 MSK 2016: inserted3 Fri Aug 12 17:08:33 MSK 2016: inserting4 Fri Aug 12 17:08:33 MSK 2016: inserted4 Fri Aug 12 17:08:33 MSK 2016: inserting5 << here I kill primary mongo server >> Fri Aug 12 17:08:34 MSK 2016: inserting6 Fri Aug 12 17:08:34 MSK 2016: not inserted6: Exception receiving message Fri Aug 12 17:08:34 MSK 2016: inserting7 Fri Aug 12 17:08:34 MSK 2016: not inserted7: Exception opening socket Fri Aug 12 17:08:35 MSK 2016: inserting8 Fri Aug 12 17:08:35 MSK 2016: not inserted8: Exception opening socket Fri Aug 12 17:08:35 MSK 2016: inserting9 Fri Aug 12 17:08:35 MSK 2016: not inserted9: Exception opening socket Fri Aug 12 17:08:36 MSK 2016: inserting10 Fri Aug 12 17:08:36 MSK 2016: not inserted10: Exception opening socket Fri Aug 12 17:08:36 MSK 2016: inserting11 Fri Aug 12 17:08:36 MSK 2016: not inserted11: Exception opening socket Fri Aug 12 17:08:37 MSK 2016: inserting12 Fri Aug 12 17:08:37 MSK 2016: not inserted12: Exception opening socket Fri Aug 12 17:08:37 MSK 2016: inserting13 Fri Aug 12 17:08:37 MSK 2016: not inserted13: Exception opening socket Fri Aug 12 17:08:38 MSK 2016: inserting14 Fri Aug 12 17:08:38 MSK 2016: not inserted14: Exception opening socket Fri Aug 12 17:08:38 MSK 2016: inserting15 Fri Aug 12 17:08:38 MSK 2016: not inserted15: Exception opening socket Fri Aug 12 17:08:39 MSK 2016: inserting16 Fri Aug 12 17:08:39 MSK 2016: not inserted16: Exception opening socket Fri Aug 12 17:08:39 MSK 2016: inserting17 Fri Aug 12 17:08:39 MSK 2016: not inserted17: Exception opening socket Fri Aug 12 17:08:40 MSK 2016: inserting18 Fri Aug 12 17:08:40 MSK 2016: not inserted18: Exception opening socket Fri Aug 12 17:08:40 MSK 2016: inserting19 Fri Aug 12 17:08:40 MSK 2016: not inserted19: Exception opening socket Fri Aug 12 17:08:41 MSK 2016: inserting20 Fri Aug 12 17:08:41 MSK 2016: not inserted20: Exception opening socket Fri Aug 12 17:08:41 MSK 2016: inserting21 Fri Aug 12 17:08:42 MSK 2016: inserting22 Fri Aug 12 17:08:42 MSK 2016: inserting23 Fri Aug 12 17:08:43 MSK 2016: inserting24 Fri Aug 12 17:08:43 MSK 2016: inserting25 Fri Aug 12 17:08:44 MSK 2016: inserting26 Fri Aug 12 17:08:44 MSK 2016: inserting27 Fri Aug 12 17:08:45 MSK 2016: inserting28 Fri Aug 12 17:08:45 MSK 2016: inserting29 Fri Aug 12 17:08:46 MSK 2016: inserting30 Fri Aug 12 17:08:46 MSK 2016: inserting31 Fri Aug 12 17:08:47 MSK 2016: inserting32 Fri Aug 12 17:08:47 MSK 2016: inserting33 Fri Aug 12 17:08:48 MSK 2016: inserting34 Fri Aug 12 17:08:48 MSK 2016: inserting35 Fri Aug 12 17:08:49 MSK 2016: inserting36 Fri Aug 12 17:08:49 MSK 2016: inserting37 Fri Aug 12 17:08:50 MSK 2016: inserting38 Fri Aug 12 17:08:50 MSK 2016: inserting39 Fri Aug 12 17:08:51 MSK 2016: inserting40 << here election was completed >> Fri Aug 12 17:08:51 MSK 2016: inserted22 Fri Aug 12 17:08:51 MSK 2016: inserted21 Fri Aug 12 17:08:51 MSK 2016: inserted23 Fri Aug 12 17:08:51 MSK 2016: inserted24 Fri Aug 12 17:08:51 MSK 2016: inserted25 Fri Aug 12 17:08:51 MSK 2016: inserted30 Fri Aug 12 17:08:51 MSK 2016: inserted29 Fri Aug 12 17:08:51 MSK 2016: inserted26 Fri Aug 12 17:08:51 MSK 2016: inserted34 Fri Aug 12 17:08:51 MSK 2016: inserted33 Fri Aug 12 17:08:51 MSK 2016: inserted38 Fri Aug 12 17:08:51 MSK 2016: inserted27 Fri Aug 12 17:08:51 MSK 2016: inserted32 Fri Aug 12 17:08:51 MSK 2016: inserted37 Fri Aug 12 17:08:51 MSK 2016: inserted35 Fri Aug 12 17:08:51 MSK 2016: inserted28 Fri Aug 12 17:08:51 MSK 2016: inserted36 Fri Aug 12 17:08:51 MSK 2016: inserted40 Fri Aug 12 17:08:51 MSK 2016: inserted31 Fri Aug 12 17:08:51 MSK 2016: inserted39 Fri Aug 12 17:08:51 MSK 2016: inserting41 Fri Aug 12 17:08:51 MSK 2016: inserted41 Fri Aug 12 17:08:52 MSK 2016: inserting42 Fri Aug 12 17:08:52 MSK 2016: inserted42 Fri Aug 12 17:08:52 MSK 2016: inserting43 Fri Aug 12 17:08:52 MSK 2016: inserted43 Fri Aug 12 17:08:53 MSK 2016: inserting44 Fri Aug 12 17:08:53 MSK 2016: inserted44
Fri Aug 12 17:12:02 MSK 2016: inserting0 Fri Aug 12 17:12:02 MSK 2016: inserted0 Fri Aug 12 17:12:03 MSK 2016: inserting1 Fri Aug 12 17:12:03 MSK 2016: inserted1 Fri Aug 12 17:12:03 MSK 2016: inserting2 Fri Aug 12 17:12:03 MSK 2016: inserted2 Fri Aug 12 17:12:04 MSK 2016: inserting3 Fri Aug 12 17:12:04 MSK 2016: inserted3 << here I kill primary mongo server >> Fri Aug 12 17:12:04 MSK 2016: inserting4 Fri Aug 12 17:12:04 MSK 2016: not inserted4: Prematurely reached end of stream Fri Aug 12 17:12:05 MSK 2016: inserting5 Fri Aug 12 17:12:05 MSK 2016: inserting6 Fri Aug 12 17:12:06 MSK 2016: inserting7 Fri Aug 12 17:12:06 MSK 2016: inserting8 Fri Aug 12 17:12:07 MSK 2016: inserting9 Fri Aug 12 17:12:07 MSK 2016: inserting10 Fri Aug 12 17:12:08 MSK 2016: inserting11 Fri Aug 12 17:12:08 MSK 2016: inserting12 Fri Aug 12 17:12:09 MSK 2016: inserting13 Fri Aug 12 17:12:09 MSK 2016: inserting14 Fri Aug 12 17:12:10 MSK 2016: inserting15 Fri Aug 12 17:12:10 MSK 2016: inserting16 Fri Aug 12 17:12:11 MSK 2016: inserting17 Fri Aug 12 17:12:11 MSK 2016: inserting18 Fri Aug 12 17:12:12 MSK 2016: inserting19 Fri Aug 12 17:12:12 MSK 2016: inserting20 Fri Aug 12 17:12:13 MSK 2016: inserting21 Fri Aug 12 17:12:13 MSK 2016: inserting22 Fri Aug 12 17:12:14 MSK 2016: inserting23 Fri Aug 12 17:12:14 MSK 2016: inserting24 << here election was completed >> Fri Aug 12 17:12:15 MSK 2016: inserted5 Fri Aug 12 17:12:15 MSK 2016: inserted6 Fri Aug 12 17:12:15 MSK 2016: inserting25 Fri Aug 12 17:12:15 MSK 2016: inserted8 Fri Aug 12 17:12:15 MSK 2016: inserted7 Fri Aug 12 17:12:15 MSK 2016: inserted9 Fri Aug 12 17:12:15 MSK 2016: inserted25 Fri Aug 12 17:12:15 MSK 2016: inserted10 Fri Aug 12 17:12:15 MSK 2016: inserted11 Fri Aug 12 17:12:15 MSK 2016: inserted12 Fri Aug 12 17:12:15 MSK 2016: inserted13 Fri Aug 12 17:12:15 MSK 2016: inserted14 Fri Aug 12 17:12:15 MSK 2016: inserted15 Fri Aug 12 17:12:15 MSK 2016: inserted16 Fri Aug 12 17:12:15 MSK 2016: inserted18 Fri Aug 12 17:12:15 MSK 2016: inserted19 Fri Aug 12 17:12:15 MSK 2016: inserted17 Fri Aug 12 17:12:15 MSK 2016: inserted20 Fri Aug 12 17:12:15 MSK 2016: inserted22 Fri Aug 12 17:12:15 MSK 2016: inserted23 Fri Aug 12 17:12:15 MSK 2016: inserted21 Fri Aug 12 17:12:15 MSK 2016: inserted24 Fri Aug 12 17:12:15 MSK 2016: inserting26 Fri Aug 12 17:12:15 MSK 2016: inserted26 Fri Aug 12 17:12:16 MSK 2016: inserting27 Fri Aug 12 17:12:16 MSK 2016: inserted27 Fri Aug 12 17:12:16 MSK 2016: inserting28 Fri Aug 12 17:12:16 MSK 2016: inserted28 Fri Aug 12 17:12:17 MSK 2016: inserting29 Fri Aug 12 17:12:17 MSK 2016: inserted29 Fri Aug 12 17:12:17 MSK 2016: inserting30 Fri Aug 12 17:12:17 MSK 2016: inserted30