Search in sources :

Example 6 with XaDataSourceManager

use of org.neo4j.kernel.impl.transaction.XaDataSourceManager in project graphdb by neo4j-attic.

the class MasterUtil method packResponse.

public static <T> Response<T> packResponse(GraphDatabaseService graphDb, SlaveContext context, T response, Predicate<Long> filter) {
    List<Triplet<String, Long, TxExtractor>> stream = new ArrayList<Triplet<String, Long, TxExtractor>>();
    Set<String> resourceNames = new HashSet<String>();
    XaDataSourceManager dsManager = ((AbstractGraphDatabase) graphDb).getConfig().getTxModule().getXaDataSourceManager();
    for (Pair<String, Long> txEntry : context.lastAppliedTransactions()) {
        String resourceName = txEntry.first();
        final XaDataSource dataSource = dsManager.getXaDataSource(resourceName);
        if (dataSource == null) {
            throw new RuntimeException("No data source '" + resourceName + "' found");
        }
        resourceNames.add(resourceName);
        long masterLastTx = dataSource.getLastCommittedTxId();
        for (long txId = txEntry.other() + 1; txId <= masterLastTx; txId++) {
            if (filter.accept(txId)) {
                final long tx = txId;
                TxExtractor extractor = new TxExtractor() {

                    @Override
                    public ReadableByteChannel extract() {
                        try {
                            return dataSource.getCommittedTransaction(tx);
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        }
                    }

                    @Override
                    public void extract(LogBuffer buffer) {
                        try {
                            dataSource.getCommittedTransaction(tx, buffer);
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        }
                    }
                };
                stream.add(Triplet.of(resourceName, txId, extractor));
            }
        }
    }
    StoreId storeId = ((NeoStoreXaDataSource) dsManager.getXaDataSource(Config.DEFAULT_DATA_SOURCE_NAME)).getStoreId();
    return new Response<T>(response, storeId, TransactionStream.create(resourceNames, stream));
}
Also used : XaDataSourceManager(org.neo4j.kernel.impl.transaction.XaDataSourceManager) Triplet(org.neo4j.helpers.Triplet) ArrayList(java.util.ArrayList) IOException(java.io.IOException) NeoStoreXaDataSource(org.neo4j.kernel.impl.nioneo.xa.NeoStoreXaDataSource) XaDataSource(org.neo4j.kernel.impl.transaction.xaframework.XaDataSource) LogBuffer(org.neo4j.kernel.impl.transaction.xaframework.LogBuffer) StoreId(org.neo4j.kernel.impl.nioneo.store.StoreId) NeoStoreXaDataSource(org.neo4j.kernel.impl.nioneo.xa.NeoStoreXaDataSource) AbstractGraphDatabase(org.neo4j.kernel.AbstractGraphDatabase) HashSet(java.util.HashSet)

Example 7 with XaDataSourceManager

use of org.neo4j.kernel.impl.transaction.XaDataSourceManager in project graphdb by neo4j-attic.

the class TestKernelPanic method panicTest.

@Test
public void panicTest() throws Exception {
    String path = "target/var/testdb";
    AbstractNeo4jTestCase.deleteFileOrDirectory(new File(path));
    EmbeddedGraphDatabase graphDb = new EmbeddedGraphDatabase(path);
    XaDataSourceManager xaDs = graphDb.getConfig().getTxModule().getXaDataSourceManager();
    IllBehavingXaDataSource noob = new IllBehavingXaDataSource();
    xaDs.registerDataSource("noob", noob, UTF8.encode("554342"));
    Panic panic = new Panic();
    graphDb.registerKernelEventHandler(panic);
    org.neo4j.graphdb.Transaction gdbTx = graphDb.beginTx();
    TransactionManager txMgr = graphDb.getConfig().getTxModule().getTxManager();
    Transaction tx = txMgr.getTransaction();
    graphDb.createNode();
    tx.enlistResource(noob.getXaConnection().getXaResource());
    try {
        gdbTx.success();
        gdbTx.finish();
        fail("Should fail");
    } catch (Throwable t) {
        // ok
        for (int i = 0; i < 10 && panic.panic == false; i++) {
            Thread.sleep(1000);
        }
    } finally {
        graphDb.unregisterKernelEventHandler(panic);
    }
    assertTrue(panic.panic);
    graphDb.shutdown();
}
Also used : EmbeddedGraphDatabase(org.neo4j.kernel.EmbeddedGraphDatabase) XaDataSourceManager(org.neo4j.kernel.impl.transaction.XaDataSourceManager) Transaction(javax.transaction.Transaction) TransactionManager(javax.transaction.TransactionManager) File(java.io.File) Test(org.junit.Test)

Aggregations

XaDataSourceManager (org.neo4j.kernel.impl.transaction.XaDataSourceManager)7 XaDataSource (org.neo4j.kernel.impl.transaction.xaframework.XaDataSource)6 AbstractGraphDatabase (org.neo4j.kernel.AbstractGraphDatabase)4 Pair (org.neo4j.helpers.Pair)3 NeoStoreXaDataSource (org.neo4j.kernel.impl.nioneo.xa.NeoStoreXaDataSource)3 File (java.io.File)2 IOException (java.io.IOException)2 ArrayList (java.util.ArrayList)2 Test (org.junit.Test)2 SlaveContext (org.neo4j.com.SlaveContext)2 EmbeddedGraphDatabase (org.neo4j.kernel.EmbeddedGraphDatabase)2 FileInputStream (java.io.FileInputStream)1 ByteBuffer (java.nio.ByteBuffer)1 ReadableByteChannel (java.nio.channels.ReadableByteChannel)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Transaction (javax.transaction.Transaction)1 TransactionManager (javax.transaction.TransactionManager)1 Triplet (org.neo4j.helpers.Triplet)1 StoreId (org.neo4j.kernel.impl.nioneo.store.StoreId)1