예제 #1
0
        internal static void ClearAllDocuments(this IClient client)
        {
            var query = new QuerySystemViewRequest("_all_docs");
            var response = client.Views.QueryAsync<dynamic>(query).Result;

            if (!response.IsEmpty)
            {
                var bulkRequest = new BulkRequest();

                foreach (var row in response.Rows)
                    bulkRequest.Delete(row.Id, row.Value.rev.ToString());
                
                client.Documents.BulkAsync(bulkRequest).Wait();
            }
        }
예제 #2
0
 public void CleanupDatabase()
 {
     var view = this.db.Views.QueryAsync(new QueryViewRequest("person", "all_rev")).Result;
     var request = new BulkRequest();
     if (view.TotalRows > 0)
     {
         var rows = view.Rows.Select(x => new
             {
                 Id = x.Id,
                 Rev = x.Value.TrimStart('\"').TrimEnd('\"'),
             });
         foreach (var row in rows)
         {
             request = request.Delete(row.Id, row.Rev);
         }
         /*
         rows.Batch(1000).ForEach(x =>
             {
                 Task.WaitAll(x.Select(w => this.db.Documents.DeleteAsync(new DeleteDocumentRequest(w.Id, w.Rev))).ToArray());
             });
             */
     }
     this.db.Documents.BulkAsync(request).Wait();
 }
예제 #3
0
        private static void BulkDelete(IMyCouchClient client, ViewQueryResponse<dynamic> response)
        {
            if (response.IsEmpty)
                return;

            var bulkRequest = new BulkRequest();

            foreach (var row in response.Rows)
            {
                if (row.Id.ToLower() == "_design/_replicator")
                    continue;

                bulkRequest.Delete(row.Id, row.Value.rev.ToString());
            }

            if(!bulkRequest.IsEmpty)
                client.Documents.BulkAsync(bulkRequest).Wait();
        }
예제 #4
0
        public async Task<BatchResponse> Store(string bucketName, BatchSet batch)
        {
            using (var client = new MyCouchClient(DbServerUrl, bucketName))
            {

                var dbExists= await client.Database.HeadAsync();
                if (dbExists.IsSuccess)
                {
                    BulkRequest bulkRequest = new BulkRequest();

                    DateTime start = DateTime.Now;
                    int size = 0;
                    SiaqodbDocument crObjForUpdateViews = null;
                    if (batch.ChangedDocuments != null)
                    {
                        foreach (SiaqodbDocument obj in batch.ChangedDocuments)
                        {
                            if (obj != null)
                            {
                                if (crObjForUpdateViews == null)
                                    crObjForUpdateViews = obj;

                                await CheckTagsViews(client, bucketName, obj.Tags);
                                CouchDBDocument doc = Mapper.ToCouchDBDoc(obj);
                                var serializedObject = client.Serializer.Serialize<CouchDBDocument>(doc);
                                bulkRequest.Include(serializedObject);
                                size += serializedObject.Length;
                            }
                        }
                    }
                    if (batch.DeletedDocuments != null)
                    {
                        foreach (DeletedDocument obj in batch.DeletedDocuments)
                        {
                            if (obj != null)
                            {
                                if (obj.Version != null)//otherwise means is a non-existing object
                                {
                                    bulkRequest.Delete(obj.Key, obj.Version);
                                }
                            }

                        }
                    }
                    var response = await client.Documents.BulkAsync(bulkRequest);
                    if (response.IsSuccess)
                    {
                        var cnorResponse = new BatchResponse();
                        if (response.Rows != null)
                        {
                            cnorResponse.BatchItemResponses = new List<BatchItemResponse>();
                            SyncLogItem syncLogItem = new SyncLogItem();
                            syncLogItem.KeyVersion = new Dictionary<string, string>();
                            foreach (var row in response.Rows)
                            {
                                BatchItemResponse wresp = new BatchItemResponse();
                                if (!string.IsNullOrEmpty(row.Error))
                                {
                                    cnorResponse.ItemsWithErrors++;
                                }
                                wresp.Error = row.Error;
                                wresp.ErrorDesc = row.Reason;
                                wresp.Key = row.Id;
                                wresp.Version = row.Rev;
                                cnorResponse.BatchItemResponses.Add(wresp);
                                if (string.IsNullOrEmpty(row.Error))
                                {
                                    syncLogItem.KeyVersion.Add(row.Id, row.Rev);
                                }
                            }
                            if (syncLogItem.KeyVersion.Count > 0)
                            {
                                syncLogItem.TimeInserted = DateTime.UtcNow;
                                using (var clientLog = new MyCouchClient(DbServerUrl, SyncLogBucket))
                                {
                                    string serLogItem = Newtonsoft.Json.JsonConvert.SerializeObject(syncLogItem);
                                    var logResp = await clientLog.Documents.PostAsync(serLogItem);
                                    cnorResponse.UploadAnchor = logResp.Id;
                                }
                            }
                        }
                        if (crObjForUpdateViews != null)
                        {
                            await this.StartRebuildViews(client, crObjForUpdateViews);
                        }

                        return cnorResponse;
                    }
                    else CheckBucketNotFound(bucketName, response);
                }
                else if (dbExists.StatusCode == System.Net.HttpStatusCode.NotFound)
                {
                    throw new BucketNotFoundException(bucketName);
                }
                return null;

            }
        }