Artikel (Preisupdate) zu shopware 6 - Flow dauert zu lange und bricht ab

Hallo,

ich bin noch ganz neu mit synesty. Ich hatte jetzt ein paar Tests mit einzelnen Artikeln gemacht. Nun wollte ich mal eine größere Datei übertragen.
Dafür habe ich per ftp eine Datei, einen CSV Reader und dann den Step zum Übertragen eingerichtet. Leider lädt es 20 Minuten lang und bricht dann ab.
Was kann ich verbessern, damit es nicht abbricht? Sind Dateien mit mehreren Tausend Zeilen zu viel? Ich versuche es jetzt dann mal mit 5000 Zeilen, aber gerade für größere Mengen wäre doch die Übertragung über die API sinnvoll.

Jedenfalls waren nach 20 Minuten keine Daten übertragen.

Grüße
Patrick

Hallo Patrick,

zum Testen reichen eine Hand voll Zeilen vollkommen aus. Wenn der Prozess damit erfolgreich ohne Probleme durch läuft sollten alle anderen Zeilen ebenfalls erfolgreich angelegt werden.

Welcher Fehler wird denn nach dem Abbruch ausgegeben?

Beste Grüße,

Rocco

Hallo Rocco,

beim ersten Versuch hatte ich noch einen Step mit ProductUpdate Da hatte ich einen Serverabbruch:

