Bug #309

Το GUI κολλάει όταν κάνει refresh

Added by Vangelis Koukis about 13 years ago. Updated about 13 years ago.

Status:Closed Start date:03/22/2011
Priority:High Due date:04/04/2011
Assignee:Giorgos Verigakis % Done:

0%

Category:Cyclades UI Spent time: -
Target version:-

Description

Εκτός από το πρόβλημα με τον Opera (#293), το partial refresh στο GUI εμφανίζει προβλήματα και με Firefox.
Αν κανείς κάνει επανειλημμένα κλικ μία στο list view μία στο standard view 2-3 φορές, κολλάει για πάντα.

Στα logs φαίνεται αυτό:

[22/Mar/2011 10:11:41] "GET /api/v1.0/servers/detail?changes-since=1300806699 HTTP/1.1" 304 0
[22/Mar/2011 10:11:42] "GET /api/v1.0/servers/detail?changes-since=1300806701 HTTP/1.1" 304 0
[22/Mar/2011 10:11:43] "GET /api/v1.0/servers/detail?changes-since=1300806702 HTTP/1.1" 304 0
[22/Mar/2011 10:11:45] "GET /api/v1.0/servers/detail?changes-since=1300806703 HTTP/1.1" 304 0
[22/Mar/2011 10:11:45] "GET /api/v1.0/servers/detail?changes-since=1300806700 HTTP/1.1" 304 0
[22/Mar/2011 10:11:46] "GET /api/v1.0/servers/detail?changes-since=1300806705 HTTP/1.1" 304 0
[22/Mar/2011 10:11:46] "GET /api/v1.0/servers/detail?changes-since=1300806705 HTTP/1.1" 304 0
[22/Mar/2011 10:11:47] "GET /api/v1.0/servers/detail?changes-since=1300806706 HTTP/1.1" 304 0

Γίνονται GET ανά δευτερόλεπτο, ενώ είναι ρυθμισμένο να παίζει ανά 3 δευτερόλεπτα τουλ.
Οι χρόνοι επίσης γυρίζουν πίσω. Που σημαίνει ότι η διαδικασία ενεργοποίησης του refresh έχει bug.

Αν κανείς πατήσει F5 ενώ το GUI είναι κολλημένο, πετάει κι ένα "Malformed Request".


Related issues

related to Synnefo - Bug #283: Προβλήματα με partial refresh στο GUI Closed 03/12/2011
blocks Synnefo - Feature #293: Partial refresh στο GUI Closed 03/16/2011 04/01/2011

Associated revisions

Revision 1c7978ce
Added by Dimitris Moraitis about 13 years ago

abort pending ajax requests on view switching - Fixes #309

Revision 267403ca
Added by Dimitris Moraitis about 13 years ago

new style confirmations & abort old switch view requests - Refs #209 Fixes #309

Revision 5d03dec6
Added by Dimitris Moraitis about 13 years ago

store datetimes in UTC - Fixes #309

Revision d8e50a39
Added by Giorgos Verigakis about 13 years ago

Move to OpenStack API v1.1

  • Removes piston dependency.
  • Adds dateutil dependency.

Fixes #183 - Implement /servers
Fixes #185 - Implement /images
Fixes #245 - Details in exception handlers
Fixes #249 - Metadata handling
Fixes #253 - Transition to OpenStack API v1.1
Fixes #255 - Fix XML for addresses
Fixes #287 - Piston related bug
Fixes #289 - Support both XML and JSON
Fixes #309 - GUI not refreshing
Fixes #339 - Support API extensions
Fixes #359 - action returns serviceUnavailable
Fixes #361 - return dates with timezones
Refs #301 - Sanitization of API
Refs #315 - Replace API v1.1

History

#1 Updated by Vangelis Koukis about 13 years ago

  • Due date changed from 03/23/2011 to 03/25/2011

Διευκρίνιση μετά από σημερινή συνάντηση:
αυτό πρέπει να διερευνηθεί. Αν είναι bug του Firefox, πρέπει να βρεθεί συγκεκριμένη αναφορά, ή να του ανοιχτεί bug.
Αν δεν είναι, και είναι bug της τοπικής Javascript, πρέπει να διορθωθεί.

#2 Updated by Dimitris Moraitis about 13 years ago

  • Status changed from Assigned to Feedback

Πλέον εκτός από clearTimeout κάνουμε και abort τα pending ajax requests όταν αλλάζει το standard/list view, το οποίο φαίνεται να λύνει το πρόβλημα σε όλες τις περιπτώσεις.

#3 Updated by Vangelis Koukis about 13 years ago

  • Status changed from Feedback to Assigned

Παίζει σίγουρα καλύτερα από πριν, πλέον δεν κολλάει αν πηγαίνω από list view σε standard view και πάλι πίσω. Κολλάει αν κάνω τετραπλό πενταπλό γρήγορο κλικ πάνω στο κάγκελο του list view. Βγαίνει ο spinner για πάντα και δεν αντικαθίσταται ποτέ. Αν πάω μετά αργά-αργά list-view και πάλι πίσω standard view, ή αν το αφήσω ώρα και μετά ξαναπατήσω το κάγκελο, όλα ΟΚ.

Αλλά το κολλάω όποτε θέλω αν κάνω 3πλο γρήγορο κλικ πάνω στο κάγκελο. Οπότε υπάρχει θέμα ακόμη.

#4 Updated by Dimitris Moraitis about 13 years ago

  • Status changed from Assigned to Feedback

Διορθώθηκε και αυτό

#5 Updated by Vangelis Koukis about 13 years ago

  • Status changed from Feedback to Assigned

Πράγματι δεν κολλάει πλέον, αλλά σταμάτησε να κάνει refresh η σελίδα εντελώς.
Δεν ανανεώνεται ποτέ δυναμικά το περιεχόμενο της σελίδας, όταν ο χρήστης ζητήσει να γίνει κάτι σε VM.

Οπότε αυτό δεν μπορεί να κλείσει.

#6 Updated by Dimitris Moraitis about 13 years ago

  • Status changed from Assigned to Feedback

Αν αλλάξεις το ΤΙΜΕ_ΖΟΝΕ σε "UTC" στο settings.py δεν θα πρέπει να έχεις πλέον πρόβλημα.

#7 Updated by Vangelis Koukis about 13 years ago

  • Status changed from Feedback to Assigned

Μπορείς να εξηγήσεις λίγο παραπάνω γιατί χρειάζεται το TIME_ZONE να γίνει UTC;
Αφού η Ελλάδα είναι UTC+2, το σύστημα πρέπει να λειτουργεί με TIME_ZONE=UTC+2.

Τι επηρεάζεται από αυτό;
Αν γίνεται συμπλήρωσε το παρόν ticket και [μετά, αν υπάρξει συμφωνία] βάλε ανάλογη τεκμηρίωση στον κώδικα, στο σημείο που επηρεάζεται από την τιμή της ρύθμισης TIME_ZONE.

#8 Updated by Dimitris Moraitis about 13 years ago

  • Status changed from Assigned to Feedback

Με την παραπάνω ρύθμιση το Django αποθηκεύει όλες τις ημερομηνίες εσωτερικά σε UTC. Επηρεάζονται όλα τα DateTimeField.

To UTC είναι καλύτερη επιλογή νομίζω μιας και δεν αλλάζει για daylight savings. Η Ελλάδα είναι αλλάζει από UTC+2 σε UTC+3. Αν σε κάποιο σημείο το πρόκειται να προβληθούν ημερομηνίες στο UI καλύτερα να μετατρέπονται εκείνη τη στιγμή στο τοπικό timezone του χρήστη.

#9 Updated by Vangelis Koukis about 13 years ago

  • Status changed from Feedback to Assigned

Όχι, δεν παίζει ρόλο η ρύθμιση του TIME_ZONE για το πώς αποθηκεύονται οι ημερομηνίες.
Οι ημερομηνίες αποθηκεύονται εσωτερικά με πολύ συγκεκριμένο, ανεξάρτητο της ρύθμισης TIME_ZONE τρόπο.
Το TIME_ZONE επηρεάζει την ερμηνεία και την παρουσίαση ημερομηνιών, όταν γίνεται είσοδος κι έξοδός τους.

Δείτε το documentation για τη ρύθμιση http://docs.djangoproject.com/en/dev/ref/settings/#time-zone.
Υπάρχει λίστα με τις επιτρεπόμενες τιμές. Η τιμή που ταιριάζει για Ελλάδα είναι η Europe/Athens.
Οπότε θέστε TIME_ZONE=Europe/Athens και φροντίστε το σύστημα να λειτουργεί σωστά με αυτή την τιμή.

#10 Updated by Dimitris Moraitis about 13 years ago

  • Status changed from Assigned to Feedback

Όχι, δεν έχεις δίκιο. Παίζει ρόλο και δημιουργεί προβλήματα:
http://code.djangoproject.com/ticket/2626

Υπάρχει κάποιος λόγος να μπλέξουμε με τοπικά timezones στο backend αντί να παίξουμε με την πιο universal λύση και να μετατρέπουμε τις ημερομηνίες στο timezone του κάθε χρήστη μέσω javascript μια μόνο φορά όταν θα τις εμφανίζουμε;

#11 Updated by Vangelis Koukis about 13 years ago

  • Status changed from Feedback to Assigned

Dimitris Moraitis wrote:

Υπάρχει κάποιος λόγος να μπλέξουμε με τοπικά timezones στο backend αντί να παίξουμε με την πιο universal λύση και να μετατρέπουμε τις ημερομηνίες στο timezone του κάθε χρήστη μέσω javascript μια μόνο φορά όταν θα τις εμφανίζουμε;

Δημήτρη, το να μην τρέχει ένα πρόγραμμα με την αναμενόμενη ρύθμιση για timezone, ή το να σπάει αν η ρύθμιση timezone δεν είναι συγκεκριμένη, γενικά είναι παράξενο.

Καταλαβαίνω ότι το Django έχει κάποιου είδους συμπεριφορά που μας επηρεάζει σε σχέση με το timezone, αλλά:
α) όταν κανείς θέτει το TIME_ZONE=UTC επηρεάζει το timezone όλων των διεργασιών που εκτελούνται από το Django, οπότε αυτό μπορεί να δημιουργήσει προβλήματα και δεν υπάρχει λόγος να το κάνουμε εκτός αν...
...β) υπάρχει τεκμηριωμένη ανάγκη ότι δημιυργείται κάποιο πρόβλημα που δεν μπορεί αν διορθωθεί στον κώδικα γιατί είναι εσωτερικό του Django.

