概要
別のプロジェクト GetShipmentCompletionSlip で発生・修正した「APIデータ取得時の早期終了およびデータスキップ(歯抜け)」と同様の古いコードが、本プロジェクトの 03_受注情報取得.gs 内にも残っているため、予防的メンテナンスとして修正を行います。
現時点で本番データとCSVでの件数差異は確認されていませんが、将来的にデータ漏れが発生する潜在的リスクがあります。
潜在的リスクと発生条件
以下のいずれかの条件が満たされた場合、1日あたりの取得データに「数件〜数百件のデータ漏れ」が発生する可能性があります。
- 繁忙期などの出荷急増:
- 1日(出荷日)あたりのデータ件数が 1,000 件 を超えた場合。
- APIサーバー高負荷時のレスポンス切り詰め:
- データ件数が 1,000 件未満であっても、ネクストエンジンAPIが負荷等により 1,000 件未満(例: 995件など)でデータを返してきた場合、プログラムが「全件取得完了」と誤判定して途中でループを終了してしまう。
- また、次のリクエストで
offset が固定値(LIMIT = 1000)で加算され、差分(例: 5件)がスキップ(歯抜け)されてしまう。
修正・対応方針
03_受注情報取得.gs にあるデータ取得関数(および関連するキャンセル情報取得処理等)に対して、以下の修正を適用します。
- 早期終了の防止(終了判定の変更)
- 取得件数が
LIMIT(1000)未満であることによる終了判定を廃止。
- データが完全に空(
data.length === 0)で返ってくるまで取得ループを回すように変更。
- offset加算の修正(歯抜け防止)
offset += LIMIT(固定値)から offset += data.length(実際の取得件数)に変更。
- データ整合性チェックの導入(SRE対応)
- 取得完了時に、APIの総件数(
json.count)と実際に取得できた件数が一致しているか(不足していないか)を確認し、不整合があれば console.warn で警告ログを出力する。
- テストの実施
- 修正後、テスト用シート等への書き出し実験を行い、本番データと件数が正しく一致することを確認する。
概要
別のプロジェクト
GetShipmentCompletionSlipで発生・修正した「APIデータ取得時の早期終了およびデータスキップ(歯抜け)」と同様の古いコードが、本プロジェクトの03_受注情報取得.gs内にも残っているため、予防的メンテナンスとして修正を行います。現時点で本番データとCSVでの件数差異は確認されていませんが、将来的にデータ漏れが発生する潜在的リスクがあります。
潜在的リスクと発生条件
以下のいずれかの条件が満たされた場合、1日あたりの取得データに「数件〜数百件のデータ漏れ」が発生する可能性があります。
offsetが固定値(LIMIT= 1000)で加算され、差分(例: 5件)がスキップ(歯抜け)されてしまう。修正・対応方針
03_受注情報取得.gsにあるデータ取得関数(および関連するキャンセル情報取得処理等)に対して、以下の修正を適用します。LIMIT(1000)未満であることによる終了判定を廃止。data.length === 0)で返ってくるまで取得ループを回すように変更。offset += LIMIT(固定値)からoffset += data.length(実際の取得件数)に変更。json.count)と実際に取得できた件数が一致しているか(不足していないか)を確認し、不整合があればconsole.warnで警告ログを出力する。