sequenceDiagram
actor Browser
actor Scheduler
Browser->>smartbi.metadata.MetadataModule: rebuildIndex
smartbi.metadata.MetadataModule->>smartbi.index.IndexRebuildService: rebuildIndex
smartbi.index.IndexRebuildService->>ILock: tryLock("REBUILD-INDEX")
ILock-->>smartbi.index.IndexRebuildService: lock
critical lock success
smartbi.index.IndexRebuildService ->> smartbi.index.Indexable: count()
smartbi.index.Indexable -->> smartbi.index.IndexRebuildService: resource count
loop from < count
smartbi.index.IndexRebuildService ->> smartbi.index.Indexable: getDocuments(from, pageSize), from += pageSize
note right of smartbi.index.Indexable: 每一个Indexable实现类处理一类资源
par t_restree
rect rgb(191, 223, 255)
smartbi.index.Indexable ->> DAO: t_restree
DAO -->> smartbi.index.Indexable: CatalogElement
smartbi.index.Indexable ->> MetadataModule.References: getResources
MetadataModule.References -->>smartbi.index.Indexable: RefResources
smartbi.index.Indexable ->> smartbi.index.Indexable: CatalogDocument
end
and others
rect rgb(11, 253, 205)
smartbi.index.Indexable ->> DAO: others
DAO -->> smartbi.index.Indexable: CategoryResource
smartbi.index.Indexable ->> smartbi.index.Indexable: CatalogDocument
end
end
smartbi.index.Indexable ->> smartbi.index.IndexRebuildService: IDocuments
smartbi.index.IndexRebuildService ->> smartbi.index.IndexPersistExecutor:addDocs
end
end
rect rgb(211, 255, 255)
Browser->>smartbi.metadata.MetadataModule: addDocument/updateDocument/deleteDocument
smartbi.metadata.MetadataModule ->> IndexMessageProducer: produce(IndexChangedMessage)
IndexMessageProducer ->> MQ: publish
end
rect rgb(255,240,245)
loop: 调度任务轮训
Scheduler ->> IndexMessageConsumer:
IndexMessageConsumer->>ILock: tryLock("REBUILD-INDEX")
ILock-->>IndexMessageConsumer: lock
critical lock success
IndexMessageConsumer ->> MQ: poll
MQ -->> IndexMessageConsumer: IndexChangedMessage
IndexMessageConsumer ->> smartbi.index.IndexRebuildService: rebuildIndex(type, resIds)
smartbi.index.IndexRebuildService ->> smartbi.index.Indexable: getDocuments(resIds)
note right of smartbi.index.Indexable: 此过程与重建索引相同
smartbi.index.Indexable ->> smartbi.index.IndexRebuildService: IDocuments
smartbi.index.IndexRebuildService ->> smartbi.index.IndexPersistExecutor:addDocs
end
end
end