async def reindex(self, obj):
        index_manager = find_index_manager(obj)
        if index_manager is None:
            index_manager = get_adapter(self.request.container, IIndexManager)
        self.work_index_name = await index_manager.get_index_name()

        await notify(IndexProgress(
            self.request, self.context, 0, self.processed))
        await self.process_object(obj)
        await self.flush()
        if len(self.sub_indexes) > 0:
            # could cause sub indexes to need to be run through as well.
            for ob in self.sub_indexes:
                im = get_adapter(ob, IIndexManager)
                reindexer = Reindexer(
                    self.utility, ob, response=self.response, force=self.force,
                    log_details=self.log_details,
                    memory_tracking=self.memory_tracking,
                    request=self.request, bulk_size=self.bulk_size,
                    full=self.full, reindex_security=self.reindex_security,
                    mapping_only=self.mapping_only, index_manager=im)
                reindexer.processed = self.processed
                reindexer.work_index_name = await im.get_index_name()
                await reindexer.process_folder(ob)
                await reindexer.flush()
                self.processed = reindexer.processed

        await notify(IndexProgress(
            self.request, self.context, self.processed,
            self.processed, completed=True
        ))
Exemplo n.º 2
0
    async def reindex(self, obj):
        self.work_index_name = await self.utility.get_index_name(
            self.request.container)

        await notify(
            IndexProgress(self.request, self.context, 0, self.processed))
        await self.process_object(obj)
        await self.flush()
        await notify(
            IndexProgress(self.request,
                          self.context,
                          self.processed,
                          self.processed,
                          completed=True))
Exemplo n.º 3
0
    async def attempt_flush(self):

        if self.processed % 500 == 0:
            self.policy.invalidate_cache()
            num, _, _ = gc.get_count()
            gc.collect()
            if self.memory_tracking:
                total_memory = round(
                    resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1024.0, 1
                )  # noqa
                self.response.write(
                    b"Memory usage: % 2.2f MB, cleaned: %d, total in-memory obs: %d"
                    % (total_memory, num, len(gc.get_objects()))  # noqa
                )
            self.response.write(
                b"Indexing new batch, totals: (%d %d/sec)\n"
                % (self.indexed, int(self.per_sec()))  # noqa
            )
        if len(self.batch) >= self.bulk_size:
            await notify(
                IndexProgress(
                    self.context,
                    self.processed,
                    (len(self.existing) + len(self.missing)),
                    request=self.request,
                )
            )
            await self.flush()