פתרון בעיות נפוצות

אם נתקלתם בבעיות, תוכלו להיעזר בקטעים הבאים.

מצב אובדן ב-Fleet Engine

כשעובדים עם Fleet Engine, חשוב לתכנן את ההטמעה כך שתהיה עמידה בפני כשלים. לדוגמה, אם שולחים בקשה ל-Fleet Engine לעדכן רכב, יכול להיות שתתקבל תגובה עם שגיאה שמציינת שהרכב לא קיים. לאחר מכן, ההטמעה צריכה ליצור מחדש את הרכב במצב החדש.

בתרחיש לא סביר של כשל קטסטרופלי ב-Fleet Engine, יכול להיות שתצטרכו ליצור מחדש את רוב כלי הרכב והמשימות או את כולם. אם קצב היצירה יהיה גבוה מדי, יכול להיות שחלק מהבקשות ייכשלו שוב בגלל בעיות במכסה, כי יש בדיקות מכסה כדי למנוע מתקפות מניעת שירות (DOS). במקרה כזה, צריך להאט את קצב היצירה מחדש באמצעות אסטרטגיית השהיה מעריכית לפני ניסיון חוזר (backoff) לניסיונות חוזרים.

ניסיונות חוזרים

חשוב לוודא שהמערכת שלכם מטמיעה ניסיונות חוזרים לבקשות אל Fleet Engine, כי יכול להיות שהן ייכשלו מדי פעם. ספריות הלקוח של Fleet Engine מנפיקות ניסיונות חוזרים כברירת מחדל.

מצב אבוד באפליקציית הנהג

אם אפליקציית הנהג קורסת, האפליקציה צריכה ליצור מחדש את המצב הנוכחי ב-Driver SDK. האפליקציה צריכה לנסות ליצור מחדש את המשימות כדי לוודא שהן קיימות וכדי לשחזר את המצבים הנוכחיים שלהן. בנוסף, האפליקציה צריכה ליצור מחדש את רשימת התחנות של Driver SDK ולהגדיר אותה באופן מפורש.

הערה: השחזורים האלה צריכים להתבצע באופן אוטונומי, בלי להסתמך על מידע מ-Fleet Engine, למעט שגיאות שמציינות אם ישות כבר קיימת במסד הנתונים ומתי היא קיימת. אם הישות כבר קיימת, אפשר להתעלם מהשגיאה ולעדכן את הישות באמצעות המזהה שלה.

שגיאות שקשורות לחריגה מהמועד האחרון

אם מקבלים שגיאת DEADLINE_EXCEEDED כשמתקשרים עם Fleet Engine, הבקשה נמשכה יותר מהזמן שהוגדר לפסק זמן. לספריות הלקוח של Fleet Engine יש הגדרות ברירת מחדל של פסק זמן, אבל יכול להיות שתצטרכו לשנות אותן.

מידע כללי על מועדים סופיים ב-gRPC זמין במאמר gRPC ומועדים סופיים.

כדי להגדיר את תאריך היעד כשמשתמשים בספריית הלקוח של Java ב-Fleet Engine, אפשר לשנות את הגדרות הניסיון החוזר של RPC. בדוגמה הבאה אפשר לראות איך מגדירים זמן קצוב לתפוגה מותאם אישית כשמגדירים את VehicleService:

VehicleServiceSettings.Builder settingsBuilder = VehicleServiceSettings.newBuilder();

// Set the timeout to 10 seconds.
settingsBuilder
    .getVehicleSettings()
    .setRetrySettings(
        settingsBuilder.getVehicleSettings().getRetrySettings().toBuilder()
            .setTotalTimeout(java.time.Duration.ofSeconds(10))
            .build());

VehicleServiceClient client = VehicleServiceClient.create(settingsBuilder.build());

שגיאות API נפוצות

בקטע הזה מפורטות שגיאות נפוצות ב-API שאפשר להיתקל בהן, הסיבות להן והדרכים לפתור אותן.

NOT_FOUND (HTTP 404)

לא נמצאה הישות המבוקשת (כמו רכב, נסיעה או משימה).

  • הסיבה: בדרך כלל, השגיאה הזו מתרחשת כשמנסים לקבל, לעדכן או למחוק ישות באמצעות מזהה שלא קיים במסד הנתונים.
  • פתרון: לפני שמנסים לגשת לישות, צריך לוודא שמזהה הישות נכון ושהישות נוצרה בהצלחה.

‫ALREADY_EXISTS (HTTP 409)

הישות שניסית ליצור כבר קיימת.

  • הסיבה: הבעיה נגרמת כתוצאה מקריאה ל-method ליצירה (כמו CreateVehicle או CreateTrip) עם מזהה שכבר נמצא בשימוש.
  • פתרון: מעדכנים את הישות הקיימת במקום זאת, או משתמשים במזהה ייחודי חדש לבקשת היצירה.

PERMISSION_DENIED (HTTP 403)

אין לכם את ההרשאות הנדרשות כדי להשלים את הבקשה.

  • הסיבה: בדרך כלל השגיאה הזו מתרחשת אם חסרים ב-JSON Web Token‏ (JWT) הטענות הנכונות, או אם לחשבון השירות שחתום על ה-JWT חסרים תפקידי ה-IAM הנדרשים. לדוגמה, 'JWT does not contain a matching scope for requested trip' (ב-JWT אין היקף תואם לנסיעה המבוקשת).
  • פתרון: צריך לבדוק את ההרשאות של חשבון השירות ולוודא שההיקפים הנכונים של הישות שאליה מנסים לגשת כלולים בהצהרות ה-JWT.

‫INVALID_ARGUMENT (HTTP 400)

אחד או יותר מהארגומנטים שהועברו בבקשה לא תקינים.

  • הסיבה: יכולות להיות לכך כמה סיבות, כמו הזנת ערך מחוץ לטווח (למשל, קיבולת מקסימלית), השמטת שדה חובה (למשל, VehicleType) או הזנת קואורדינטות לא תקינות לנקודת איסוף.
  • תיקון: בודקים את הודעת השגיאה לגבי השדה הספציפי שהוא לא תקין, ומוודאים שהבקשה תואמת למפרט ה-API.

‫FAILED_PRECONDITION (HTTP 400)

הפעולה נדחתה כי המערכת לא במצב שנדרש לביצוע הפעולה.

  • הסיבה: הסיבות הנפוצות כוללות ניסיון לשנות נסיעה מסוג COMPLETE או CANCELED למדינה אחרת, או ניסיון להקצות משימה מסוג CLOSED לרכב.
  • פתרון: מוודאים שהמצב הנוכחי של הישות מאפשר את הפעולה שאתם מנסים לבצע. בודקים את הודעת השגיאה כדי לראות אילו הפרות ספציפיות של חוקים התרחשו.

UNAVAILABLE (HTTP 503)

השירות לא זמין.

  • הסיבה: הבעיה הזו מצביעה על בעיה זמנית בשירות Fleet Engine.
  • תיקון: אפשר לבצע ניסיון חוזר של הבקשה בבטחה עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff).