In meinem Script, was sich die json Dateien lädt bekomme ich häufiger diese Meldung:
http.client.IncompleteRead: IncompleteRead(3702473 bytes read, 14412 more expected)
D. h. die Größe, die im http Header steht, ist größer als der Inhalt der gesendet wird. Da die content-length jedoch vom nginx bestimmt, entsteht der Fehler irgendwo danach und nicht beim unvollständigen erzeugten der Datei vom Alfred (denn dann wurde Nginx die Datei ja als kleiner bestimmen und es würde ein anderer Fehler (auf den Ebenen darüber) geworfen werden.
Ich mal nachgeschaut, in der nginx.conf (also der „globalen“ Konfiguration) ist sendfile on gesetzt. Ich habe jetzt mal in /etc/nginx/sites-available/karte für /datasendfile ausgestellt.
Ich gelobe mir Besserung dadurch, weil nun die datei gebuffert wird, bevor sie gesendet wird, anstatt direkt auf filedescriptors zu arbeiten. Bei den Daten handelt es sich ja eher um Semi-Statische Daten.
PS: Es könnte natürlich immer noch eine unvollständige json Datei ankommen, das ist jedoch sehr viel unwahrscheinlicher, als während der langen Übertragungsphase. Sicherlich ist hier auch noch Optimierungspotential, aber ich bin nicht so deep im nginx business.
Vielleicht muss ich die Erzeugung der Dateien noch mal umstellen. Wahrscheinlich werden die Dateien im Moment beim Neu-Erzeugen auf 0 Bytes gekürzt und dann wieder gefüllt. Wenn die Daten gerade zu dem Zeitpunkt gelesen wird, erzeugt das ein EOF und die Datei wird unvollständig ausgeliefert.
Eine Alternative wäre, in eine temporäre Datei zu schreiben und diese dann mit mv an die richtige Stelle zu verschieben. Dadurch sollte dann die alte Datei vorher gelöscht werden, wobei sie aber von Prozessen, die sie noch offen haben, weiterhin gelesen werden kann.