Session: freeze() failed & Duplicate entry

asycs
Beiträge: 64
Registriert: Do 2. Feb 2006, 12:13
Kontaktdaten:

Session: freeze() failed & Duplicate entry

Beitrag von asycs » Mi 31. Mai 2006, 09:01

Folgend Fehlermeldungen treten sporadisch auf:

[30-May-2006 14:41:46] /cms/cms/front_content.php?idcatart=4&lang=1&client=1 Session: freeze() failed.
[30-May-2006 18:57:35] /cms/cms/front_content.php?idcatart=4&lang=1&client=1 MySQL error 1062: Duplicate entry 'bff08dee6542e49ace4d01271b560c4a' for key 1
insert into con_phplib_active_sessions ( sid, name, val, changed ) values ('bff08dee6542e49ace4d01271b560c4a', 'sid_1_1', '- sehr langer string -', '20060530185734')



Die Folge des ganzen - Ladezeiten wie zu Omas Zeiten.
Die Fehlermeldung scheint aber nur dann aufzutreten, wenn Artikel geändert wurden.
Betrifft auch nicht die Artikel, die geändert wurden, sondern irgendwelche.

Laut Fehlermeldung oben, scheint es Probleme bei idcatart=4 zu geben.
Dieser Artikel wurde aber def. nicht geändert.


Der Session: freeze() Fehler scheint ja nicht das Problem zu sein, soweit die Meinungen im Forum.
Hab aber keine Threads gefunden, bei denen freeze() und sql Fehler gemeinsam auftauchen.


Danke für Hinweise und Tipps.

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mi 31. Mai 2006, 09:16

dafür gibts leider keine lösung...

konnte man bis jetzt noch nie nachvollziehen warum und wieso...
dass das system dadurch langsam wird, ist mir in der beziehung aber auch noch nicht aufgefallen..
*** make your own tools (wishlist :: thx)

Dalamar
Beiträge: 298
Registriert: Di 16. Nov 2004, 15:43
Wohnort: Arnstadt / Thüringen
Kontaktdaten:

Beitrag von Dalamar » Mo 10. Jul 2006, 14:16

Ich denke ich habe eine Lösung gefunden.

Werde aber noch ein wenig testen.

Gruss,
Christian
Beruflich: eComradeGroup und Media Atoll
Privat: Fantasybuch.net ;)

Dalamar
Beiträge: 298
Registriert: Di 16. Nov 2004, 15:43
Wohnort: Arnstadt / Thüringen
Kontaktdaten:

Beitrag von Dalamar » Di 11. Jul 2006, 10:49

Ok, vielleicht interessiert es ja jemanden.

/conlib/ct_sql.inc öffnen und folgende Funktion

Code: Alles auswählen

  function ac_store($id, $name, $str) {
    $ret = true;

    switch ( $this->encoding_mode ) {
      case "slashes":
        $str = addslashes($name . ":" . $str);
      break;

      case "base64":
      default:
        $str = base64_encode($name . ":" . $str);
    };

    $name = addslashes($name);

    ## update duration of visit
    global $HTTP_REFERER, $HTTP_USER_AGENT, $REMOTE_ADDR;

    $now = date("YmdHis", time());
    $uquery = sprintf("update %s set val='%s', changed='%s' where sid='%s' and name='%s'",
      $this->database_table,
      $str,
      $now,
      $id,
      $name);
    $squery = sprintf("select count(*) from %s where val='%s' and changed='%s' and sid='%s' and name='%s'",
      $this->database_table,
      $str,
      $now,
      $id,
      $name);
    $iquery = sprintf("insert into %s ( sid, name, val, changed ) values ('%s', '%s', '%s', '%s')",
      $this->database_table,
      $id,
      $name,
      $str,
      $now);

    $this->db->query($uquery);

    # FIRST test to see if any rows were affected.
    #   Zero rows affected could mean either there were no matching rows
    #   whatsoever, OR that the update statement did match a row but made
    #   no changes to the table data (i.e. UPDATE tbl SET col = 'x', when
    #   "col" is _already_ set to 'x') so then,
    # SECOND, query(SELECT...) on the sid to determine if the row is in
    #   fact there,
    # THIRD, verify that there is at least one row present, and if there
    #   is not, then
    # FOURTH, insert the row as we've determined that it does not exist.

    if ( $this->db->affected_rows() == 0
        && $this->db->query($squery)
        && $this->db->next_record() && $this->db->f(0) == 0
        && !$this->db->query($iquery)) {

        $ret = false;
    }
    return $ret;
  }
