Μονοτονικές προθεσμίες και συνολικό όριο επαναλήψεων — DedSec Project
Μονοτονικές προθεσμίες και συνολικό όριο επαναλήψεων Μηχανισμός και συμβόλαιο Το ρολόι ημερομηνίας απαντά πότε συνέβη κάτι. Το μονοτονικό ρολόι μετρά διάρκεια μέσα σε ενεργό σύστημα. Αν ένα…
Μηχανισμός και συμβόλαιο
Το ρολόι ημερομηνίας απαντά πότε συνέβη κάτι. Το μονοτονικό ρολόι μετρά διάρκεια μέσα σε ενεργό σύστημα. Αν ένα timeout βασίζεται σε ώρα που διορθώνεται χειροκίνητα, μπορεί να μεγαλώσει ή να μικρύνει απρόβλεπτα. Υπολόγισε μία προθεσμία και δώσε σε κάθε προσπάθεια μόνο το υπόλοιπο.
Τρεις προσπάθειες με νέο όριο δέκα δευτερολέπτων μπορούν να καταναλώσουν περίπου τριάντα δευτερόλεπτα μαζί με αναμονές. Το συνολικό όριο πρέπει να καλύπτει σύνδεση, ανάγνωση, καθυστερήσεις και καθαρισμό. Ένα timeout βιβλιοθήκης δεν περιορίζει απαραίτητα κάθε στάδιο· εξέτασε το συμβόλαιό της. Μια σύγχρονη λειτουργία που αγνοεί ακύρωση μπορεί να ξεπεράσει την προθεσμία. Εδώ ελέγχεται η αριθμητική, όχι διακοπή αυθαίρετου μπλοκαρισμένου κώδικα.
Τοπικό παράδειγμα
def remaining(deadline, now):
return max(0.0, deadline - now)
start = 100.0 # injected monotonic clock fixture
deadline = start + 10.0
assert remaining(deadline, 103.0) == 7.0
assert remaining(deadline, 109.5) == 0.5
assert remaining(deadline, 111.0) == 0.0
# Production: deadline = time.monotonic() + budget
print("single budget preserved")
Έλεγχοι αποτυχίας και όρια
Χρησιμοποίησε ελεγχόμενο ρολόι για άλματα ημερομηνίας ενώ ο μονοτονικός χρόνος προχωρά κανονικά. Μην αποθηκεύεις μονοτονική προθεσμία ως μεταφέρσιμη ημερομηνία, επειδή το σημείο αναφοράς της είναι απροσδιόριστο. Μετά επανεκκίνηση ανακατασκεύασε την πολιτική από μόνιμα χρονικά μεταδεδομένα και κανόνες λήξης. Όρισε αν ο χρόνος αναστολής συσκευής μετρά στο όριο.