Details
-
Bug
-
Resolution: Won't Fix
-
Major
-
None
-
1.3.2
-
Security Level: Public
-
None
Description
public class CouchbaseAddTest {
private ExecutorService pool;
public static void main(String[] args)
{ new CouchbaseAddTest().run(); } public void run() {
// create a pool of 4 threads
pool = Executors.newFixedThreadPool(4);
// create 4 writers to run in parallel
List<Future> fs = new ArrayList<Future>(4);
for (int i=0; i<4; i++)
for (Future f : fs) {
try
catch (Exception e)
{ e.printStackTrace(); }}
pool.shutdown();
}
private class Writer implements Runnable {
private int id;
private Gson gson;
public Writer(int id) { this.id = id; gson = new Gson(); }
@Override
public void run() {
try {
// Connect to the Cluster
CouchbaseClient client = getClient();
for (int i=0; i<1; i++) {
addDoc(client, i);
try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); }
}
// Shutting down client
client.shutdown();
} catch (Exception e) { e.printStackTrace(); }
}
private CouchbaseClient getClient() throws IOException, URISyntaxException
{ CouchbaseConnectionFactoryBuilder builder = new CouchbaseConnectionFactoryBuilder(); builder.setReadBufferSize(16384); //16384 builder.setOpTimeout(60000); //60000 builder.setFailureMode(FailureMode.Redistribute); builder. setOpQueueMaxBlockTime(5000); // add extra List<URI> couchServers = Arrays.asList( new URI("http://server1:8091/pools"), new URI("http://server2:8091/pools"), new URI("http://server3:8091/pools"), new URI("http://server4:8091/pools") ); CouchbaseConnectionFactory connectionFactory = builder.buildCouchbaseConnection(couchServers, "usage", "", ""); return new com.couchbase.client.CouchbaseClient(connectionFactory); } private void addDoc(CouchbaseClient client, int n) {
Doc doc = null;
String value = null;
String key = String.format("dc1-daily-%d", n);
if (get(client, key)==null)
key = String.format("daily-%d", n);
if (get(client, key)==null) { doc = new Doc(); value = gson.toJson(doc); add(client, key, value); }
}
private Object get(CouchbaseClient client, String key)
{ return client.gets(key); }private void add(CouchbaseClient client, String key, String value) {
OperationFuture f = client.add(key, value);
OperationStatus status = null;
try
catch (Exception e)
{ e.printStackTrace(); }if (status!=null && status.isSuccess())
{ System.out.println(String.format("%d Writer %d - Added %s", System.currentTimeMillis(), id, key)); }else
{ System.out.println(String.format("%d Writer %d - Add failed %s", System.currentTimeMillis(), id, key)); } }
}
private static class Doc {
public String[] s =
{ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890" };
}
}
In some environments, this leads to duplicate adds being reported:
1393524003358 Writer 3 - Added dc1-daily-0
1393524003360 Writer 4 - Added dc1-daily-0
1393524003363 Writer 4 - Added daily-0
1393524003363 Writer 3 - Added daily-0
1393524003367 Writer 2 - Added dc1-daily-0
1393524003368 Writer 1 - Add failed dc1-daily-0
1393524003370 Writer 2 - Added daily-0
instead of the correct
1393524753507 Writer 1 - Added dc1-daily-0
1393524753507 Writer 2 - Add failed dc1-daily-0
1393524753507 Writer 4 - Add failed dc1-daily-0
1393524753507 Writer 3 - Add failed dc1-daily-0
1393524753510 Writer 2 - Added daily-0
1393524753510 Writer 4 - Add failed daily-0
1393524753510 Writer 1 - Add failed daily-0
1393524753511 Writer 3 - Add failed daily-0
reproduction was not yet successful