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(); }
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 )); }