Exemple #1
0
 public TransactionFacade(TransitionalPeriodTransactionMessContainer kernel, QueryExecutionEngine engine, GraphDatabaseQueryService queryService, TransactionRegistry registry, LogProvider logProvider)
 {
     this._kernel       = kernel;
     this._engine       = engine;
     this._queryService = queryService;
     this._registry     = registry;
     this._logProvider  = logProvider;
 }
Exemple #2
0
 internal TransactionHandle(TransitionalPeriodTransactionMessContainer txManagerFacade, QueryExecutionEngine engine, GraphDatabaseQueryService queryService, TransactionRegistry registry, TransactionUriScheme uriScheme, bool implicitTransaction, LoginContext loginContext, long customTransactionTimeout, LogProvider logProvider)
 {
     this._txManagerFacade          = txManagerFacade;
     this._engine                   = engine;
     this._queryService             = queryService;
     this._registry                 = registry;
     this._uriScheme                = uriScheme;
     this._type                     = implicitTransaction ? Transaction_Type.@implicit : Transaction_Type.@explicit;
     this._loginContext             = loginContext;
     this._customTransactionTimeout = customTransactionTimeout;
     this._log = logProvider.getLog(this.GetType());
     this._id  = registry.Begin(this);
 }
Exemple #3
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldLogMessageIfCommitErrorOccurs() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldLogMessageIfCommitErrorOccurs()
        {
            // given
            TransitionalPeriodTransactionMessContainer kernel             = MockKernel();
            TransitionalTxManagementKernelTransaction  transactionContext = kernel.NewTransaction(@explicit, AUTH_DISABLED, -1);

            doThrow(new System.NullReferenceException()).when(transactionContext).commit();

            LogProvider logProvider = mock(typeof(LogProvider));
            Log         log         = mock(typeof(Log));

            when(logProvider.GetLog(typeof(TransactionHandle))).thenReturn(log);

            TransactionRegistry registry = mock(typeof(TransactionRegistry));

            QueryExecutionEngine engine = mock(typeof(QueryExecutionEngine));
            Result executionResult      = mock(typeof(Result));
            TransactionalContext transactionalContext = PrepareKernelWithQuerySession(kernel);

            when(engine.ExecuteQuery("query", NoParams, transactionalContext)).thenReturn(executionResult);
            when(registry.Begin(any(typeof(TransactionHandle)))).thenReturn(1337L);
            GraphDatabaseQueryService queryService = mock(typeof(GraphDatabaseQueryService));
            TransactionHandle         handle       = new TransactionHandle(kernel, engine, queryService, registry, uriScheme, false, AUTH_DISABLED, anyLong(), logProvider);
            ExecutionResultSerializer output       = mock(typeof(ExecutionResultSerializer));

            // when
            Statement statement = new Statement("query", map(), false, (ResultDataContent[])null);

            handle.Commit(statements(statement), output, mock(typeof(HttpServletRequest)));

            // then
            verify(log).error(eq("Failed to commit transaction."), any(typeof(System.NullReferenceException)));
            verify(registry).forget(1337L);

            InOrder outputOrder = inOrder(output);

            outputOrder.verify(output).statementResult(executionResult, false, ( ResultDataContent[] )null);
            outputOrder.verify(output).notifications(anyCollectionOf(typeof(Notification)));
            outputOrder.verify(output).errors(argThat(HasErrors(Org.Neo4j.Kernel.Api.Exceptions.Status_Transaction.TransactionCommitFailed)));
            outputOrder.verify(output).finish();
            verifyNoMoreInteractions(output);
        }