WARNING: (Root Causes: InternalServerErrorException: Internal Server Error:An exception occurred in driver: SQLSTATE[HY000] [2002] Connection refused (Code=0 ,Source=unknown ,Status= 500)

Dann hatte ich es mit nur dem Preisupdate-Step versucht. Nach 30 Minuten wird der Flow abgebrochen:
Step ShopwareSetStockAndPrice: Maximum Flow duration exceeded. In your current plan, flows must finish within 30 minutes. Try processing less data by reducing limits or upgrade to a higher base pack for higher limits.

Ich taste mich jetzt halt mal ran, aber was gilt denn so als Richtwert? 5000 Zeilen, oder mehr oder weniger?

Den Vorgang noch kleiner zu gestalten ist ja fast nicht möglich, oder?

Danke

Patrick

Das ist ein Fehler der von Shopware ausgegeben wird.

Step ShopwareSetStockAndPrice: Maximum Flow duration exceeded. In your current plan, flows must finish within 30 minutes. Try processing less data by reducing limits or upgrade to a higher base pack for higher limits.

Hier greifen die Limits des Test-Accounts. Der Flow läuft länger als der Testzugang erlaubt (>30min).

Reduziere die zu verarbeitenden Zeilen… vielleicht 5-10 und mache die Test mit dem reduzierten Datensatz. Dann sollte der Flow auch bis zum Schluss durch laufen.

Grüße Rocco

Hallo Rocco,

ok, auch mit 5000 Zeilen bin ich wohl deutlich drüber.

Ich arbeite gerade im Starter-Paket.

Nur noch kleinere Pakete sind zu wenig.

Danke

Patrick

Ich würde vorschlagen alles mit wenigen Zeilen durchzutesten. Wenn alles läuft kannst du immer noch ein Packet-Upgrade buchen um alle Daten zu verarbeiten.

Grüße Rocco

Hallo @sonnmark,

also das 5000 Preise länger als 30 Minuten dauern, kommt mir erstmal komisch vor.
Habt ihr euer Shopware selbst gehostet? Evtl. liegt da das Problem („falsche“ Einstellungen, zu schwachbrüstig etc.)

Ansonsten noch ein paar Fragen:

  • Kannst du im Eventlog deines Flows sehen wieviel Zeit (Minuten) vergeht bis das Shopware Preisupdate startet?

  • Es ist idR sehr sinnvoll nur die geänderten Daten (in deinem Fall Preise) bei einem Update zu übermitteln, um unnötigen Traffic zu sparen. Es gibt hier mehrere Wege die zum Erfolg führen, aber es hat eigentlich fast immer mit einem Datastoreansatz zu tun. Ich skizziere mal das grobe Vorgehen:

  1. Du holst dir deine Daten in einen Datastore. Ich kenne mich leider nicht in SW aus, aber zum Preisupdate brauchst du sicherlich ohnehin die Shopware interen ID um deine Artikel per API zu adressieren.
    D.h. du könntest einen Flow bauen der mittels GetProducts die Shopware ID (in Spalte „identifier1“), den Wert den du später in deiner Preisdatei hast (z.B. EAN) in die Spalte „identifier2“ und mindestens den Preis in einen Datastore abspeichert (Step: DatastoreWriter)

  2. Du baust nun einen anderen Flow der das Preisupdate macht. Dort ziehst du dir (wie du ja wsl. schon eingerichtet hast) deine Preisdaten, und machst in einen Mapper dann einen Querverweis über deinen Wert der in der Spalte „identifier2“ steht und holst dir dort:

  • ShopwareID
  • aktuell gespeicherter Preis

Nun schaust du in einer weiteren Hilfsspalte im Mapper ob der Preis sich geändert hat.

  1. Du packst dahinter einen Filter der dir nur die geänderten Preise rausfiltert.

  2. Du schickst exakt nur diese Daten an dein SW System

Das ganze ist nicht ganz trivial zu beschreiben, daher hoffe ich das du damit etwas anfangen kannst.

Die Anmerkung von Rocco, dass du das ganze beim Einrichten immer erstmal nur mit wenigen Zeilen, z.B. mittels ein, zwei Testprodukten zu testen, kann ich nur unterstreichen.
Dadurch läuft der Flow viel schneller und du hast sehr schnell ein (hoffentlich erfolgreiches) Ergebnis.

Viele Grüße,
Benjamin

Hallo Benjamin,

getestet habe ich nur mit wenigen Zeilen. Das ging auch gut. Sonst hätte ich mich an die größeren Dateien gewagt.

Ich hoste einen vServer mit eigentlich guten Grundwerten, aber vermutlich liegt hier das Problem begraben.

Ich kann nicht genau erkennen wann eine Übertragung stattfindet. Es könnte sein, dass nach ca. 20 Minuten was passiert. Aber so richtig erkenne ich es nicht. Hier nur mal die Zusammenfassung:
Dauer: 31min 59s

Traffic (In / Out): 6.14 MB (5.84 MB / 305.91 KB)

# Calls: 35
# Activities: 1302

Ich hatte den Weg über das Datastore übergangen, da ich im Starter-Paket nicht ausreichend Zeilen zur Verfügung habe ins Database zu schreiben. Ich kann das sicherlich mal versuchen, aber ich brauche irgend eine Lösung um auch mal 40000 Daten mit einem Schwung übertragen zu können. Jedoch ist mir das große Paket erstmal zu kostenintensiv.

Ich spreche jetzt zuerstmal noch mit dem Hoster und überlege was ich dann mache.

Danke und Grüße

Patrick

Ok, es gibt Neuigkeiten. Ich konnte jetzt die Daten übertragen. Der Hoster hat mir mitgeteilt, dass in der eingesetzten Datenbankversion ein PHP leak existiert. Die Version wurde downgegraded. Jetzt habe ich aber in der Übertragung noch eine Warnung stehen:

WARNING: (Root Causes: ParameterMissingException: Parameter missing error. Please check all input field and check if your shopware version is supported. Error:{"extensions":[],"success":false,"data":{"update-price":{"extensions":[],"result":[{"entities":[],"errors":[{"code":"40001","status":"500","title":"Internal Server Error","detail":"SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction"}]},{"entities":[],"errors":[]},{"entities":[],"errors":[]},{"entities":[],"errors":[]}]}},"deleted":[],"notFound":[]}

Es ist „nur“ eine Warnung, aber muss ich da vielleicht noch etwas beachten? Ich setze natürlich den Step für meine shopware Version ein. Darauf habe ich geachtet.

Danke und Grüße

Patrick

Hallo @sonnmark,

okay schon einmal schön zu hören das es jetzt etwas vorwärts geht.

Also leider bin ich kein Datenbankexperte - ein Kollege der dazu ggf. etwas mehr sagen kann, ist ab nächster Woche wieder im Büro - aber das liest sich so als ob der Fehler in der Datenbank bei Shopware verursacht wird. Deadlock heißt ganz grob in etwa:
Ein Prozess X wartet auf die Freigabe von Prozess Y und Y wartet wiederum auf die Freigabe von X.

Warum das jetzt bei eurer SW Datenbank passiert kann ich leider nicht sagen - evtl. ist dem o.g. Kollegen so etwas ja schonmal vorgekommen - ich lege ihn mal ein Memo an.

Nur um sicher zu gehen:
Welche Felder hast du in dem ShopwareSetStockAndPrice Step denn gefüllt?

Viele Grüße,
Benjamin

Hallo Benjamin,

ich habe folgende Felder befüllt, aktualisiert:
Id
Stock
CurrencyId
DefaultCurrencyId
PriceGross
PriceNet
ListPriceGross
PriceListPriceGross
ListPriceNet
PriceListPriceNet
PurchasePriceGross
PurchasePriceNet
PurchasePrice

Danach wollte ich noch einen Produkt Update durchführen, aber das hat nicht wie gewünscht funktioniert. Hier muss ich nachforschen woran es lag. Aber ein Punkt war auch das Timeout nach 30 Minuten. Ich versuche als nächstes den Weg über einen Datastore und grenze die Felder weiter ein.

Viele Grüße

Patrick

Hallo @sonnmark,

okay danke dir dafür - dann scheint es nicht an den übermittelten Daten zu liegen.

Ein „Problem“ bei Shopware ist, dass es modular erweiterbar ist und einige Shop-Plugins auf die Datenbanken zugreifen/verändern und es dadurch manchmal auch zu Problemen kommt.

Mein angesprochener Kollege der sich mit SW wesentlich besser auskennt hat sich das gestern Abend mal kurz angeschaut und kennt diese Fehlermeldung leider bisher auch noch nicht.
Er hat mich dann darauf aufmerksam gemacht das es - wie oben beschrieben - bei solchen Fällen meist an SW-Plugins liegt wenn es zu Datenbankfehlern kommt, z.B.

In diesem Thread geht es um „Pickware“ - auch wenn die Chancen klein sind, nutzt ihr zufällig dieses Plugin?

Viele Grüße,
Benjamin

Hallo Benjamin,

momentan nutze ich kein Pickware. Soll dazu kommen, aber steht noch aus.

Grüße

Patrick

Heute bin ich erst wieder zum Testen gekommen.

Langsam gehen mir die Ideen aus.

Ich habe jetzt folgendes versucht:
Über FTP eine CSV eingelesen und einen Artikel mit 5500 Varianten upgedatet. Hat teilweise funktioniert, aber sehr Lückenhaft. Viele Felder wurden nicht upgedatet.
Gleiche Konfiguration, jedoch nur mit ID, Product Number und active wurden 450 calls und 888 activities ausgeführt.

Über Datastore habe ich das gleiche Produkt mittels shopwareupdate übertragen, jedoch nur die nötigsten Informationen ID, manufacturer Number, active, product number. Nach 30 Minuten war gar nichts übertragen worden und der Flow hat abgebrochen.

Mein Server läuft stabil. D.h. ich hatte ja zu beginn ein Problem mit volllaufendem RAM. Aber das konnte gefixt werden.

Habt ihr noch eine Idee?

Danke und viele Grüße

Patrick

Hallo Patrick,

sehr komisch. Ich habe mich mal per Ticket bei dir gemeldet.

Viele Grüße,
Benjamin