Serialized Form

  • Package org.exoplatform.addons.documents.cleanup.entity

    • Class org.exoplatform.addons.documents.cleanup.entity.CleanupCampaignEntity

      class CleanupCampaignEntity extends Object implements Serializable
      serialVersionUID:
      4728820912354523L
      • Serialized Fields

        • archiveFileId
          Long archiveFileId
        • checkpointOffset
          long checkpointOffset
        • checkpointPath
          String checkpointPath
        • completedDate
          Date completedDate
        • etaSeconds
          long etaSeconds
        • excludedPaths
          String excludedPaths
        • graceDays
          int graceDays
        • id
          Long id
        • lockDate
          Date lockDate
        • maxVersionsPerFile
          int maxVersionsPerFile
        • minFileSizeBytes
          long minFileSizeBytes
        • name
          String name
        • periodMonths
          int periodMonths
        • processedCount
          long processedCount
        • publishedDate
          Date publishedDate
        • scanThreads
          int scanThreads
          Reader threads this campaign's scan may use. 0 means 'never set', i.e. use the platform default — the column is added with that default, so every campaign predating it keeps the behaviour it ran with.
        • startedDate
          Date startedDate
        • state
          String state
        • summaryJson
          String summaryJson
        • totalCount
          long totalCount
    • Class org.exoplatform.addons.documents.cleanup.entity.CleanupCampaignItemEntity

      class CleanupCampaignItemEntity extends Object implements Serializable
      serialVersionUID:
      87351249172354529L
      • Serialized Fields

        • action
          String action
        • attemptCount
          long attemptCount
          Purge attempts already spent on this item, incremented by every retry.
        • campaignId
          long campaignId
        • computedAt
          Date computedAt
        • createdDate
          Date createdDate
          Creation date of the candidate file, as read by the scan. Persisted although only the last-modified one is displayed: BOTH dates being older than the campaign period is what made the file a candidate, so a report carrying only one of them cannot explain its own rows. Nullable, see above.
        • decidedAt
          Date decidedAt
        • decidedBy
          String decidedBy
        • failureDetail
          String failureDetail
          Compact diagnostic of the failure (head + root exception, see CleanupThrowableUtil), mapped as a plain String over the FAILURE_DETAIL CLOB column — the platform precedent for a CLOB is a bare @Column String, no @Lob and no columnDefinition (cf. io.meeds.social.space.template.entity.SpaceTemplateEntity).
        • failureReason
          String failureReason
          Localizable message code of the failure, and NOTHING else: the console looks it up in an i18n bundle and the grouped-failures aggregate groups on it, so it must never carry an exception message.
        • fileSize
          long fileSize
        • id
          Long id
        • lastModifiedDate
          Date lastModifiedDate
          Last modification date of the candidate file, as read by the scan. Nullable: rows recorded before this column existed keep a NULL, and so does a file whose date was unreadable.
        • nodeUuid
          String nodeUuid
        • ownerIdentityId
          long ownerIdentityId
        • path
          String path
        • purgedAt
          Date purgedAt
        • reclaimableBytes
          long reclaimableBytes
          What this item's OWN action frees: fileSize + versionsSize for a DELETE, versionsSize alone for a PURGE_VERSIONS.

          DERIVED, and persisted anyway — the one deliberate denormalization of this schema. It was a JPQL CASE expression, which no index can serve: the purge consumes its candidates biggest first, and sorting on an expression made every batch a filesort over the campaign's remaining rows (measured at 318 ms against 4 ms per batch on 200k rows, and the batch count is in the tens of thousands). Stored, it lets ONE index serve both the keyset predicate and its order.

          It cannot drift: every entity reaching the database is built by CleanupCampaignStorage#toEntity, which recomputes this from CleanupSizeUtil — still the single DEFINITION — on every save. This column is the single READ, replacing the CASE that the Java comparator used to mirror.

        • reclaimedBytes
          long reclaimedBytes
        • state
          String state
        • versionsSize
          long versionsSize
          Version bytes this item's ACTION reclaims — the whole version history for a DELETE, the removal set for a PURGE_VERSIONS. Action-dependent by design, see CleanupCampaignItemDAO.RECLAIMABLE_BYTES.
    • Class org.exoplatform.addons.documents.cleanup.entity.CleanupScanUnitEntity

      class CleanupScanUnitEntity extends Object implements Serializable
      serialVersionUID:
      41827365109283741L
      • Serialized Fields

        • attemptCount
          long attemptCount
          Walk attempts already spent on this unit, incremented when the coordinator CLAIMS it for a walk. A unit that spent them all is settled-failed: it stops being re-walked and stops holding the dry-run's completion back.
        • campaignId
          long campaignId
        • evalFailureCount
          long evalFailureCount
          Nodes of this subtree the scan walked but could not EVALUATE. Distinct from CleanupScanUnitEntity.failureReason, which is about the subtree itself failing: this counts files silently missing from the report of a unit that finished DONE.
        • evalFailureDetail
          String evalFailureDetail
        • evalFailureReason
          String evalFailureReason
          Short label of the FIRST such failure — kept, later ones only counted.
        • failureReason
          String failureReason
          Localizable message code of the unit failure, and NOTHING else — same contract as the campaign item's, the console looks it up in an i18n bundle.
        • id
          Long id
        • lastScannedPath
          String lastScannedPath
          Path of the last node scanned in this unit — the ONLY positioning information of a resume, per unit instead of per campaign. NULL while the unit was never started.
        • scannedCount
          long scannedCount
          Nodes scanned in this unit so far: progress/ETA display only.
        • state
          String state
        • totalCount
          Long totalCount
          Nodes counted in this unit by the estimation phase, NULL while never counted. The campaign denominator is the SUM over the units, so it stays comparable with the counts of the campaigns scanned by the sequential worker.

          A boxed Long and not a long, which is the whole point: 0 is a legitimate COUNT — an empty first-letter bucket of /Users — and with a primitive it was indistinguishable from 'not counted yet', so every resume re-counted every empty bucket for nothing.

        • unitPath
          String unitPath
          Absolute JCR path of the partition walked by ONE reader thread. Unique per campaign (UK_DOC_CLEANUP_SCAN_UNIT_PATH): that constraint is what makes unit planning idempotent across resumes, exactly as the campaign+nodeUuid one makes candidate saving idempotent.
        • unitPathHash
          String unitPathHash
          SHA-256 hex of CleanupScanUnitEntity.unitPath, persisted for ONE purpose: being the unique key. The constraint cannot be keyed on the path itself — on MySQL the table's CHARSET=UTF8 makes an NVARCHAR(2000) key 6008 bytes against InnoDB's 3072-byte ceiling, so the changeset fails at DDL time and the addon does not deploy at all. The path stays as the unindexed readable column.