public void AllKeysReturnsListOfKeys() { var bucket = Bucket + "_" + Guid.NewGuid().ToString(); var originalKeys = new List<string>(); for (var i = 0; i < 10; i++) { var o = new RiakObject(bucket, Guid.NewGuid().ToString(), "{ value: \"this is an object\" }"); originalKeys.Add(o.Key); Client.Put(o); } var mr = new RiakMapReduceQuery() .Inputs(RiakIndex.AllKeys(bucket)); var result = Client.MapReduce(mr); var keys = result.Value.PhaseResults.SelectMany(x => x.GetObjectIds()).ToList(); result.IsSuccess.ShouldBeTrue(result.ErrorMessage); keys.Count.ShouldEqual(10); foreach (var key in keys) { key.Bucket.ShouldNotBeNullOrEmpty(); key.Key.ShouldNotBeNullOrEmpty(); originalKeys.Contains(key.Key).ShouldBeTrue(); } }
private static void StoreData() { Console.WriteLine("[ChaosMonkeyApp] store thread starting"); IRiakClient client = cluster.CreateClient(); try { while (true) { var id = new RiakObjectId("chaos-monkey", key.ToString()); var obj = new RiakObject(id, Guid.NewGuid().ToString()); obj.ContentEncoding = RiakConstants.CharSets.Utf8; obj.ContentType = RiakConstants.ContentTypes.TextPlain; var rslt = client.Put(obj); if (rslt.IsSuccess) { Console.WriteLine("[ChaosMonkeyApp] stored key: {0}", key); } else { Console.WriteLine("[ChaosMonkeyApp] error storing key {0}, {1}", key, rslt.ErrorMessage); } ++key; Thread.Sleep(storeDataInterval); ct.ThrowIfCancellationRequested(); } } finally { Console.WriteLine("[ChaosMonkeyApp] store thread stopping"); } }
protected void CreateLinkedObjects(string bucketName) { var oj = new RiakObject(bucketName, OJ, new Person() { Name = "oj" }); var jeremiah = new RiakObject(bucketName, Jeremiah, new Person() { Name = "jeremiah" }); var brent = new RiakObject(bucketName, Brent, new Person() { Name = "brent" }); var rob = new RiakObject(bucketName, Rob, new Person() { Name = "rob" }); oj.ContentType = RiakConstants.ContentTypes.ApplicationJson; jeremiah.ContentType = RiakConstants.ContentTypes.ApplicationJson; brent.ContentType = RiakConstants.ContentTypes.ApplicationJson; rob.ContentType = RiakConstants.ContentTypes.ApplicationJson; #pragma warning disable 618 oj.LinkTo(jeremiah, "friends"); oj.LinkTo(jeremiah, "coworkers"); jeremiah.LinkTo(oj, "friends"); jeremiah.LinkTo(oj, "coworkers"); jeremiah.LinkTo(oj, "ozzies"); jeremiah.LinkTo(brent, "friends"); jeremiah.LinkTo(brent, "coworkers"); jeremiah.LinkTo(rob, "ozzies"); brent.LinkTo(jeremiah, "coworkers"); brent.LinkTo(jeremiah, "friends"); #pragma warning restore 618 Client.Put(new[] { oj, jeremiah, brent, rob }); }
public void AsyncDeleteMultipleIsSuccessful() { var one = new RiakObject(TestBucket, "one", TestJson, RiakConstants.ContentTypes.ApplicationJson); var two = new RiakObject(TestBucket, "two", TestJson, RiakConstants.ContentTypes.ApplicationJson); Client.Put(one); Client.Put(two); var oneObjectId = one.ToRiakObjectId(); var twoObjectId = two.ToRiakObjectId(); var list = new List<RiakObjectId> { oneObjectId, twoObjectId }; var results = Client.Async.Delete(list).Result; foreach (var riakResult in results) { riakResult.IsSuccess.ShouldBeTrue(riakResult.ErrorMessage); } var oneResult = Client.Get(oneObjectId); oneResult.IsSuccess.ShouldBeFalse(); oneResult.ResultCode.ShouldEqual(ResultCode.NotFound); oneResult.Value.ShouldBeNull(); var twoResult = Client.Get(twoObjectId); twoResult.IsSuccess.ShouldBeFalse(); twoResult.ResultCode.ShouldEqual(ResultCode.NotFound); twoResult.Value.ShouldBeNull(); }
public async Task Save(String endpoint, long position) { var id = new RiakObjectId($"{Settings.Bucket}.system", endpoint); var options = new RiakGetOptions { }; options.SetRw(Quorum.WellKnown.All); var exists = await _riak.Async.Get(id, options); if (exists.IsSuccess) { var checkpoint = exists.Value.GetObject<Checkpoint>(); checkpoint.Position = position; exists.Value.SetObject(checkpoint); var putOpt = new RiakPutOptions { IfNotModified = true, IfNoneMatch = false }; putOpt.SetW(Quorum.WellKnown.All); await _riak.Async.Put(exists.Value, putOpt); } else { var checkpoint = new Checkpoint { Id = endpoint, Position = position, }; var putOpt = new RiakPutOptions { IfNotModified = false, IfNoneMatch = true }; putOpt.SetW(Quorum.WellKnown.All); var o = new RiakObject(id, checkpoint); await _riak.Async.Put(o, putOpt); } }
public void CustomSerializerWillSerializeJson() { var testPerson = new Person { DateOfBirth = new DateTime(1978, 12, 5, 0, 0, 0, DateTimeKind.Utc), Email = "*****@*****.**", Name = new Name { FirstName = "OJ", Surname = "Reeves" }, PhoneNumbers = new List<PhoneNumber> { new PhoneNumber { Number = "12345678", NumberType = PhoneNumberType.Home } } }; var sots = new SerializeObjectToString<Person>(JsonConvert.SerializeObject); var obj = new RiakObject("bucket", "key"); obj.SetObject(testPerson, RiakConstants.ContentTypes.ApplicationJson, sots); obj.Value.ShouldNotBeNull(); obj.ContentType.ShouldEqual(RiakConstants.ContentTypes.ApplicationJson); var json = obj.Value.FromRiakString(); json.ShouldEqual("{\"Name\":{\"FirstName\":\"OJ\",\"Surname\":\"Reeves\"},\"PhoneNumbers\":[{\"Number\":\"12345678\",\"NumberType\":1}],\"DateOfBirth\":\"\\/Date(281664000000)\\/\",\"Email\":\"[email protected]\"}"); var deserialisedPerson = obj.GetObject<Person>(); deserialisedPerson.ShouldEqual(testPerson); }
public void ObjectsAreConvertedProperly() { var testPerson = new Person { DateOfBirth = new DateTime(1978, 12, 5, 0, 0, 0, DateTimeKind.Utc), Email = "*****@*****.**", Name = new Name { FirstName = "OJ", Surname = "Reeves" }, PhoneNumbers = new List<PhoneNumber> { new PhoneNumber { Number = "12345678", NumberType = PhoneNumberType.Home } } }; var obj = new RiakObject("bucket", "key"); obj.SetObject(testPerson); obj.Value.ShouldNotBeNull(); obj.ContentType.ShouldEqual(RiakConstants.ContentTypes.ApplicationJson); var json = obj.Value.FromRiakString(); json.ShouldEqual("{\"Name\":{\"FirstName\":\"OJ\",\"Surname\":\"Reeves\"},\"PhoneNumbers\":[{\"Number\":\"12345678\",\"NumberType\":1}],\"DateOfBirth\":\"1978-12-05T00:00:00Z\",\"Email\":\"[email protected]\"}"); var deserialisedPerson = obj.GetObject<Person>(); deserialisedPerson.ShouldEqual(testPerson); }
public void RangeQuery() { var Cluster = RiakCluster.FromConfig("riakConfig"); var Client = Cluster.CreateClient(); var bucket = "rsds"; Client.Batch(batch => { for (var i = 1; i < 11; i++) { var d = DateTime.Now.AddDays(0 - i); var doc = new RiakObject(bucket, i.ToString(), new { value = i, created_date = d }); var position = 100 + i; doc.BinIndex("position").Set(position.ToString()); batch.Put(doc); } }); var query = new RiakMapReduceQuery() .Inputs(RiakIndex.Range("bucket", "position", 100, 200)) .MapJs(m => m.Name("Riak.mapValuesJson").Keep(true)); var result = Client.MapReduce(query); //var items = result.Value.PhaseResults.SelectMany(x => x.GetObjects<dynamic>); }
public void InvalidFieldNamesAndTypes() { id = new RiakObjectId("indexes", "mykey", "test value"); var obj = new RiakObject("indexes", "mykey", "test value"); var intIdx = obj.IntIndex("test-int-idx"); Assert.Throws<FormatException>(() => intIdx.Add("invalid-value")); }
public void SettingLegacySearchOnRiakBucketMakesBucketSearchable() { var bucket = Guid.NewGuid().ToString(); var key = Guid.NewGuid().ToString(); var props = Client.GetBucketProperties(bucket).Value; props.SetLegacySearch(true); var setResult = Client.SetBucketProperties(bucket, props); setResult.IsSuccess.ShouldBeTrue(setResult.ErrorMessage); var obj = new RiakObject(bucket, key, new { name = "OJ", age = 34 }); var putResult = Client.Put(obj); putResult.IsSuccess.ShouldBeTrue(putResult.ErrorMessage); var q = new RiakFluentSearch(bucket, "name") .Search("OJ") .And("age", "34") .Build(); var search = new RiakSearchRequest { Query = q }; var searchResult = Client.Search(search); searchResult.IsSuccess.ShouldBeTrue(searchResult.ErrorMessage); searchResult.Value.NumFound.ShouldEqual(1u); searchResult.Value.Documents[0].Fields.Count.ShouldEqual(3); searchResult.Value.Documents[0].Fields.First(x => x.Key == "id").Value.ShouldEqual(key); }
public void AsyncDeleteIsSuccessful() { var riakObject = new RiakObject(TestBucket, TestKey, TestJson, RiakConstants.ContentTypes.ApplicationJson); var riakObjectId = riakObject.ToRiakObjectId(); var putResult = Client.Put(riakObject); putResult.IsSuccess.ShouldBeTrue(); RiakResult theResult = null; var resetEvent = new AutoResetEvent(false); Client.Async.Delete(riakObjectId, result => { theResult = result; resetEvent.Set(); }); resetEvent.WaitOne(); theResult.IsSuccess.ShouldBeTrue(); var getResult = Client.Get(riakObjectId); getResult.IsSuccess.ShouldBeFalse(); getResult.ResultCode.ShouldEqual(ResultCode.NotFound); getResult.Value.ShouldBeNull(); }
public void TestKVOperations() { const string key = "bucket_type_test_key"; var id = new RiakObjectId(TestBucketType, TestBucket, key); var obj = new RiakObject(id, Value); // put var putResult = Client.Put(obj, new RiakPutOptions().SetReturnBody(true).SetDw(3)); putResult.IsSuccess.ShouldBeTrue(); putResult.Value.BucketType.ShouldEqual(TestBucketType); // get var getResult = Client.Get(id); getResult.IsSuccess.ShouldBeTrue(); getResult.Value.BucketType.ShouldEqual(TestBucketType); // delete var deleteResult = Client.Delete(id, new RiakDeleteOptions().SetDw(3)); deleteResult.IsSuccess.ShouldBeTrue(); // multiget var ids = new List<RiakObjectId>(); for (int i = 0; i < 3; i++) { obj = new RiakObject(new RiakObjectId(TestBucketType, TestBucket, key + i), Value); Client.Put(obj, new RiakPutOptions().SetReturnBody(true).SetDw(3)); ids.Add(obj.ToRiakObjectId()); } var multiGetResult = Client.Get(ids).ToList(); multiGetResult.All(r => r.IsSuccess).ShouldBeTrue(); multiGetResult.All(r => r.Value.BucketType == TestBucketType).ShouldBeTrue(); }
public void CreatingBucketInSpecificBucketType() { id = new RiakObjectId("no_siblings", "sensitive_user_data", "user19735"); var obj = new RiakObject(id, "{\"name\":\"Bob\"}"); var rslt = client.Put(obj); CheckResult(rslt); }
public void ToRiakObjectIdProducesAValidRiakObjectId() { var riakObject = new RiakObject(Bucket, Key, "value"); var riakObjectId = riakObject.ToRiakObjectId(); riakObjectId.Bucket.ShouldEqual(Bucket); riakObjectId.Key.ShouldEqual(Key); }
public void CreatingBucketInSpecificBucketTypeExampleTwo() { id = new RiakObjectId("no_siblings", "old_memes", "all_your_base"); var obj = new RiakObject(id, "all your base are belong to us", RiakConstants.ContentTypes.TextPlain); var rslt = client.Put(obj); CheckResult(rslt); }
private RiakObjectId PutCoach(string team, string coach) { var id = new RiakObjectId("siblings", "coaches", team); var obj = new RiakObject(id, coach, RiakConstants.ContentTypes.TextPlain); var rslt = client.Put(obj); CheckResult(rslt); return id; }
public void WritingLargeObjectIsSuccessful() { var text = Enumerable.Range(0, 2000000) .Aggregate(new StringBuilder(), (sb, i) => sb.Append(i.ToString())) .ToString(); var riakObject = new RiakObject(TestBucket, "large", text, RiakConstants.ContentTypes.TextPlain); var result = Client.Put(riakObject); result.IsSuccess.ShouldBeTrue(result.ErrorMessage); }
public void Putting_A_Value_To_A_Write_Once_Bucket_Works() { string key = Guid.NewGuid().ToString(); string value = "test value"; var id = new RiakObjectId(BucketType, Bucket, key); var obj = new RiakObject(id, value, RiakConstants.ContentTypes.TextPlain); RiakResult<RiakObject> rslt = client.Put(obj); Assert.True(rslt.IsSuccess, rslt.ErrorMessage); }
public RiakSessionItem(RiakObject riakObject) { SessionStoreItems = riakObject.Value.FromRiakString(); Created = DateTime.Parse(riakObject.UserMetaData["X-Riak-Meta-Created"]); Expires = DateTime.Parse(riakObject.UserMetaData["X-Riak-Meta-Expires"]); LockDate = DateTime.Parse(riakObject.UserMetaData["X-Riak-Meta-LockDate"]); LockId = int.Parse(riakObject.UserMetaData["X-Riak-Meta-LockId"]); Locked = bool.Parse(riakObject.UserMetaData["X-Riak-Meta-Locked"]); Flags = int.Parse(riakObject.UserMetaData["X-Riak-Meta-Flags"]); _timeout = (Expires - Created).Minutes; }
public void LotsOfConcurrentMapRedRequestsShouldWork() { var keys = new List<string>(); for (var i = 1; i < 11; i++) { var key = "key" + i; var doc = new RiakObject(MapReduceBucket, key, new { value = i }); keys.Add(key); var result = Client.Put(doc, new RiakPutOptions { ReturnBody = true }); result.ShouldNotBeNull(); } var input = new RiakBucketKeyInput(); keys.ForEach(k => input.Add(MapReduceBucket, k)); var query = new RiakMapReduceQuery() .Inputs(input) .MapJs(m => m.Source(@"function(o){return[1];}")) .ReduceJs(r => r.Name(@"Riak.reduceSum").Keep(true)); query.Compile(); var results = new List<RiakMapReduceResult>[ThreadCount]; var watch = Stopwatch.StartNew(); Parallel.For(0, ThreadCount, i => { results[i] = DoMapRed(query); }); watch.Stop(); var executionTime = watch.Elapsed; var failures = 0; foreach (var r in results.SelectMany(l => l)) { if (r != null) { var resultValue = JsonConvert.DeserializeObject<int[]>(r.PhaseResults.ElementAt(1).Values.First().FromRiakString())[0]; resultValue.ShouldEqual(10); //r.Value.PhaseResults.ElementAt(1).GetObject<int[]>()[0].ShouldEqual(10); } else { // the only acceptable result is that it ran out of retries when // talking to the cluster (trying to get a connection) //r.ResultCode.ShouldEqual(ResultCode.NoRetries); ++failures; } } Console.WriteLine("Total of {0} out of {1} failed to execute due to connection contention. Execution time = {2} milliseconds, for an average of {3} milliseconds", failures, ThreadCount * ActionCount, executionTime.TotalMilliseconds, (executionTime.TotalMilliseconds/(ThreadCount * ActionCount))); }
public void GetsWithBucketAndKeyReturnObjectsThatAreMarkedAsNotChanged() { var bucketName = "identity_configuration"; var key = "RiakMembershipProviderTests"; var doc = new RiakObject(TestBucket, TestKey, TestJson, RiakConstants.ContentTypes.ApplicationJson); var writeResult = Client.Put(doc); writeResult.ShouldNotBeNull(); var readResult = Client.Get(bucketName, key); readResult.ShouldNotBeNull(); readResult.HasChanged.ShouldBeFalse(); }
public void AsyncDeleteIsSuccessful() { var riakObject = new RiakObject(TestBucket, TestKey, TestJson, RiakConstants.ContentTypes.ApplicationJson); var riakObjectId = riakObject.ToRiakObjectId(); var putResult = Client.Put(riakObject); putResult.ShouldNotBeNull(); var deletedObjectId = Client.Async.Delete(riakObjectId).ConfigureAwait(false).GetAwaiter().GetResult(); var getResult = Client.Get(riakObjectId); getResult.ShouldBeNull(); }
public RiakObject ToRiakObject() { var o = new RiakObject(SessionContainer, SessionId, SessionStoreItems, RiakConstants.ContentTypes.ApplicationJson); o.UserMetaData["X-Riak-Meta-Created"] = Created.ToString("R"); o.UserMetaData["X-Riak-Meta-Expires"] = Expires.ToString("R"); o.UserMetaData["X-Riak-Meta-LockDate"] = LockDate.ToString("R"); o.UserMetaData["X-Riak-Meta-LockId"] = LockId.ToString(); o.UserMetaData["X-Riak-Meta-Locked"] = Locked.ToString(); o.UserMetaData["X-Riak-Meta-Flags"] = Flags.ToString(); return o; }
protected void CreateObjects(string bucketName) { var oj = new RiakObject(bucketName, OJ, new Person() { Name = "oj" }); var jeremiah = new RiakObject(bucketName, Jeremiah, new Person() { Name = "jeremiah" }); var brent = new RiakObject(bucketName, Brent, new Person() { Name = "brent" }); var rob = new RiakObject(bucketName, Rob, new Person() { Name = "rob" }); oj.ContentType = RiakConstants.ContentTypes.ApplicationJson; jeremiah.ContentType = RiakConstants.ContentTypes.ApplicationJson; brent.ContentType = RiakConstants.ContentTypes.ApplicationJson; rob.ContentType = RiakConstants.ContentTypes.ApplicationJson; Client.Put(new[] { oj, jeremiah, brent, rob }); }
public void DefaultBucketCanBeSpecifiedAsType() { id = new RiakObjectId("default", "my_bucket", "my_key"); var obj1 = new RiakObject(id, "value", RiakConstants.ContentTypes.TextPlain); var putRslt = client.Put(obj1); CheckResult(putRslt); var id2 = new RiakObjectId("my_bucket", "my_key"); var getRslt = client.Get(id2); CheckResult(getRslt); RiakObject obj2 = getRslt.Value; Assert.AreEqual(obj1.Value, obj2.Value); }
public void DeleteIsSuccessful() { var riakObject = new RiakObject(TestBucket, TestKey, TestJson, RiakConstants.ContentTypes.ApplicationJson); var riakObjectId = riakObject.ToRiakObjectId(); var putResult = Client.Put(riakObject); putResult.IsSuccess.ShouldBeTrue(putResult.ErrorMessage); var delResult = Client.Delete(riakObjectId); delResult.IsSuccess.ShouldBeTrue(delResult.ErrorMessage); var getResult = Client.Get(riakObjectId); getResult.IsSuccess.ShouldBeFalse(getResult.ErrorMessage); getResult.ResultCode.ShouldEqual(ResultCode.NotFound); getResult.Value.ShouldBeNull(); }
public void IndexesAreSavedWithAnObject() { var o = new RiakObject(Bucket, "the_object", "{ value: \"this is an object\" }"); o.AddIndex("tacos", "are great!"); o.AddIndex("age", 12); Client.Put(o); var result = Client.Get(o.ToRiakObjectId()); result.IsSuccess.ShouldBeTrue(result.ErrorMessage); var ro = result.Value; ro.BinIndexes.Count.ShouldEqual(1); ro.IntIndexes.Count.ShouldEqual(1); }
public void ContentTypes() { id = new RiakObjectId("animals", "dogs", "fido"); var fido = new { breed = "dalmatian", size = "large" }; var obj = new RiakObject(id, fido); var rslt = client.Put(obj); CheckResult(rslt); rslt = client.Get(id); CheckResult(rslt); Assert.NotNull(rslt.Value); Assert.AreEqual(RiakConstants.ContentTypes.ApplicationJson, rslt.Value.ContentType); string json = Encoding.UTF8.GetString(rslt.Value.Value); Assert.AreEqual(@"{""breed"":""dalmatian"",""size"":""large""}", json); }
public bool CheckOrSave(string endpoint, Int32 bucket, long position) { var id = new RiakObjectId($"{Settings.Bucket}.system", $"{endpoint}:{bucket}"); var options = new RiakGetOptions { }; options.SetRw(Quorum.WellKnown.All); var exists = _riak.Get(id, options); if (exists.IsSuccess) return false; var competer = new Competer { Id = $"{endpoint}:{bucket}", Discriminator = Discriminator, Endpoint = endpoint, Bucket = bucket, Position = position, Heartbeat = DateTime.UtcNow }; var putOpt = new RiakPutOptions { IfNotModified = false, IfNoneMatch = true }; putOpt.SetW(Quorum.WellKnown.All); var o = new RiakObject(id, competer); var result = _riak.Put(o, putOpt); if (!result.IsSuccess) { Logger.Info("Endpoint {0} failed to claim bucket {1}. Error: {2}", endpoint, bucket, result.ErrorMessage); return false; } Thread.Sleep(new Random().Next(100, 2000)); do { exists = _riak.Get(id, options); } while (!exists.IsSuccess); competer = exists.Value.GetObject<Competer>(); if (competer.Discriminator != Discriminator) { Logger.Info("Endpoint {0} failed to claim bucket {1}. Error: {2}", endpoint, bucket, "Discriminator mismatch"); return false; } Logger.Info("Endpoint {0} successfully claimed bucket {1}", endpoint, bucket); return true; }
public void AsyncListKeysReturnsTheCorrectNumberOfResults() { var bucket = Guid.NewGuid().ToString(); for (var i = 1; i < 11; i++) { var doc = new RiakObject(bucket, i.ToString(), new { value = i }); var r = Client.Put(doc); r.IsSuccess.ShouldBeTrue(); } var result = Client.Async.ListKeys(bucket).Result; result.IsSuccess.ShouldBeTrue(); result.Value.ShouldNotBeNull(); result.Value.Count().ShouldEqual(10); }
public void MapReduceQueriesReturnData() { var bucket = Guid.NewGuid().ToString(); for (var i = 1; i < 11; i++) { var doc = new RiakObject(bucket, i.ToString(), new { value = i }); Client.Put(doc).IsSuccess.ShouldBeTrue(); } var query = new RiakMapReduceQuery() .Inputs(bucket) .MapJs(m => m.Source(@"function(o) {return [ 1 ];}")) .ReduceJs(r => r.Name(@"Riak.reduceSum").Keep(true)); var result = Client.MapReduce(query); result.IsSuccess.ShouldBeTrue(); var mrRes = result.Value; mrRes.PhaseResults.ShouldNotBeNull(); mrRes.PhaseResults.Count().ShouldEqual(2); mrRes.PhaseResults.ElementAt(0).Phase.ShouldEqual(0u); mrRes.PhaseResults.ElementAt(1).Phase.ShouldEqual(1u); //mrRes.PhaseResults.ElementAt(0).Values.ShouldBeNull(); foreach (var v in mrRes.PhaseResults.ElementAt(0).Values) { v.ShouldBeNull(); } mrRes.PhaseResults.ElementAt(1).Values.ShouldNotBeNull(); var values = result.Value.PhaseResults.ElementAt(1).GetObjects <int[]>().First(); //var values = Newtonsoft.Json.JsonConvert.DeserializeObject<int[]>(result.Value.PhaseResults.ElementAt(1).Values.First().FromRiakString()); values[0].ShouldEqual(10); }
public void ResolvingSiblingsWithUpdateUsingFirstSibling() { id = PutNickolodeonCharacters(); // First, fetch the object var getResult = client.Get(id); // Then, pick the first sibling RiakObject chosenSibling = getResult.Value.Siblings.First(); // Then, store the chosen object var putRslt = client.Put(chosenSibling); CheckResult(putRslt); RiakObject updatedObject = putRslt.Value; // Voila, no more siblings! Debug.Assert(updatedObject.Siblings.Count == 0); Assert.AreEqual(0, updatedObject.Siblings.Count); Assert.AreEqual("Ren", Encoding.UTF8.GetString(updatedObject.Value)); }
public void MultiDeleteWithValidAndInvalidBucketsBehavesCorrectly() { var doc = new RiakObject(TestBucket, TestKey, TestJson, RiakConstants.ContentTypes.ApplicationJson); var writeResult = Client.Put(doc); writeResult.IsSuccess.ShouldBeTrue(); writeResult.Value.ShouldNotBeNull(); var deleteResults = Client.Delete(new List <RiakObjectId> { new RiakObjectId(null, "key"), new RiakObjectId("", "key"), new RiakObjectId(" ", "key"), new RiakObjectId("foo/bar", "key"), new RiakObjectId(TestBucket, TestKey) }).ToList(); deleteResults.Count(r => r.IsSuccess).ShouldEqual(1); var deletedItemGetResult = Client.Get(TestBucket, TestKey); deletedItemGetResult.ResultCode.ShouldEqual(ResultCode.NotFound); }
public void BinIndexGetReturnsListOfKeys() { for (var i = 0; i < 10; i++) { var o = new RiakObject(Bucket, i.ToString(), "{ value: \"this is an object\" }"); o.BinIndex("age").Set("32"); Client.Put(o); } var result = Client.IndexGet(Bucket, "age", "32"); result.IsSuccess.ShouldBeTrue(result.ErrorMessage); result.Value.Count.ShouldEqual(10); foreach (var v in result.Value) { var key = int.Parse(v); key.ShouldBeLessThan(10); key.ShouldBeGreaterThan(-1); } }
private void button4_Click(object sender, EventArgs e) { var lionoId = new RiakObjectId("cats", "liono"); var lionoObj = new { name_s = "Lion-o", age_i = 30, leader = true }; var lionoRiakObj = new RiakObject(lionoId, lionoObj); var cheetaraId = new RiakObjectId("cats", "cheetara"); var cheetaraObj = new { name_s = "Cheetara", age_i = 30, leader = false }; var cheetaraRiakObj = new RiakObject(cheetaraId, cheetaraObj); var snarfId = new RiakObjectId("cats", "snarf"); var snarfObj = new { name_s = "Snarf", age_i = 43, leader = false }; var snarfRiakObj = new RiakObject(snarfId, snarfObj); var panthroId = new RiakObjectId("cats", "panthro"); var panthroObj = new { name_s = "Panthro", age_i = 36, leader = false }; var panthroRiakObj = new RiakObject(panthroId, panthroObj); var rslts = client.Put(new[] { lionoRiakObj, cheetaraRiakObj, snarfRiakObj, panthroRiakObj }); }
public Task <RiakResult <RiakObject> > Put(RiakObject value, RiakPutOptions options = null) { if (!IsValidBucketOrKey(value.Bucket)) { return(RiakResult <RiakObject> .ErrorTask(ResultCode.InvalidRequest, InvalidBucketErrorMessage, false)); } if (!IsValidBucketOrKey(value.Key)) { return(RiakResult <RiakObject> .ErrorTask(ResultCode.InvalidRequest, InvalidKeyErrorMessage, false)); } var request = value.ToMessage(); options = options ?? new RiakPutOptions(); options.Populate(request); return(UseConnection(conn => conn.PbcWriteRead <RpbPutReq, RpbPutResp>(request)) .ContinueWith((Task <RiakResult <RpbPutResp> > finishedTask) => { var result = finishedTask.Result; if (!result.IsSuccess) { return RiakResult <RiakObject> .Error(result.ResultCode, result.ErrorMessage, result.NodeOffline); } var finalResult = options.ReturnBody ? new RiakObject(value.Bucket, value.Key, result.Value.content.First(), result.Value.vclock) : value; if (options.ReturnBody && result.Value.content.Count > 1) { finalResult.Siblings = result.Value.content.Select( c => new RiakObject(value.Bucket, value.Key, c, result.Value.vclock)).ToList(); } return RiakResult <RiakObject> .Success(finalResult); })); }
public void MultiPutWithValidAndInvalidBucketsBehavesCorrectly() { var doc = new RiakObject(TestBucket, TestKey, TestJson, RiakConstants.ContentTypes.ApplicationJson); var writeResult = Client.Put(doc); writeResult.ShouldNotBeNull(); var putResults = Client.Async.Put(new List <RiakObject> { new RiakObject(null, "key", TestJson, RiakConstants.ContentTypes.ApplicationJson), new RiakObject("", "key", TestJson, RiakConstants.ContentTypes.ApplicationJson), new RiakObject(" ", "key", TestJson, RiakConstants.ContentTypes.ApplicationJson), new RiakObject("foo/bar", "key", TestJson, RiakConstants.ContentTypes.ApplicationJson), new RiakObject(TestBucket, TestKey, TestJson, RiakConstants.ContentTypes.ApplicationJson) }) .ToEnumerable() .ToList(); putResults .Count(r => !r.IsLeft) .ShouldEqual(1); }
public void IntRangeQueriesReturnMultipleKeys() { for (var i = 0; i < 10; i++) { var o = new RiakObject(Bucket, i.ToString(), "{ value: \"this is an object\" }"); o.AddIntIndex("age_int", 25 + i); Client.Put(o); } var input = new RiakIntIndexRangeInput(Bucket, "age_int", 27, 30); var mr = new RiakMapReduceQuery() .Inputs(input) .ReduceErlang(r => r.ModFun("riak_kv_mapreduce", "reduce_identity").Keep(true)); var result = Client.MapReduce(mr); result.IsSuccess.ShouldBeTrue(); // TODO write tests verifying results }
public void GetsWithBucketAndKeyReturnObjects() { var doc = new RiakObject(TestBucket, TestKey, TestJson, RiakConstants.ContentTypes.ApplicationJson); var writeResult = Client.Put(doc); writeResult.IsSuccess.ShouldBeTrue(writeResult.ErrorMessage); writeResult.Value.ShouldNotBeNull(writeResult.ErrorMessage); Func <RiakResult <RiakObject> > getObject = () => Client.Get(TestBucket, TestKey); var readResult = getObject.WaitUntil(); readResult.IsSuccess.ShouldBeTrue(readResult.ErrorMessage); readResult.Value.ShouldNotBeNull(readResult.ErrorMessage); var otherDoc = readResult.Value; otherDoc.Bucket.ShouldEqual(TestBucket); otherDoc.Bucket.ShouldEqual(doc.Bucket); otherDoc.Key.ShouldEqual(TestKey); otherDoc.Key.ShouldEqual(doc.Key); }
public void ResolvingSiblingsWithUpdate() { id = PutNickolodeonCharacters(); // First, fetch the object var getResult = client.Get(id); // Then, modify the object's value RiakObject obj = getResult.Value; obj.SetObject <string>("Stimpy", RiakConstants.ContentTypes.TextPlain); // Then, store the object which has vector clock attached var putRslt = client.Put(obj); CheckResult(putRslt); obj = putRslt.Value; // Voila, no more siblings! Debug.Assert(obj.Siblings.Count == 0); Assert.AreEqual(0, obj.Siblings.Count); }
public async Task <Either <RiakException, RiakObject> > Get(string bucket, string key, RiakGetOptions options = null) { options = options ?? RiakClient.DefaultGetOptions(); if (!IsValidBucketOrKey(bucket)) { return(new Either <RiakException, RiakObject>(new RiakException((uint)ResultCode.InvalidRequest, InvalidBucketErrorMessage, false))); } if (!IsValidBucketOrKey(key)) { return(new Either <RiakException, RiakObject>(new RiakException((uint)ResultCode.InvalidRequest, InvalidKeyErrorMessage, false))); } var request = new RpbGetReq { bucket = bucket.ToRiakString(), key = key.ToRiakString() }; options = options ?? new RiakGetOptions(); options.Populate(request); try { var result = await _connection.PbcWriteRead <RpbGetReq, RpbGetResp>(_endPoint, request).ConfigureAwait(false); if (result.vclock == null) { return(new Either <RiakException, RiakObject>(new RiakException((uint)ResultCode.NotFound, "Unable to find value in Riak", false))); } var riakObject = new RiakObject(bucket, key, result.content, result.vclock); return(new Either <RiakException, RiakObject>(riakObject)); } catch (RiakException riakException) { return(new Either <RiakException, RiakObject>(riakException)); } }
public async Task Save(String endpoint, long position) { var id = new RiakObjectId($"{Settings.Bucket}.system", endpoint); var options = new RiakGetOptions { }; options.SetRw(Quorum.WellKnown.All); var exists = await _riak.Async.Get(id, options); if (exists.IsSuccess) { var checkpoint = exists.Value.GetObject <Checkpoint>(); checkpoint.Position = position; exists.Value.SetObject(checkpoint); var putOpt = new RiakPutOptions { IfNotModified = true, IfNoneMatch = false }; putOpt.SetW(Quorum.WellKnown.All); await _riak.Async.Put(exists.Value, putOpt); } else { var checkpoint = new Checkpoint { Id = endpoint, Position = position, }; var putOpt = new RiakPutOptions { IfNotModified = false, IfNoneMatch = true }; putOpt.SetW(Quorum.WellKnown.All); var o = new RiakObject(id, checkpoint); await _riak.Async.Put(o, putOpt); } }
public void TestKVOperations() { const string key = "bucket_type_test_key"; var id = new RiakObjectId(TestBucketType, TestBucket, key); var obj = new RiakObject(id, Value); // put var putResult = Client.Put(obj, new RiakPutOptions().SetReturnBody(true).SetDw(3)); putResult.IsSuccess.ShouldBeTrue(); putResult.Value.BucketType.ShouldEqual(TestBucketType); // get var getResult = Client.Get(id); getResult.IsSuccess.ShouldBeTrue(); getResult.Value.BucketType.ShouldEqual(TestBucketType); // delete var deleteResult = Client.Delete(id, new RiakDeleteOptions().SetDw(3)); deleteResult.IsSuccess.ShouldBeTrue(); // multiget var ids = new List <RiakObjectId>(); for (int i = 0; i < 3; i++) { obj = new RiakObject(new RiakObjectId(TestBucketType, TestBucket, key + i), Value); Client.Put(obj, new RiakPutOptions().SetReturnBody(true).SetDw(3)); ids.Add(obj.ToRiakObjectId()); } var multiGetResult = Client.Get(ids).ToList(); multiGetResult.All(r => r.IsSuccess).ShouldBeTrue(); multiGetResult.All(r => r.Value.BucketType == TestBucketType).ShouldBeTrue(); }
public void MapReduceQueriesReturnDataInBatch() { var bucket = string.Format("{0}_{1}", TestBucket, Guid.NewGuid()); Client.Batch(batch => { for (var i = 1; i < 11; i++) { var doc = new RiakObject(bucket, i.ToString(), new { value = i }); batch.Put(doc).ShouldNotBeNull(); } var query = new RiakMapReduceQuery() .Inputs(bucket) .MapJs(m => m.Source(@"function(o) {return [ 1 ];}")) .ReduceJs(r => r.Name(@"Riak.reduceSum").Keep(true)); var result = batch.MapReduce(query); result.ShouldNotBeNull(); var mrRes = result; mrRes.PhaseResults.ShouldNotBeNull(); mrRes.PhaseResults.Count().ShouldEqual(2); mrRes.PhaseResults.ElementAt(0).Phase.ShouldEqual(0u); mrRes.PhaseResults.ElementAt(1).Phase.ShouldEqual(1u); //mrRes.PhaseResults.ElementAt(0).Values.ShouldBeNull(); foreach (var v in mrRes.PhaseResults.ElementAt(0).Values) { v.ShouldBeNull(); } mrRes.PhaseResults.ElementAt(1).Values.ShouldNotBeNull(); var values = result.PhaseResults.ElementAt(1).GetObjects <int[]>().First(); values[0].ShouldEqual(10); }); }
/// <summary> /// Retrieve arbitrarily deep list of links for a <see cref="RiakObject"/> /// </summary> /// <returns> /// A list of <see cref="RiakObject"/> identified by the list of links. /// </returns> /// <param name='riakObject'> /// The initial object to use for the beginning of the link walking. /// </param> /// <param name='riakLinks'> /// A list of link definitions /// </param> /// <remarks>Refer to http://wiki.basho.com/Links-and-Link-Walking.html for more information.</remarks> public RiakResult <IList <RiakObject> > WalkLinks(RiakObject riakObject, IList <RiakLink> riakLinks) { var input = new RiakBucketKeyInput(); input.AddBucketKey(riakObject.Bucket, riakObject.Key); var query = new RiakMapReduceQuery() .Inputs(input); foreach (var riakLink in riakLinks) { var link = riakLink; var keep = link == riakLinks.Last(); query.Link(l => l.FromRiakLink(link).Keep(keep)); } var result = MapReduce(query); if (result.IsSuccess) { var linkResults = result.Value.PhaseResults.GroupBy(r => r.Phase).Where(g => g.Key == riakLinks.Count - 1); var linkResultStrings = linkResults.SelectMany(lr => lr.ToList(), (lr, r) => new { lr, r }) .SelectMany(@t => @t.r.Values, (@t, s) => s.FromRiakString()); //var linkResultStrings = linkResults.SelectMany(g => g.Select(r => r.Values.Value.FromRiakString())); var rawLinks = linkResultStrings.SelectMany(RiakLink.ParseArrayFromJsonString).Distinct(); var oids = rawLinks.Select(l => new RiakObjectId(l.Bucket, l.Key)).ToList(); var objects = Get(oids); // FIXME // we could be discarding results here. Not good? // This really should be a multi-phase map/reduce return(RiakResult <IList <RiakObject> > .Success(objects.Where(r => r.IsSuccess).Select(r => r.Value).ToList())); } return(RiakResult <IList <RiakObject> > .Error(result.ResultCode, result.ErrorMessage)); }
public void AsyncGetWithRiakObjectIdReturnsData() { var riakObject = new RiakObject(TestBucket, TestKey, TestJson, RiakConstants.ContentTypes.ApplicationJson); var riakObjectId = riakObject.ToRiakObjectId(); Client.Put(riakObject); RiakResult <RiakObject> theResult = null; var resetEvent = new AutoResetEvent(false); Client.Async.Get(riakObjectId, result => { theResult = result; resetEvent.Set(); }); resetEvent.WaitOne(); theResult.IsSuccess.ShouldBeTrue(); theResult.Value.ShouldNotBeNull(); theResult.Value.Bucket.ShouldEqual(TestBucket); theResult.Value.Key.ShouldEqual(TestKey); theResult.Value.Value.FromRiakString().ShouldEqual(TestJson); }
public void AsyncPutMultipleIsSuccessful() { var one = new RiakObject(TestBucket, "one", TestJson, RiakConstants.ContentTypes.ApplicationJson); var two = new RiakObject(TestBucket, "two", TestJson, RiakConstants.ContentTypes.ApplicationJson); IEnumerable <RiakResult <RiakObject> > theResults = null; var resetEvent = new AutoResetEvent(false); Client.Async.Put(new List <RiakObject> { one, two }, result => { theResults = result; resetEvent.Set(); }); resetEvent.WaitOne(); foreach (var riakResult in theResults) { riakResult.IsSuccess.ShouldBeTrue(); riakResult.Value.ShouldNotBeNull(); } }
public void UpdatingWithGeneratedKey_ReturnsCorrectKey() { var doc = new RiakObject(TestBucket, null, TestJson, RiakConstants.ContentTypes.ApplicationJson); var result = Client.Put(doc); result.IsSuccess.ShouldBeTrue(); result.Value.ShouldNotBeNull(); result.Value.Key.ShouldNotBeNullOrEmpty(); string key = result.Value.Key; string updatedValue = @"{'foo':'bar'}"; var update = new RiakObject(TestBucket, key, updatedValue, RiakConstants.ContentTypes.ApplicationJson); result = Client.Put(update); result.IsSuccess.ShouldBeTrue(); result.Value.ShouldNotBeNull(); result.Value.Key.ShouldEqual(key); var del_result = Client.Delete(TestBucket, key); del_result.IsSuccess.ShouldBeTrue(); Assert.True(del_result.ResultCode == ResultCode.Success); }
public void AsyncGetMultipleReturnsAllObjects() { var one = new RiakObject(TestBucket, "one", TestJson, RiakConstants.ContentTypes.ApplicationJson); var two = new RiakObject(TestBucket, "two", TestJson, RiakConstants.ContentTypes.ApplicationJson); Client.Put(one); Client.Put(two); var oneObjectId = one.ToRiakObjectId(); var twoObjectId = two.ToRiakObjectId(); var list = new List <RiakObjectId> { oneObjectId, twoObjectId }; var results = Client.Async.Get(list).Result; foreach (var result in results) { result.IsSuccess.ShouldBeTrue(result.ErrorMessage); result.Value.ShouldNotBeNull(); } }
public void CustomSerializerWillSerializeJson() { var testPerson = new Person { DateOfBirth = new DateTime(1978, 12, 5, 0, 0, 0, DateTimeKind.Utc), Email = "*****@*****.**", Name = new Name { FirstName = "OJ", Surname = "Reeves" }, PhoneNumbers = new List <PhoneNumber> { new PhoneNumber { Number = "12345678", NumberType = PhoneNumberType.Home } } }; var sots = new SerializeObjectToString <Person>(JsonConvert.SerializeObject); var obj = new RiakObject("bucket", "key"); obj.SetObject(testPerson, RiakConstants.ContentTypes.ApplicationJson, sots); obj.Value.ShouldNotBeNull(); obj.ContentType.ShouldEqual(RiakConstants.ContentTypes.ApplicationJson); var json = obj.Value.FromRiakString(); json.ShouldEqual("{\"Name\":{\"FirstName\":\"OJ\",\"Surname\":\"Reeves\"},\"PhoneNumbers\":[{\"Number\":\"12345678\",\"NumberType\":1}],\"DateOfBirth\":\"\\/Date(281664000000)\\/\",\"Email\":\"[email protected]\"}"); var deserialisedPerson = obj.GetObject <Person>(); deserialisedPerson.ShouldEqual(testPerson); }
/// <summary> /// Retrieve multiple objects from Riak. /// </summary> /// <param name='bucketKeyPairs'> /// An <see href="System.Collections.Generic.IEnumerable<T>"/> of <see cref="CorrugatedIron.Models.RiakObjectId"/> to be retrieved /// </param> /// <param name='rVal'> /// The number of nodes required to successfully respond to the read before the read is considered a success. /// </param> public IEnumerable <RiakResult <RiakObject> > Get(IEnumerable <RiakObjectId> bucketKeyPairs, uint rVal = RiakConstants.Defaults.RVal) { bucketKeyPairs = bucketKeyPairs.ToList(); var requests = bucketKeyPairs.Select(bk => new RpbGetReq { Bucket = bk.Bucket.ToRiakString(), Key = bk.Key.ToRiakString(), R = rVal }).ToList(); var results = UseConnection(conn => { var responses = requests.Select(conn.PbcWriteRead <RpbGetReq, RpbGetResp>).ToList(); return(RiakResult <IEnumerable <RiakResult <RpbGetResp> > > .Success(responses)); }); return(results.Value.Zip(bucketKeyPairs, Tuple.Create).Select(result => { if (!result.Item1.IsSuccess) { return RiakResult <RiakObject> .Error(result.Item1.ResultCode, result.Item1.ErrorMessage); } if (result.Item1.Value.VectorClock == null) { return RiakResult <RiakObject> .Error(ResultCode.NotFound); } var o = new RiakObject(result.Item2.Bucket, result.Item2.Key, result.Item1.Value.Content.First(), result.Item1.Value.VectorClock); if (result.Item1.Value.Content.Count > 1) { o.Siblings = result.Item1.Value.Content.Select(c => new RiakObject(result.Item2.Bucket, result.Item2.Key, c, result.Item1.Value.VectorClock)).ToList(); } return RiakResult <RiakObject> .Success(o); })); }
public void ListKeysFromIndexReturnsAllKeys() { var bucket = string.Format("{0}_{1}", TestBucket, Guid.NewGuid()); var originalKeyList = new List <string>(); for (var i = 0; i < 10; i++) { var o = new RiakObject(bucket, i.ToString(), "{ value: \"this is an object\" }"); originalKeyList.Add(i.ToString()); Client.Put(o); } var keys = ((RiakClient)Client).ListKeysFromIndex(bucket).ToList(); keys.Count().ShouldEqual(10); foreach (var key in keys) { originalKeyList.ShouldContain(key); } Client.DeleteBucket(bucket); }
public new void SetUp() { base.SetUp(); var oj = new RiakObject(TestBucket, OJ, new { name = "oj" }); var jeremiah = new RiakObject(TestBucket, Jeremiah, new { name = "jeremiah" }); var brent = new RiakObject(TestBucket, Brent, new { name = "brent" }); var rob = new RiakObject(TestBucket, Rob, new { name = "rob" }); oj.LinkTo(jeremiah, "friends"); oj.LinkTo(jeremiah, "coworkers"); jeremiah.LinkTo(oj, "friends"); jeremiah.LinkTo(oj, "coworkers"); jeremiah.LinkTo(oj, "ozzies"); jeremiah.LinkTo(brent, "friends"); jeremiah.LinkTo(brent, "coworkers"); jeremiah.LinkTo(rob, "ozzies"); brent.LinkTo(jeremiah, "coworkers"); brent.LinkTo(jeremiah, "friends"); Client.Put(new[] { oj, jeremiah, brent, rob }); }
public void GettingKeysWithReturnTermsDoesAThing() { var bucket = Bucket; var keysAndTerms = new Dictionary <string, int>(); for (var i = 0; i < 10; i++) { var o = new RiakObject(bucket, Guid.NewGuid().ToString(), "{ value: \"this is an object\" }"); o.IntIndex("sandwiches").Set(i); keysAndTerms.Add(o.Key, i); Client.Put(o); } var results = Client.IndexGet(bucket, "sandwiches", 2, 5, new RiakIndexGetOptions().SetReturnTerms(true).SetMaxResults(100).SetStream(false)); results.IndexKeyTerms.Count().ShouldEqual(4); foreach (var indexResult in results.IndexKeyTerms) { keysAndTerms.Keys.ShouldContain(indexResult.Key); keysAndTerms[indexResult.Key].ShouldEqual(int.Parse(indexResult.Term)); } }
public Task <RiakResult <RiakObject> > Get(string bucket, string key, RiakGetOptions options = null) { if (!IsValidBucketOrKey(bucket)) { return(RiakResult <RiakObject> .ErrorTask(ResultCode.InvalidRequest, InvalidBucketErrorMessage, false)); } if (!IsValidBucketOrKey(key)) { return(RiakResult <RiakObject> .ErrorTask(ResultCode.InvalidRequest, InvalidKeyErrorMessage, false)); } var request = new RpbGetReq { bucket = bucket.ToRiakString(), key = key.ToRiakString() }; options = options ?? new RiakGetOptions(); options.Populate(request); return(UseConnection(conn => conn.PbcWriteRead <RpbGetReq, RpbGetResp>(request)) .ContinueWith((Task <RiakResult <RpbGetResp> > finishedTask) => { var result = finishedTask.Result; if (!result.IsSuccess) { return RiakResult <RiakObject> .Error(result.ResultCode, result.ErrorMessage, result.NodeOffline); } if (result.Value.vclock == null) { return RiakResult <RiakObject> .Error(ResultCode.NotFound, "Unable to find value in Riak", false); } var o = new RiakObject(bucket, key, result.Value.content, result.Value.vclock); return RiakResult <RiakObject> .Success(o); })); }
internal BinIndex(RiakObject container, string name) : base(container, name) { }
public void Parallel_ForEach_Can_Be_Used_To_Put_And_Get_Objects() { const int numNodes = 4; const int poolSize = 8; const int totalConnectionCount = poolSize * numNodes; const ushort portInterval = 10; const ushort startingPort = 10017; const ushort endingPort = startingPort + ((numNodes - 1) * portInterval); const int totalObjects = 65536; byte[] data = new byte[65536]; Random.NextBytes(data); int batchSize = totalConnectionCount; int totalBatches = totalObjects / batchSize; Assert.AreEqual(0, totalObjects % batchSize); Debug.WriteLine("batchSize: {0}, totalBatches: {1}", batchSize, totalBatches); string riakHost = Environment.GetEnvironmentVariable("RIAK_HOST"); if (String.IsNullOrWhiteSpace(riakHost)) { riakHost = "riak-test"; } Debug.WriteLine("Riak host: {0}", riakHost); Assert.AreEqual(10047, endingPort); var objs = new List <RiakObject>(); for (int i = 0; i < totalObjects; i++) { var key = String.Format("{0}_{1}", TestKey, i); var id = new RiakObjectId(TestBucket, key); var obj = new RiakObject(id, data, RiakConstants.ContentTypes.ApplicationOctetStream, null); objs.Add(obj); } IRiakClusterConfiguration clusterConfig = new RiakClusterConfiguration(); for (ushort port = startingPort; port <= endingPort; port += portInterval) { IRiakNodeConfiguration nc = new RiakNodeConfiguration(); nc.PoolSize = poolSize; nc.HostAddress = riakHost; nc.PbcPort = port; nc.Name = String.Format("dev_{0}", port); clusterConfig.AddNode(nc); } var batchObjs = new RiakObject[batchSize]; var p = new int[] { 1, batchSize }; foreach (int parallelism in p) { var parallelOptions = new ParallelOptions(); parallelOptions.MaxDegreeOfParallelism = parallelism; using (var cluster = new RiakCluster(clusterConfig)) { var client = cluster.CreateClient(); var sw = new Stopwatch(); sw.Start(); for (int i = 0; i < totalObjects; i += batchSize) { objs.CopyTo(i, batchObjs, 0, batchSize); Parallel.ForEach(batchObjs, parallelOptions, (obj) => { try { client.Put(obj); } catch (Exception e) { Debug.WriteLine("[ERROR] put exception: {0}", e.ToString()); } }); } sw.Stop(); Debug.WriteLine("parallelism: {0} - put {1} objects in {2}", parallelism, totalObjects, sw.Elapsed); sw.Reset(); sw.Start(); for (int i = 0; i < totalObjects; i += batchSize) { objs.CopyTo(i, batchObjs, 0, batchSize); Parallel.ForEach(batchObjs, parallelOptions, (obj) => { try { var id = new RiakObjectId(obj.Bucket, obj.Key); client.Get(id); } catch (Exception e) { Debug.WriteLine("[ERROR] put exception: {0}", e.ToString()); } }); } sw.Stop(); Debug.WriteLine("parallelism: {0} - fetched {1} objects in {2}", parallelism, totalObjects, sw.Elapsed); } } }
public Task <Either <RiakException, RiakObjectId> > Delete(RiakObject riakObject, RiakDeleteOptions options = null) { return(Delete(riakObject.Bucket, riakObject.Key, options)); }
public IObservable <Either <RiakException, RiakObject> > Get(IEnumerable <RiakObjectId> bucketKeyPairs, RiakGetOptions options = null) { var observable = Observable.Create <Either <RiakException, RiakObject> >(async obs => { try { bucketKeyPairs = bucketKeyPairs.ToList(); options = options ?? new RiakGetOptions(); foreach (var bucketKeyPair in bucketKeyPairs) { // modified closure FTW var bk = bucketKeyPair; if (!IsValidBucketOrKey(bk.Bucket)) { obs.OnNext(new Either <RiakException, RiakObject>(new RiakException((uint)ResultCode.InvalidRequest, InvalidBucketErrorMessage, false))); continue; } if (!IsValidBucketOrKey(bk.Key)) { obs.OnNext(new Either <RiakException, RiakObject>(new RiakException((uint)ResultCode.InvalidRequest, InvalidKeyErrorMessage, false))); continue; } var req = new RpbGetReq { bucket = bk.Bucket.ToRiakString(), key = bk.Key.ToRiakString() }; options.Populate(req); try { var result = await _connection.PbcWriteRead <RpbGetReq, RpbGetResp>(_endPoint, req) .ConfigureAwait(false); if (result.vclock == null) { obs.OnNext(new Either <RiakException, RiakObject>(new RiakException((uint)ResultCode.NotFound, "Unable to find value in Riak", false))); continue; } var riakObject = new RiakObject(bk.Bucket, bk.Key, result.content.First(), result.vclock); if (result.content.Count > 1) { riakObject.Siblings = result.content .Select(c => new RiakObject(bk.Bucket, bk.Key, c, result.vclock)) .ToList(); } obs.OnNext(new Either <RiakException, RiakObject>(riakObject)); } catch (RiakException riakException) { obs.OnNext(new Either <RiakException, RiakObject>(riakException)); } } obs.OnCompleted(); } catch (Exception exception) { obs.OnError(exception); } return(Disposable.Empty); }); return(observable); }