Καταλαβαίνω από το ticket 2626 του Django που έστειλες, κι από αρκετό ψάξιμο που έκανα χθες ότι η υποστήριξη για timezones στο Django είναι ελλιπής και ασυνεπής σε κάποια σημεία, αλλά ακόμη δεν μου είναι προφανές γιατί το πρόγραμμά μας σκάει ή τέλος πάντων δυσλειτουργεί αν δεν είναι TIME_ZONE=UTC. Οπότε, αν είναι να κάνουμε την αλλαγή, πρέπει να απαντηθούν τα εξής δύο σημεία:

α) ποιο είναι συγκεκριμένα το πρόβλημα που έχετε με τα timezones; τι θα γίνει, ποια γραμμή του κώδικα θα σκάσει, ποια γραμμή δεν κάνει το αναμενόμενο αν timezone=America/Chicago ή ξέρω γω τι άλλο; εδώ χρειάζεται ένα συγκεκριμένο σενάριο ασυνέπειας.

β) αν είναι να απαιτείται TIME_ZONE=UTC για να παίξει σωστά το πρόγραμμα [αυτό πρέπει να προκύψει από το (α)], αυτό πρέπει να τεκμηριωθεί πάααρα πολύ έντονα σε πολλά διαφορετικά σημεία. Αλλά επειδή είναι παράξενο να μη δουλεύει καν το πρόγραμμα αν το timezone δεν είναι σωστό, ας δούμε πρώτα το (α) και βλέπουμε.

