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