durch diese

Code: Alles auswählen

  function ac_store($id, $name, $str)
  {
	$ret = true;

	switch ($this->encoding_mode)
	{
		case "slashes":
			$str = addslashes($name . ":" . $str);
			break;

		case "base64":
		default:
			$str = base64_encode($name . ":" . $str);
    	}

	$name = addslashes($name);
	global $HTTP_REFERER, $HTTP_USER_AGENT, $REMOTE_ADDR;
	$now = date("YmdHis", time());
     
	$iquery = sprintf("replace into %s ( sid, name, val, changed ) values ('%s', '%s', '%s', '%s')",
		$this->database_table,
		$id,
		$name,
		$str,
		$now);

	if (!$this->db->query($iquery)) $ret = false;
    	
    	return $ret;
  }
ersetzen.

Bisher tauchte bei mir keine Session Freeze Failed Meldung mehr im Log auf. Vielleicht kann das jemand testen.

LG,
Christian
Beruflich: eComradeGroup und Media Atoll
Privat: Fantasybuch.net ;)

Thorsten G.
Beiträge: 124
Registriert: Do 14. Jul 2005, 22:37
Kontaktdaten:

Beitrag von Thorsten G. » Di 11. Jul 2006, 13:56

Habe den Code geändert und arbeite jetzt seit einer Stunde in contenido.
Seither keine Errorlog-Einträge mehr.

Eins, setzen.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Di 11. Jul 2006, 14:32

Schön, vor allem, da die Stelle eingegrenzt wurde. Nochmal näher ansehen...

Verschoben.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Di 11. Jul 2006, 14:42

intressanter ansatz...
hab etwas gesucht und das hier gefunden
http://home.fnal.gov/~dbox/SQL_API_Portability.html
replace into foo values ( 'bar',1);
completely non portable. Use delete/insert or update as appropriate.
hmm...
einen verdacht warum das eigentlich manchmal zustande kommen kann hab ich ja mittlerweile... (tritt an sich ja nur im backend auf)
mögliche ursache -> wenn innerhalb eines framesets zur selben zeit der gleiche code ausgeführt wird...

folgende code änderung könnte auch funktionieren (sperren der tabelle beim updaten):

Code: Alles auswählen

  function ac_store($id, $name, $str) {
	$ret = true;

	switch ( $this->encoding_mode ) {
	  case "slashes":
		$str = addslashes($name . ":" . $str);
	  break;

	  case "base64":
	  default:
		$str = base64_encode($name . ":" . $str);
	};

	$name = addslashes($name);

	## update duration of visit
	global $HTTP_REFERER, $HTTP_USER_AGENT, $REMOTE_ADDR;

	$now = date("YmdHis", time());
	$uquery = sprintf("update %s set val='%s', changed='%s' where sid='%s' and name='%s'",
	  $this->database_table,
	  $str,
	  $now,
	  $id,
	  $name);
	$squery = sprintf("select count(*) from %s where val='%s' and changed='%s' and sid='%s' and name='%s'",
	  $this->database_table,
	  $str,
	  $now,
	  $id,
	  $name);
	$iquery = sprintf("insert into %s ( sid, name, val, changed ) values ('%s', '%s', '%s', '%s')",
	  $this->database_table,
	  $id,
	  $name,
	  $str,
	  $now);

	$this->db->lock($this->database_table);
	$this->db->query($uquery);

	# FIRST test to see if any rows were affected.
	#	Zero rows affected could mean either there were no matching rows
	#	whatsoever, OR that the update statement did match a row but made
	#	no changes to the table data (i.e. UPDATE tbl SET col = 'x', when
	#	"col" is _already_ set to 'x') so then,
	# SECOND, query(SELECT...) on the sid to determine if the row is in
	#	fact there,
	# THIRD, verify that there is at least one row present, and if there
	#	is not, then
	# FOURTH, insert the row as we've determined that it does not exist.

	if ( $this->db->affected_rows() == 0
		&& $this->db->query($squery)
		&& $this->db->next_record() && $this->db->f(0) == 0
		&& !$this->db->query($iquery)) {

		$ret = false;
	}

	$this->db->unlock();

	return $ret;
  }
