Revision 8293
Added by Jing Tao about 11 years ago
metacat-index/src/main/java/edu/ucsb/nceas/metacat/index/IndexGenerator.java | ||
---|---|---|
90 | 90 |
//private SystemMetadataEventListener systemMetadataListener = null; |
91 | 91 |
private IMap<Identifier, SystemMetadata> systemMetadataMap; |
92 | 92 |
private IMap<Identifier, String> objectPathMap; |
93 |
private ISet<SystemMetadata> indexQueue; |
|
93 | 94 |
private Log log = LogFactory.getLog(IndexGenerator.class); |
94 | 95 |
//private MNode mNode = null; |
95 | 96 |
private static List<String> resourceMapNamespaces = null; |
... | ... | |
208 | 209 |
List<String> solrIds = null; |
209 | 210 |
initSystemMetadataMap(); |
210 | 211 |
initObjectPathMap(); |
212 |
initIndexQueue(); |
|
211 | 213 |
List[] metacatIds = getMetacatIds(since, until); |
212 | 214 |
List<String> otherMetacatIds = metacatIds[FIRST]; |
213 | 215 |
List<String> resourceMapIds = metacatIds[SECOND]; |
... | ... | |
269 | 271 |
|
270 | 272 |
//add the failedPids |
271 | 273 |
List<IndexEvent> failedEvents = EventlogFactory.createIndexEventLog().getEvents(null, null, null, null); |
272 |
List<IndexEvent> failedOtherIds = new ArrayList<IndexEvent>();
|
|
273 |
List<IndexEvent> failedResourceMapIds = new ArrayList<IndexEvent>();
|
|
274 |
List<String> failedOtherIds = new ArrayList<String>();
|
|
275 |
List<String> failedResourceMapIds = new ArrayList<String>();
|
|
274 | 276 |
if(failedEvents != null) { |
275 | 277 |
for(IndexEvent event : failedEvents) { |
276 | 278 |
String id = event.getIdentifier().getValue(); |
... | ... | |
278 | 280 |
if(sysmeta != null) { |
279 | 281 |
ObjectFormatIdentifier formatId =sysmeta.getFormatId(); |
280 | 282 |
if(formatId != null && formatId.getValue() != null && resourceMapNamespaces != null && isResourceMap(formatId)) { |
281 |
failedResourceMapIds.add(event);
|
|
283 |
failedResourceMapIds.add(id);
|
|
282 | 284 |
} else { |
283 |
failedOtherIds.add(event);
|
|
285 |
failedOtherIds.add(id);
|
|
284 | 286 |
} |
285 | 287 |
} |
286 | 288 |
} |
287 | 289 |
} |
288 |
indexFailedIds(failedOtherIds); |
|
289 |
indexFailedIds(failedResourceMapIds); |
|
290 |
//indexFailedIds(failedOtherIds);
|
|
291 |
//indexFailedIds(failedResourceMapIds);
|
|
290 | 292 |
|
293 |
index(failedOtherIds); |
|
294 |
index(failedResourceMapIds); |
|
295 |
|
|
291 | 296 |
/*if(!failedOtherIds.isEmpty()) { |
292 | 297 |
failedOtherIds.addAll(otherMetacatIds); |
293 | 298 |
} else { |
... | ... | |
299 | 304 |
} else { |
300 | 305 |
failedResourceMapIds = resourceMapIds; |
301 | 306 |
}*/ |
302 |
|
|
307 |
//log.info("the ids in index_event for reindex ( except the resourcemap)=====================================\n "+failedOtherIds); |
|
308 |
//log.info("the resourcemap ids in index_event for reindex =====================================\n "+failedResourceMapIds); |
|
303 | 309 |
log.info("the metacat ids (except the resource map ids)-----------------------------"+otherMetacatIds); |
304 | 310 |
//logFile(otherMetacatIds, "ids-for-timed-indexing-log"); |
305 | 311 |
//log.info("the deleted metacat ids (except the resource map ids)-----------------------------"+otherDeletedMetacatIds); |
... | ... | |
352 | 358 |
if(metacatIds != null) { |
353 | 359 |
for(String metacatId : metacatIds) { |
354 | 360 |
if(metacatId != null) { |
355 |
try { |
|
356 |
generateIndex(metacatId); |
|
357 |
} catch (Exception e) { |
|
358 |
IndexEvent event = new IndexEvent(); |
|
359 |
Identifier pid = new Identifier(); |
|
360 |
pid.setValue(metacatId); |
|
361 |
event.setIdentifier(pid); |
|
362 |
event.setDate(Calendar.getInstance().getTime()); |
|
363 |
event.setAction(Event.CREATE); |
|
364 |
String error = "IndexGenerator.index - Metacat Index couldn't generate the index for the id - "+metacatId+" because "+e.getMessage(); |
|
365 |
event.setDescription(error); |
|
366 |
try { |
|
367 |
EventlogFactory.createIndexEventLog().write(event); |
|
368 |
} catch (Exception ee) { |
|
369 |
log.error("SolrIndex.insertToIndex - IndexEventLog can't log the index inserting event :"+ee.getMessage()); |
|
370 |
} |
|
371 |
log.error(error); |
|
372 |
} |
|
373 |
|
|
374 |
|
|
361 |
generateIndex(metacatId); |
|
375 | 362 |
} |
376 | 363 |
} |
377 | 364 |
} |
... | ... | |
380 | 367 |
/* |
381 | 368 |
* Index those ids which failed in the process (We got them from the EventLog) |
382 | 369 |
*/ |
383 |
private void indexFailedIds(List<IndexEvent> events) { |
|
370 |
/*private void indexFailedIds(List<IndexEvent> events) {
|
|
384 | 371 |
if(events != null) { |
385 | 372 |
for(IndexEvent event : events) { |
386 | 373 |
if(event != null) { |
... | ... | |
396 | 383 |
} catch (Exception e) { |
397 | 384 |
log.error("IndexGenerator.indexFailedIds - Metacat Index couldn't generate the index for the id - "+id+" because "+e.getMessage()); |
398 | 385 |
} |
399 |
/*} else if (action != null && action.equals(Event.DELETE)) { |
|
400 |
try { |
|
401 |
removeIndex(id); |
|
402 |
EventlogFactory.createIndexEventLog().remove(identifier); |
|
403 |
} catch (Exception e) { |
|
404 |
log.error("IndexGenerator.indexFailedIds - Metacat Index couldn't remove the index for the id - "+id+" because "+e.getMessage()); |
|
405 |
} |
|
406 |
}*/ |
|
386 |
|
|
407 | 387 |
} |
408 | 388 |
} |
409 | 389 |
} |
410 | 390 |
} |
411 | 391 |
} |
412 |
} |
|
392 |
}*/
|
|
413 | 393 |
|
414 | 394 |
public void run() { |
415 | 395 |
/*IndexEvent event = new IndexEvent(); |
... | ... | |
493 | 473 |
} |
494 | 474 |
} |
495 | 475 |
|
496 |
/* |
|
497 |
* Get the indexed ids list from the solr server. |
|
498 |
* An empty list will be returned if there is no ids. |
|
499 |
*/ |
|
500 |
private List<String> getSolrDocIds() throws SolrServerException { |
|
501 |
List<String> ids = solrIndex.getSolrIds(); |
|
502 |
return ids; |
|
503 |
} |
|
476 |
|
|
504 | 477 |
|
505 | 478 |
/* |
506 | 479 |
* Get an array of the list of ids of the metacat which has the systemmetadata modification in the range. |
... | ... | |
646 | 619 |
/* |
647 | 620 |
* Generate index for the id. |
648 | 621 |
*/ |
649 |
private void generateIndex(String id) throws Exception {
|
|
622 |
private void generateIndex(String id) { |
|
650 | 623 |
if(id != null) { |
651 | 624 |
SystemMetadata sysmeta = getSystemMetadata(id); |
652 | 625 |
//only update none-archived id. |
653 | 626 |
//if(sysmeta != null && !sysmeta.getArchived() && sysmeta.getObsoletedBy() == null) { |
654 |
if(sysmeta != null) { |
|
627 |
try { |
|
628 |
if(sysmeta != null) { |
|
655 | 629 |
InputStream data = getDataObject(id); |
656 | 630 |
/*Identifier obsolete = sysmeta.getObsoletes(); |
657 | 631 |
List<String> obsoleteChain = null; |
... | ... | |
659 | 633 |
obsoleteChain = getObsoletes(id); |
660 | 634 |
}*/ |
661 | 635 |
solrIndex.update(id, sysmeta, data); |
662 |
} else { |
|
663 |
throw new Exception("IndexGenerator.generate - there is no found SystemMetadata associated with the id "+id); |
|
636 |
try { |
|
637 |
Identifier identifier = new Identifier(); |
|
638 |
identifier.setValue(id); |
|
639 |
EventlogFactory.createIndexEventLog().remove(identifier); |
|
640 |
} catch (Exception ee) { |
|
641 |
log.error("IndexGenerator.index - can't remove the id "+id +" from the index_event table since - "+ee.getMessage()); |
|
642 |
} |
|
643 |
} else { |
|
644 |
throw new Exception("IndexGenerator.generate - there is no found SystemMetadata associated with the id "+id); |
|
645 |
} |
|
646 |
} catch (Exception e) { |
|
647 |
IndexEvent event = new IndexEvent(); |
|
648 |
Identifier pid = new Identifier(); |
|
649 |
pid.setValue(id); |
|
650 |
event.setIdentifier(pid); |
|
651 |
event.setDate(Calendar.getInstance().getTime()); |
|
652 |
event.setAction(Event.CREATE); |
|
653 |
String error = "IndexGenerator.index - Metacat Index couldn't generate the index for the id - "+id+" because "+e.getMessage(); |
|
654 |
event.setDescription(error); |
|
655 |
try { |
|
656 |
EventlogFactory.createIndexEventLog().write(event); |
|
657 |
} catch (Exception ee) { |
|
658 |
log.error("SolrIndex.insertToIndex - IndexEventLog can't log the index inserting event :"+ee.getMessage()); |
|
659 |
} |
|
660 |
log.error(error); |
|
664 | 661 |
} |
662 |
|
|
665 | 663 |
|
666 | 664 |
} |
667 | 665 |
} |
... | ... | |
722 | 720 |
objectPathMap = DistributedMapsFactory.getObjectPathMap(); |
723 | 721 |
} |
724 | 722 |
} |
723 |
|
|
724 |
|
|
725 |
|
|
726 |
/* |
|
727 |
* Initialize the index queue |
|
728 |
*/ |
|
729 |
private void initIndexQueue() throws FileNotFoundException, ServiceFailure { |
|
730 |
if(indexQueue == null) { |
|
731 |
indexQueue = DistributedMapsFactory.getIndexQueue(); |
|
732 |
} |
|
733 |
} |
|
725 | 734 |
/** |
726 | 735 |
* Get an InputStream as the data object for the specific pid. |
727 | 736 |
* @param pid |
Also available in: Unified diff
combine the index code for failed ids and other ids.