コード例 #1
0
        public DocumentUpsertTransaction(
            string directory,
            Compression compression,
            DocumentStream documents,
            IWriteSessionFactory writeSessionFactory   = null,
            IDocumentWriteCommand documentWriteCommand = null)
            : this(directory, documents)
        {
            var factory = writeSessionFactory ?? new WriteSessionFactory(directory);

            WriteSession = factory.OpenWriteSession(compression);

            DocumentWriteCommand = documentWriteCommand ?? new DocumentWriteCommand();
        }
コード例 #2
0
ファイル: UpsertTransaction.cs プロジェクト: ksec/resin
        public UpsertTransaction(
            string directory,
            IAnalyzer analyzer,
            Compression compression,
            DocumentStream documents,
            IWriteSessionFactory storeWriterFactory = null)
        {
            long version = Util.GetNextChronologicalFileId();

            Log.InfoFormat("begin writing {0}", version);

            FileStream lockFile;

            if (!Util.TryAquireWriteLock(directory, out lockFile))
            {
                var compoundFileName = Path.Combine(directory, version + ".rdb");

                _compoundFile = new FileStream(
                    compoundFileName,
                    FileMode.CreateNew,
                    FileAccess.Write,
                    FileShare.ReadWrite,
                    4096
                    );
            }
            else
            {
                var  ixFileName = Util.GetIndexFileNamesInChronologicalOrder(directory).FirstOrDefault();
                long dataFileVersion;

                if (ixFileName == null)
                {
                    dataFileVersion = version;
                }
                else
                {
                    dataFileVersion = long.Parse(Path.GetFileNameWithoutExtension(ixFileName));
                }

                var compoundFileName = Path.Combine(directory, dataFileVersion + ".rdb");

                _compoundFile = new FileStream(
                    compoundFileName,
                    FileMode.Append,
                    FileAccess.Write,
                    FileShare.ReadWrite,
                    4096
                    );

                _lockFile = lockFile;
            }

            _directory = directory;
            _analyzer  = analyzer;
            _documents = documents;

            _ix = new BatchInfo
            {
                VersionId           = version,
                Compression         = compression,
                PrimaryKeyFieldName = documents.PrimaryKeyFieldName
            };

            var posFileName = Path.Combine(
                _directory, string.Format("{0}.{1}", _ix.VersionId, "pos"));

            var factory = storeWriterFactory ?? new WriteSessionFactory(directory, _ix);

            _writeSession = factory.OpenWriteSession(_compoundFile);

            _postingsWriter = new PostingsWriter(
                new FileStream(
                    posFileName,
                    FileMode.CreateNew,
                    FileAccess.ReadWrite,
                    FileShare.None,
                    4096,
                    FileOptions.DeleteOnClose
                    ));
        }