Exemple #4
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldResumeTransactionWhenExecutingStatementsOnSecondRequest() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldResumeTransactionWhenExecutingStatementsOnSecondRequest()
        {
            // given
            TransitionalPeriodTransactionMessContainer kernel             = MockKernel();
            TransitionalTxManagementKernelTransaction  transactionContext = kernel.NewTransaction(@explicit, AUTH_DISABLED, -1);

            TransactionRegistry  registry             = mock(typeof(TransactionRegistry));
            QueryExecutionEngine executionEngine      = mock(typeof(QueryExecutionEngine));
            TransactionalContext transactionalContext = PrepareKernelWithQuerySession(kernel);

            when(registry.Begin(any(typeof(TransactionHandle)))).thenReturn(1337L);
            TransactionHandle         handle = GetTransactionHandle(kernel, executionEngine, registry);
            ExecutionResultSerializer output = mock(typeof(ExecutionResultSerializer));

            handle.Execute(statements(new Statement("query", map(), false, (ResultDataContent[])null)), output, mock(typeof(HttpServletRequest)));
            reset(transactionContext, registry, executionEngine, output);
            Result executionResult = mock(typeof(Result));

            when(executionEngine.ExecuteQuery("query", NoParams, transactionalContext)).thenReturn(executionResult);

            // when
            handle.Execute(statements(new Statement("query", map(), false, (ResultDataContent[])null)), output, mock(typeof(HttpServletRequest)));

            // then
            InOrder order = inOrder(transactionContext, registry, executionEngine);

            order.verify(transactionContext).resumeSinceTransactionsAreStillThreadBound();
            order.verify(executionEngine).executeQuery("query", NoParams, transactionalContext);
            order.verify(transactionContext).suspendSinceTransactionsAreStillThreadBound();
            order.verify(registry).release(1337L, handle);

            InOrder outputOrder = inOrder(output);

            outputOrder.verify(output).transactionCommitUri(uriScheme.txCommitUri(1337));
            outputOrder.verify(output).statementResult(executionResult, false, ( ResultDataContent[] )null);
            outputOrder.verify(output).notifications(anyCollectionOf(typeof(Notification)));
            outputOrder.verify(output).transactionStatus(anyLong());
            outputOrder.verify(output).errors(argThat(HasNoErrors()));
            outputOrder.verify(output).finish();
            verifyNoMoreInteractions(output);
        }
        internal void Commit(Transaction transaction, IList <ITableSource> visibleTables,
                             IEnumerable <ITableSource> selectedFromTables,
                             IEnumerable <IMutableTable> touchedTables, TransactionRegistry journal)
        {
            var state = new TransactionWork(this, transaction, selectedFromTables, touchedTables, journal);

            // Exit early if nothing changed (this is a Read-only transaction)
            if (!state.HasChanges)
            {
                CloseTransaction(state.Transaction);
                return;
            }

            lock (commitLock) {
                var changedTablesList = state.Commit(objectStates);

                // Flush the journals up to the minimum commit id for all the tables
                // that this transaction changed.
                long minCommitId = Database.TransactionFactory.OpenTransactions.MinimumCommitId(null);
                foreach (var master in changedTablesList)
                {
                    master.MergeChanges(minCommitId);
                }
                int nsjsz = objectStates.Count;
                for (int i = nsjsz - 1; i >= 0; --i)
                {
                    var namespaceJournal = objectStates[i];
                    // Remove if the commit id for the journal is less than the minimum
                    // commit id
                    if (namespaceJournal.CommitId < minCommitId)
                    {
                        objectStates.RemoveAt(i);
                    }
                }

                // Set a check point in the store system.  This means that the
                // persistance state is now stable.
                StoreSystem.SetCheckPoint();
            }
        }
Exemple #6
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldCommitTransactionAndTellRegistryToForgetItsHandle() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldCommitTransactionAndTellRegistryToForgetItsHandle()
        {
            // given
            TransitionalPeriodTransactionMessContainer kernel             = MockKernel();
            TransitionalTxManagementKernelTransaction  transactionContext = kernel.NewTransaction(@explicit, AUTH_DISABLED, -1);

            TransactionRegistry registry = mock(typeof(TransactionRegistry));

            QueryExecutionEngine engine = mock(typeof(QueryExecutionEngine));
            TransactionalContext transactionalContext = PrepareKernelWithQuerySession(kernel);
            Result result = mock(typeof(Result));

            when(engine.ExecuteQuery("query", NoParams, transactionalContext)).thenReturn(result);
            when(registry.Begin(any(typeof(TransactionHandle)))).thenReturn(1337L);
            GraphDatabaseQueryService queryService = mock(typeof(GraphDatabaseQueryService));
            TransactionHandle         handle       = new TransactionHandle(kernel, engine, queryService, registry, uriScheme, false, AUTH_DISABLED, anyLong(), NullLogProvider.Instance);
            ExecutionResultSerializer output       = mock(typeof(ExecutionResultSerializer));

            // when
            Statement statement = new Statement("query", map(), false, (ResultDataContent[])null);

            handle.Commit(statements(statement), output, mock(typeof(HttpServletRequest)));

            // then
            InOrder transactionOrder = inOrder(transactionContext, registry);

            transactionOrder.verify(transactionContext).commit();
            transactionOrder.verify(registry).forget(1337L);

            InOrder outputOrder = inOrder(output);

            outputOrder.verify(output).statementResult(result, false, ( ResultDataContent[] )null);
            outputOrder.verify(output).notifications(anyCollectionOf(typeof(Notification)));
            outputOrder.verify(output).errors(argThat(HasNoErrors()));
            outputOrder.verify(output).finish();
            verifyNoMoreInteractions(output);
        }