#12 Updated by Vangelis Koukis about 13 years ago

  • Due date changed from 03/25/2011 to 04/04/2011
  • Assignee changed from Dimitris Moraitis to Giorgos Verigakis

Επειδή το ISO8601 είναι πολύ γενικό, καλό είναι να χρησιμοποιηθεί ένας parser που υποστηρίζει γενικά το πρότυπο. Προτείνω την python-dateutil, η οποία κάνει parse πολλές διαφορετικές μορφές, δείτε: http://niemeyer.net/python-dateutil και είναι και στο Squeeze.

Επίσης, δεν γίνεται η ορθότητα της εφαρμογής να εξαρτάται από το TIME_ZONE.
Οπότε, θα αλλάξει ο handler ώστε να παίρνει ό,τι ISO8601 νά'ναι, να το κάνει UTC, και μετά να το μετατρέπει σε local (naive) datetime και να το συγκρίνει.

Το αναλαμβάνει ο [verigak].

#13 Updated by Giorgos Verigakis about 13 years ago

Ο λόγος που χρειάζεται το TIME_ZONE να είναι UTC είναι επειδή το χρησιμοποιούν όλα τα DateTimeField πεδία που έχουν auto_now_add ή auto_now. Σε αντίθετη περίπτωση θα πρέπει όλα τα created και updated να γίνονται update με το χέρι.

