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

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

מצב אבוד ב-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 and Deadlines.

כדי להגדיר את מועד סיום השימוש בספריית הלקוח של 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)

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

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

PERMISSION_DENIED (HTTP 403)

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

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

INVALID_ARGUMENT (HTTP 400)

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

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

FAILED_PRECONDITION (HTTP 400)

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

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

UNAVAILABLE (HTTP 503)

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

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