das ist jetzt aber nicht getestet...
*** make your own tools (wishlist :: thx)

Dalamar
Beiträge: 298
Registriert: Di 16. Nov 2004, 15:43
Wohnort: Arnstadt / Thüringen
Kontaktdaten:

Beitrag von Dalamar » Fr 20. Okt 2006, 09:41

Moin Contenido-Team,

ich bin jetzt endlich dazu gekommen, die 4.6.15er Version auszuprobieren. Dabei ist mir aufgefallen, dass das Session Freeze Problem immer noch auftritt (bei mir bereits nach 3min Backend-Wurschtelei).

Wäre schön, wenn Ihr eine/n Workaround/Lösung in die nächste Version einbaut. Einen Lösungsvorschlag habe ich bereits weiter oben gepostet.

Danke Euch.

LG,
Christian
Beruflich: eComradeGroup und Media Atoll
Privat: Fantasybuch.net ;)

Dalamar
Beiträge: 298
Registriert: Di 16. Nov 2004, 15:43
Wohnort: Arnstadt / Thüringen
Kontaktdaten:

Beitrag von Dalamar » Mo 15. Okt 2007, 14:55

Leider enthält die Version 4.6.23 diesen Fehler immer noch.
Beruflich: eComradeGroup und Media Atoll
Privat: Fantasybuch.net ;)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mo 15. Okt 2007, 17:06

Ja, da dieser Thread offen ist, wurde es noch nicht eingebaut.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

wosch

Beitrag von wosch » Fr 16. Nov 2007, 17:30

emergence hat geschrieben:dafür gibts leider keine lösung...

konnte man bis jetzt noch nie nachvollziehen warum und wieso...
Ich poste es mal zum Überprüfen ob sich damit der Fehler reproduzieren läßt.
Ich hatte diesen Fehler (wie in Posting #1) seit ewigen Zeiten nicht mehr.
Dann habe ich ein Bild über die Dateiverwaltung hochgeladen.
Bildname: kuezel_bildname_x
das Bild lag im Unterverzeichnis upload/w
Und im Unterverzeichnis upload/c lag ein anders Bild mit exakt dem gleichen Namen.
Bilder wurden im Artikel richtig angezeigt, aber der Fehler war da.
Erst als ich das Bild im Verzeichnis w gelöscht und mit einem anderen Namen neu hochgeladen hatte war der Fehler weg.

Zufall ???

Contenider
Beiträge: 503
Registriert: Do 6. Apr 2006, 01:40
Kontaktdaten:

Beitrag von Contenider » Di 25. Dez 2007, 12:42

Wird das in die nächste Version eingebaut?
Ειμαστε στη μεση απο κατι...

bweichel
Beiträge: 223
Registriert: Mo 24. Jul 2006, 22:29
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von bweichel » Mi 26. Dez 2007, 18:44

hi wosch,

ich habe das gleiche Problem mit den Bildern... hast du eine Lösung oder einen Ansatz woran es liegen könnte? Es ist zum verzweifeln...

Dalamar
Beiträge: 298
Registriert: Di 16. Nov 2004, 15:43
Wohnort: Arnstadt / Thüringen
Kontaktdaten:

Beitrag von Dalamar » Sa 29. Dez 2007, 20:44

@bweichel: Einen Workaround findest Du weiter oben! :D
Beruflich: eComradeGroup und Media Atoll
Privat: Fantasybuch.net ;)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Di 8. Jan 2008, 19:38

Zunächst Fix von emergence eingebaut.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Gesperrt