use of org.eclipse.kapua.service.datastore.internal.elasticsearch.KapuaTopic in project kapua by eclipse.
the class MessageStoreServiceImpl method resetCache.
private void resetCache(String accountName, String topic) throws Exception {
boolean isAnyAsset;
boolean isAssetToDelete = false;
String semTopic;
if (topic != null) {
// determine if we should delete an asset if topic = account/asset/#
KapuaTopic kapuaTopic = new KapuaTopic(topic);
isAnyAsset = kapuaTopic.isAnyAsset();
semTopic = kapuaTopic.getSemanticTopic();
if (semTopic.isEmpty() && !isAnyAsset)
isAssetToDelete = true;
} else {
isAnyAsset = true;
semTopic = "";
isAssetToDelete = true;
}
// Find all topics
String everyIndex = EsUtils.getAnyIndexName(accountName);
int pageSize = 1000;
int offset = 0;
long totalHits = 1;
MetricInfoQueryImpl metricQuery = new MetricInfoQueryImpl();
metricQuery.setLimit(pageSize + 1);
metricQuery.setOffset(offset);
TopicMatchPredicateImpl topicPredicate = new TopicMatchPredicateImpl();
topicPredicate.setExpression(topic);
metricQuery.setPredicate(topicPredicate);
// Remove metrics
while (totalHits > 0) {
MetricInfoListResult metrics = EsMetricDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.METRIC_TYPE_NAME).query(metricQuery);
totalHits = metrics.size();
LocalCache<String, Boolean> metricsCache = DatastoreCacheManager.getInstance().getMetricsCache();
long toBeProcessed = totalHits > pageSize ? pageSize : totalHits;
for (int i = 0; i < toBeProcessed; i++) {
String id = metrics.get(i).getId().toString();
if (metricsCache.get(id))
metricsCache.remove(id);
}
if (totalHits > pageSize)
offset += (pageSize + 1);
}
logger.debug(String.format("Removed cached topic metrics for [%s]", topic));
EsMetricDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.METRIC_TYPE_NAME).deleteByQuery(metricQuery);
logger.debug(String.format("Removed topic metrics for [%s]", topic));
//
TopicInfoQueryImpl topicQuery = new TopicInfoQueryImpl();
topicQuery.setLimit(pageSize + 1);
topicQuery.setOffset(offset);
topicPredicate = new TopicMatchPredicateImpl();
topicPredicate.setExpression(topic);
topicQuery.setPredicate(topicPredicate);
// Remove topic
offset = 0;
totalHits = 1;
while (totalHits > 0) {
TopicInfoListResult topics = EsTopicDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.TOPIC_TYPE_NAME).query(topicQuery);
totalHits = topics.size();
LocalCache<String, Boolean> topicsCache = DatastoreCacheManager.getInstance().getTopicsCache();
long toBeProcessed = totalHits > pageSize ? pageSize : totalHits;
for (int i = 0; i < toBeProcessed; i++) {
String id = topics.get(0).getId().toString();
if (topicsCache.get(id))
topicsCache.remove(id);
}
if (totalHits > pageSize)
offset += (pageSize + 1);
}
logger.debug(String.format("Removed cached topics for [%s]", topic));
EsTopicDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.TOPIC_TYPE_NAME).deleteByQuery(topicQuery);
logger.debug(String.format("Removed topics for [%s]", topic));
// Remove asset
if (isAssetToDelete) {
AssetInfoQueryImpl assetQuery = new AssetInfoQueryImpl();
assetQuery.setLimit(pageSize + 1);
assetQuery.setOffset(offset);
topicPredicate = new TopicMatchPredicateImpl();
topicPredicate.setExpression(topic);
assetQuery.setPredicate(topicPredicate);
offset = 0;
totalHits = 1;
while (totalHits > 0) {
AssetInfoListResult assets = EsAssetDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.ASSET_TYPE_NAME).query(assetQuery);
totalHits = assets.size();
LocalCache<String, Boolean> assetsCache = DatastoreCacheManager.getInstance().getAssetsCache();
long toBeProcessed = totalHits > pageSize ? pageSize : totalHits;
for (int i = 0; i < toBeProcessed; i++) {
String id = assets.get(i).getId().toString();
if (assetsCache.get(id))
assetsCache.remove(id);
}
if (totalHits > pageSize)
offset += (pageSize + 1);
}
logger.debug(String.format("Removed cached assets for [%s]", topic));
EsAssetDAO.connection(EsClient.getcurrent()).instance(everyIndex, EsSchema.ASSET_TYPE_NAME).deleteByQuery(assetQuery);
logger.debug(String.format("Removed assets for [%s]", topic));
}
}
Aggregations