Exemplo n.º 1
0
        internal List<FailedDocument> InsertDocuments(ICollection<JSONDocument> documents, bool noResponse = false)
        {
            InsertDocumentsOperation insertOperation = new InsertDocumentsOperation();
            insertOperation.Documents = documents.Cast<IJSONDocument>().ToList();
            insertOperation.Database = _database.DatabaseName;
            insertOperation.Collection = _collectionName;
            insertOperation.NoResponse = noResponse;

            InsertDocumentsResponse insertResponse = (InsertDocumentsResponse)_database.ExecutionMapper.InsertDocuments(insertOperation);

            if (!insertResponse.IsSuccessfull)
            {
                if (insertResponse.FailedDocumentsList == null || insertResponse.FailedDocumentsList.Count == 0)
                {
                    throw new DataException(ErrorMessages.GetErrorMessage(insertResponse.ErrorCode, insertResponse.ErrorParams));
                }
                return insertResponse.FailedDocumentsList;
            }
            return new List<FailedDocument>();
        }
Exemplo n.º 2
0
 public void InsertOrUpdateResourceSecurityInformation(string cluster, Common.Security.Interfaces.IResourceItem resourceItem)
 {
     lock (_store)
     {
         IDocumentsWriteOperation insertOperation = new InsertDocumentsOperation();
         //JsonSerializer<IResourceItem> serializer = new JsonSerializer<IResourceItem>();
         IList <IJSONDocument> jsonDocuments = new List <IJSONDocument>();
         JSONDocument          jdoc          = new JSONDocument();
         bool found = false;
         if (resourceItem != null)
         {
             //jdoc.Key = new DocumentKey(configuration.Name);
             found = FindDocument(resourceItem.ResourceId.Name, Alachisoft.NosDB.Core.Util.MiscUtil.SystemCollection.SecurityInformationCollection, out jdoc);
             if (found)
             {
                 jdoc     = JsonSerializer.Serialize <IResourceItem>(resourceItem);
                 jdoc.Key = resourceItem.ResourceId.Name;
                 IDocumentsWriteOperation replaceOperation = new ReplaceDocumentsOperation();
                 replaceOperation.Collection = Alachisoft.NosDB.Core.Util.MiscUtil.SystemCollection.SecurityInformationCollection;
                 replaceOperation.Database   = MiscUtil.SYSTEM_DATABASE;
                 jsonDocuments.Add(jdoc);
                 replaceOperation.Documents = jsonDocuments;
                 _store.ReplaceDocuments(replaceOperation);
                 //TODO for updating document only deleting previous document require some time to wait In Future this operation done with replace operation.
             }
             else
             {
                 jsonDocuments.Clear();
                 jdoc     = JsonSerializer.Serialize <IResourceItem>(resourceItem);
                 jdoc.Key = resourceItem.ResourceId.Name;
                 jsonDocuments.Add(jdoc);
                 insertOperation.Documents  = jsonDocuments;
                 insertOperation.Collection = Alachisoft.NosDB.Core.Util.MiscUtil.SystemCollection.SecurityInformationCollection;
                 insertOperation.Database   = MiscUtil.SYSTEM_DATABASE;
                 _store.InsertDocuments(insertOperation);
             }
         }
     }
 }
Exemplo n.º 3
0
 public void InsertOrUpdateUserInformation(IUser userInfo)
 {
     lock (_store)
     {
         IDocumentsWriteOperation insertOperation = new InsertDocumentsOperation();
         IList <IJSONDocument>    jsonDocuments   = new List <IJSONDocument>();
         JSONDocument             jdoc            = new JSONDocument();
         bool found = false;
         if (userInfo != null)
         {
             //jdoc.Key = new DocumentKey(configuration.Name);
             found = FindDocument(userInfo.Username, Alachisoft.NosDB.Core.Util.MiscUtil.SystemCollection.UserInformationCollection, out jdoc);
             if (found)
             {
                 jdoc = JsonSerializer.Serialize <IUser>(userInfo);
                 IDocumentsWriteOperation replaceOperation = new ReplaceDocumentsOperation();
                 replaceOperation.Collection = Alachisoft.NosDB.Core.Util.MiscUtil.SystemCollection.UserInformationCollection;
                 replaceOperation.Database   = MiscUtil.SYSTEM_DATABASE;
                 jsonDocuments.Add(jdoc);
                 replaceOperation.Documents = jsonDocuments;
                 _store.ReplaceDocuments(replaceOperation);
                 //TODO for updating document only deleting previous document require some time to wait In Future this operation done with replace operation.
             }
             else
             {
                 jsonDocuments.Clear();
                 jdoc     = JsonSerializer.Serialize <IUser>(userInfo);
                 jdoc.Key = userInfo.Username;
                 jsonDocuments.Add(jdoc);
                 insertOperation.Documents  = jsonDocuments;
                 insertOperation.Collection = Alachisoft.NosDB.Core.Util.MiscUtil.SystemCollection.UserInformationCollection;
                 insertOperation.Database   = MiscUtil.SYSTEM_DATABASE;
                 _store.InsertDocuments(insertOperation);
             }
         }
     }
 }