#14 Updated by Vangelis Koukis about 13 years ago

  • Status changed from Assigned to Resolved

Μετά από offline συζήτηση με [verigak], καταλήξαμε ότι αυτό είναι πολύ δύσκολο να υλοποιηθεί σωστά.
Τα Django backends έχουν διαφορετική συμπεριφορά [η PostgreSQL καταλαβαίνει timezones, οι υπόλοιποι όχι], ticket http://code.djangoproject.com/ticket/2626 του Django. Οπότε, το API δεν μπορεί με αξιόπιστο τρόπο να ξέρει ότι γράφονται πάντα UTC ημερομηνίες οι οποίες επιστρέφονται πάντα με αυτόν τον τρόπο.

Αλλά και να αποφασίζαμε ότι πάντα αποθηκεύουμε UTC ώρες, το auto_now_add και το auto_now πάνε και γράφουν μόνα τους local ώρες.

Οπότε: επειδή θέλουμε να είμαστε ανεξάρτητοι από το db backend, κι επειδή τα auto_now κ.λπ. είναι πράγματι πολύ χρήσιμα, το API [και μόνο το API] θα τρέχει με TIME_ZONE = 'UTC'.

Το κάνω resolve. Πρέπει να προστεθεί ανάλογο σχόλιο στο settings.py, ότι το TIME_ZONE πρέπει να τίθεται σε 'UTC'.

#15 Updated by Vangelis Koukis about 13 years ago

  • Status changed from Resolved to Closed

Δεν υπάρχει αξιόπιστος τρόπος το API implementation να λειτουργεί με πολλαπλά db backends και να μπορεί να αποθηκεύσει σε UTC, γιατί η συμπεριφορά αλλάζει ανάλογα με το backend. Επιπλέον, τα auto_now, auto_now_add χρησιμοποιούν πάντα τοπικές ώρες.

Η υλοποίηση του API απαιτεί TIME_ZONE='UTC', το κλείνω.

Also available in: Atom PDF