Skip to content

Instantly share code, notes, and snippets.

@afifmohammed
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save afifmohammed/9319495 to your computer and use it in GitHub Desktop.
Save afifmohammed/9319495 to your computer and use it in GitHub Desktop.
Testing sequential generation of ids when storing documents with master master setup in parallel execution
void Main()
{
var orders = false;
if(orders)
ParallelExecute(db => {
using(var session = db.OpenSession())
{
var list = new [] {new Order(), new Order()};
foreach (var order in list)
session.Store(order);
session.SaveChanges();
list.Dump();
}
}, 4);
ParallelExecute(db => {
string order;
using(var session = db.OpenSession())
order = session.Advanced.LoadStartingWith<Order>("orders/", pageSize:1).First ().Id;
using(var session = db.OpenSession())
{
var list = new List<OrderItem>();
list.AddRange(new [] {
new OrderItem {Id = "orderitems/" + order + "/"},
new OrderItem {Id = "orderitems/" + order + "/"},
new OrderItem {Id = "orderitems/" + order + "/"}
});
foreach (var item in list)
session.Store(item);
session.SaveChanges();
list.Dump();
}
}, 4000);
}
private void ParallelExecute(Action<IDocumentStore> action, int loop)
{
Action<int> dowork = times =>
{
var stores = new List<Action>();
using(var documentStore = new DocumentStore
{
Url = "http://localhost:8081/databases/db-b",
}.Initialize())
{
documentStore.Conventions.FailoverBehavior = FailoverBehavior.AllowReadsFromSecondariesAndWritesToSecondaries;
using(var session = documentStore.OpenSession())
{
if(!session.Advanced.LoadStartingWith<Order>("orders/", pageSize:1).Any ())
{
session.Store(new Order());
session.SaveChanges();
}
}
for (int i = 0; i < times; i++)
stores.Add(() => action(documentStore));
System.Threading.Tasks.Parallel.Invoke(stores.ToArray());
}
};
var actions = new List<Action>();
for (int i = 0; i < 10; i++)
actions.Add(() => dowork(loop/10));
System.Threading.Tasks.Parallel.Invoke(actions.ToArray());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment