Beispiel #1
0
        public void Batch(Action <IStorageActionsAccessor> action)
        {
            if (current.Value != null)
            {
                action(current.Value);
                return;
            }
            disposerLock.EnterReadLock();
            try
            {
                if (disposed)
                {
                    Trace.WriteLine("TransactionalStorage.Batch was called after it was disposed, call was ignored.");
                    return;                     // this may happen if someone is calling us from the finalizer thread, so we can't even throw on that
                }

                Interlocked.Exchange(ref lastUsageTime, DateTime.Now.ToBinary());
                using (tableStroage.BeginTransaction())
                {
                    var storageActionsAccessor = new StorageActionsAccessor(tableStroage, uuidGenerator, DocumentCodecs);
                    current.Value = storageActionsAccessor;
                    action(current.Value);
                    tableStroage.Commit();
                    storageActionsAccessor.InvokeOnCommit();
                    onCommit();
                }
            }
            finally
            {
                disposerLock.ExitReadLock();
                current.Value = null;
            }
        }
Beispiel #2
0
 private void ExecuteBatch(Action <IStorageActionsAccessor> action)
 {
     Interlocked.Exchange(ref lastUsageTime, SystemTime.UtcNow.ToBinary());
     using (tableStroage.BeginTransaction())
     {
         var storageActionsAccessor = new StorageActionsAccessor(tableStroage, uuidGenerator, DocumentCodecs, documentCacher);
         current.Value = storageActionsAccessor;
         action(current.Value);
         storageActionsAccessor.SaveAllTasks();
         tableStroage.Commit();
         storageActionsAccessor.InvokeOnCommit();
     }
 }
Beispiel #3
0
        public void CanOpenAfterCompaction()
        {
            var memoryPersistentSource = new MemoryPersistentSource();
            var tableStorage           = new TableStorage(memoryPersistentSource);

            tableStorage.Initialize();
            tableStorage.BeginTransaction();
            tableStorage.Documents.Put(new RavenJObject
            {
                { "key", "1" },
                { "etag", Guid.NewGuid().ToByteArray() },
                { "modified", SystemTime.UtcNow },
                { "id", 1 },
                { "entityName", "test" }
            }, new byte[512]);

            tableStorage.Documents.Put(new RavenJObject
            {
                { "key", "2" },
                { "etag", Guid.NewGuid().ToByteArray() },
                { "modified", SystemTime.UtcNow },
                { "id", 1 },
                { "entityName", "test" }
            }, new byte[512]);
            tableStorage.Commit();

            tableStorage.BeginTransaction();
            tableStorage.Documents.Remove(new RavenJObject {
                { "key", "1" }
            });
            tableStorage.Commit();

            tableStorage.Compact();


            var remoteManagedStorageState = memoryPersistentSource.CreateRemoteAppDomainState();

            new TableStorage(new MemoryPersistentSource(remoteManagedStorageState.Log)).Initialize();
        }
Beispiel #4
0
 private StorageActionsAccessor ExecuteBatch(Action <IStorageActionsAccessor> action)
 {
     Interlocked.Exchange(ref lastUsageTime, SystemTime.UtcNow.ToBinary());
     using (tableStorage.BeginTransaction())
     {
         var storageActionsAccessor = new StorageActionsAccessor(tableStorage, uuidGenerator, DocumentCodecs, documentCacher);
         if (disableBatchNesting.Value == null)
         {
             current.Value = storageActionsAccessor;
         }
         action(storageActionsAccessor);
         storageActionsAccessor.SaveAllTasks();
         tableStorage.Commit();
         return(storageActionsAccessor);
     }
 }
Beispiel #5
0
        public void Batch(Action <IStorageActionsAccessor> action)
        {
            if (disposerLock.IsReadLockHeld)             // we are currently in a nested Batch call
            {
                if (current.Value != null)               // check again, just to be sure
                {
                    action(current.Value);
                    return;
                }
            }
            disposerLock.EnterReadLock();
            try
            {
                if (disposed)
                {
                    Trace.WriteLine("TransactionalStorage.Batch was called after it was disposed, call was ignored.");
                    return;                     // this may happen if someone is calling us from the finalizer thread, so we can't even throw on that
                }


                Interlocked.Exchange(ref lastUsageTime, SystemTime.Now.ToBinary());
                using (tableStroage.BeginTransaction())
                {
                    var storageActionsAccessor = new StorageActionsAccessor(tableStroage, uuidGenerator, DocumentCodecs, documentCacher);
                    current.Value = storageActionsAccessor;
                    action(current.Value);
                    storageActionsAccessor.SaveAllTasks();
                    tableStroage.Commit();
                    storageActionsAccessor.InvokeOnCommit();
                }
            }
            finally
            {
                disposerLock.ExitReadLock();
                if (disposed == false)
                {
                    current.Value = null;
                }
            }
            onCommit();             // call user code after we exit the lock
        }