לדלג לתוכן

תרגול שירות מול משתמש

תרגיל ראשון - שתי עבודות

שלבו את client_owns_job בשרת הpipe מהפרק הקודם. הגדירו שתי רשומות עבודה עם SIDים של שני משתמשי מעבדה. שלחו פקודת שאילתת מצב ופקודת ביטול מכל משתמש לכל עבודה. בהודעה מותר לשלוח מזהה עבודה בלבד; זהות הלקוח אינה שדה לבחירתו.

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

תרגיל שני - כשל בזמן התחזות

הוסיפו הזרקת חריגה אחרי פתיחת token הלקוח ולפני ההשוואה. לאחר הטיפול בשגיאה, בדקו שבthread אין token התחזות. חזרו על הבדיקה בלי הזרקת כשל. הסבירו מדוע במקרה של כשל בRevertToSelf אין להמשיך לעבודה הבאה בpool.

תרגיל שלישי - בעלות שהשתנתה

נתון קוד שבודק הרשאה לפי מזהה עבודה, מכניס את המזהה לתור, ואז worker מבצע lookup חדש ומבטל את העבודה שנמצאה. מצאו תזמון שמאפשר לפגוע בעבודה אחרת אם מזהים ממוחזרים. תכננו תיקון עם reference יציב או generation, והגדירו מה קורה אם העבודה נמחקה לוגית לפני שהworker הגיע אליה.