<includeTestSourceDirectory>true</includeTestSourceDirectory>
<sourceDirectory>${project.basedir}</sourceDirectory>
<includes>**\/*.java,**\/*.xml,**\/*.ini,**\/*.sh,**\/*.bat</includes>
- <excludes>**\/target\/,**\/bin\/,**\/target-ide\/,**\/${jmxGeneratorPath}\/,**\/${salGeneratorPath}\/</excludes>
+ <excludes>**\/target\/,**\/bin\/,**\/target-ide\/,**\/${jmxGeneratorPath}\/,**\/${salGeneratorPath}\/,**\/xtend-gen\/</excludes>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
</plugin>
- <plugin>
- <!-- FIXME: BUG-272: remove this configuration override -->
- <!-- replaced with new configuration -->
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-checkstyle-plugin</artifactId>
- <version>2.12</version>
- <configuration>
- <failsOnError>false</failsOnError>
- <failOnViolation>false</failOnViolation>
- <configLocation>checkstyle-logging.xml</configLocation>
- <consoleOutput>true</consoleOutput>
- <includeTestSourceDirectory>true</includeTestSourceDirectory>
- <sourceDirectory>${project.basedir}</sourceDirectory>
- <includes>**\/*.java,**\/*.xml,**\/*.ini,**\/*.sh,**\/*.bat,**\/*.yang</includes>
- <excludes>**\/target\/,**\/bin\/,**\/target-ide\/,**\/${jmxGeneratorPath}\/,**\/${salGeneratorPath}\/</excludes>
- </configuration>
- <dependencies>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>checkstyle-logging</artifactId>
- <version>${yangtools.version}</version>
- </dependency>
- </dependencies>
- <executions>
- <execution>
- <goals>
- <goal>check</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadWriteTransaction;
import org.opendaylight.controller.sal.core.spi.data.DOMStoreTransactionFactory;
import org.opendaylight.controller.sal.core.spi.data.DOMStoreWriteTransaction;
-import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
*
* Subtransaction for reading is selected by supplied
* {@link LogicalDatastoreType} as parameter for
- * {@link DOMDataReadTransaction#read(LogicalDatastoreType, InstanceIdentifier)}
+ * {@link DOMDataReadTransaction#read(LogicalDatastoreType,org.opendaylight.yangtools.yang.data.api.InstanceIdentifier)}
* .
*
* Id of returned transaction is retrieved via
*
* <ul>
* <li>
- * {@link DOMDataWriteTransaction#put(LogicalDatastoreType, InstanceIdentifier, NormalizedNode)}
+ * {@link DOMDataWriteTransaction#put(LogicalDatastoreType, org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode)}
* - backing subtransaction is selected by {@link LogicalDatastoreType},
- * {@link DOMStoreWriteTransaction#write(InstanceIdentifier, NormalizedNode)}
+ * {@link DOMStoreWriteTransaction#write(org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode)}
* is invoked on selected subtransaction.
* <li>
- * {@link DOMDataWriteTransaction#merge(LogicalDatastoreType, InstanceIdentifier, NormalizedNode)}
+ * {@link DOMDataWriteTransaction#merge(LogicalDatastoreType, org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode)}
* - backing subtransaction is selected by {@link LogicalDatastoreType},
- * {@link DOMStoreWriteTransaction#merge(InstanceIdentifier, NormalizedNode)}
+ * {@link DOMStoreWriteTransaction#merge(org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode)}
* is invoked on selected subtransaction.
* <li>
- * {@link DOMDataWriteTransaction#delete(LogicalDatastoreType, InstanceIdentifier)
+ * {@link DOMDataWriteTransaction#delete(LogicalDatastoreType, org.opendaylight.yangtools.yang.data.api.InstanceIdentifier)
* - backing subtransaction is selected by {@link LogicalDatastoreType},
- * {@link DOMStoreWriteTransaction#delete(InstanceIdentifier)} is invoked on
+ * {@link DOMStoreWriteTransaction#delete(org.opendaylight.yangtools.yang.data.api.InstanceIdentifier)} is invoked on
* selected subtransaction.
* <li> {@link DOMDataWriteTransaction#commit()} - results in invoking
* {@link DOMStoreWriteTransaction#ready()}, gathering all resulting cohorts
*
* <ul>
* <li>
- * {@link DOMDataWriteTransaction#read(LogicalDatastoreType, InstanceIdentifier)}
+ * {@link DOMDataWriteTransaction#read(LogicalDatastoreType, org.opendaylight.yangtools.yang.data.api.InstanceIdentifier)}
* - backing subtransaction is selected by {@link LogicalDatastoreType},
- * {@link DOMStoreWriteTransaction#read(InstanceIdentifier)} is invoked on
+ * {@link DOMStoreWriteTransaction#read(org.opendaylight.yangtools.yang.data.api.InstanceIdentifier)} is invoked on
* selected subtransaction.
* <li>
- * {@link DOMDataWriteTransaction#put(LogicalDatastoreType, InstanceIdentifier, NormalizedNode)}
+ * {@link DOMDataWriteTransaction#put(LogicalDatastoreType, org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode)}
* - backing subtransaction is selected by {@link LogicalDatastoreType},
- * {@link DOMStoreWriteTransaction#write(InstanceIdentifier, NormalizedNode)}
+ * {@link DOMStoreWriteTransaction#write(org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode)}
* is invoked on selected subtransaction.
* <li>
- * {@link DOMDataWriteTransaction#merge(LogicalDatastoreType, InstanceIdentifier, NormalizedNode)}
+ * {@link DOMDataWriteTransaction#merge(LogicalDatastoreType, org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode)}
* - backing subtransaction is selected by {@link LogicalDatastoreType},
- * {@link DOMStoreWriteTransaction#merge(InstanceIdentifier, NormalizedNode)}
+ * {@link DOMStoreWriteTransaction#merge(org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode)}
* is invoked on selected subtransaction.
* <li>
- * {@link DOMDataWriteTransaction#delete(LogicalDatastoreType, InstanceIdentifier)
+ * {@link DOMDataWriteTransaction#delete(LogicalDatastoreType, org.opendaylight.yangtools.yang.data.api.InstanceIdentifier)
* - backing subtransaction is selected by {@link LogicalDatastoreType},
- * {@link DOMStoreWriteTransaction#delete(InstanceIdentifier)} is invoked on
+ * {@link DOMStoreWriteTransaction#delete(org.opendaylight.yangtools.yang.data.api.InstanceIdentifier)} is invoked on
* selected subtransaction.
* <li> {@link DOMDataWriteTransaction#commit()} - results in invoking
* {@link DOMStoreWriteTransaction#ready()}, gathering all resulting cohorts
import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionChain;
import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
import com.google.common.util.concurrent.ListenableFuture;
/**
- * NormalizedNode implementation of {@link TransactionChain} which is backed
+ * NormalizedNode implementation of {@link org.opendaylight.controller.md.sal.common.api.data.TransactionChain} which is backed
* by several {@link DOMStoreTransactionChain} differentiated by provided
- * {@link LogicalDatastoreType} type.
+ * {@link org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType} type.
*
*/
public class DOMDataBrokerTransactionChainImpl extends AbstractDOMForwardedTransactionFactory<DOMStoreTransactionChain>
import java.util.EventListener;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
/**
* failure is visible to client code.
*
* This is internal API for MD-SAL implementations, for consumer facing error
- * listeners see {@link TransactionChainListener}.
+ * listeners see {@link org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener}.
*
*/
interface DOMDataCommitErrorListener extends EventListener {
/**
* Executor of Three Phase Commit coordination for
* {@link DOMDataWriteTransaction} transactions.
- *
+ *
* Implementations are responsible for executing implementation of three-phase
* commit protocol on supplied {@link DOMStoreThreePhaseCommitCohort}s.
- *
- *
+ *
+ *
*/
interface DOMDataCommitExecutor {
/**
* Submits supplied transaction to be executed in context of provided
* cohorts.
- *
+ *
* Transaction is used only as a context, cohorts should be associated with
* this transaction.
- *
+ *
* @param tx
* Transaction to be used as context for reporting
* @param cohort
* @return ListenableFuture which contains RpcResult with
* {@link TransactionStatus#COMMITED} if commit coordination on
* cohorts finished successfully.
- *
+ *
*/
ListenableFuture<RpcResult<TransactionStatus>> submit(DOMDataWriteTransaction tx,
Iterable<DOMStoreThreePhaseCommitCohort> cohort, Optional<DOMDataCommitErrorListener> listener);
import com.google.common.util.concurrent.ListenableFuture;
/**
- *
+ *
* Implementation prototype of commit method for
* {@link DOMForwardedWriteTransaction}.
- *
+ *
*/
public interface DOMDataCommitImplementation {
/**
* User-supplied implementation of {@link DOMDataWriteTransaction#commit()}
* for transaction.
- *
+ *
* Callback invoked when {@link DOMDataWriteTransaction#commit()} is invoked
* on transaction created by this factory.
- *
+ *
* @param transaction
* Transaction on which {@link DOMDataWriteTransaction#commit()}
* was invoked.
* @param cohorts
* Iteration of cohorts for subtransactions associated with
* commited transaction.
- *
+ *
*/
ListenableFuture<RpcResult<TransactionStatus>> commit(final DOMDataWriteTransaction transaction,
final Iterable<DOMStoreThreePhaseCommitCohort> cohorts);
}
+
import com.google.common.util.concurrent.ListenableFuture;
/**
- *
+ *
* Read Only Transaction, which is composed of several
* {@link DOMStoreReadTransaction} transactions. Subtransaction is selected by
* {@link LogicalDatastoreType} type parameter in
return getSubtransaction(store).read(path);
}
-}
\ No newline at end of file
+}
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadTransaction;
import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadWriteTransaction;
-import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort;
import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import com.google.common.util.concurrent.ListenableFuture;
/**
- *
+ *
* Read-Write Transaction, which is composed of several
- * {@link DOMStoreReadTransaction} transactions. Subtransaction is selected by
+ * {@link DOMStoreReadWriteTransaction} transactions. Subtransaction is selected by
* {@link LogicalDatastoreType} type parameter in:
- *
+ *
* <ul>
* <li>{@link #read(LogicalDatastoreType, InstanceIdentifier)}
* <li>{@link #put(LogicalDatastoreType, InstanceIdentifier, NormalizedNode)}
* </ul>
* {@link #commit()} will result in invocation of
* {@link DOMDataCommitImplementation#commit(org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction, Iterable)}
- * invocation with all {@link DOMStoreThreePhaseCommitCohort} for underlying
+ * invocation with all {@link org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort} for underlying
* transactions.
- *
+ *
*/
+
class DOMForwardedReadWriteTransaction extends DOMForwardedWriteTransaction<DOMStoreReadWriteTransaction> implements
DOMDataReadWriteTransaction {
import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
-import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadTransaction;
import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort;
import org.opendaylight.controller.sal.core.spi.data.DOMStoreWriteTransaction;
import org.opendaylight.yangtools.yang.common.RpcResult;
import com.google.common.util.concurrent.ListenableFuture;
/**
- * /**
- *
+ *
+ *
* Read-Write Transaction, which is composed of several
- * {@link DOMStoreReadTransaction} transactions. Subtransaction is selected by
+ * {@link DOMStoreWriteTransaction} transactions. Subtransaction is selected by
* {@link LogicalDatastoreType} type parameter in:
- *
+ *
* <ul>
* <li>{@link #put(LogicalDatastoreType, InstanceIdentifier, NormalizedNode)}
* <li>{@link #delete(LogicalDatastoreType, InstanceIdentifier)}
* <p>
* {@link #commit()} will result in invocation of
* {@link DOMDataCommitImplementation#commit(org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction, Iterable)}
- * invocation with all {@link DOMStoreThreePhaseCommitCohort} for underlying
+ * invocation with all {@link org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort} for underlying
* transactions.
- *
+ *
* @param <T>
* Subtype of {@link DOMStoreWriteTransaction} which is used as
* subtransaction.
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.Futures;
/**
*
* Utility exception mapper which translates {@link Exception}
* to {@link TransactionCommitFailedException}.
*
- * This mapper is intended to be used with {@link Futures#makeChecked(com.google.common.util.concurrent.ListenableFuture, Function)}
+ * This mapper is intended to be used with {@link com.google.common.util.concurrent.Futures#makeChecked(com.google.common.util.concurrent.ListenableFuture, Function)}
* <ul>
* <li>if exception is {@link TransactionCommitFailedException} or one of its subclasses returns original exception.
* <li>if exception is {@link ExecutionException} and cause is {@link TransactionCommitFailedException} return cause
* </ul>
*
*/
+
final class TransactionCommitFailedExceptionMapper implements
Function<Exception, TransactionCommitFailedException> {
/**
* Simple implementation of {@link TransactionChainListener} for testing.
- *
+ *
* This transaction chain listener does not contain any logic, only update
* futures ({@link #getFailFuture()} and {@link #getSuccessFuture()} when
* transaction chain event is retrieved.
- *
+ *
*/
class BlockingTransactionChainListener implements TransactionChainListener {
private final SettableFuture<Void> successFuture = SettableFuture.create();
@Override
- public void onTransactionChainFailed(TransactionChain<?, ?> chain, AsyncTransaction<?, ?> transaction,
- Throwable cause) {
+ public void onTransactionChainFailed(final TransactionChain<?, ?> chain, final AsyncTransaction<?, ?> transaction,
+ final Throwable cause) {
failFuture.set(cause);
}
@Override
- public void onTransactionChainSuccessful(TransactionChain<?, ?> chain) {
+ public void onTransactionChainSuccessful(final TransactionChain<?, ?> chain) {
successFuture.set(null);
}
/**
* We alocate new read-write transaction and write /test
- *
- *
+ *
+ *
*/
DOMDataReadWriteTransaction firstTx = allocateAndWrite(txChain);
DOMDataReadTransaction secondReadTx = txChain.newReadOnlyTransaction();
/**
- *
+ *
* We test if we are able to read data from tx, read should not fail
* since we are using chained transaction.
- *
- *
+ *
+ *
*/
assertTestContainerExists(secondReadTx);
/**
- *
+ *
* We alocate next transaction, which is still based on first one, but
* is read-write.
- *
+ *
*/
DOMDataReadWriteTransaction thirdDeleteTx = allocateAndDelete(txChain);
/**
* We commit first transaction
- *
+ *
*/
assertCommitSuccessful(firstWriteTxFuture);
assertTestContainerExists(storeReadTx);
/**
* We commit third transaction
- *
+ *
*/
assertCommitSuccessful(thirdDeleteTxFuture);
/**
* We alocate new read-write transaction and write /test
- *
- *
+ *
+ *
*/
allocateAndWrite(txChain);
* IllegalStateException.
*/
try {
- DOMDataReadTransaction secondReadTx = txChain.newReadOnlyTransaction();
+ txChain.newReadOnlyTransaction();
fail("Allocation of secondReadTx should fail with IllegalStateException");
} catch (Exception e) {
assertTrue(e instanceof IllegalStateException);
}
}
- private static DOMDataReadWriteTransaction allocateAndDelete(DOMTransactionChain txChain)
+ private static DOMDataReadWriteTransaction allocateAndDelete(final DOMTransactionChain txChain)
throws InterruptedException, ExecutionException {
DOMDataReadWriteTransaction tx = txChain.newReadWriteTransaction();
/**
* We test existence of /test in third transaction container should
* still be visible from first one (which is still uncommmited).
- *
+ *
*/
assertTestContainerExists(tx);
return tx;
}
- private static DOMDataReadWriteTransaction allocateAndWrite(DOMTransactionChain txChain)
+ private static DOMDataReadWriteTransaction allocateAndWrite(final DOMTransactionChain txChain)
throws InterruptedException, ExecutionException {
DOMDataReadWriteTransaction tx = txChain.newReadWriteTransaction();
assertTestContainerWrite(tx);
return tx;
}
- private static void assertCommitSuccessful(ListenableFuture<RpcResult<TransactionStatus>> future)
+ private static void assertCommitSuccessful(final ListenableFuture<RpcResult<TransactionStatus>> future)
throws InterruptedException, ExecutionException {
RpcResult<TransactionStatus> rpcResult = future.get();
assertTrue(rpcResult.isSuccessful());
assertEquals(TransactionStatus.COMMITED, rpcResult.getResult());
}
- private static void assertTestContainerExists(DOMDataReadTransaction readTx) throws InterruptedException,
+ private static void assertTestContainerExists(final DOMDataReadTransaction readTx) throws InterruptedException,
ExecutionException {
ListenableFuture<Optional<NormalizedNode<?, ?>>> readFuture = readTx.read(OPERATIONAL, TestModel.TEST_PATH);
Optional<NormalizedNode<?, ?>> readedData = readFuture.get();
assertTrue(readedData.isPresent());
}
- private static void assertTestContainerWrite(DOMDataReadWriteTransaction tx) throws InterruptedException,
+ private static void assertTestContainerWrite(final DOMDataReadWriteTransaction tx) throws InterruptedException,
ExecutionException {
tx.put(OPERATIONAL, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
assertTestContainerExists(tx);