+ LOG.debug("{}: Failed to read {}",
+ Thread.currentThread().getStackTrace()[1], path);
+ return null;
+ }
+
+ public <D extends DataObject> Optional<D> readOptional(
+ final LogicalDatastoreType store, final InstanceIdentifier<? extends DataObject> path) {
+ int trialNo = 0;
+ ReadOnlyTransaction transaction = databroker.newReadOnlyTransaction();
+ do {
+ try {
+ Optional<D> result = transaction.read(store, (InstanceIdentifier<D>)path).checkedGet();
+ transaction.close();
+ return result;
+ } catch (ReadFailedException e) {
+ if (trialNo == 0) {
+ logReadFailureError(path, " mdsal Read failed exception retrying the read after sleep");
+ }
+ try {
+ transaction.close();
+ Thread.sleep(MDSAL_READ_SLEEP_INTERVAL_MS);
+ transaction = databroker.newReadOnlyTransaction();
+ } catch (InterruptedException e1) {
+ logReadFailureError(path, " Sleep interrupted");
+ }
+ }
+ } while (trialNo++ < MDSAL_MAX_READ_TRIALS);
+ logReadFailureError(path, " All read trials exceeded");
+ return Optional.absent();
+ }
+
+ private <D extends org.opendaylight.yangtools.yang.binding.DataObject> void logReadFailureError(
+ InstanceIdentifier<D> path, String cause) {
+ LOG.error("{}: Failed to read {} Cause : {}", Thread.currentThread().getStackTrace()[2], path, cause);
+