Change-Id: I9a402ca1bb1755cf5ff9fc04eba781ed7f2b4a1c
Issue-ID: AAI-1193
Signed-off-by: Michael Arrastia <MArrasti@amdocs.com>
*/
package org.onap.aai.champcore.graph.impl;
*/
package org.onap.aai.champcore.graph.impl;
-import java.util.UUID;
-
+import java.security.SecureRandom;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.onap.aai.champcore.ChampTransaction;
import org.onap.aai.champcore.exceptions.ChampTransactionException;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.onap.aai.champcore.ChampTransaction;
import org.onap.aai.champcore.exceptions.ChampTransactionException;
public class TinkerpopTransaction extends ChampTransaction {
private static final int COMMIT_RETRY_COUNT = 3;
public class TinkerpopTransaction extends ChampTransaction {
private static final int COMMIT_RETRY_COUNT = 3;
/** Threaded Tinkerpop transaction. */
protected Graph threadedTransaction;
/** Threaded Tinkerpop transaction. */
protected Graph threadedTransaction;
private static final Logger LOGGER = LoggerFactory.getLogger(TinkerpopTransaction.class);
protected TinkerpopTransaction() { }
private static final Logger LOGGER = LoggerFactory.getLogger(TinkerpopTransaction.class);
protected TinkerpopTransaction() { }
/**
* Creates a new transaction instance.
/**
* Creates a new transaction instance.
* @param aGraphInstance - Instance of the graph to request the transaction from.
*/
public TinkerpopTransaction(Graph aGraphInstance) {
super();
* @param aGraphInstance - Instance of the graph to request the transaction from.
*/
public TinkerpopTransaction(Graph aGraphInstance) {
super();
if(!aGraphInstance.features().graph().supportsTransactions()) {
throw new UnsupportedOperationException();
}
if(!aGraphInstance.features().graph().supportsTransactions()) {
throw new UnsupportedOperationException();
}
// Request a threaded transaction object from the graph.
this.threadedTransaction = aGraphInstance.tx().createThreadedTx();
// Request a threaded transaction object from the graph.
this.threadedTransaction = aGraphInstance.tx().createThreadedTx();
LOGGER.info("Open transaction - id: " + id);
}
LOGGER.info("Open transaction - id: " + id);
}
@Override
public String id() {
return id.toString();
}
@Override
public String id() {
return id.toString();
}
public Graph getGraphInstance() {
return threadedTransaction;
}
@Override
public void commit() throws ChampTransactionException {
public Graph getGraphInstance() {
return threadedTransaction;
}
@Override
public void commit() throws ChampTransactionException {
-
- LOGGER.debug("Commiting transaction - " + id);
-
- final long initialBackoff = (int) (Math.random() * 50);
+
+ LOGGER.debug("Commiting transaction - " + id);
+
+ final long initialBackoff = (int)(new SecureRandom().nextDouble() * 50);
// If something goes wrong, we will retry a couple of times before
// giving up.
for (int i = 0; i < COMMIT_RETRY_COUNT; i++) {
// If something goes wrong, we will retry a couple of times before
// giving up.
for (int i = 0; i < COMMIT_RETRY_COUNT; i++) {
// Do the commit.
threadedTransaction.tx().commit();
LOGGER.info("Committed transaction - id: " + id);
return;
// Do the commit.
threadedTransaction.tx().commit();
LOGGER.info("Committed transaction - id: " + id);
return;
LOGGER.debug("Transaction " + id + " failed to commit due to: " + e.getMessage());
LOGGER.debug("Transaction " + id + " failed to commit due to: " + e.getMessage());
// Have we used up all of our retries?
if (i == COMMIT_RETRY_COUNT - 1) {
// Have we used up all of our retries?
if (i == COMMIT_RETRY_COUNT - 1) {
LOGGER.error("Maxed out commit attempt retries, client must handle exception and retry", e);
threadedTransaction.tx().rollback();
throw new ChampTransactionException(e);
LOGGER.error("Maxed out commit attempt retries, client must handle exception and retry", e);
threadedTransaction.tx().rollback();
throw new ChampTransactionException(e);
// Calculate how long we will wait before retrying...
final long backoff = (long) Math.pow(2, i) * initialBackoff;
LOGGER.warn("Caught exception while retrying transaction commit, retrying in " + backoff + " ms");
// Calculate how long we will wait before retrying...
final long backoff = (long) Math.pow(2, i) * initialBackoff;
LOGGER.warn("Caught exception while retrying transaction commit, retrying in " + backoff + " ms");
// ...and sleep before trying the commit again.
try {
Thread.sleep(backoff);
// ...and sleep before trying the commit again.
try {
Thread.sleep(backoff);
} catch (InterruptedException ie) {
} catch (InterruptedException ie) {
LOGGER.info("Interrupted while backing off on transaction commit");
Thread.interrupted();
return;
LOGGER.info("Interrupted while backing off on transaction commit");
Thread.interrupted();
return;
@Override
public void rollback() throws ChampTransactionException {
@Override
public void rollback() throws ChampTransactionException {
-
- long initialBackoff = (int) (Math.random() * 50);
+ long initialBackoff = (int)(new SecureRandom().nextDouble() * 50);
+
+
// If something goes wrong, we will retry a couple of times before
// giving up.
for (int i = 0; i < COMMIT_RETRY_COUNT; i++) {
// If something goes wrong, we will retry a couple of times before
// giving up.
for (int i = 0; i < COMMIT_RETRY_COUNT; i++) {
-
- threadedTransaction.tx().rollback();
+
+ threadedTransaction.tx().rollback();
LOGGER.info("Rolled back transaction - id: " + id);
return;
LOGGER.info("Rolled back transaction - id: " + id);
return;
LOGGER.debug("Transaction " + id + " failed to roll back due to: " + e.getMessage());
LOGGER.debug("Transaction " + id + " failed to roll back due to: " + e.getMessage());
// Have we used up all of our retries?
if (i == COMMIT_RETRY_COUNT - 1) {
// Have we used up all of our retries?
if (i == COMMIT_RETRY_COUNT - 1) {
LOGGER.error("Maxed out rollback attempt retries, client must handle exception and retry", e);
throw new ChampTransactionException(e);
}
LOGGER.error("Maxed out rollback attempt retries, client must handle exception and retry", e);
throw new ChampTransactionException(e);
}
// Calculate how long we will wait before retrying...
final long backoff = (long) Math.pow(2, i) * initialBackoff;
LOGGER.warn("Caught exception while retrying transaction roll back, retrying in " + backoff + " ms");
// Calculate how long we will wait before retrying...
final long backoff = (long) Math.pow(2, i) * initialBackoff;
LOGGER.warn("Caught exception while retrying transaction roll back, retrying in " + backoff + " ms");
// ...and sleep before trying the commit again.
try {
Thread.sleep(backoff);
// ...and sleep before trying the commit again.
try {
Thread.sleep(backoff);
} catch (InterruptedException ie) {
} catch (InterruptedException ie) {
LOGGER.info("Interrupted while backing off on transaction rollback");
Thread.interrupted();
return;
LOGGER.info("Interrupted while backing off on transaction rollback");
Thread.interrupted();
return;
try {
final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
final DocumentBuilder builder = factory.newDocumentBuilder();
final InputSource inputSource = new InputSource(is);
final Document doc = builder.parse(inputSource);
final DocumentBuilder builder = factory.newDocumentBuilder();
final InputSource inputSource = new InputSource(is);
final Document doc = builder.parse(inputSource);
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.security.SecureRandom;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.concurrent.ExecutionException;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.concurrent.ExecutionException;
janusGraphBuilder.set(janusGraphProperty.getKey(), janusGraphProperty.getValue());
}
janusGraphBuilder.set(janusGraphProperty.getKey(), janusGraphProperty.getValue());
}
- janusGraphBuilder.set(JANUS_UNIQUE_SUFFIX, ((short) new Random().nextInt(Short.MAX_VALUE)+""));
+ janusGraphBuilder.set(JANUS_UNIQUE_SUFFIX, ((short) new SecureRandom().nextInt(Short.MAX_VALUE)+""));
final Object storageBackend = builder.graphConfiguration.get("storage.backend");
final Object storageBackend = builder.graphConfiguration.get("storage.backend");
*/
package org.onap.aai.champtitan.graph.impl;
*/
package org.onap.aai.champtitan.graph.impl;
+import java.security.SecureRandom;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.Map.Entry;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.Map.Entry;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.onap.aai.champcore.ChampCapabilities;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.onap.aai.champcore.ChampCapabilities;
-import org.onap.aai.champcore.FormatMapper;
-import org.onap.aai.champcore.Formatter;
import org.onap.aai.champcore.exceptions.ChampIndexNotExistsException;
import org.onap.aai.champcore.exceptions.ChampSchemaViolationException;
import org.onap.aai.champcore.graph.impl.AbstractTinkerpopChampGraph;
import org.onap.aai.champcore.exceptions.ChampIndexNotExistsException;
import org.onap.aai.champcore.exceptions.ChampSchemaViolationException;
import org.onap.aai.champcore.graph.impl.AbstractTinkerpopChampGraph;
titanGraphBuilder.set(titanGraphProperty.getKey(), titanGraphProperty.getValue());
}
titanGraphBuilder.set(titanGraphProperty.getKey(), titanGraphProperty.getValue());
}
- titanGraphBuilder.set(TITAN_UNIQUE_SUFFIX, ((short) new Random().nextInt(Short.MAX_VALUE)+""));
+ titanGraphBuilder.set(TITAN_UNIQUE_SUFFIX, ((short) new SecureRandom().nextInt(Short.MAX_VALUE)+""));
final Object storageBackend = builder.graphConfiguration.get("storage.backend");
final Object storageBackend = builder.graphConfiguration.get("storage.backend");