コード例 #1
0
ファイル: StorageExporter.cs プロジェクト: pali88/ravendb
        private void WriteDocuments(JsonTextWriter jsonWriter)
        {
            long totalDococCount  = 0;
            long currentDocsCount = 0;
            Etag currLastEtag     = Etag.Empty;

            storage.Batch(accsesor => totalDococCount = accsesor.Documents.GetDocumentsCount());
            try
            {
                CancellationToken ct = new CancellationToken();
                do
                {
                    storage.Batch(accsesor =>
                    {
                        var docs = accsesor.Documents.GetDocumentsAfter(currLastEtag, BatchSize, ct);
                        foreach (var doc in docs)
                        {
                            doc.ToJson(true).WriteTo(jsonWriter);
                        }
                        currLastEtag      = docs.Last().Etag;
                        currentDocsCount += docs.Count();
                        ReportProgress("documents", currentDocsCount, totalDococCount);
                    });
                } while (totalDococCount > currentDocsCount);
            }
            catch (Exception e)
            {
                ConsoleUtils.PrintErrorAndFail("Failed to export documents, error:" + e.Message);
            }
        }
コード例 #2
0
        public EsentExportOperation(string dataDirPath)
        {
            var dbFullPath = Path.Combine(dataDirPath, "Data");

            try
            {
                Api.JetCreateInstance(out instance, "instance");
                var ravenConfiguration = new RavenConfiguration();
                ravenConfiguration.DataDirectory = dataDirPath;
                ravenConfiguration.Storage.PreventSchemaUpdate = true;
                ITransactionalStorage storage;
                var success = StorageExporter.TryToCreateTransactionalStorage(ravenConfiguration, out storage);
                if (!success)
                {
                    ConsoleUtils.PrintErrorAndFail("Failed to create transactional storage");
                }
                var configurator = new TransactionalStorageConfigurator(ravenConfiguration, (TransactionalStorage)storage);
                configurator.ConfigureInstance(instance, dataDirPath);
                storage.Dispose();
                Api.JetInit(ref instance);
                Api.JetBeginSession(instance, out sesid, null, null);
                Api.JetAttachDatabase(sesid, dbFullPath, AttachDatabaseGrbit.None);
                Api.JetOpenDatabase(sesid, dbFullPath, null, out dbid, OpenDatabaseGrbit.None);
            }
            catch (Exception e)
            {
                ConsoleUtils.PrintErrorAndFail(e.Message, e.StackTrace);
            }
        }
コード例 #3
0
ファイル: StorageExporter.cs プロジェクト: pali88/ravendb
 private void CreateTransactionalStorage(InMemoryRavenConfiguration ravenConfiguration)
 {
     if (String.IsNullOrEmpty(ravenConfiguration.DataDirectory) == false && Directory.Exists(ravenConfiguration.DataDirectory))
     {
         try
         {
             TryToCreateTransactionalStorage(ravenConfiguration, out storage);
         }
         catch (UnauthorizedAccessException uae)
         {
             ConsoleUtils.PrintErrorAndFail(String.Format("Failed to initialize the storage it is probably been locked by RavenDB.\nError message:\n{0}", uae.Message), uae.StackTrace);
         }
         catch (InvalidOperationException ioe)
         {
             ConsoleUtils.PrintErrorAndFail(String.Format("Failed to initialize the storage it is probably been locked by RavenDB.\nError message:\n{0}", ioe.Message), ioe.StackTrace);
         }
         catch (Exception e)
         {
             ConsoleUtils.PrintErrorAndFail(e.Message, e.StackTrace);
             return;
         }
         return;
     }
     ConsoleUtils.PrintErrorAndFail(string.Format("Could not detect storage file under the given directory:{0}", ravenConfiguration.DataDirectory));
 }
コード例 #4
0
        private void WriteDocuments(JsonTextWriter jsonWriter)
        {
            long totalDocsCount   = 0;
            long currentDocsCount = 0;
            long previesDocsCount = 0;
            Etag currLastEtag     = DocumentsStartEtag;

            if (DocumentsStartEtag != Etag.Empty)
            {
                ConsoleUtils.ConsoleWriteLineWithColor(ConsoleColor.Yellow, "Starting to export documents as of etag={0}\n" +
                                                       "TotalDocCount doesn't substract skipped items\n", DocumentsStartEtag);
                currLastEtag.DecrementBy(1);
            }
            storage.Batch(accsesor => totalDocsCount = accsesor.Documents.GetDocumentsCount());
            try
            {
                CancellationToken ct = new CancellationToken();
                do
                {
                    previesDocsCount = currentDocsCount;
                    storage.Batch(accsesor =>
                    {
                        var docs = accsesor.Documents.GetDocumentsAfter(currLastEtag, BatchSize, ct);
                        foreach (var doc in docs)
                        {
                            doc.ToJson(true).WriteTo(jsonWriter);
                        }
                        var last = docs.LastOrDefault();
                        if (last != null)
                        {
                            currLastEtag      = last.Etag;
                            currentDocsCount += docs.Count();
                            ReportProgress("documents", currentDocsCount, totalDocsCount);
                        }
                    });
                } while (currentDocsCount > previesDocsCount);
            }
            catch (Exception e)
            {
                ConsoleUtils.PrintErrorAndFail("Failed to export documents, error:" + e.Message);
            }
        }