Merge "Issue #2106 Create SubscriptionRetrievalAttributes to only load Subscription objects when required" into development
Former-commit-id:ccee29532e
[formerly05712d159b
] [formerly98a5531095
] [formerly7f43d8d266
[formerly98a5531095
[formerly f5cf83112d9dd697909a334a5ca2d34e51e6168b]]] Former-commit-id:7f43d8d266
Former-commit-id: a7a510f3342bc85cc4838adae907c717946e6390 [formerly45cef4d8bc
] Former-commit-id:e51ac6df59
This commit is contained in:
commit
d201642eca
38 changed files with 1033 additions and 543 deletions
|
@ -30,7 +30,6 @@ import org.eclipse.swt.widgets.Label;
|
|||
import org.eclipse.swt.widgets.Spinner;
|
||||
|
||||
import com.raytheon.uf.common.datadelivery.registry.Network;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
|
@ -50,6 +49,7 @@ import com.raytheon.uf.viz.datadelivery.utils.DataDeliveryUtils;
|
|||
* May 14, 2013 2000 djohnson Initial creation
|
||||
* May 23, 2013 1650 djohnson Reword change bandwidth message.
|
||||
* Jun 12, 2013 2064 mpduff Update label.
|
||||
* Jul 11, 2013 2106 djohnson SystemRuleManager now returns names of subscriptions.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -149,15 +149,13 @@ public class BandwidthTab extends SystemApplyCancelTab {
|
|||
boolean changesApplied = false;
|
||||
final int bandwidth = availBandwidthSpinner.getSelection();
|
||||
|
||||
Set<Subscription> unscheduledSubscriptions = SystemRuleManager
|
||||
Set<String> unscheduledSubscriptions = SystemRuleManager
|
||||
.setAvailableBandwidth(Network.OPSNET, bandwidth);
|
||||
if (unscheduledSubscriptions.isEmpty()) {
|
||||
changesApplied = true;
|
||||
} else {
|
||||
Set<String> subscriptionNames = new TreeSet<String>();
|
||||
for (Subscription subscription : unscheduledSubscriptions) {
|
||||
subscriptionNames.add(subscription.getName());
|
||||
}
|
||||
Set<String> subscriptionNames = new TreeSet<String>(
|
||||
unscheduledSubscriptions);
|
||||
|
||||
StringBuilder sb = new StringBuilder(StringUtil.createMessage(
|
||||
"Changing the bandwidth for " + Network.OPSNET
|
||||
|
|
|
@ -70,6 +70,7 @@ import com.raytheon.uf.viz.datadelivery.utils.TypeOperationItems;
|
|||
* Jan 04, 2013 1420 mpduff Move rules into a single file.
|
||||
* Jan 25, 2013 1528 djohnson Subscription priority is now an enum.
|
||||
* Jun 04, 2013 223 mpduff Implement point data types.
|
||||
* Jul 11, 2013 2106 djohnson setAvailableBandwidth service now returns names of subscriptions.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -625,9 +626,9 @@ public class SystemRuleManager {
|
|||
* @param bandwidth
|
||||
* the available bandwidth
|
||||
* @return empty list if successfully applied, otherwise the set of
|
||||
* subscriptions that would be unscheduled
|
||||
* subscription names that would be unscheduled
|
||||
*/
|
||||
public static Set<Subscription> setAvailableBandwidth(Network network,
|
||||
public static Set<String> setAvailableBandwidth(Network network,
|
||||
int bandwidth) {
|
||||
return getInstance().bandwidthService
|
||||
.proposeBandwidthForNetworkInKilobytes(network, bandwidth);
|
||||
|
|
|
@ -96,7 +96,7 @@ public abstract class BandwidthService extends
|
|||
*/
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public Set<Subscription> proposeBandwidthForNetworkInKilobytes(
|
||||
public Set<String> proposeBandwidthForNetworkInKilobytes(
|
||||
Network network, int bandwidth) {
|
||||
IBandwidthRequest request = new IBandwidthRequest();
|
||||
request.setRequestType(RequestType.PROPOSE_SET_BANDWIDTH);
|
||||
|
|
|
@ -40,6 +40,7 @@ import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
|||
* Oct 22, 2012 1286 djohnson Initial creation
|
||||
* Nov 20, 2012 1286 djohnson Add proposeSchedule methods.
|
||||
* Dec 06, 2012 1397 djohnson Add ability to get bandwidth graph data.
|
||||
* Jul 11, 2013 2106 djohnson Bandwidth service now returns names of subscriptions for proposing bandwidth availability.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -76,10 +77,10 @@ public interface IBandwidthService {
|
|||
* the network
|
||||
* @param bandwidth
|
||||
* the bandwidth
|
||||
* @return the set of current subscriptions which would be unable to fit
|
||||
* into the retrieval plan with the new bandwidth amount
|
||||
* @return the set of current subscription names which would be unable to
|
||||
* fit into the retrieval plan with the new bandwidth amount
|
||||
*/
|
||||
Set<Subscription> proposeBandwidthForNetworkInKilobytes(Network network,
|
||||
Set<String> proposeBandwidthForNetworkInKilobytes(Network network,
|
||||
int bandwidth);
|
||||
|
||||
/**
|
||||
|
|
|
@ -38,6 +38,7 @@ import javax.xml.bind.annotation.XmlEnumValue;
|
|||
* Mar 25, 2013 1841 djohnson Extracted from UserSubscription.
|
||||
* Apr 08, 2013 1826 djohnson Remove delivery options.
|
||||
* May 15, 2013 1040 mpduff Changed officeId to a set.
|
||||
* Jul 11, 2013 2106 djohnson SubscriptionPriority allows comparison.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -94,6 +95,17 @@ public interface Subscription {
|
|||
return priorityName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether this priority is higher than the other priority.
|
||||
*
|
||||
* @param other
|
||||
* the other priority
|
||||
* @return true if higher priority
|
||||
*/
|
||||
public boolean isHigherPriorityThan(SubscriptionPriority other) {
|
||||
return this.priorityValue < other.priorityValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the {@link SubscriptionPriority} by its string
|
||||
* representation.
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.raytheon.uf.common.datadelivery.registry;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription.SubscriptionPriority;
|
||||
import com.raytheon.uf.common.serialization.ISerializableObject;
|
||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
||||
|
@ -18,6 +19,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Nov 19, 2012 1166 djohnson Clean up JAXB representation of registry objects.
|
||||
* Mar 29, 2013 1841 djohnson Remove JAXB annotations.
|
||||
* Jul 11, 2013 2106 djohnson Use SubscriptionPriority.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -45,7 +47,7 @@ public class SubscriptionBundle implements ISerializableObject {
|
|||
private String bundleId;
|
||||
|
||||
@DynamicSerializeElement
|
||||
private Integer priority;
|
||||
private SubscriptionPriority priority;
|
||||
|
||||
@DynamicSerializeElement
|
||||
private Connection connection;
|
||||
|
@ -77,11 +79,11 @@ public class SubscriptionBundle implements ISerializableObject {
|
|||
this.bundleId = bundleId;
|
||||
}
|
||||
|
||||
public Integer getPriority() {
|
||||
public SubscriptionPriority getPriority() {
|
||||
return priority;
|
||||
}
|
||||
|
||||
public void setPriority(Integer priority) {
|
||||
public void setPriority(SubscriptionPriority priority) {
|
||||
this.priority = priority;
|
||||
}
|
||||
|
||||
|
|
|
@ -3,3 +3,4 @@ com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthSubscription
|
|||
com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrieval
|
||||
com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthAllocation
|
||||
com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.BandwidthMap
|
||||
com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrievalAttributes
|
|
@ -17,6 +17,11 @@
|
|||
<property name="sessionFactory" ref="metadataSessionFactory" />
|
||||
</bean>
|
||||
|
||||
<bean id="subscriptionRetrievalAttributesDao"
|
||||
class="com.raytheon.uf.edex.datadelivery.bandwidth.hibernate.SubscriptionRetrievalAttributesDao">
|
||||
<property name="sessionFactory" ref="metadataSessionFactory" />
|
||||
</bean>
|
||||
|
||||
<bean id="bandwidthDataSetUpdateDao"
|
||||
class="com.raytheon.uf.edex.datadelivery.bandwidth.hibernate.BandwidthDataSetUpdateDao">
|
||||
<property name="sessionFactory" ref="metadataSessionFactory" />
|
||||
|
@ -27,6 +32,7 @@
|
|||
<property name="bandwidthAllocationDao" ref="bandwidthAllocationDao" />
|
||||
<property name="bandwidthSubscriptionDao" ref="bandwidthSubscriptionDao" />
|
||||
<property name="subscriptionRetrievalDao" ref="subscriptionRetrievalDao" />
|
||||
<property name="subscriptionRetrievalAttributesDao" ref="subscriptionRetrievalAttributesDao" />
|
||||
<property name="bandwidthDataSetUpdateDao" ref="bandwidthDataSetUpdateDao" />
|
||||
</bean>
|
||||
|
||||
|
|
|
@ -32,10 +32,8 @@ import com.google.common.collect.Multimap;
|
|||
import com.raytheon.uf.common.datadelivery.bandwidth.data.BandwidthGraphData;
|
||||
import com.raytheon.uf.common.datadelivery.bandwidth.data.TimeWindowData;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription.SubscriptionPriority;
|
||||
import com.raytheon.uf.common.serialization.SerializationException;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthAllocation;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthBucket;
|
||||
|
@ -58,6 +56,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.RetrievalPlan;
|
|||
* Dec 06, 2012 1397 djohnson Initial creation
|
||||
* Jan 25, 2013 1528 djohnson Subscription priority is now an enum.
|
||||
* Jun 24, 2013 2106 djohnson Access bucket allocations through RetrievalPlan.
|
||||
* Jul 11, 2013 2106 djohnson Use priority straight from the BandwidthSubscription.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -125,7 +124,8 @@ class BandwidthGraphDataAdapter {
|
|||
final SubscriptionRetrieval subRetrieval = (SubscriptionRetrieval) allocation;
|
||||
retrievals.put(allocation.getId(), subRetrieval);
|
||||
subNameToRetrievals.put(subRetrieval
|
||||
.getBandwidthSubscription().getName(), subRetrieval);
|
||||
.getBandwidthSubscription().getName(),
|
||||
subRetrieval);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -144,16 +144,7 @@ class BandwidthGraphDataAdapter {
|
|||
final SubscriptionRetrieval value = entry.getValue();
|
||||
BandwidthSubscription dao = value.getBandwidthSubscription();
|
||||
final String subName = dao.getName();
|
||||
try {
|
||||
priorityMap.put(subName, dao.getSubscription().getPriority());
|
||||
} catch (SerializationException e) {
|
||||
statusHandler
|
||||
.handle(Priority.PROBLEM,
|
||||
"Unable to get access to the actual subscription for ["
|
||||
+ subName + "], skipping...",
|
||||
e);
|
||||
continue;
|
||||
}
|
||||
priorityMap.put(subName, dao.getPriority());
|
||||
|
||||
List<TimeWindowData> timeWindows = dataMap.get(subName);
|
||||
|
||||
|
|
|
@ -31,6 +31,8 @@ import com.raytheon.uf.common.datadelivery.registry.PointTime;
|
|||
import com.raytheon.uf.common.datadelivery.registry.SiteSubscription;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Time;
|
||||
import com.raytheon.uf.common.datadelivery.registry.handlers.DataDeliveryHandlers;
|
||||
import com.raytheon.uf.common.registry.handler.RegistryHandlerException;
|
||||
import com.raytheon.uf.common.serialization.SerializationException;
|
||||
import com.raytheon.uf.common.status.IPerformanceStatusHandler;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
|
@ -54,8 +56,10 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthSubscription;
|
|||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.IBandwidthDao;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.IBandwidthDbInit;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrieval;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrievalAttributes;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.interfaces.BandwidthInitializer;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.interfaces.ISubscriptionAggregator;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.processing.BandwidthSubscriptionContainer;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.processing.SimpleSubscriptionAggregator;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.BandwidthMap;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.BandwidthRoute;
|
||||
|
@ -64,6 +68,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.RetrievalPlan;
|
|||
import com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.RetrievalStatus;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthDaoUtil;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
||||
import com.raytheon.uf.edex.registry.ebxml.exception.EbxmlRegistryException;
|
||||
|
||||
/**
|
||||
* Abstract {@link IBandwidthManager} implementation which provides core
|
||||
|
@ -101,6 +106,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
|||
* Jun 20, 2013 1802 djohnson Check several times for the metadata for now.
|
||||
* Jun 24, 2013 2106 djohnson Access BandwidthBucket contents through RetrievalPlan.
|
||||
* Jul 10, 2013 2106 djohnson Move EDEX instance specific code into its own class.
|
||||
* Jul 11, 2013 2106 djohnson Propose changing available bandwidth returns subscription names.
|
||||
* </pre>
|
||||
*
|
||||
* @author dhladky
|
||||
|
@ -202,23 +208,17 @@ public abstract class BandwidthManager extends
|
|||
|
||||
// Add the current subscription to the ones BandwidthManager already
|
||||
// knows about.
|
||||
try {
|
||||
newSubscriptions.add(BandwidthUtil
|
||||
.getSubscriptionDaoForSubscription(subscription,
|
||||
retrievalTime));
|
||||
} catch (SerializationException e) {
|
||||
statusHandler.error(
|
||||
"Trapped Exception trying to schedule Subscription["
|
||||
+ subscription.getName() + "]", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
timer.lap("createBandwidthSubscriptions");
|
||||
|
||||
bandwidthDao.storeBandwidthSubscriptions(newSubscriptions);
|
||||
timer.lap("storeBandwidthSubscriptions");
|
||||
|
||||
unscheduled.addAll(aggregate(newSubscriptions));
|
||||
unscheduled.addAll(aggregate(new BandwidthSubscriptionContainer(
|
||||
subscription, newSubscriptions)));
|
||||
timer.lap("aggregate");
|
||||
|
||||
timer.stop();
|
||||
|
@ -229,7 +229,8 @@ public abstract class BandwidthManager extends
|
|||
return unscheduled;
|
||||
}
|
||||
|
||||
protected List<BandwidthAllocation> schedule(BandwidthSubscription dao) {
|
||||
protected List<BandwidthAllocation> schedule(Subscription subscription,
|
||||
BandwidthSubscription dao) {
|
||||
Calendar retrievalTime = dao.getBaseReferenceTime();
|
||||
|
||||
// Retrieve all the current subscriptions by provider, dataset name and
|
||||
|
@ -244,7 +245,8 @@ public abstract class BandwidthManager extends
|
|||
"] baseReferenceTime [%1$tY%1$tm%1$td%1$tH%1$tM",
|
||||
retrievalTime));
|
||||
|
||||
return aggregate(subscriptions);
|
||||
return aggregate(new BandwidthSubscriptionContainer(subscription,
|
||||
subscriptions));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -255,7 +257,7 @@ public abstract class BandwidthManager extends
|
|||
* dataset.
|
||||
*/
|
||||
private List<BandwidthAllocation> aggregate(
|
||||
List<BandwidthSubscription> bandwidthSubscriptions) {
|
||||
BandwidthSubscriptionContainer bandwidthSubscriptions) {
|
||||
IPerformanceTimer timer = TimeUtil.getPerformanceTimer();
|
||||
timer.start();
|
||||
|
||||
|
@ -346,13 +348,30 @@ public abstract class BandwidthManager extends
|
|||
bandwidthDao.store(reservations);
|
||||
timer.lap("storing retrievals");
|
||||
|
||||
List<SubscriptionRetrievalAttributes> attributes = Lists
|
||||
.newArrayListWithCapacity(reservations.size());
|
||||
for (SubscriptionRetrieval retrieval : reservations) {
|
||||
final SubscriptionRetrievalAttributes attribute = new SubscriptionRetrievalAttributes();
|
||||
try {
|
||||
attribute.setSubscription(bandwidthSubscriptions.subscription);
|
||||
} catch (SerializationException e) {
|
||||
throw new IllegalStateException(
|
||||
"Unable to serialize the subscription, these retrievals will not be processed!");
|
||||
}
|
||||
attribute.setSubscriptionRetrieval(retrieval);
|
||||
attributes.add(attribute);
|
||||
}
|
||||
|
||||
bandwidthDao.storeSubscriptionRetrievalAttributes(attributes);
|
||||
timer.lap("storing retrieval attributes");
|
||||
|
||||
List<BandwidthAllocation> unscheduled = (reservations.isEmpty()) ? Collections
|
||||
.<BandwidthAllocation> emptyList() : retrievalManager
|
||||
.schedule(reservations);
|
||||
timer.lap("scheduling retrievals");
|
||||
|
||||
timer.stop();
|
||||
final int numberOfBandwidthSubscriptions = bandwidthSubscriptions
|
||||
final int numberOfBandwidthSubscriptions = bandwidthSubscriptions.newSubscriptions
|
||||
.size();
|
||||
timer.logLaps("aggregate() bandwidthSubscriptions ["
|
||||
+ numberOfBandwidthSubscriptions + "]", performanceHandler);
|
||||
|
@ -397,33 +416,8 @@ public abstract class BandwidthManager extends
|
|||
* @param unscheduled
|
||||
* the unscheduled allocations
|
||||
*/
|
||||
private void unscheduleSubscriptionsForAllocations(
|
||||
List<BandwidthAllocation> unscheduled) {
|
||||
Set<Subscription> subscriptionsToUnschedule = Sets.newHashSet();
|
||||
for (BandwidthAllocation unscheduledAllocation : unscheduled) {
|
||||
if (unscheduledAllocation instanceof SubscriptionRetrieval) {
|
||||
SubscriptionRetrieval retrieval = (SubscriptionRetrieval) unscheduledAllocation;
|
||||
try {
|
||||
subscriptionsToUnschedule.add(retrieval.getSubscription());
|
||||
} catch (SerializationException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Unable to deserialize a subscription", e);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (Subscription sub : subscriptionsToUnschedule) {
|
||||
sub.setUnscheduled(true);
|
||||
try {
|
||||
subscriptionUpdated(sub);
|
||||
} catch (SerializationException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Unable to deserialize a subscription", e);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
protected abstract void unscheduleSubscriptionsForAllocations(
|
||||
List<BandwidthAllocation> unscheduled);
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
|
@ -436,15 +430,8 @@ public abstract class BandwidthManager extends
|
|||
List<BandwidthSubscription> subscriptions = new ArrayList<BandwidthSubscription>();
|
||||
Calendar now = BandwidthUtil.now();
|
||||
// Store the AdhocSubscription with a base time of now..
|
||||
try {
|
||||
subscriptions.add(bandwidthDao.newBandwidthSubscription(
|
||||
subscription, now));
|
||||
} catch (SerializationException e) {
|
||||
statusHandler.error(
|
||||
"Trapped Exception trying to schedule AdhocSubscription["
|
||||
+ subscription.getName() + "]", e);
|
||||
return Collections.emptyList();
|
||||
}
|
||||
subscriptions.add(bandwidthDao.newBandwidthSubscription(subscription,
|
||||
now));
|
||||
|
||||
// Check start time in Time, if it is blank, we need to add the most
|
||||
// recent MetaData for the DataSet subscribed to.
|
||||
|
@ -459,7 +446,9 @@ public abstract class BandwidthManager extends
|
|||
SimpleSubscriptionAggregator a = new SimpleSubscriptionAggregator(
|
||||
bandwidthDao);
|
||||
List<BandwidthAllocation> reservations = new ArrayList<BandwidthAllocation>();
|
||||
List<SubscriptionRetrieval> retrievals = a.aggregate(subscriptions);
|
||||
List<SubscriptionRetrieval> retrievals = a
|
||||
.aggregate(new BandwidthSubscriptionContainer(subscription,
|
||||
subscriptions));
|
||||
|
||||
for (SubscriptionRetrieval retrieval : retrievals) {
|
||||
retrieval.setStartTime(now);
|
||||
|
@ -481,6 +470,20 @@ public abstract class BandwidthManager extends
|
|||
for (SubscriptionRetrieval retrieval : retrievals) {
|
||||
|
||||
if (retrieval.getStatus().equals(RetrievalStatus.SCHEDULED)) {
|
||||
SubscriptionRetrievalAttributes attributes = new SubscriptionRetrievalAttributes();
|
||||
attributes.setSubscriptionRetrieval(retrieval);
|
||||
|
||||
try {
|
||||
attributes.setSubscription(subscription);
|
||||
|
||||
bandwidthDao.store(attributes);
|
||||
} catch (SerializationException e) {
|
||||
statusHandler.error(
|
||||
"Trapped Exception trying to schedule AdhocSubscription["
|
||||
+ subscription.getName() + "]", e);
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
retrieval.setStatus(RetrievalStatus.READY);
|
||||
bandwidthDaoUtil.update(retrieval);
|
||||
}
|
||||
|
@ -498,7 +501,7 @@ public abstract class BandwidthManager extends
|
|||
*/
|
||||
@Override
|
||||
public List<BandwidthAllocation> subscriptionUpdated(
|
||||
Subscription subscription) throws SerializationException {
|
||||
Subscription subscription) {
|
||||
// Since AdhocSubscription extends Subscription it is not possible to
|
||||
// separate the processing of those Objects in EventBus. So, handle the
|
||||
// case where the updated subscription is actually an AdhocSubscription
|
||||
|
@ -697,7 +700,7 @@ public abstract class BandwidthManager extends
|
|||
}
|
||||
break;
|
||||
case PROPOSE_SET_BANDWIDTH:
|
||||
Set<Subscription> unscheduledSubscriptions = proposeSetBandwidth(
|
||||
Set<String> unscheduledSubscriptions = proposeSetBandwidth(
|
||||
requestNetwork, bandwidth);
|
||||
response = unscheduledSubscriptions;
|
||||
if (unscheduledSubscriptions.isEmpty()) {
|
||||
|
@ -890,8 +893,8 @@ public abstract class BandwidthManager extends
|
|||
for (BandwidthAllocation allocation : unscheduledAllocations) {
|
||||
if (allocation instanceof SubscriptionRetrieval) {
|
||||
SubscriptionRetrieval retrieval = (SubscriptionRetrieval) allocation;
|
||||
unscheduledSubscriptions.add(retrieval.getSubscription()
|
||||
.getName());
|
||||
unscheduledSubscriptions.add(retrieval
|
||||
.getBandwidthSubscription().getName());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -974,14 +977,14 @@ public abstract class BandwidthManager extends
|
|||
*
|
||||
* @throws SerializationException
|
||||
*/
|
||||
private Set<Subscription> proposeSetBandwidth(Network requestNetwork,
|
||||
private Set<String> proposeSetBandwidth(Network requestNetwork,
|
||||
int bandwidth) throws SerializationException {
|
||||
BandwidthMap copyOfCurrentMap = BandwidthMap
|
||||
.load(EdexBandwidthContextFactory.getBandwidthMapConfig());
|
||||
BandwidthRoute route = copyOfCurrentMap.getRoute(requestNetwork);
|
||||
route.setDefaultBandwidth(bandwidth);
|
||||
|
||||
Set<Subscription> subscriptions = new HashSet<Subscription>();
|
||||
Set<String> subscriptions = new HashSet<String>();
|
||||
BandwidthManager proposedBwManager = null;
|
||||
try {
|
||||
proposedBwManager = startProposedBandwidthManager(copyOfCurrentMap);
|
||||
|
@ -1008,7 +1011,7 @@ public abstract class BandwidthManager extends
|
|||
for (BandwidthAllocation allocation : unscheduledAllocations) {
|
||||
if (allocation instanceof SubscriptionRetrieval) {
|
||||
subscriptions.add(((SubscriptionRetrieval) allocation)
|
||||
.getSubscription());
|
||||
.getBandwidthSubscription().getName());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1082,7 +1085,18 @@ public abstract class BandwidthManager extends
|
|||
try {
|
||||
ctx = new ClassPathXmlApplicationContext(springFiles,
|
||||
EDEXUtil.getSpringContext());
|
||||
return ctx.getBean("bandwidthManager", BandwidthManager.class);
|
||||
final BandwidthManager bwManager = ctx.getBean("bandwidthManager",
|
||||
BandwidthManager.class);
|
||||
try {
|
||||
bwManager.initializer.executeAfterRegistryInit();
|
||||
return bwManager;
|
||||
} catch (EbxmlRegistryException e) {
|
||||
statusHandler
|
||||
.handle(Priority.PROBLEM,
|
||||
"Error loading subscriptions after starting the new bandwidth manager! Returning null reference.",
|
||||
e);
|
||||
return null;
|
||||
}
|
||||
} finally {
|
||||
if (close) {
|
||||
Util.close(ctx);
|
||||
|
@ -1158,17 +1172,22 @@ public abstract class BandwidthManager extends
|
|||
// Proposing bandwidth changes requires the old way of bringing up a
|
||||
// fresh bandwidth manager and trying the change from scratch
|
||||
unscheduled = Lists.newArrayList();
|
||||
Set<Subscription> actualSubscriptions = new HashSet<Subscription>();
|
||||
Set<String> subscriptionNames = Sets.newHashSet();
|
||||
for (BandwidthSubscription subscription : fromDao
|
||||
.getBandwidthSubscriptions()) {
|
||||
subscriptionNames.add(subscription.getName());
|
||||
}
|
||||
|
||||
Set<Subscription> actualSubscriptions = Sets.newHashSet();
|
||||
for (String subName : subscriptionNames) {
|
||||
try {
|
||||
Subscription actualSubscription = subscription
|
||||
.getSubscription();
|
||||
Subscription actualSubscription = DataDeliveryHandlers
|
||||
.getSubscriptionHandler().getByName(subName);
|
||||
actualSubscriptions.add(actualSubscription);
|
||||
} catch (SerializationException e) {
|
||||
} catch (RegistryHandlerException e) {
|
||||
statusHandler
|
||||
.handle(Priority.PROBLEM,
|
||||
"Unable to deserialize a subscription, results may not be accurate for modeling bandwidth changes.",
|
||||
"Unable to lookup the subscription, results may not be accurate for modeling bandwidth changes.",
|
||||
e);
|
||||
}
|
||||
}
|
||||
|
@ -1180,9 +1199,17 @@ public abstract class BandwidthManager extends
|
|||
} else {
|
||||
// Otherwise we can just copy the entire state of the current system
|
||||
// and attempt the proposed changes
|
||||
bandwidthDao.storeBandwidthSubscriptions(fromDao
|
||||
.getBandwidthSubscriptions());
|
||||
bandwidthDao.store(fromDao.getSubscriptionRetrievals());
|
||||
final List<SubscriptionRetrieval> subscriptionRetrievals = fromDao
|
||||
.getSubscriptionRetrievals();
|
||||
List<BandwidthSubscription> bandwidthSubscriptions = Lists
|
||||
.newArrayListWithCapacity(subscriptionRetrievals.size());
|
||||
for (SubscriptionRetrieval retrieval : subscriptionRetrievals) {
|
||||
bandwidthSubscriptions
|
||||
.add(retrieval.getBandwidthSubscription());
|
||||
}
|
||||
bandwidthDao.storeBandwidthSubscriptions(bandwidthSubscriptions);
|
||||
|
||||
bandwidthDao.store(subscriptionRetrievals);
|
||||
|
||||
RetrievalManager fromRetrievalManager = copyFrom.retrievalManager;
|
||||
this.retrievalManager.copyState(fromRetrievalManager);
|
||||
|
|
|
@ -22,7 +22,9 @@ package com.raytheon.uf.edex.datadelivery.bandwidth;
|
|||
import java.text.ParseException;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.SortedSet;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
@ -32,6 +34,7 @@ import java.util.regex.Matcher;
|
|||
import java.util.regex.Pattern;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.eventbus.AllowConcurrentEvents;
|
||||
import com.google.common.eventbus.Subscribe;
|
||||
import com.raytheon.uf.common.datadelivery.bandwidth.IBandwidthRequest;
|
||||
|
@ -64,6 +67,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthSubscription;
|
|||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.IBandwidthDao;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.IBandwidthDbInit;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrieval;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrievalAttributes;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.notification.BandwidthEventBus;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.RetrievalManager;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.RetrievalPlan;
|
||||
|
@ -84,6 +88,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jul 10, 2013 2106 djohnson Extracted from {@link BandwidthManager}.
|
||||
* Jul 11, 2013 2106 djohnson Look up subscription from the handler directly.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -226,14 +231,12 @@ public abstract class EdexBandwidthManager extends BandwidthManager {
|
|||
|
||||
// Schedule the next iteration of the subscription
|
||||
BandwidthSubscription dao = sr.getBandwidthSubscription();
|
||||
Subscription subscription = null;
|
||||
Subscription subscription;
|
||||
try {
|
||||
subscription = dao.getSubscription();
|
||||
} catch (SerializationException e) {
|
||||
statusHandler.error(
|
||||
"Failed to extract Subscription from BandwidthSubscription ["
|
||||
+ dao.getIdentifier() + "]", e);
|
||||
// No sense in continuing
|
||||
subscription = subscriptionHandler.getByName(dao.getName());
|
||||
} catch (RegistryHandlerException e1) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Unable to retrieve the subscription by name!", e1);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -261,19 +264,10 @@ public abstract class EdexBandwidthManager extends BandwidthManager {
|
|||
if (a == null) {
|
||||
// Create the new BandwidthSubscription record with the next
|
||||
// time..
|
||||
try {
|
||||
a = bandwidthDao.newBandwidthSubscription(subscription,
|
||||
next);
|
||||
} catch (SerializationException e) {
|
||||
|
||||
statusHandler.error(
|
||||
"Failed to create new BandwidthSubscription from Subscription ["
|
||||
+ subscription.getId()
|
||||
+ "] baseReferenceTime ["
|
||||
+ BandwidthUtil.format(next) + "]", e);
|
||||
}
|
||||
|
||||
schedule(a);
|
||||
schedule(subscription, a);
|
||||
} else {
|
||||
statusHandler
|
||||
.info("Subscription ["
|
||||
|
@ -302,7 +296,7 @@ public abstract class EdexBandwidthManager extends BandwidthManager {
|
|||
|| DataDeliveryRegistryObjectTypes.SHARED_SUBSCRIPTION
|
||||
.equals(objectType)) {
|
||||
statusHandler
|
||||
.info("Recieved Subscription removal notification for Subscription ["
|
||||
.info("Received Subscription removal notification for Subscription ["
|
||||
+ event.getId() + "]");
|
||||
// Need to locate and remove all BandwidthReservations for the
|
||||
// given subscription..
|
||||
|
@ -455,17 +449,24 @@ public abstract class EdexBandwidthManager extends BandwidthManager {
|
|||
try {
|
||||
// Update the retrieval times on the subscription object
|
||||
// which goes through the retrieval process
|
||||
final Subscription subscription = retrieval
|
||||
final SubscriptionRetrievalAttributes subscriptionRetrievalAttributes = bandwidthDao
|
||||
.getSubscriptionRetrievalAttributes(retrieval);
|
||||
final Subscription subscription = subscriptionRetrievalAttributes
|
||||
.getSubscription();
|
||||
subscription.setUrl(dataSetMetaData.getUrl());
|
||||
subscription.setProvider(dataSetMetaData.getProviderName());
|
||||
|
||||
if (subscription.getTime() instanceof PointTime) {
|
||||
final PointTime subTime = (PointTime) subscription
|
||||
.getTime();
|
||||
subscription.setUrl(dataSetMetaData.getUrl());
|
||||
subscription.setProvider(dataSetMetaData
|
||||
.getProviderName());
|
||||
|
||||
subTime.setRequestStartAsDate(earliestRetrievalDataTime);
|
||||
subTime.setRequestEndAsDate(latestRetrievalDataTime);
|
||||
subTime.setTimes(time.getTimes());
|
||||
|
||||
bandwidthDao.update(subscriptionRetrievalAttributes);
|
||||
|
||||
// Now update the retrieval to be ready
|
||||
retrieval.setStatus(RetrievalStatus.READY);
|
||||
bandwidthDaoUtil.update(retrieval);
|
||||
|
@ -561,14 +562,20 @@ public abstract class EdexBandwidthManager extends BandwidthManager {
|
|||
// Need to update the Subscription Object in the
|
||||
// SubscriptionRetrieval with the current DataSetMetaData
|
||||
// URL and time Object
|
||||
|
||||
SubscriptionRetrievalAttributes attributes = bandwidthDao
|
||||
.getSubscriptionRetrievalAttributes(retrieval);
|
||||
|
||||
Subscription sub;
|
||||
try {
|
||||
sub = updateSubscriptionWithDataSetMetaData(
|
||||
retrieval.getSubscription(), dataSetMetaData);
|
||||
attributes.getSubscription(), dataSetMetaData);
|
||||
|
||||
// Update the SubscriptionRetrieval record with the new
|
||||
// data...
|
||||
retrieval.setSubscription(sub);
|
||||
attributes.setSubscription(sub);
|
||||
|
||||
bandwidthDao.update(attributes);
|
||||
} catch (SerializationException e) {
|
||||
statusHandler
|
||||
.handle(Priority.PROBLEM,
|
||||
|
@ -607,6 +614,40 @@ public abstract class EdexBandwidthManager extends BandwidthManager {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
protected void unscheduleSubscriptionsForAllocations(
|
||||
List<BandwidthAllocation> unscheduled) {
|
||||
List<SubscriptionRetrieval> retrievals = Lists.newArrayList();
|
||||
for (BandwidthAllocation unscheduledAllocation : unscheduled) {
|
||||
if (unscheduledAllocation instanceof SubscriptionRetrieval) {
|
||||
SubscriptionRetrieval retrieval = (SubscriptionRetrieval) unscheduledAllocation;
|
||||
retrievals.add(retrieval);
|
||||
}
|
||||
}
|
||||
|
||||
Set<Subscription> subscriptions = new HashSet<Subscription>();
|
||||
for (SubscriptionRetrieval retrieval : retrievals) {
|
||||
try {
|
||||
final Subscription sub = bandwidthDao
|
||||
.getSubscriptionRetrievalAttributes(retrieval)
|
||||
.getSubscription();
|
||||
subscriptions.add(sub);
|
||||
} catch (SerializationException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Unable to deserialize a subscription", e);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
for (Subscription subscription : subscriptions) {
|
||||
subscription.setUnscheduled(true);
|
||||
subscriptionUpdated(subscription);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates a {@link Subscription) to reflect important attributes of the
|
||||
* specified {@link DataSetMetaData}.
|
||||
|
|
|
@ -37,16 +37,13 @@ import com.raytheon.uf.common.datadelivery.registry.DataSetMetaData;
|
|||
import com.raytheon.uf.common.datadelivery.registry.Network;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||
import com.raytheon.uf.common.dataplugin.persist.IPersistableDataObject;
|
||||
import com.raytheon.uf.common.serialization.SerializationException;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.util.ReflectionUtil;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthAllocation;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthDataSetUpdate;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthSubscription;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.IBandwidthDao;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrieval;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrievalAttributes;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.RetrievalStatus;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
||||
|
||||
|
@ -65,6 +62,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
|||
* Jun 03, 2013 2038 djohnson Add method to get subscription retrievals by provider, dataset, and status.
|
||||
* Jun 13, 2013 2095 djohnson Implement ability to store a collection of subscriptions.
|
||||
* Jul 09, 2013 2106 djohnson Rather than copy all elements and remove unnecessary, just copy the ones that apply.
|
||||
* Jul 11, 2013 2106 djohnson Use BandwidthSubscription instead of Subscription.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -73,9 +71,6 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
|||
*/
|
||||
class InMemoryBandwidthDao implements IBandwidthDao {
|
||||
|
||||
private static final IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(InMemoryBandwidthDao.class);
|
||||
|
||||
private static final AtomicLong idSequence = new AtomicLong(1);
|
||||
|
||||
// Explicitly ConcurrentLinkedQueue so we can use methods that require that
|
||||
|
@ -275,25 +270,16 @@ class InMemoryBandwidthDao implements IBandwidthDao {
|
|||
|
||||
for (BandwidthAllocation current : bandwidthAllocations) {
|
||||
if (current instanceof SubscriptionRetrieval) {
|
||||
Subscription subscription;
|
||||
try {
|
||||
BandwidthSubscription subscription;
|
||||
final SubscriptionRetrieval subscriptionRetrieval = (SubscriptionRetrieval) current;
|
||||
subscription = subscriptionRetrieval.getSubscription();
|
||||
subscription = subscriptionRetrieval.getBandwidthSubscription();
|
||||
if (provider.equals(subscription.getProvider())
|
||||
&& dataSetName
|
||||
.equals(subscription.getDataSetName())
|
||||
&& dataSetName.equals(subscription.getDataSetName())
|
||||
&& baseReferenceTime.getTimeInMillis() == subscriptionRetrieval
|
||||
.getBandwidthSubscription()
|
||||
.getBaseReferenceTime().getTimeInMillis()) {
|
||||
results.add(subscriptionRetrieval.copy());
|
||||
}
|
||||
} catch (SerializationException e) {
|
||||
statusHandler
|
||||
.handle(Priority.PROBLEM,
|
||||
"Unable to deserialize the retrieval's subscription, skipping it...",
|
||||
e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -310,22 +296,13 @@ class InMemoryBandwidthDao implements IBandwidthDao {
|
|||
|
||||
for (BandwidthAllocation current : bandwidthAllocations) {
|
||||
if (current instanceof SubscriptionRetrieval) {
|
||||
Subscription subscription;
|
||||
try {
|
||||
BandwidthSubscription subscription;
|
||||
final SubscriptionRetrieval subscriptionRetrieval = (SubscriptionRetrieval) current;
|
||||
subscription = subscriptionRetrieval.getSubscription();
|
||||
subscription = subscriptionRetrieval.getBandwidthSubscription();
|
||||
if (provider.equals(subscription.getProvider())
|
||||
&& dataSetName
|
||||
.equals(subscription.getDataSetName())) {
|
||||
&& dataSetName.equals(subscription.getDataSetName())) {
|
||||
results.add(subscriptionRetrieval.copy());
|
||||
}
|
||||
} catch (SerializationException e) {
|
||||
statusHandler
|
||||
.handle(Priority.PROBLEM,
|
||||
"Unable to deserialize the retrieval's subscription, skipping it...",
|
||||
e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -385,8 +362,7 @@ class InMemoryBandwidthDao implements IBandwidthDao {
|
|||
*/
|
||||
@Override
|
||||
public BandwidthSubscription newBandwidthSubscription(
|
||||
Subscription subscription, Calendar baseReferenceTime)
|
||||
throws SerializationException {
|
||||
Subscription subscription, Calendar baseReferenceTime) {
|
||||
BandwidthSubscription entity = BandwidthUtil
|
||||
.getSubscriptionDaoForSubscription(subscription,
|
||||
baseReferenceTime);
|
||||
|
@ -541,23 +517,14 @@ class InMemoryBandwidthDao implements IBandwidthDao {
|
|||
|
||||
for (BandwidthAllocation current : bandwidthAllocations) {
|
||||
if (current instanceof SubscriptionRetrieval) {
|
||||
Subscription subscription;
|
||||
try {
|
||||
BandwidthSubscription subscription;
|
||||
final SubscriptionRetrieval subscriptionRetrieval = (SubscriptionRetrieval) current;
|
||||
subscription = subscriptionRetrieval.getSubscription();
|
||||
subscription = subscriptionRetrieval.getBandwidthSubscription();
|
||||
if (provider.equals(subscription.getProvider())
|
||||
&& dataSetName
|
||||
.equals(subscription.getDataSetName())
|
||||
&& dataSetName.equals(subscription.getDataSetName())
|
||||
&& status.equals(subscriptionRetrieval.getStatus())) {
|
||||
results.add(subscriptionRetrieval.copy());
|
||||
}
|
||||
} catch (SerializationException e) {
|
||||
statusHandler
|
||||
.handle(Priority.PROBLEM,
|
||||
"Unable to deserialize the retrieval's subscription, skipping it...",
|
||||
e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -587,10 +554,9 @@ class InMemoryBandwidthDao implements IBandwidthDao {
|
|||
|
||||
for (BandwidthAllocation current : bandwidthAllocations) {
|
||||
if (current instanceof SubscriptionRetrieval) {
|
||||
Subscription subscription;
|
||||
try {
|
||||
BandwidthSubscription subscription;
|
||||
final SubscriptionRetrieval subscriptionRetrieval = (SubscriptionRetrieval) current;
|
||||
subscription = subscriptionRetrieval.getSubscription();
|
||||
subscription = subscriptionRetrieval.getBandwidthSubscription();
|
||||
|
||||
final Date subRetrievalStartTime = subscriptionRetrieval
|
||||
.getStartTime().getTime();
|
||||
|
@ -599,19 +565,11 @@ class InMemoryBandwidthDao implements IBandwidthDao {
|
|||
.before(subRetrievalStartTime));
|
||||
|
||||
if (provider.equals(subscription.getProvider())
|
||||
&& dataSetName
|
||||
.equals(subscription.getDataSetName())
|
||||
&& dataSetName.equals(subscription.getDataSetName())
|
||||
&& status.equals(subscriptionRetrieval.getStatus())
|
||||
&& withinTimeLimits) {
|
||||
results.add(subscriptionRetrieval.copy());
|
||||
}
|
||||
} catch (SerializationException e) {
|
||||
statusHandler
|
||||
.handle(Priority.PROBLEM,
|
||||
"Unable to deserialize the retrieval's subscription, skipping it...",
|
||||
e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -664,4 +622,38 @@ class InMemoryBandwidthDao implements IBandwidthDao {
|
|||
return allocations;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void store(SubscriptionRetrievalAttributes attributes) {
|
||||
// Does nothing
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void storeSubscriptionRetrievalAttributes(
|
||||
List<SubscriptionRetrievalAttributes> retrievalAttributes) {
|
||||
// Does nothing
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void update(SubscriptionRetrievalAttributes attributes) {
|
||||
// Does nothing
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public SubscriptionRetrievalAttributes getSubscriptionRetrievalAttributes(
|
||||
SubscriptionRetrieval retrieval) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -155,4 +155,13 @@ class InMemoryBandwidthManager extends BandwidthManager {
|
|||
// Nothing to do for in-memory version
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
protected void unscheduleSubscriptionsForAllocations(
|
||||
List<BandwidthAllocation> unscheduled) {
|
||||
// Nothing to do for in-memory version
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ import javax.persistence.SequenceGenerator;
|
|||
import javax.persistence.Table;
|
||||
|
||||
import com.raytheon.uf.common.datadelivery.registry.Network;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription.SubscriptionPriority;
|
||||
import com.raytheon.uf.common.dataplugin.persist.IPersistableDataObject;
|
||||
import com.raytheon.uf.common.serialization.ISerializableObject;
|
||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
||||
|
@ -39,6 +40,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Oct 12, 2012 0726 djohnson Add SW history, use string version of enum.
|
||||
* Jun 24, 2013 2106 djohnson Add copy constructor.
|
||||
* Jul 11, 2013 2106 djohnson Use SubscriptionPriority enum.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -89,7 +91,8 @@ public class BandwidthAllocation implements IPersistableDataObject<Long>,
|
|||
|
||||
@Column(nullable = false)
|
||||
@DynamicSerializeElement
|
||||
private double priority;
|
||||
@Enumerated(EnumType.STRING)
|
||||
private SubscriptionPriority priority;
|
||||
|
||||
@Column(nullable = false)
|
||||
@Enumerated(EnumType.STRING)
|
||||
|
@ -203,7 +206,7 @@ public class BandwidthAllocation implements IPersistableDataObject<Long>,
|
|||
return Long.valueOf(id);
|
||||
}
|
||||
|
||||
public double getPriority() {
|
||||
public SubscriptionPriority getPriority() {
|
||||
return priority;
|
||||
}
|
||||
|
||||
|
@ -273,7 +276,7 @@ public class BandwidthAllocation implements IPersistableDataObject<Long>,
|
|||
setId(identifier.longValue());
|
||||
}
|
||||
|
||||
public void setPriority(double priority) {
|
||||
public void setPriority(SubscriptionPriority priority) {
|
||||
this.priority = priority;
|
||||
}
|
||||
|
||||
|
@ -341,8 +344,7 @@ public class BandwidthAllocation implements IPersistableDataObject<Long>,
|
|||
* @return true if this allocation is higher priority than the other one
|
||||
*/
|
||||
public boolean isHigherPriorityThan(BandwidthAllocation other) {
|
||||
// A lower priority value means it's higher priority
|
||||
return this.getPriority() < other.getPriority();
|
||||
return this.getPriority().isHigherPriorityThan(other.getPriority());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -12,19 +12,13 @@ import javax.persistence.GenerationType;
|
|||
import javax.persistence.Id;
|
||||
import javax.persistence.SequenceGenerator;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.Transient;
|
||||
|
||||
import com.raytheon.uf.common.datadelivery.registry.Network;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription.SubscriptionPriority;
|
||||
import com.raytheon.uf.common.dataplugin.persist.PersistableDataObject;
|
||||
import com.raytheon.uf.common.serialization.ISerializableObject;
|
||||
import com.raytheon.uf.common.serialization.SerializationException;
|
||||
import com.raytheon.uf.common.serialization.SerializationUtil;
|
||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.util.IDeepCopyable;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
||||
|
||||
|
@ -42,6 +36,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
|||
* Nov 09, 2012 1286 djohnson Add convenience methods for retrieving the subscription.
|
||||
* Jun 13, 2013 2095 djohnson Add flag for whether or not data set update should be looked for on aggregating.
|
||||
* Jun 24, 2013 2106 djohnson Add copy constructor.
|
||||
* Jul 11, 2013 2106 djohnson Use SubscriptionPriority enum, remove the Subscription.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -56,9 +51,6 @@ public class BandwidthSubscription extends PersistableDataObject<Long>
|
|||
implements Serializable, ISerializableObject,
|
||||
IDeepCopyable<BandwidthSubscription> {
|
||||
|
||||
private static final IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(BandwidthSubscription.class);
|
||||
|
||||
private static final long serialVersionUID = 20120723L;
|
||||
|
||||
@DynamicSerializeElement
|
||||
|
@ -102,7 +94,8 @@ public class BandwidthSubscription extends PersistableDataObject<Long>
|
|||
|
||||
@DynamicSerializeElement
|
||||
@Column(nullable = false)
|
||||
private double priority;
|
||||
@Enumerated(EnumType.STRING)
|
||||
private SubscriptionPriority priority;
|
||||
|
||||
@DynamicSerializeElement
|
||||
@Column(nullable = false)
|
||||
|
@ -112,52 +105,10 @@ public class BandwidthSubscription extends PersistableDataObject<Long>
|
|||
@Column(nullable = false)
|
||||
private boolean checkForDataSetUpdate;
|
||||
|
||||
@DynamicSerializeElement
|
||||
@Column(nullable = false, length = 100000)
|
||||
private byte[] subSubscription;
|
||||
|
||||
@Transient
|
||||
private transient Subscription subscription;
|
||||
|
||||
public void setRegistryId(String registryId) {
|
||||
this.registryId = registryId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the subSubscription
|
||||
* @throws SerializationException
|
||||
*/
|
||||
public Subscription getSubscription() throws SerializationException {
|
||||
if (subscription == null) {
|
||||
if (subSubscription != null) {
|
||||
subscription = SerializationUtil.transformFromThrift(
|
||||
Subscription.class, subSubscription);
|
||||
} else {
|
||||
statusHandler.handle(Priority.WARN,
|
||||
"Null subSubscription as field, not deserializing.");
|
||||
}
|
||||
|
||||
}
|
||||
return subscription;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param sub
|
||||
* @throws SerializationException
|
||||
*/
|
||||
public void setSubscription(Subscription sub) throws SerializationException {
|
||||
// Set the transient field subscription so that we don't
|
||||
// have to deserialize the subscription if it was set
|
||||
// already.
|
||||
this.subscription = sub;
|
||||
if (sub != null) {
|
||||
this.subSubscription = SerializationUtil.transformToThrift(sub);
|
||||
} else {
|
||||
statusHandler.handle(Priority.WARN,
|
||||
"Null subscription passed as parameter, not serializing.");
|
||||
}
|
||||
}
|
||||
|
||||
public BandwidthSubscription() {
|
||||
// Bean constructor
|
||||
}
|
||||
|
@ -180,13 +131,6 @@ public class BandwidthSubscription extends PersistableDataObject<Long>
|
|||
this.provider = bandwidthSubscription.provider;
|
||||
this.registryId = bandwidthSubscription.registryId;
|
||||
this.route = bandwidthSubscription.route;
|
||||
|
||||
if (bandwidthSubscription.subSubscription != null) {
|
||||
final int srcLength = bandwidthSubscription.subSubscription.length;
|
||||
this.subSubscription = new byte[srcLength];
|
||||
System.arraycopy(bandwidthSubscription.subSubscription, 0,
|
||||
this.subSubscription, 0, srcLength);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -309,11 +253,11 @@ public class BandwidthSubscription extends PersistableDataObject<Long>
|
|||
return baseReferenceTime;
|
||||
}
|
||||
|
||||
public void setPriority(double priority) {
|
||||
public void setPriority(SubscriptionPriority priority) {
|
||||
this.priority = priority;
|
||||
}
|
||||
|
||||
public double getPriority() {
|
||||
public SubscriptionPriority getPriority() {
|
||||
return priority;
|
||||
}
|
||||
|
||||
|
@ -351,31 +295,6 @@ public class BandwidthSubscription extends PersistableDataObject<Long>
|
|||
this.checkForDataSetUpdate = checkForDataSetUpdate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Added only to comply with DynamicSerialize, use
|
||||
* {@link #getSubscription()} instead.
|
||||
*
|
||||
* @deprecated
|
||||
* @return the subSubscription the raw bytes of the serialized subscription
|
||||
*/
|
||||
@Deprecated
|
||||
public byte[] getSubSubscription() {
|
||||
return subSubscription;
|
||||
}
|
||||
|
||||
/**
|
||||
* Added only to comply with DynamicSerialize, use
|
||||
* {@link #setSubscription()} instead.
|
||||
*
|
||||
* @deprecated
|
||||
* @param subSubscription
|
||||
* the subSubscription to set
|
||||
*/
|
||||
@Deprecated
|
||||
public void setSubSubscription(byte[] subSubscription) {
|
||||
this.subSubscription = subSubscription;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
|
|
|
@ -28,7 +28,6 @@ import java.util.SortedSet;
|
|||
import com.raytheon.uf.common.datadelivery.registry.DataSetMetaData;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Network;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||
import com.raytheon.uf.common.serialization.SerializationException;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.BandwidthManager;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.RetrievalStatus;
|
||||
|
||||
|
@ -317,7 +316,7 @@ public interface IBandwidthDao {
|
|||
* @return A newly created and persisted BandwidthSubscription Object.
|
||||
*/
|
||||
BandwidthSubscription newBandwidthSubscription(Subscription subscription,
|
||||
Calendar baseReferenceTime) throws SerializationException;
|
||||
Calendar baseReferenceTime);
|
||||
|
||||
/**
|
||||
* Get a SubscriptionRetrievals.
|
||||
|
@ -358,6 +357,14 @@ public interface IBandwidthDao {
|
|||
*/
|
||||
void store(BandwidthAllocation bandwidthAllocation);
|
||||
|
||||
/**
|
||||
* Persist a SubscriptionRetrievalAttributes to the database.
|
||||
*
|
||||
* @param attributes
|
||||
* The SubscriptionRetrievalAttributes to store.
|
||||
*/
|
||||
void store(SubscriptionRetrievalAttributes attributes);
|
||||
|
||||
/**
|
||||
* Persist a List of SubscriptionRetrievals to the database.
|
||||
*
|
||||
|
@ -366,6 +373,15 @@ public interface IBandwidthDao {
|
|||
*/
|
||||
void store(List<SubscriptionRetrieval> retrievals);
|
||||
|
||||
/**
|
||||
* Persist a list of objects to the database.
|
||||
*
|
||||
* @param entities
|
||||
* The entities to store.
|
||||
*/
|
||||
void storeSubscriptionRetrievalAttributes(
|
||||
List<SubscriptionRetrievalAttributes> retrievalAttributes);
|
||||
|
||||
/**
|
||||
* Persist a {@link BandwidthSubscription} to the database.
|
||||
*
|
||||
|
@ -436,4 +452,19 @@ public interface IBandwidthDao {
|
|||
*/
|
||||
List<BandwidthAllocation> getBandwidthAllocationsForNetworkAndBucketStartTime(
|
||||
Network network, long bucketStartTime);
|
||||
|
||||
/**
|
||||
* @param attributes
|
||||
*/
|
||||
void update(SubscriptionRetrievalAttributes attributes);
|
||||
|
||||
/**
|
||||
* Get the {@link SubscriptionRetrievalAttributes} for the
|
||||
* {@link SubscriptionRetrieval}.
|
||||
*
|
||||
* @param retrieval
|
||||
* @return the attributes
|
||||
*/
|
||||
SubscriptionRetrievalAttributes getSubscriptionRetrievalAttributes(
|
||||
SubscriptionRetrieval retrieval);
|
||||
}
|
|
@ -1,22 +1,16 @@
|
|||
package com.raytheon.uf.edex.datadelivery.bandwidth.dao;
|
||||
|
||||
import javax.persistence.CascadeType;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.DiscriminatorValue;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.FetchType;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.Transient;
|
||||
|
||||
import org.hibernate.annotations.IndexColumn;
|
||||
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||
import com.raytheon.uf.common.serialization.SerializationException;
|
||||
import com.raytheon.uf.common.serialization.SerializationUtil;
|
||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
|
||||
/**
|
||||
* Class representing a Subscription that may have been aggregated with other
|
||||
|
@ -32,6 +26,7 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
|
|||
* made it nullable for single table strategy.
|
||||
* Nov 09, 2012 1286 djohnson Add reference back to owning BandwidthSubscription.
|
||||
* Jun 24, 2013 2106 djohnson Add copy constructor.
|
||||
* Jul 11, 2013 2106 djohnson Use SubscriptionPriority enum, lazy load the Subscription object.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -44,23 +39,15 @@ public class SubscriptionRetrieval extends BandwidthAllocation {
|
|||
|
||||
private static final long serialVersionUID = 4563049024191145668L;
|
||||
|
||||
private static final IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(SubscriptionRetrieval.class);
|
||||
|
||||
@Column
|
||||
@DynamicSerializeElement
|
||||
private int dataSetAvailablityDelay;
|
||||
|
||||
@DynamicSerializeElement
|
||||
// Must be nullable because we use a single table strategy
|
||||
@Column(nullable = true, length = 100000)
|
||||
private byte[] subSubscription;
|
||||
|
||||
/**
|
||||
* A link to the owning BandwidthSubscription entity.
|
||||
*/
|
||||
@DynamicSerializeElement
|
||||
@ManyToOne(fetch = FetchType.EAGER, optional = true)
|
||||
@ManyToOne(fetch = FetchType.EAGER, optional = true, cascade = CascadeType.PERSIST)
|
||||
// Must be nullable because we use a single table strategy
|
||||
@IndexColumn(name = "subscriptionid_fk", nullable = true)
|
||||
private BandwidthSubscription bandwidthSubscription;
|
||||
|
@ -73,9 +60,6 @@ public class SubscriptionRetrieval extends BandwidthAllocation {
|
|||
@DynamicSerializeElement
|
||||
private String subsumedBy;
|
||||
|
||||
@Transient
|
||||
private transient Subscription subscription;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
|
@ -94,13 +78,6 @@ public class SubscriptionRetrieval extends BandwidthAllocation {
|
|||
this.setDataSetAvailablityDelay(from.dataSetAvailablityDelay);
|
||||
this.setSubscriptionLatency(from.getSubscriptionLatency());
|
||||
this.setSubsumedBy(from.getSubsumedBy());
|
||||
|
||||
if (from.subSubscription != null) {
|
||||
final int srcLength = from.subSubscription.length;
|
||||
this.subSubscription = new byte[srcLength];
|
||||
System.arraycopy(from.subSubscription, 0, this.subSubscription, 0,
|
||||
srcLength);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -161,66 +138,6 @@ public class SubscriptionRetrieval extends BandwidthAllocation {
|
|||
this.bandwidthSubscription = bandwidthSubscription;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the subSubscription
|
||||
* @throws SerializationException
|
||||
*/
|
||||
public Subscription getSubscription() throws SerializationException {
|
||||
if (subscription == null) {
|
||||
if (subSubscription != null) {
|
||||
subscription = SerializationUtil.transformFromThrift(
|
||||
Subscription.class, subSubscription);
|
||||
} else {
|
||||
statusHandler.handle(Priority.WARN,
|
||||
"Null subSubscription as field, not deserializing.");
|
||||
}
|
||||
|
||||
}
|
||||
return subscription;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param sub
|
||||
* @throws SerializationException
|
||||
*/
|
||||
public void setSubscription(Subscription sub) throws SerializationException {
|
||||
// Set the transient field subscription so that we don't
|
||||
// have to deserialize the subscription if it was set
|
||||
// already.
|
||||
this.subscription = sub;
|
||||
if (sub != null) {
|
||||
this.subSubscription = SerializationUtil.transformToThrift(sub);
|
||||
} else {
|
||||
statusHandler.handle(Priority.WARN,
|
||||
"Null subscription passed as parameter, not serializing.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Added only to comply with DynamicSerialize, use
|
||||
* {@link #getSubscription()} instead.
|
||||
*
|
||||
* @deprecated
|
||||
* @return the subSubscription the raw bytes of the serialized subscription
|
||||
*/
|
||||
@Deprecated
|
||||
public byte[] getSubSubscription() {
|
||||
return subSubscription;
|
||||
}
|
||||
|
||||
/**
|
||||
* Added only to comply with DynamicSerialize, use
|
||||
* {@link #setSubscription()} instead.
|
||||
*
|
||||
* @deprecated
|
||||
* @param subSubscription
|
||||
* the subSubscription to set
|
||||
*/
|
||||
@Deprecated
|
||||
public void setSubSubscription(byte[] subSubscription) {
|
||||
this.subSubscription = subSubscription;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,204 @@
|
|||
package com.raytheon.uf.edex.datadelivery.bandwidth.dao;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.persistence.CascadeType;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.FetchType;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.OneToOne;
|
||||
import javax.persistence.SequenceGenerator;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.Transient;
|
||||
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||
import com.raytheon.uf.common.dataplugin.persist.IPersistableDataObject;
|
||||
import com.raytheon.uf.common.serialization.ISerializableObject;
|
||||
import com.raytheon.uf.common.serialization.SerializationException;
|
||||
import com.raytheon.uf.common.serialization.SerializationUtil;
|
||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.util.IDeepCopyable;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
||||
|
||||
/**
|
||||
* Holds attributes for {@link SubscriptionRetrieval} instances that should be
|
||||
* only loaded on-demand.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jul 11, 2013 2106 djohnson Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @version 1.0
|
||||
*/
|
||||
@Entity
|
||||
@Table(name = "bandwidth_subscription_retrieval_attributes")
|
||||
@SequenceGenerator(name = "BANDWIDTH_SEQ", sequenceName = "bandwidth_seq", allocationSize = 1, initialValue = 1)
|
||||
@DynamicSerialize
|
||||
public class SubscriptionRetrievalAttributes implements
|
||||
IPersistableDataObject<Long>, Serializable, ISerializableObject,
|
||||
IDeepCopyable<SubscriptionRetrievalAttributes> {
|
||||
|
||||
private static final long serialVersionUID = 4563049024191145668L;
|
||||
|
||||
private static final IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(SubscriptionRetrievalAttributes.class);
|
||||
|
||||
@Id
|
||||
@Column(name = "identifier")
|
||||
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "BANDWIDTH_SEQ")
|
||||
@DynamicSerializeElement
|
||||
private long id = BandwidthUtil.DEFAULT_IDENTIFIER;
|
||||
|
||||
@DynamicSerializeElement
|
||||
// Must be nullable because we use a single table strategy
|
||||
@Column(nullable = true)
|
||||
private byte[] subSubscription;
|
||||
|
||||
@Transient
|
||||
private transient Subscription subscription;
|
||||
|
||||
@DynamicSerializeElement
|
||||
@OneToOne(fetch = FetchType.EAGER, optional = false, cascade = CascadeType.PERSIST)
|
||||
private SubscriptionRetrieval subscriptionRetrieval;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public SubscriptionRetrievalAttributes() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy constructor.
|
||||
*
|
||||
* @param from
|
||||
* the instance to copy from
|
||||
*/
|
||||
public SubscriptionRetrievalAttributes(SubscriptionRetrievalAttributes from) {
|
||||
if (from.subSubscription != null) {
|
||||
final int srcLength = from.subSubscription.length;
|
||||
this.subSubscription = new byte[srcLength];
|
||||
System.arraycopy(from.subSubscription, 0, this.subSubscription, 0,
|
||||
srcLength);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public SubscriptionRetrievalAttributes copy() {
|
||||
return new SubscriptionRetrievalAttributes(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the subSubscription
|
||||
* @throws SerializationException
|
||||
*/
|
||||
public Subscription getSubscription() throws SerializationException {
|
||||
if (subscription == null) {
|
||||
if (subSubscription != null) {
|
||||
subscription = SerializationUtil.transformFromThrift(
|
||||
Subscription.class, subSubscription);
|
||||
} else {
|
||||
statusHandler.handle(Priority.WARN,
|
||||
"Null subSubscription as field, not deserializing.");
|
||||
}
|
||||
|
||||
}
|
||||
return subscription;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param sub
|
||||
* @throws SerializationException
|
||||
*/
|
||||
public void setSubscription(Subscription sub) throws SerializationException {
|
||||
// Set the transient field subscription so that we don't
|
||||
// have to deserialize the subscription if it was set
|
||||
// already.
|
||||
this.subscription = sub;
|
||||
if (sub != null) {
|
||||
this.subSubscription = SerializationUtil.transformToThrift(sub);
|
||||
} else {
|
||||
statusHandler.handle(Priority.WARN,
|
||||
"Null subscription passed as parameter, not serializing.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Added only to comply with DynamicSerialize, use
|
||||
* {@link #getSubscription()} instead.
|
||||
*
|
||||
* @deprecated
|
||||
* @return the subSubscription the raw bytes of the serialized subscription
|
||||
*/
|
||||
@Deprecated
|
||||
public byte[] getSubSubscription() {
|
||||
return subSubscription;
|
||||
}
|
||||
|
||||
/**
|
||||
* Added only to comply with DynamicSerialize, use
|
||||
* {@link #setSubscription()} instead.
|
||||
*
|
||||
* @deprecated
|
||||
* @param subSubscription
|
||||
* the subSubscription to set
|
||||
*/
|
||||
@Deprecated
|
||||
public void setSubSubscription(byte[] subSubscription) {
|
||||
this.subSubscription = subSubscription;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public Long getIdentifier() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the id
|
||||
*/
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param id
|
||||
* the id to set
|
||||
*/
|
||||
public void setId(long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param subscriptionRetrieval
|
||||
*/
|
||||
public void setSubscriptionRetrieval(
|
||||
SubscriptionRetrieval subscriptionRetrieval) {
|
||||
this.subscriptionRetrieval = subscriptionRetrieval;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public SubscriptionRetrieval getSubscriptionRetrieval() {
|
||||
return this.subscriptionRetrieval;
|
||||
}
|
||||
}
|
|
@ -33,12 +33,12 @@ import org.springframework.transaction.annotation.Transactional;
|
|||
import com.raytheon.uf.common.datadelivery.registry.DataSetMetaData;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Network;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||
import com.raytheon.uf.common.serialization.SerializationException;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthAllocation;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthDataSetUpdate;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthSubscription;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.IBandwidthDao;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrieval;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrievalAttributes;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.RetrievalStatus;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
||||
|
||||
|
@ -76,6 +76,8 @@ public class HibernateBandwidthDao implements IBandwidthDao {
|
|||
|
||||
private IBandwidthDataSetUpdateDao bandwidthDataSetUpdateDao;
|
||||
|
||||
private ISubscriptionRetrievalAttributesDao subscriptionRetrievalAttributesDao;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
|
@ -269,8 +271,7 @@ public class HibernateBandwidthDao implements IBandwidthDao {
|
|||
*/
|
||||
@Override
|
||||
public BandwidthSubscription newBandwidthSubscription(
|
||||
Subscription subscription, Calendar baseReferenceTime)
|
||||
throws SerializationException {
|
||||
Subscription subscription, Calendar baseReferenceTime) {
|
||||
BandwidthSubscription entity = BandwidthUtil
|
||||
.getSubscriptionDaoForSubscription(subscription,
|
||||
baseReferenceTime);
|
||||
|
@ -305,6 +306,11 @@ public class HibernateBandwidthDao implements IBandwidthDao {
|
|||
public void remove(BandwidthSubscription subscriptionDao) {
|
||||
List<SubscriptionRetrieval> bandwidthReservations = subscriptionRetrievalDao
|
||||
.getBySubscriptionId(subscriptionDao.getIdentifier());
|
||||
for (SubscriptionRetrieval retrieval : bandwidthReservations) {
|
||||
subscriptionRetrievalAttributesDao
|
||||
.delete(subscriptionRetrievalAttributesDao
|
||||
.getBySubscriptionRetrieval(retrieval));
|
||||
}
|
||||
subscriptionRetrievalDao.deleteAll(bandwidthReservations);
|
||||
bandwidthSubscriptionDao.delete(subscriptionDao);
|
||||
}
|
||||
|
@ -442,6 +448,22 @@ public class HibernateBandwidthDao implements IBandwidthDao {
|
|||
this.bandwidthDataSetUpdateDao = bandwidthDataSetUpdateDao;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the subscriptionRetrievalAttributesDao
|
||||
*/
|
||||
public ISubscriptionRetrievalAttributesDao getSubscriptionRetrievalAttributesDao() {
|
||||
return subscriptionRetrievalAttributesDao;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param subscriptionRetrievalAttributesDao
|
||||
* the subscriptionRetrievalAttributesDao to set
|
||||
*/
|
||||
public void setSubscriptionRetrievalAttributesDao(
|
||||
ISubscriptionRetrievalAttributesDao subscriptionRetrievalAttributesDao) {
|
||||
this.subscriptionRetrievalAttributesDao = subscriptionRetrievalAttributesDao;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
|
@ -456,8 +478,40 @@ public class HibernateBandwidthDao implements IBandwidthDao {
|
|||
@Override
|
||||
public List<BandwidthAllocation> getBandwidthAllocationsForNetworkAndBucketStartTime(
|
||||
Network network, long bucketStartTime) {
|
||||
return bandwidthAllocationDao.getByNetworkAndBucketStartTime(
|
||||
network, bucketStartTime);
|
||||
return bandwidthAllocationDao.getByNetworkAndBucketStartTime(network,
|
||||
bucketStartTime);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void store(SubscriptionRetrievalAttributes attributes) {
|
||||
subscriptionRetrievalAttributesDao.create(attributes);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void storeSubscriptionRetrievalAttributes(
|
||||
List<SubscriptionRetrievalAttributes> retrievalAttributes) {
|
||||
subscriptionRetrievalAttributesDao.persistAll(retrievalAttributes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(SubscriptionRetrievalAttributes attributes) {
|
||||
subscriptionRetrievalAttributesDao.update(attributes);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public SubscriptionRetrievalAttributes getSubscriptionRetrievalAttributes(
|
||||
SubscriptionRetrieval retrieval) {
|
||||
return subscriptionRetrievalAttributesDao
|
||||
.getBySubscriptionRetrieval(retrieval);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||
import com.raytheon.uf.edex.database.init.DbInit;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthBucket;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.IBandwidthDbInit;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrievalAttributes;
|
||||
|
||||
/**
|
||||
* The DbInit class is responsible for ensuring that the appropriate tables are
|
||||
|
@ -42,6 +43,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.dao.IBandwidthDbInit;
|
|||
* Oct 26, 2012 1286 djohnson Renamed to Hibernate specific.
|
||||
* Apr 30, 2013 1960 djohnson Extend the generalized DbInit.
|
||||
* Jun 24, 2013 2106 djohnson Add {@link BandwidthBucket} to annotated classes.
|
||||
* Jul 11, 2013 2106 djohnson Add {@link SubscriptionRetrievalAttributes}.
|
||||
* </pre>
|
||||
*
|
||||
* @author jspinks
|
||||
|
@ -79,6 +81,7 @@ public class HibernateBandwidthDbInit extends DbInit implements
|
|||
aConfig.addAnnotatedClass(com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthSubscription.class);
|
||||
aConfig.addAnnotatedClass(com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrieval.class);
|
||||
aConfig.addAnnotatedClass(com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthAllocation.class);
|
||||
aConfig.addAnnotatedClass(com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrievalAttributes.class);
|
||||
return aConfig;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.uf.edex.datadelivery.bandwidth.hibernate;
|
||||
|
||||
import com.raytheon.uf.edex.database.dao.ISessionManagedDao;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrieval;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrievalAttributes;
|
||||
|
||||
/**
|
||||
* DAO for {@link SubscriptionRetrievalAttributes} instances.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jul 11, 2013 2106 djohnson Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author djohnson
|
||||
* @version 1.0
|
||||
*/
|
||||
interface ISubscriptionRetrievalAttributesDao extends
|
||||
ISessionManagedDao<Long, SubscriptionRetrievalAttributes> {
|
||||
|
||||
/**
|
||||
* @param retrieval
|
||||
* @return
|
||||
*/
|
||||
SubscriptionRetrievalAttributes getBySubscriptionRetrieval(
|
||||
SubscriptionRetrieval retrieval);
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.uf.edex.datadelivery.bandwidth.hibernate;
|
||||
|
||||
import com.raytheon.uf.edex.database.dao.SessionManagedDao;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrieval;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrievalAttributes;
|
||||
|
||||
/**
|
||||
* * DAO that handles {@link SubscriptionRetrievalAttributes} instances.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jul 11, 2013 2106 djohnson Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author djohnson
|
||||
* @version 1.0
|
||||
*/
|
||||
public class SubscriptionRetrievalAttributesDao extends
|
||||
SessionManagedDao<Long, SubscriptionRetrievalAttributes> implements
|
||||
ISubscriptionRetrievalAttributesDao {
|
||||
|
||||
private static final String GET_BY_SUBSCRIPTIONRETRIEVAL = "from SubscriptionRetrievalAttributes sr where "
|
||||
+ "sr.subscriptionRetrieval.id = :id";
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
protected Class<SubscriptionRetrievalAttributes> getEntityClass() {
|
||||
return SubscriptionRetrievalAttributes.class;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public SubscriptionRetrievalAttributes getBySubscriptionRetrieval(
|
||||
SubscriptionRetrieval retrieval) {
|
||||
return uniqueResult(GET_BY_SUBSCRIPTIONRETRIEVAL, "id",
|
||||
retrieval.getId());
|
||||
}
|
||||
|
||||
}
|
|
@ -4,6 +4,7 @@ import java.util.List;
|
|||
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthSubscription;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrieval;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.processing.BandwidthSubscriptionContainer;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -33,13 +34,15 @@ public interface ISubscriptionAggregator {
|
|||
* Generate a List of SubscriptionRetrieval Object for the provided
|
||||
* BandwidthSubscription Objects.
|
||||
*
|
||||
* @param newSubscriptions
|
||||
* A List of BandwidthSubscription Objects which were just added
|
||||
* @param container
|
||||
* A container with a List of BandwidthSubscription Objects which
|
||||
* were just added, and their subscription
|
||||
*
|
||||
* @return The SubscriptionRetrieval Objects used to fulfill the
|
||||
* BandwidthSubscription Objects provided.
|
||||
*/
|
||||
List<SubscriptionRetrieval> aggregate(List<BandwidthSubscription> newSubscriptions);
|
||||
List<SubscriptionRetrieval> aggregate(
|
||||
BandwidthSubscriptionContainer container);
|
||||
|
||||
/**
|
||||
* This method is called once all the SubscriptionRetrievals for a
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.uf.edex.datadelivery.bandwidth.processing;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthSubscription;
|
||||
|
||||
/**
|
||||
* Container class to transport {@link BandwidthSubscription} instances with
|
||||
* their {@link Subscription} since they no longer embed a copy.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jul 11, 2013 2106 djohnson Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author djohnson
|
||||
* @version 1.0
|
||||
*/
|
||||
public class BandwidthSubscriptionContainer {
|
||||
public final Subscription subscription;
|
||||
|
||||
public final List<BandwidthSubscription> newSubscriptions;
|
||||
|
||||
public BandwidthSubscriptionContainer(Subscription subscription,
|
||||
List<BandwidthSubscription> newSubscriptions) {
|
||||
this.subscription = subscription;
|
||||
this.newSubscriptions = newSubscriptions;
|
||||
}
|
||||
}
|
|
@ -4,7 +4,6 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||
import com.raytheon.uf.common.serialization.SerializationException;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
|
@ -32,6 +31,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
|||
* Nov 09, 2012 1286 djohnson Rename interface to comply with standards.
|
||||
* Nov 20, 2012 1286 djohnson Change some logging to debug.
|
||||
* Jun 13, 2013 2095 djohnson No need to query the database, we are only receiving new bandwidth subscriptions.
|
||||
* Jul 11, 2013 2106 djohnson aggregate() signature changed.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -51,7 +51,7 @@ public class SimpleSubscriptionAggregator implements ISubscriptionAggregator {
|
|||
|
||||
@Override
|
||||
public List<SubscriptionRetrieval> aggregate(
|
||||
List<BandwidthSubscription> newSubscriptions) {
|
||||
BandwidthSubscriptionContainer container) {
|
||||
|
||||
List<SubscriptionRetrieval> subscriptionRetrievals = new ArrayList<SubscriptionRetrieval>();
|
||||
|
||||
|
@ -59,13 +59,12 @@ public class SimpleSubscriptionAggregator implements ISubscriptionAggregator {
|
|||
// necessary retrievals without regards to 'sharing' retrievals across
|
||||
// subscriptions.
|
||||
|
||||
for (BandwidthSubscription subDao : newSubscriptions) {
|
||||
for (BandwidthSubscription subDao : container.newSubscriptions) {
|
||||
|
||||
// First check to see if the Object already was scheduled
|
||||
// (i.e. has SubscriptionRetrievals associated with it) if
|
||||
// not, create a SubscriptionRetrieval for the subscription
|
||||
|
||||
try {
|
||||
SubscriptionRetrieval subscriptionRetrieval = new SubscriptionRetrieval();
|
||||
// Link this SubscriptionRetrieval with the subscription.
|
||||
subscriptionRetrieval.setBandwidthSubscription(subDao);
|
||||
|
@ -74,28 +73,18 @@ public class SimpleSubscriptionAggregator implements ISubscriptionAggregator {
|
|||
.setAgentType(SubscriptionRetrievalAgent.SUBSCRIPTION_AGENT);
|
||||
subscriptionRetrieval.setStatus(RetrievalStatus.PROCESSING);
|
||||
subscriptionRetrieval.setPriority(subDao.getPriority());
|
||||
subscriptionRetrieval.setEstimatedSize(subDao
|
||||
.getEstimatedSize());
|
||||
subscriptionRetrieval.setEstimatedSize(subDao.getEstimatedSize());
|
||||
|
||||
// Create a Retrieval Object for the Subscription
|
||||
Subscription sub = subDao.getSubscription();
|
||||
Subscription sub = container.subscription;
|
||||
|
||||
subscriptionRetrieval.setSubscriptionLatency(BandwidthUtil
|
||||
.getSubscriptionLatency(sub));
|
||||
subscriptionRetrieval
|
||||
.setDataSetAvailablityDelay(BandwidthUtil
|
||||
subscriptionRetrieval.setDataSetAvailablityDelay(BandwidthUtil
|
||||
.getDataSetAvailablityDelay(sub));
|
||||
|
||||
subscriptionRetrieval.setSubscription(sub);
|
||||
subscriptionRetrievals.add(subscriptionRetrieval);
|
||||
|
||||
} catch (SerializationException e) {
|
||||
statusHandler
|
||||
.warn("Trapped SerializationException attempting to process subscription ["
|
||||
+ subDao.getIdentifier()
|
||||
+ "]: Subscription will not be scheduled.");
|
||||
}
|
||||
|
||||
if (statusHandler.isPriorityEnabled(Priority.DEBUG)) {
|
||||
statusHandler
|
||||
.debug("Created ["
|
||||
|
|
|
@ -4,6 +4,7 @@ import java.io.Serializable;
|
|||
import java.util.Calendar;
|
||||
|
||||
import com.raytheon.uf.common.datadelivery.registry.Network;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription.SubscriptionPriority;
|
||||
import com.raytheon.uf.common.util.IDeepCopyable;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthAllocation;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
||||
|
@ -20,6 +21,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
|||
* Oct 02, 2012 726 jspinks Initial release.
|
||||
* Nov 09, 2012 1286 djohnson Add getters for bytes.
|
||||
* Jun 24, 2013 2106 djohnson Add copy constructor.
|
||||
* Jul 11, 2013 2106 djohnson Use SubscriptionPriority enum.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -35,7 +37,7 @@ public class BandwidthReservation implements Serializable,
|
|||
|
||||
private Network network;
|
||||
|
||||
private double priority;
|
||||
private SubscriptionPriority priority;
|
||||
|
||||
private long size;
|
||||
|
||||
|
@ -125,14 +127,14 @@ public class BandwidthReservation implements Serializable,
|
|||
* @param priority
|
||||
* the priority to set
|
||||
*/
|
||||
public void setPriority(double priority) {
|
||||
public void setPriority(SubscriptionPriority priority) {
|
||||
this.priority = priority;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the priority
|
||||
*/
|
||||
public double getPriority() {
|
||||
public SubscriptionPriority getPriority() {
|
||||
return priority;
|
||||
}
|
||||
|
||||
|
|
|
@ -50,6 +50,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.db.RetrievalRequestRecord;
|
|||
* Feb 05, 2013 1580 mpduff EventBus refactor.
|
||||
* Jun 24, 2013 2106 djohnson Set actual start time when sending to retrieval rather than overwrite scheduled start.
|
||||
* Jul 09, 2013 2106 djohnson Dependency inject registry handlers.
|
||||
* Jul 11, 2013 2106 djohnson Use SubscriptionPriority enum.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -87,7 +88,8 @@ public class SubscriptionRetrievalAgent extends
|
|||
throws EdexException {
|
||||
Subscription sub;
|
||||
try {
|
||||
sub = retrieval.getSubscription();
|
||||
sub = bandwidthDao.getSubscriptionRetrievalAttributes(retrieval)
|
||||
.getSubscription();
|
||||
} catch (SerializationException e) {
|
||||
throw new EdexException("Unable to deserialize the subscription.",
|
||||
e);
|
||||
|
@ -102,7 +104,7 @@ public class SubscriptionRetrievalAgent extends
|
|||
return;
|
||||
}
|
||||
bundle.setBundleId(sub.getSubscriptionId());
|
||||
bundle.setPriority((int) retrieval.getPriority());
|
||||
bundle.setPriority(retrieval.getPriority());
|
||||
bundle.setProvider(provider);
|
||||
bundle.setConnection(provider.getConnection());
|
||||
bundle.setSubscription(sub);
|
||||
|
@ -178,11 +180,8 @@ public class SubscriptionRetrievalAgent extends
|
|||
String owner = bundle.getSubscription().getOwner();
|
||||
String provider = bundle.getSubscription().getProvider();
|
||||
|
||||
int priority = defaultPriority;
|
||||
Integer bundlePriority = bundle.getPriority();
|
||||
if (bundlePriority != null) {
|
||||
priority = bundlePriority.intValue();
|
||||
}
|
||||
int priority = (bundle.getPriority() != null) ? bundle
|
||||
.getPriority().getPriorityValue() : defaultPriority;
|
||||
Date insertTime = TimeUtil.newCalendar().getTime();
|
||||
|
||||
List<RetrievalRequestRecord> requestRecords = new ArrayList<RetrievalRequestRecord>(
|
||||
|
|
|
@ -27,6 +27,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthSubscription;
|
|||
* Feb 14, 2013 1595 djohnson Use subscription rescheduling strategy.
|
||||
* Jun 13, 2013 2095 djohnson Point subscriptions don't check for dataset updates on aggregation.
|
||||
* Jun 25, 2013 2106 djohnson CheapClone was cheap in ease, not performance.
|
||||
* Jul 11, 2013 2106 djohnson Use SubscriptionPriority enum.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -204,8 +205,7 @@ public class BandwidthUtil {
|
|||
* on error serializing the subscription
|
||||
*/
|
||||
public static BandwidthSubscription getSubscriptionDaoForSubscription(
|
||||
Subscription subscription, Calendar baseReferenceTime)
|
||||
throws SerializationException {
|
||||
Subscription subscription, Calendar baseReferenceTime) {
|
||||
BandwidthSubscription dao = new BandwidthSubscription();
|
||||
|
||||
dao.setDataSetName(subscription.getDataSetName());
|
||||
|
@ -213,11 +213,10 @@ public class BandwidthUtil {
|
|||
dao.setOwner(subscription.getOwner());
|
||||
dao.setName(subscription.getName());
|
||||
dao.setEstimatedSize(subscription.getDataSetSize());
|
||||
dao.setSubscription(subscription);
|
||||
dao.setRoute(subscription.getRoute());
|
||||
dao.setBaseReferenceTime(baseReferenceTime);
|
||||
dao.setCycle(baseReferenceTime.get(Calendar.HOUR_OF_DAY));
|
||||
dao.setPriority(subscription.getPriority().getPriorityValue());
|
||||
dao.setPriority(subscription.getPriority());
|
||||
dao.setRegistryId(subscription.getId());
|
||||
dao.setCheckForDataSetUpdate(subscription.getDataSetType() != DataType.POINT);
|
||||
return dao;
|
||||
|
|
|
@ -71,6 +71,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthAllocation;
|
|||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthBucket;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthSubscription;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrieval;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrievalAttributes;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.RetrievalPlan;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.RetrievalPlanTest;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.RetrievalStatus;
|
||||
|
@ -100,6 +101,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.RetrievalManagerNotifyEvent;
|
|||
* Jun 03, 2013 2095 djohnson Move getPointDataSet to superclass.
|
||||
* Jun 25, 2013 2106 djohnson Set subscription latency, access bucket allocations through RetrievalPlan.
|
||||
* Jul 09, 2013 2106 djohnson InMemoryBandwidthManager no longer receives updates from the EventBus.
|
||||
* Jul 11, 2013 2106 djohnson Use SubscriptionPriority enum.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -251,10 +253,14 @@ public class BandwidthManagerIntTest extends AbstractWfoBandwidthManagerIntTest
|
|||
subscription.getDataSetName(), cal);
|
||||
assertEquals("Didn't find the subscription retrieval as expected!", 1,
|
||||
bandwidthAllocations.size());
|
||||
|
||||
SubscriptionRetrievalAttributes attributes = bandwidthDao
|
||||
.getSubscriptionRetrievalAttributes(bandwidthAllocations
|
||||
.iterator().next());
|
||||
assertEquals(
|
||||
"Didn't find the metadata date on the retrieval's subscription!",
|
||||
metadata.getDate(), bandwidthAllocations.iterator().next()
|
||||
.getSubscription().getTime().getStartDate());
|
||||
metadata.getDate(), attributes.getSubscription().getTime()
|
||||
.getStartDate());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -283,7 +289,11 @@ public class BandwidthManagerIntTest extends AbstractWfoBandwidthManagerIntTest
|
|||
assertEquals("Incorrect number of subscription retrievals generated!",
|
||||
1, retrievals.size());
|
||||
SubscriptionRetrieval retrieval = retrievals.iterator().next();
|
||||
Subscription retrievalSub = retrieval.getSubscription();
|
||||
|
||||
Subscription retrievalSub = bandwidthDao
|
||||
.getSubscriptionRetrievalAttributes(retrieval)
|
||||
.getSubscription();
|
||||
|
||||
assertEquals(
|
||||
"The update's url doesn't seem to have been persisted to the retrieval!",
|
||||
update.getUrl(), retrievalSub.getUrl());
|
||||
|
@ -431,14 +441,12 @@ public class BandwidthManagerIntTest extends AbstractWfoBandwidthManagerIntTest
|
|||
BandwidthAllocation unscheduledAllocation = iter.next();
|
||||
assertEquals(
|
||||
"The first subscription with lower priority should have been the one unscheduled.",
|
||||
subscription.getPriority().getPriorityValue(),
|
||||
unscheduledAllocation.getPriority(), 0.0);
|
||||
subscription.getPriority(), unscheduledAllocation.getPriority());
|
||||
|
||||
unscheduledAllocation = iter.next();
|
||||
assertEquals(
|
||||
"The first subscription with lower priority should have been the one unscheduled.",
|
||||
subscription.getPriority().getPriorityValue(),
|
||||
unscheduledAllocation.getPriority(), 0.0);
|
||||
subscription.getPriority(), unscheduledAllocation.getPriority());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -49,6 +49,9 @@ import com.raytheon.uf.common.datadelivery.registry.AdhocSubscriptionFixture;
|
|||
import com.raytheon.uf.common.datadelivery.registry.Network;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription.SubscriptionPriority;
|
||||
import com.raytheon.uf.common.datadelivery.registry.handlers.DataDeliveryHandlers;
|
||||
import com.raytheon.uf.common.datadelivery.registry.handlers.ISubscriptionHandler;
|
||||
import com.raytheon.uf.common.registry.handler.RegistryHandlerException;
|
||||
import com.raytheon.uf.common.serialization.SerializationUtil;
|
||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthAllocation;
|
||||
|
@ -75,6 +78,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
|||
* May 20, 2013 1650 djohnson Add test for returning required dataset size.
|
||||
* Jun 12, 2013 2038 djohnson Add test for returning required dataset size on subscription update.
|
||||
* Jun 25, 2013 2106 djohnson BandwidthBucket is a big boy class now.
|
||||
* Jul 11, 2013 2106 djohnson Use SubscriptionPriority enum.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -107,17 +111,23 @@ public class BandwidthServiceIntTest extends AbstractWfoBandwidthManagerIntTest
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testProposeNetworkBandwidthReturnsSubscriptionsUnableToFit() {
|
||||
public void testProposeNetworkBandwidthReturnsSubscriptionsUnableToFit()
|
||||
throws RegistryHandlerException {
|
||||
|
||||
// Two subscriptions that will fill up a bucket exactly
|
||||
Subscription subscription = createSubscriptionThatFillsHalfABucket();
|
||||
Subscription subscription2 = createSubscriptionThatFillsHalfABucket();
|
||||
|
||||
final ISubscriptionHandler subscriptionHandler = DataDeliveryHandlers
|
||||
.getSubscriptionHandler();
|
||||
subscriptionHandler.store(subscription);
|
||||
subscriptionHandler.store(subscription2);
|
||||
|
||||
bandwidthManager.schedule(subscription);
|
||||
bandwidthManager.schedule(subscription2);
|
||||
|
||||
// Now we propose dropping the bandwidth by just one kb/s
|
||||
Set<Subscription> results = service
|
||||
Set<String> results = service
|
||||
.proposeBandwidthForNetworkInKilobytes(Network.OPSNET,
|
||||
retrievalManager.getPlan(Network.OPSNET)
|
||||
.getDefaultBandwidth() - 1);
|
||||
|
@ -128,17 +138,23 @@ public class BandwidthServiceIntTest extends AbstractWfoBandwidthManagerIntTest
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testProposeNetworkBandwidthReturnsNoSubscriptionsWhenAbleToFit() {
|
||||
public void testProposeNetworkBandwidthReturnsNoSubscriptionsWhenAbleToFit()
|
||||
throws RegistryHandlerException {
|
||||
|
||||
// Two subscriptions that will fill up only a third of a bucket
|
||||
Subscription subscription = createSubscriptionThatFillsAThirdOfABucket();
|
||||
Subscription subscription2 = createSubscriptionThatFillsAThirdOfABucket();
|
||||
|
||||
ISubscriptionHandler subscriptionHandler = DataDeliveryHandlers
|
||||
.getSubscriptionHandler();
|
||||
subscriptionHandler.store(subscription);
|
||||
subscriptionHandler.store(subscription2);
|
||||
|
||||
bandwidthManager.schedule(subscription);
|
||||
bandwidthManager.schedule(subscription2);
|
||||
|
||||
// Now we propose dropping the bandwidth by just one kb/s
|
||||
Set<Subscription> results = service
|
||||
Set<String> results = service
|
||||
.proposeBandwidthForNetworkInKilobytes(Network.OPSNET,
|
||||
retrievalManager.getPlan(Network.OPSNET)
|
||||
.getDefaultBandwidth() - 1);
|
||||
|
@ -683,7 +699,7 @@ public class BandwidthServiceIntTest extends AbstractWfoBandwidthManagerIntTest
|
|||
allocation.setStartTime(cal);
|
||||
allocation.setEndTime(cal);
|
||||
allocation.setNetwork(subscription.getRoute());
|
||||
allocation.setPriority(2);
|
||||
allocation.setPriority(SubscriptionPriority.NORMAL);
|
||||
allocation.setAgentType("someAgent");
|
||||
allocation.setEstimatedSize(subscription.getDataSetSize() / 2);
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ import org.hibernate.HibernateException;
|
|||
* @version 1.0
|
||||
*/
|
||||
public class H2Dialect extends org.hibernate.dialect.H2Dialect {
|
||||
private static final int LARGE_DEFAULT_LENGTH = 3000;
|
||||
private static final int LARGE_DEFAULT_LENGTH = 10000;
|
||||
|
||||
@Override
|
||||
public String getTypeName(int code, int length, int precision, int scale)
|
||||
|
|
|
@ -55,6 +55,8 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthDataSetUpdate;
|
|||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthSubscription;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.IBandwidthDao;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrieval;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrievalAttributes;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrievalAttributesFixture;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrievalFixture;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.RetrievalStatus;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
||||
|
@ -375,19 +377,26 @@ public abstract class AbstractBandwidthDaoTest<T extends IBandwidthDao> {
|
|||
@Test
|
||||
public void testGetSubscriptionRetrievalsByProviderAndDataSet()
|
||||
throws SerializationException {
|
||||
|
||||
// These two have the same dataset name and provider
|
||||
SubscriptionRetrieval entity1 = SubscriptionRetrievalFixture.INSTANCE
|
||||
SubscriptionRetrievalAttributes entity1 = SubscriptionRetrievalAttributesFixture.INSTANCE
|
||||
.get(1);
|
||||
SubscriptionRetrieval entity2 = SubscriptionRetrievalFixture.INSTANCE
|
||||
SubscriptionRetrievalAttributes entity2 = SubscriptionRetrievalAttributesFixture.INSTANCE
|
||||
.get(1);
|
||||
// This one does not
|
||||
SubscriptionRetrieval entity3 = SubscriptionRetrievalFixture.INSTANCE
|
||||
SubscriptionRetrievalAttributes entity3 = SubscriptionRetrievalAttributesFixture.INSTANCE
|
||||
.get(2);
|
||||
|
||||
dao.store(entity1.getBandwidthSubscription());
|
||||
dao.store(entity2.getBandwidthSubscription());
|
||||
dao.store(entity3.getBandwidthSubscription());
|
||||
dao.store(Arrays.asList(entity1, entity2, entity3));
|
||||
dao.storeBandwidthSubscriptions(Arrays.asList(entity1
|
||||
.getSubscriptionRetrieval().getBandwidthSubscription(), entity2
|
||||
.getSubscriptionRetrieval().getBandwidthSubscription(), entity3
|
||||
.getSubscriptionRetrieval().getBandwidthSubscription()));
|
||||
dao.store(Arrays.<SubscriptionRetrieval> asList(
|
||||
entity1.getSubscriptionRetrieval(),
|
||||
entity2.getSubscriptionRetrieval(),
|
||||
entity3.getSubscriptionRetrieval()));
|
||||
dao.storeSubscriptionRetrievalAttributes(Arrays.asList(entity1,
|
||||
entity2, entity3));
|
||||
|
||||
final Subscription subscription = entity1.getSubscription();
|
||||
final String expectedProvider = subscription.getProvider();
|
||||
|
@ -401,10 +410,11 @@ public abstract class AbstractBandwidthDaoTest<T extends IBandwidthDao> {
|
|||
|
||||
for (SubscriptionRetrieval retrieval : results) {
|
||||
assertEquals("Incorrect provider found.",
|
||||
subscription.getProvider(), retrieval.getSubscription()
|
||||
.getProvider());
|
||||
subscription.getProvider(), retrieval
|
||||
.getBandwidthSubscription().getProvider());
|
||||
assertEquals("Incorrect data set found.",
|
||||
subscription.getDataSetName(), retrieval.getSubscription()
|
||||
subscription.getDataSetName(), retrieval
|
||||
.getBandwidthSubscription()
|
||||
.getDataSetName());
|
||||
}
|
||||
}
|
||||
|
@ -413,20 +423,22 @@ public abstract class AbstractBandwidthDaoTest<T extends IBandwidthDao> {
|
|||
public void testGetSubscriptionRetrievalsByProviderDataSetAndBaseReferenceTime()
|
||||
throws SerializationException {
|
||||
// These two have the same dataset name and provider
|
||||
SubscriptionRetrieval entity1 = SubscriptionRetrievalFixture.INSTANCE
|
||||
SubscriptionRetrievalAttributes entity1 = SubscriptionRetrievalAttributesFixture.INSTANCE
|
||||
.get(1);
|
||||
SubscriptionRetrieval entity2 = SubscriptionRetrievalFixture.INSTANCE
|
||||
SubscriptionRetrievalAttributes entity2 = SubscriptionRetrievalAttributesFixture.INSTANCE
|
||||
.get(1);
|
||||
// This one does not
|
||||
SubscriptionRetrieval entity3 = SubscriptionRetrievalFixture.INSTANCE
|
||||
SubscriptionRetrievalAttributes entity3 = SubscriptionRetrievalAttributesFixture.INSTANCE
|
||||
.get(2);
|
||||
|
||||
// Still have to persist the actual subscription daos
|
||||
final BandwidthSubscription subDao1 = entity1
|
||||
.getSubscriptionRetrieval()
|
||||
.getBandwidthSubscription();
|
||||
final BandwidthSubscription subDao2 = entity2
|
||||
.getSubscriptionRetrieval()
|
||||
.getBandwidthSubscription();
|
||||
final BandwidthSubscription subDao3 = entity3
|
||||
.getSubscriptionRetrieval()
|
||||
.getBandwidthSubscription();
|
||||
|
||||
// Give each a unique time
|
||||
|
@ -439,16 +451,14 @@ public abstract class AbstractBandwidthDaoTest<T extends IBandwidthDao> {
|
|||
three.add(Calendar.HOUR, 1);
|
||||
subDao3.setBaseReferenceTime(three);
|
||||
|
||||
// This persists the subscription dao objects and sets them on the
|
||||
// retrievals
|
||||
entity1.setBandwidthSubscription(dao.newBandwidthSubscription(
|
||||
subDao1.getSubscription(), subDao1.getBaseReferenceTime()));
|
||||
entity2.setBandwidthSubscription(dao.newBandwidthSubscription(
|
||||
subDao2.getSubscription(), subDao2.getBaseReferenceTime()));
|
||||
entity3.setBandwidthSubscription(dao.newBandwidthSubscription(
|
||||
subDao3.getSubscription(), subDao3.getBaseReferenceTime()));
|
||||
|
||||
dao.store(Arrays.asList(entity1, entity2, entity3));
|
||||
dao.storeBandwidthSubscriptions(Arrays
|
||||
.asList(subDao1, subDao2, subDao3));
|
||||
dao.store(Arrays.<SubscriptionRetrieval> asList(
|
||||
entity1.getSubscriptionRetrieval(),
|
||||
entity2.getSubscriptionRetrieval(),
|
||||
entity3.getSubscriptionRetrieval()));
|
||||
dao.storeSubscriptionRetrievalAttributes(Arrays.asList(entity1,
|
||||
entity2, entity3));
|
||||
|
||||
final Subscription subscription = entity1.getSubscription();
|
||||
final String expectedProvider = subscription.getProvider();
|
||||
|
@ -461,7 +471,8 @@ public abstract class AbstractBandwidthDaoTest<T extends IBandwidthDao> {
|
|||
1, results.size());
|
||||
|
||||
SubscriptionRetrieval result = results.iterator().next();
|
||||
final Subscription resultSubscription = result.getSubscription();
|
||||
final BandwidthSubscription resultSubscription = result
|
||||
.getBandwidthSubscription();
|
||||
assertEquals("Incorrect provider found.", subscription.getProvider(),
|
||||
resultSubscription.getProvider());
|
||||
assertEquals("Incorrect data set found.",
|
||||
|
@ -520,41 +531,36 @@ public abstract class AbstractBandwidthDaoTest<T extends IBandwidthDao> {
|
|||
public void testQuerySubscriptionRetrievalsBySubscriptionId()
|
||||
throws SerializationException {
|
||||
// These two have the same dataset name and provider
|
||||
SubscriptionRetrieval entity1 = SubscriptionRetrievalFixture.INSTANCE
|
||||
SubscriptionRetrievalAttributes entity1 = SubscriptionRetrievalAttributesFixture.INSTANCE
|
||||
.get(1);
|
||||
SubscriptionRetrieval entity2 = SubscriptionRetrievalFixture.INSTANCE
|
||||
SubscriptionRetrievalAttributes entity2 = SubscriptionRetrievalAttributesFixture.INSTANCE
|
||||
.get(1);
|
||||
// This one does not
|
||||
SubscriptionRetrieval entity3 = SubscriptionRetrievalFixture.INSTANCE
|
||||
SubscriptionRetrievalAttributes entity3 = SubscriptionRetrievalAttributesFixture.INSTANCE
|
||||
.get(2);
|
||||
|
||||
// Still have to persist the actual subscription daos
|
||||
final BandwidthSubscription subDao1 = entity1
|
||||
.getBandwidthSubscription();
|
||||
final BandwidthSubscription subDao2 = entity2
|
||||
.getBandwidthSubscription();
|
||||
final BandwidthSubscription subDao3 = entity3
|
||||
.getBandwidthSubscription();
|
||||
dao.storeBandwidthSubscriptions(Arrays.asList(entity1
|
||||
.getSubscriptionRetrieval().getBandwidthSubscription(), entity2
|
||||
.getSubscriptionRetrieval().getBandwidthSubscription(), entity3
|
||||
.getSubscriptionRetrieval().getBandwidthSubscription()));
|
||||
dao.store(Arrays.<SubscriptionRetrieval> asList(
|
||||
entity1.getSubscriptionRetrieval(),
|
||||
entity2.getSubscriptionRetrieval(),
|
||||
entity3.getSubscriptionRetrieval()));
|
||||
dao.storeSubscriptionRetrievalAttributes(Arrays.asList(entity1,
|
||||
entity2, entity3));
|
||||
|
||||
// This persists the subscription dao objects and sets them on the
|
||||
// retrievals
|
||||
entity1.setBandwidthSubscription(dao.newBandwidthSubscription(
|
||||
subDao1.getSubscription(), subDao1.getBaseReferenceTime()));
|
||||
entity2.setBandwidthSubscription(dao.newBandwidthSubscription(
|
||||
subDao2.getSubscription(), subDao2.getBaseReferenceTime()));
|
||||
entity3.setBandwidthSubscription(dao.newBandwidthSubscription(
|
||||
subDao3.getSubscription(), subDao3.getBaseReferenceTime()));
|
||||
|
||||
dao.store(Arrays.asList(entity1, entity2, entity3));
|
||||
final List<SubscriptionRetrieval> results = dao
|
||||
.querySubscriptionRetrievals(entity2.getBandwidthSubscription()
|
||||
.querySubscriptionRetrievals(entity2.getSubscriptionRetrieval()
|
||||
.getBandwidthSubscription()
|
||||
.getId());
|
||||
assertEquals(
|
||||
"Should have returned one entity for the subscriptionDao id!",
|
||||
1, results.size());
|
||||
|
||||
SubscriptionRetrieval result = results.iterator().next();
|
||||
assertEquals("Incorrect id found.", entity2.getId(), result.getId());
|
||||
assertEquals("Incorrect id found.", entity2.getSubscriptionRetrieval()
|
||||
.getId(), result.getId());
|
||||
assertNotSame(entity2, result);
|
||||
}
|
||||
|
||||
|
@ -562,40 +568,44 @@ public abstract class AbstractBandwidthDaoTest<T extends IBandwidthDao> {
|
|||
public void testQuerySubscriptionRetrievalsBySubscription()
|
||||
throws SerializationException {
|
||||
// These two have the same dataset name and provider
|
||||
SubscriptionRetrieval entity1 = SubscriptionRetrievalFixture.INSTANCE
|
||||
SubscriptionRetrievalAttributes entity1 = SubscriptionRetrievalAttributesFixture.INSTANCE
|
||||
.get(1);
|
||||
SubscriptionRetrieval entity2 = SubscriptionRetrievalFixture.INSTANCE
|
||||
SubscriptionRetrievalAttributes entity2 = SubscriptionRetrievalAttributesFixture.INSTANCE
|
||||
.get(1);
|
||||
// This one does not
|
||||
SubscriptionRetrieval entity3 = SubscriptionRetrievalFixture.INSTANCE
|
||||
SubscriptionRetrievalAttributes entity3 = SubscriptionRetrievalAttributesFixture.INSTANCE
|
||||
.get(2);
|
||||
|
||||
// Still have to persist the actual subscription daos
|
||||
final BandwidthSubscription subDao1 = entity1
|
||||
.getSubscriptionRetrieval()
|
||||
.getBandwidthSubscription();
|
||||
final BandwidthSubscription subDao2 = entity2
|
||||
.getSubscriptionRetrieval()
|
||||
.getBandwidthSubscription();
|
||||
final BandwidthSubscription subDao3 = entity3
|
||||
.getSubscriptionRetrieval()
|
||||
.getBandwidthSubscription();
|
||||
|
||||
// This persists the subscription dao objects and sets them on the
|
||||
// retrievals
|
||||
entity1.setBandwidthSubscription(dao.newBandwidthSubscription(
|
||||
subDao1.getSubscription(), subDao1.getBaseReferenceTime()));
|
||||
entity2.setBandwidthSubscription(dao.newBandwidthSubscription(
|
||||
subDao2.getSubscription(), subDao2.getBaseReferenceTime()));
|
||||
entity3.setBandwidthSubscription(dao.newBandwidthSubscription(
|
||||
subDao3.getSubscription(), subDao3.getBaseReferenceTime()));
|
||||
|
||||
dao.store(Arrays.asList(entity1, entity2, entity3));
|
||||
dao.storeBandwidthSubscriptions(Arrays
|
||||
.asList(subDao1, subDao2, subDao3));
|
||||
dao.store(Arrays.<SubscriptionRetrieval> asList(
|
||||
entity1.getSubscriptionRetrieval(),
|
||||
entity2.getSubscriptionRetrieval(),
|
||||
entity3.getSubscriptionRetrieval()));
|
||||
dao.storeSubscriptionRetrievalAttributes(Arrays.asList(entity1,
|
||||
entity2, entity3));
|
||||
final List<SubscriptionRetrieval> results = dao
|
||||
.querySubscriptionRetrievals(entity2.getBandwidthSubscription());
|
||||
.querySubscriptionRetrievals(entity2.getSubscriptionRetrieval()
|
||||
.getBandwidthSubscription());
|
||||
assertEquals(
|
||||
"Should have returned one entity for the subscriptionDao!", 1,
|
||||
results.size());
|
||||
|
||||
SubscriptionRetrieval result = results.iterator().next();
|
||||
assertEquals("Incorrect id found.", entity2.getId(), result.getId());
|
||||
assertEquals("Incorrect id found.", entity2.getSubscriptionRetrieval()
|
||||
.getId(), result.getId());
|
||||
assertNotSame(entity2, result);
|
||||
}
|
||||
|
||||
|
@ -783,9 +793,10 @@ public abstract class AbstractBandwidthDaoTest<T extends IBandwidthDao> {
|
|||
final Date startTime = iter.next().getStartTime().getTime();
|
||||
final Date endTime = iter.next().getEndTime().getTime();
|
||||
|
||||
final SortedSet<SubscriptionRetrieval> actualReceived = dao.getSubscriptionRetrievals(bandwidthSubscription.getProvider(),
|
||||
bandwidthSubscription.getDataSetName(), RetrievalStatus.READY,
|
||||
startTime, endTime);
|
||||
final SortedSet<SubscriptionRetrieval> actualReceived = dao
|
||||
.getSubscriptionRetrievals(bandwidthSubscription.getProvider(),
|
||||
bandwidthSubscription.getDataSetName(),
|
||||
RetrievalStatus.READY, startTime, endTime);
|
||||
|
||||
// Verify the correct number of retrievals were returned
|
||||
assertThat(actualReceived, hasSize(expectToGet.size()));
|
||||
|
|
|
@ -22,13 +22,14 @@ package com.raytheon.uf.edex.datadelivery.bandwidth.dao;
|
|||
import java.util.Random;
|
||||
|
||||
import com.raytheon.uf.common.datadelivery.registry.Network;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription.SubscriptionPriority;
|
||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||
import com.raytheon.uf.common.util.AbstractFixture;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.RetrievalStatus;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
||||
|
||||
/**
|
||||
* TODO Add Description
|
||||
* Creates {@link BandwidthAllocation} instances.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
|
@ -37,6 +38,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Nov 13, 2012 djohnson Initial creation
|
||||
* Jul 11, 2013 2106 djohnson Use SubscriptionPriority enum.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -57,7 +59,7 @@ public abstract class BaseBandwidthAllocationFixture<T extends BandwidthAllocati
|
|||
entity.setActualEnd(BandwidthUtil.now());
|
||||
entity.setBandwidthBucket(TimeUtil.currentTimeMillis());
|
||||
entity.setNetwork(Network.OPSNET);
|
||||
entity.setPriority(1.0);
|
||||
entity.setPriority(SubscriptionPriority.HIGH);
|
||||
entity.setStatus(RetrievalStatus.DEFERRED);
|
||||
entity.setStartTime(BandwidthUtil.now());
|
||||
entity.setEndTime(BandwidthUtil.now());
|
||||
|
|
|
@ -21,9 +21,8 @@ package com.raytheon.uf.edex.datadelivery.bandwidth.dao;
|
|||
|
||||
import java.util.Random;
|
||||
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||
import com.raytheon.uf.common.datadelivery.registry.SiteSubscriptionFixture;
|
||||
import com.raytheon.uf.common.serialization.SerializationException;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||
import com.raytheon.uf.common.util.AbstractFixture;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
||||
|
||||
|
@ -44,7 +43,8 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil;
|
|||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class SubscriptionDaoFixture extends AbstractFixture<BandwidthSubscription> {
|
||||
public class SubscriptionDaoFixture extends
|
||||
AbstractFixture<BandwidthSubscription> {
|
||||
|
||||
public static final SubscriptionDaoFixture INSTANCE = new SubscriptionDaoFixture();
|
||||
|
||||
|
@ -61,12 +61,8 @@ public class SubscriptionDaoFixture extends AbstractFixture<BandwidthSubscriptio
|
|||
@Override
|
||||
public BandwidthSubscription getInstance(long seedValue, Random random) {
|
||||
Subscription sub = SiteSubscriptionFixture.INSTANCE.get(seedValue);
|
||||
try {
|
||||
return BandwidthUtil.getSubscriptionDaoForSubscription(sub,
|
||||
BandwidthUtil.now());
|
||||
} catch (SerializationException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.uf.edex.datadelivery.bandwidth.dao;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import com.raytheon.uf.common.datadelivery.registry.SiteSubscriptionFixture;
|
||||
import com.raytheon.uf.common.serialization.SerializationException;
|
||||
import com.raytheon.uf.common.util.AbstractFixture;
|
||||
|
||||
/**
|
||||
* Fixture for {@link SubscriptionRetrievalAttributes}.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jul 11, 2013 2106 djohnson Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author djohnson
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class SubscriptionRetrievalAttributesFixture extends
|
||||
AbstractFixture<SubscriptionRetrievalAttributes> {
|
||||
|
||||
public static final SubscriptionRetrievalAttributesFixture INSTANCE = new SubscriptionRetrievalAttributesFixture();
|
||||
|
||||
/**
|
||||
* Private.
|
||||
*/
|
||||
private SubscriptionRetrievalAttributesFixture() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public SubscriptionRetrievalAttributes getInstance(long seedValue,
|
||||
Random random) {
|
||||
SubscriptionRetrieval retrieval = SubscriptionRetrievalFixture.INSTANCE
|
||||
.get(seedValue);
|
||||
|
||||
SubscriptionRetrievalAttributes entity = new SubscriptionRetrievalAttributes();
|
||||
entity.setSubscriptionRetrieval(retrieval);
|
||||
try {
|
||||
entity.setSubscription(SiteSubscriptionFixture.INSTANCE
|
||||
.get(seedValue));
|
||||
} catch (SerializationException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
return entity;
|
||||
}
|
||||
|
||||
}
|
|
@ -21,7 +21,6 @@ package com.raytheon.uf.edex.datadelivery.bandwidth.dao;
|
|||
|
||||
import java.util.Random;
|
||||
|
||||
import com.raytheon.uf.common.serialization.SerializationException;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.SubscriptionRetrievalAgent;
|
||||
|
||||
/**
|
||||
|
@ -65,12 +64,7 @@ public class SubscriptionRetrievalFixture extends
|
|||
entity.setBandwidthSubscription(SubscriptionDaoFixture.INSTANCE
|
||||
.get(seedValue));
|
||||
entity.setSubscriptionLatency(0);
|
||||
try {
|
||||
entity.setSubscription(entity.getBandwidthSubscription()
|
||||
.getSubscription());
|
||||
} catch (SerializationException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
return entity;
|
||||
}
|
||||
|
||||
|
|
|
@ -52,6 +52,7 @@ import com.raytheon.uf.edex.core.EdexException;
|
|||
import com.raytheon.uf.edex.database.DataAccessLayerException;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.IBandwidthDao;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrieval;
|
||||
import com.raytheon.uf.edex.datadelivery.bandwidth.dao.SubscriptionRetrievalAttributes;
|
||||
import com.raytheon.uf.edex.datadelivery.retrieval.db.IRetrievalDao;
|
||||
import com.raytheon.uf.edex.datadelivery.retrieval.db.RetrievalRequestRecord;
|
||||
import com.raytheon.uf.edex.datadelivery.retrieval.db.RetrievalRequestRecord.State;
|
||||
|
@ -113,10 +114,17 @@ public class SubscriptionRetrievalAgentTest {
|
|||
Subscription subscription = new SubscriptionBuilder().withRoute(route)
|
||||
.build();
|
||||
final SubscriptionRetrieval subscriptionRetrieval = new SubscriptionRetrieval();
|
||||
subscriptionRetrieval.setSubscription(subscription);
|
||||
subscriptionRetrieval.setNetwork(subscription.getRoute());
|
||||
|
||||
SubscriptionRetrievalAttributes attributes = new SubscriptionRetrievalAttributes();
|
||||
attributes.setSubscriptionRetrieval(subscriptionRetrieval);
|
||||
attributes.setSubscription(subscription);
|
||||
|
||||
IBandwidthDao bandwidthDao = mock(IBandwidthDao.class);
|
||||
when(
|
||||
bandwidthDao
|
||||
.getSubscriptionRetrievalAttributes(subscriptionRetrieval))
|
||||
.thenReturn(attributes);
|
||||
|
||||
SubscriptionRetrievalAgent agent = new SubscriptionRetrievalAgent(
|
||||
route, "someUri", new Object(), 1, null, bandwidthDao,
|
||||
|
|
|
@ -24,9 +24,10 @@ import java.util.Random;
|
|||
import com.raytheon.uf.common.datadelivery.registry.GriddedCoverageFixture;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Provider;
|
||||
import com.raytheon.uf.common.datadelivery.registry.ProviderFixture;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||
import com.raytheon.uf.common.datadelivery.registry.SubscriptionBundle;
|
||||
import com.raytheon.uf.common.datadelivery.registry.SiteSubscriptionFixture;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||
import com.raytheon.uf.common.datadelivery.registry.Subscription.SubscriptionPriority;
|
||||
import com.raytheon.uf.common.datadelivery.registry.SubscriptionBundle;
|
||||
import com.raytheon.uf.common.datadelivery.retrieval.xml.Retrieval;
|
||||
import com.raytheon.uf.common.datadelivery.retrieval.xml.Retrieval.SubscriptionType;
|
||||
import com.raytheon.uf.common.datadelivery.retrieval.xml.RetrievalAttribute;
|
||||
|
@ -49,6 +50,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.opendap.MockOpenDapServiceFac
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Jan 30, 2013 1543 djohnson Initial creation
|
||||
* Feb 15, 2013 1543 djohnson Set coverage on retrieval attributes.
|
||||
* Jul 11, 2013 2106 djohnson Use SubscriptionPriority enum.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -77,7 +79,7 @@ public class RetrievalRequestRecordFixture extends
|
|||
|
||||
SubscriptionBundle bundle = new SubscriptionBundle();
|
||||
bundle.setBundleId(subscription.getSubscriptionId());
|
||||
bundle.setPriority(1);
|
||||
bundle.setPriority(SubscriptionPriority.HIGH);
|
||||
bundle.setProvider(provider);
|
||||
bundle.setConnection(provider.getConnection());
|
||||
bundle.setSubscription(subscription);
|
||||
|
|
Loading…
Add table
Reference in a new issue