Exemplo n.º 4
0
        // manages status and adds data to collection
        private void InsertData(DataSlice slice)
        {
            List <string> collectionsPersisted = new List <string>();// list of collections that have been persisted, this is useful for status

            try
            {
                if (slice.Data != null)
                {
                    ArrayList documentsList = CompactBinaryFormatter.FromByteBuffer(slice.Data, string.Empty) as ArrayList;

                    InsertDocumentsOperation insertOperation = new InsertDocumentsOperation();
                    insertOperation.Documents  = documentsList.Cast <IJSONDocument>().ToList();
                    insertOperation.Database   = Database;
                    insertOperation.Collection = slice.SliceHeader.Collection;

                    if (documentsList.Count != slice.SliceHeader.DataCount)
                    {
                        if (LoggerManager.Instance.RecoveryLogger != null && LoggerManager.Instance.RecoveryLogger.IsInfoEnabled)
                        {
                            LoggerManager.Instance.RecoveryLogger.Info("DatabaseRecoveryJob.Run()", "Document not same original: " + slice.SliceHeader.DataCount + " restored : " + documentsList.Count);
                        }
                    }
                    int  i       = 0;
                    bool success = false;

                    while (i < 3 && !success)
                    {
                        try
                        {
                            if (LoggerManager.Instance.RecoveryLogger != null && LoggerManager.Instance.RecoveryLogger.IsInfoEnabled)
                            {
                                LoggerManager.Instance.RecoveryLogger.Info("DatabaseRecoveryJob.Run()", slice.SliceHeader.Collection + "_" + slice.SliceHeader.DataCount + " Insrt op" + i + " send at " + DateTime.Now);
                            }

                            InsertDocumentsResponse insertResponse = (InsertDocumentsResponse)_context.TopologyImpl.InsertDocuments(insertOperation);

                            if (!insertResponse.IsSuccessfull)
                            {
                                i++;
                                success          = false;
                                _failedDocuments = _failedDocuments.Union(insertResponse.FailedDocumentsList).ToList();

                                if (LoggerManager.Instance.RecoveryLogger != null && LoggerManager.Instance.RecoveryLogger.IsInfoEnabled)
                                {
                                    LoggerManager.Instance.RecoveryLogger.Info("DatabaseRecoveryJob.Run()", "ErrorCode: " + insertResponse.ErrorCode + "\t Error: " + insertResponse.Error + " \tFailed Documents Count: " + _failedDocuments.Count);
                                }

                                // will think of something to do with this failure
                                List <IJSONDocument> retryList    = new List <IJSONDocument>();
                                List <IJSONDocument> originalList = insertOperation.Documents.ToList();
                                foreach (FailedDocument failedDoc in insertResponse.FailedDocumentsList)
                                {
                                    foreach (IJSONDocument orgDoc in originalList)
                                    {
                                        if (orgDoc.Key.Equals(failedDoc.DocumentKey))
                                        {
                                            retryList.Add(orgDoc);
                                        }
                                    }
                                }

                                insertOperation.Documents = retryList;
                            }
                            else
                            {
                                success = true;
                            }
                        }
                        catch (Exception exp)
                        {
                            if (LoggerManager.Instance.RecoveryLogger != null && LoggerManager.Instance.RecoveryLogger.IsErrorEnabled)
                            {
                                LoggerManager.Instance.RecoveryLogger.Error("DatabaseRecoveryJob.Run() ", slice.SliceHeader.Collection + " " + exp.ToString());
                            }
                            i++;
                            success = false;
                            // Extreme Hack
                            Thread.Sleep(5000);
                        }
                    }
                }
                else
                if (LoggerManager.Instance.RecoveryLogger != null && LoggerManager.Instance.RecoveryLogger.IsErrorEnabled)
                {
                    LoggerManager.Instance.RecoveryLogger.Error("DatabaseRecoveryJob.Restore()", "slice.Data is null " + slice.HeaderSize.ToString());
                }

                if (!collectionsPersisted.Contains(slice.SliceHeader.Collection))
                {
                    collectionsPersisted.Add(slice.SliceHeader.Collection);

                    ExecutionStatus.Status = RecoveryStatus.Executing;
                    ExecutionStatus.PercentageExecution = collectionsPersisted.Count / Collections.Count;//[M_NOTE] rudementary logic, change this
                    ExecutionStatus.MessageTime         = DateTime.Now;
                    ExecutionStatus.Message             = "Restoring " + Database + "_" + slice.SliceHeader.Collection;
                }
            }
            catch (Exception ex)
            {
                if (LoggerManager.Instance.RecoveryLogger != null && LoggerManager.Instance.RecoveryLogger.IsErrorEnabled)
                {
                    LoggerManager.Instance.RecoveryLogger.Error("DatabaseRecoveryJob.Run() ", slice.SliceHeader.Collection + " " + ex.ToString());
                }
            }
        }