我安装了Sonatype Nexus OSS 3.6.2-01 尽管我没有配置任何计划任务,但我可以在命令行中看到 Nexus 每十分钟运行一次名为“存储方面清理”的任务。
因为我找不到任何有关此任务的信息,所以我终于来到了这里。
2017-12-20 08:40:00,013+0100 INFO [quartz-3-thread-19] *SYSTEM org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'Storage facet cleanup' [repository.storage-facet-cleanup] state change WAITING -> RUNNING
2017-12-20 08:40:00,051+0100 INFO [quartz-3-thread-19] *SYSTEM org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'Storage facet cleanup' [repository.storage-facet-cleanup] state change RUNNING -> WAITING (OK)
2017-12-20 08:50:00,014+0100 INFO [quartz-3-thread-19] *SYSTEM org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'Storage facet cleanup' [repository.storage-facet-cleanup] state change WAITING -> RUNNING
2017-12-20 08:50:00,029+0100 INFO [quartz-3-thread-19] *SYSTEM org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'Storage facet cleanup' [repository.storage-facet-cleanup] state change RUNNING -> WAITING (OK)
2017-12-20 09:00:00,015+0100 INFO [quartz-3-thread-19] *SYSTEM org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'Storage facet cleanup' [repository.storage-facet-cleanup] state change WAITING -> RUNNING
2017-12-20 09:00:00,031+0100 INFO [quartz-3-thread-19] *SYSTEM org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'Storage facet cleanup' [repository.storage-facet-cleanup] state change RUNNING -> WAITING (OK)
2017-12-20 09:10:00,016+0100 INFO [quartz-3-thread-19] *SYSTEM org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'Storage facet cleanup' [repository.storage-facet-cleanup] state change WAITING -> RUNNING
2017-12-20 09:10:00,032+0100 INFO [quartz-3-thread-19] *SYSTEM org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'Storage facet cleanup' [repository.storage-facet-cleanup] state change RUNNING -> WAITING (OK)
这个任务有什么用?
为什么它在管理面板的“任务”部分中不可见?
有没有办法禁用此任务(或将其配置为仅在晚上运行)?
这是 NXRM 正确运行所需的清理任务。未列出它是因为它不可禁用/可配置。
StorageFacetCleanupTask
中定义的清理任务,它在 performDeletions()
上运行 storageFacetManager
:
@Override
protected Void execute() throws Exception {
thread = Thread.currentThread();
long count;
do {
count = storageFacetManager.performDeletions();
}
while (count > 0 && !isCanceled());
return null;
}
方法
performDeletions
在StorageFacetManagerImpl
中定义,它删除所有标有P_PENDING_DELETION
的桶:
@Override
@Guarded(by = STARTED)
public long performDeletions() {
List<Bucket> buckets = findBucketsForDeletion();
return buckets.stream().filter((bucket) -> {
try {
log.info("Deleting bucket for repository {}", bucket.getRepositoryName());
deleteBucket(bucket);
return true;
}
catch (Exception e) {
log.warn("Unable to delete bucket with repository name {}, will require manual cleanup",
bucket.getRepositoryName(), e);
return false;
}
}).count();
}
所有标有
P_PENDING_DELETION
的桶均由 findBucketsForDeletion
收集于 StorageFacetManagerImpl
:
private List<Bucket> findBucketsForDeletion() {
return inTx(databaseInstanceProvider).call(db -> {
return StreamSupport
.stream(bucketEntityAdapter.browse(db).spliterator(), false)
.filter((bucket) -> bucket.attributes().contains(P_PENDING_DELETION))
.collect(Collectors.toList());
});
}
是否有更详细的日志可用于存储方面清理任务?如果是这样,我应该为哪个类别启用调试日志记录才能看到它?我在清理某些存储库时遇到问题(错误的请求。原因:存储库路径在初始“/”之后必须有另一个“/”),并且想找出哪些存储库,进行审查并可能修复它们。