Exemple #7
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldInterruptTransaction()
        public virtual void ShouldInterruptTransaction()
        {
            // given
            TransitionalPeriodTransactionMessContainer kernel = MockKernel();
            TransitionalTxManagementKernelTransaction  tx     = mock(typeof(TransitionalTxManagementKernelTransaction));

            when(kernel.NewTransaction(any(typeof(Transaction_Type)), any(typeof(LoginContext)), anyLong())).thenReturn(tx);
            TransactionRegistry registry = mock(typeof(TransactionRegistry));

            when(registry.Begin(any(typeof(TransactionHandle)))).thenReturn(1337L);
            QueryExecutionEngine executionEngine = mock(typeof(QueryExecutionEngine));
            TransactionHandle    handle          = GetTransactionHandle(kernel, executionEngine, registry);

            ExecutionResultSerializer output = mock(typeof(ExecutionResultSerializer));
            Statement statement = new Statement("MATCH (n) RETURN n", map(), false, (ResultDataContent[])null);

            handle.Execute(statements(statement), output, mock(typeof(HttpServletRequest)));

            // when
            handle.Terminate();

            // then
            verify(tx, times(1)).terminate();
        }
Exemple #8
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldCreateTransactionContextOnlyWhenFirstNeeded() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldCreateTransactionContextOnlyWhenFirstNeeded()
        {
            // given
            TransitionalPeriodTransactionMessContainer kernel = MockKernel();
            ExecutionResultSerializer output   = mock(typeof(ExecutionResultSerializer));
            TransactionRegistry       registry = mock(typeof(TransactionRegistry));

            // when
            QueryExecutionEngine engine = mock(typeof(QueryExecutionEngine));
            Result executionResult      = mock(typeof(Result));
            TransactionalContext transactionalContext = PrepareKernelWithQuerySession(kernel);

            when(engine.ExecuteQuery("query", NoParams, transactionalContext)).thenReturn(executionResult);
            when(registry.Begin(any(typeof(TransactionHandle)))).thenReturn(1337L);
            GraphDatabaseQueryService queryService = mock(typeof(GraphDatabaseQueryService));
            TransactionHandle         handle       = new TransactionHandle(kernel, engine, queryService, registry, uriScheme, true, AUTH_DISABLED, anyLong(), NullLogProvider.Instance);

            // then
            verifyZeroInteractions(kernel);

            // when
            handle.Execute(statements(new Statement("query", map(), false, (ResultDataContent[])null)), output, mock(typeof(HttpServletRequest)));

            // then
            verify(kernel).newTransaction(any(typeof(Transaction_Type)), any(typeof(LoginContext)), anyLong());

            InOrder outputOrder = inOrder(output);

            outputOrder.verify(output).transactionCommitUri(uriScheme.txCommitUri(1337));
            outputOrder.verify(output).statementResult(executionResult, false, ( ResultDataContent[] )null);
            outputOrder.verify(output).notifications(anyCollectionOf(typeof(Notification)));
            outputOrder.verify(output).transactionStatus(anyLong());
            outputOrder.verify(output).errors(argThat(HasNoErrors()));
            outputOrder.verify(output).finish();
            verifyNoMoreInteractions(output);
        }
        internal void Rollback(Transaction transaction, IList <IMutableTable> touchedTables, TransactionRegistry journal)
        {
            // Go through the journal.  Any rows added should be marked as deleted
            // in the respective master table.

            // Get individual journals for updates made to tables in this
            // transaction.
            // The list MasterTableJournal
            var journalList = new List <TableEventRegistry>();

            for (int i = 0; i < touchedTables.Count; ++i)
            {
                var tableJournal = touchedTables[i].EventRegistry;
                if (tableJournal.EventCount > 0)                 // Check the journal has entries.
                {
                    journalList.Add(tableJournal);
                }
            }

            var changedTables = journalList.ToArray();

            lock (commitLock) {
                try {
                    // For each change to each table,
                    foreach (var changeJournal in changedTables)
                    {
                        // The table the changes were made to.
                        int tableId = changeJournal.TableId;
                        // Get the master table with this table id.
                        var master = GetTableSource(tableId);
                        // Commit the rollback on the table.
                        master.RollbackTransactionChange(changeJournal);
                    }
                } finally {
                    // Notify the conglomerate that this transaction has closed.
                    CloseTransaction(transaction);
                }
            }
        }
Exemple #10
0
        private TransactionHandle GetTransactionHandle(TransitionalPeriodTransactionMessContainer kernel, QueryExecutionEngine executionEngine, TransactionRegistry registry)
        {
            GraphDatabaseQueryService queryService = mock(typeof(GraphDatabaseQueryService));

            return(new TransactionHandle(kernel, executionEngine, queryService, registry, uriScheme, true, AUTH_DISABLED, anyLong(), NullLogProvider.Instance));
        }