Jobs, limits and retention
Every change made with Product Studio is a job: sheet saves, bulk actions, price changes, imports, reverts and exports. The History tab lists them with their type, user, status and counts; filter by type or show only your own.
Life of a job
| Status | What happens |
|---|---|
| Preparing | The changes are calculated per product. For an import, the file is read, duplicates are flagged and products are matched. |
| Waiting for review | You see the result and exclude products. Nothing is saved yet. Discarding the review cancels the job. |
| Saving | Each product is read again and saved when its value is still what the review showed. If someone changed it in the meantime, the product is reported as a conflict and left as it is. |
| Done, done with errors, stopped or discarded | The end states. "Done with errors" means some products failed while saving, for example because of a missing permission. |
Exports skip the review and go straight to "running".
Price changes (see Pricing) have three more statuses. "Scheduled" jobs are applied at a date and
time by the scheduled task lae_product_studio.pricing_schedule, which runs every 5 minutes. Jobs above the approval
thresholds of the configuration are "Waiting for approval". "Rejected" is final, and nothing was changed. The check of the Prices tab is a draft job: it is
not listed in the history until it is applied, scheduled or sent for approval.
Jobs of up to 100 products (setting "Run changes of up to this many products immediately") run in the request, for at most 20 seconds; the rest continues in the background. Larger jobs run on the message queue in batches.
If a worker stops in the middle of a job, the job keeps a lease of 5 minutes. A watchdog task (every 5 minutes) continues jobs whose lease expired. Products that were already saved are skipped, so nothing is saved twice. A job that failed can be resumed from its page.
Report
Every job has a CSV report with one row per product (or per file row for an import): the status, the changes before and after, the error code and the message. The job page lists the same with a search and a status filter.
The report, the messages on the job page and error notifications are in the language of the administration user who
opens them. The error codes (INVALID_FIELD_VALUE, CONFLICT, ...) stay the same in every language, for filtering.
Revert
"Revert changes" creates a new job with before and after swapped, and the same review. A value that was changed after the job is reported as a conflict and kept. Reverting needs the "Revert changes" permission and is possible as long as the job is kept.
Limits
| Limit | Default | Setting |
|---|---|---|
| Products per bulk action or export | 50,000 | Maximum products per bulk action or export |
| Import file size | 50 MB | Maximum import file size (MB) |
| Rows per import | 100,000 | Maximum rows per import file |
| Run immediately | 100 products | Run changes of up to this many products immediately |
| Products in the sheet | 250 per page | |
| "Check quality again" immediately | 500 products | Larger selections are queued |
Retention
A daily cleanup task removes:
| What | When |
|---|---|
| Uploaded and exported files | After 7 days (setting "Keep uploaded and exported files") |
| Jobs that were reviewed but never applied | After 7 days (same setting) |
| Finished jobs with their items, report and revert data | After 90 days (setting "Keep job history") |
| Unfinished draft jobs | After 1 day |
| Checks of the Prices tab that were never applied, scheduled or sent for approval | After 2 hours |
| Price history | After 400 days (setting "Keep price history (days)") |
| Audit events (changes to rules, views and import profiles) | After 365 days |
Files are stored in Shopware's private file system (files/lae-product-studio/ by default), so they are not
publicly reachable.
Before a large change
Every job can be reverted, but make a database backup before large imports and bulk actions anyway, especially the first time you use a new import profile.