Page 1 of 2

Assertion i mono med Switchking 3.0.0.13

Posted: Tue 25 Sep 2012, 20:33
by joh.johansson
Hej,

Jag har uppdaterat till 3.0.0.13 av Linux-versionen av Switchking (och är grymt nöjd med tillägget av SystemMode för övrigt... ) men det har medfört att jag får en krasch med jämna mellanrum i mono. Har en Tellstick Duo och körde tidigare 2.0.2.10 med gott resultat. Allt snurrar på en installation med Debian 5 och med mono 2.10.7.

Jag har lyckats fånga stacktrace från mono när det smäller och det är en assertion i mono i threads.c på rad 391. Det är en assert där man verkar kontrollera ett id från en tråd som skapats mot ett max-värde:

* Assertion at threads.c:391, condition `id < HAZARD_TABLE_MAX_SIZE' not met

Bifogar komplett stacktrace för alla trådar i filen switchking.log.

Jag har monitorerat mono-processen som kör Switchking lite och ser att det skapas en hel del trådar (som i och för sig också försvinner så det känns inte som ett resursläckage) som verkar hänga samman med inkommande events från telldusd. Tittar jag i event-loggen i Switchking-klienten ser jag massa temperaturvärden som kommer titt som tätt (förmodligen en granne med trådlös termometer) och i samband med detta ser jag att tråd-id:n i processen ändras löpande.

Utan att ha gått på djupet i monos tråd-implementation misstänker jag att det finns ett problem med att skapa och döda ett stort antal trådar vilket gör att ovanstående assertion slår till efter ett tag. Är implementationen i Switchking gjord så att en tråd skapas för varje event där eventet processas och sedan dör tråden? Finns liknande problem rapporterat tidigare under Linux? Hittar inget i ert bugnet direkt som jag kan härleda till detta problem.

När jag körde 2.0.2.10 hade jag inkommande event från min Duo avstängt pga en bugg som orsakade en krasch i den versionen av Swtichking. Kan man stänga av inkommande events från Tellstick Duo även i Switchking 3? Hur i så fall? Skulle vilja testa att köra med det avslaget och se om jag kan reproducera felet då.

/Johan

Re: Assertion i mono med Switchking 3.0.0.13

Posted: Tue 25 Sep 2012, 20:53
by Martin
Event som kommer från Telldusd fångas upp i egna trådar och läggs därefter i en ThreadPool. Syftet med denna ThreadPool är att Switch King måste returnera "OK" till Telldusd så snart som möjligt.
Man kan begränsa antal möjliga samtidiga trådar i ThreadPool och det kanske skulle lösa problemet.

Det är möjligt att stänga av inkommande händelser i Switch King och därmed kapa antalet samtidiga trådar på det sättet och man kan isf antingen stänga av sensoravlyssning, "raw-avlyssning" eller enhetsavlyssning.
Det gör man isf genom att köra en databasfråga mot Switch Kings SQLite-databas.

Följande stänger av all avlyssning, så du får nog välja vilket du isf vill stäng av:

Code: Select all

UPDATE SystemSettings SET SystemSettingValue = 'False' WHERE SystemSettingName = 'TelldusCallbackRawEnabled';
UPDATE SystemSettings SET SystemSettingValue = 'False' WHERE SystemSettingName = 'TelldusCallbackDeviceEventEnabled';
UPDATE SystemSettings SET SystemSettingValue = 'False' WHERE SystemSettingName = 'TelldusCallbackDeviceChangeEnabled';
UPDATE SystemSettings SET SystemSettingValue = 'False' WHERE SystemSettingName = 'TelldusCallbackSensorEventEnabled';
Du får gärna börja där och se om teorin om antal trådar håller. Isf så kan vi justera ner antalet samtidiga trådar i nästa version för Mono.

Re: Assertion i mono med Switchking 3.0.0.13

Posted: Wed 26 Sep 2012, 19:22
by joh.johansson
Hej,

Tack för informationen. Sensor-event och Raw-event är nu satta till False i SystemSettings och inga event kommer in till Switchking annat än device-eventen. Återkommer om några dagar med resultat.

/Johan

Re: Assertion i mono med Switchking 3.0.0.13

Posted: Tue 02 Oct 2012, 07:55
by Martin
Uppdatering? :roll:

Sv: Assertion i mono med Switchking 3.0.0.13

Posted: Tue 02 Oct 2012, 18:03
by joh.johansson
So far so good. Ingen krasch sedan jag stängde av events (sensor och raw events är avstängda) den 26/9 vilket tyder på attmin teori håller. Frågan är om en begränsning av antalet samtidiga trådar i threadpoolen hjälper? Det jag misstänker är att man behöver återanvända trådarna för att undvika att der skapas nya trådar hela tiden och att mono slår i taket på maxskapade trådar i den interna trådhanteringen. Men det kanske är så att trådpoolen återanvänder trådar om man sätter ett tak? Jag kan dock testa en version med maxtak på poolen för att se om det hjälper om du vill bygga en.

Re: Assertion i mono med Switchking 3.0.0.13

Posted: Tue 02 Oct 2012, 18:48
by Videonisse
Martin wrote:Följande stänger av all avlyssning, så du får nog välja vilket du isf vill stäng av:

Code: Select all

UPDATE SystemSettings SET SystemSettingValue = 'False' WHERE SystemSettingName = 'TelldusCallbackSensorEventEnabled';
Det här var ett utmärkt tips! Har nu stängt av "TelldusCallbackSensorEventEnabled"

Jag får för mina temp.sensorer in 40 events per sensor varje minut och Telldus har inte kommit underfund med varför än. I SK har jag nyligen ändrat så datakällorna för sensorerna använder raw event (då den infon bara är "normala" 1-2 events per unik sensoruppdatering. Då verkar jag ju nu slippa få SK "hamrad" med all denna onormala data :D

Fråga till Martin; förstår jag rätt att inställningen för "TelldusCallbackSensorEventEnabled" aktiverar funktionen "tdRegisterSensorEvent()"?

Re: Sv: Assertion i mono med Switchking 3.0.0.13

Posted: Tue 02 Oct 2012, 19:17
by Martin
joh.johansson wrote:So far so good. Ingen krasch sedan jag stängde av events (sensor och raw events är avstängda) den 26/9 vilket tyder på attmin teori håller. Frågan är om en begränsning av antalet samtidiga trådar i threadpoolen hjälper? Det jag misstänker är att man behöver återanvända trådarna för att undvika att der skapas nya trådar hela tiden och att mono slår i taket på maxskapade trådar i den interna trådhanteringen. Men det kanske är så att trådpoolen återanvänder trådar om man sätter ett tak? Jag kan dock testa en version med maxtak på poolen för att se om det hjälper om du vill bygga en.
Funktionen med trådpoolen är just att trådarna ska återanvändas eftersom det är kostsamt att skapa nya trådar. I princip borde man kunna sätta trådpoolen till en enda tråd.

Re: Assertion i mono med Switchking 3.0.0.13

Posted: Tue 02 Oct 2012, 19:18
by Martin
Videonisse wrote:Fråga till Martin; förstår jag rätt att inställningen för "TelldusCallbackSensorEventEnabled" aktiverar funktionen "tdRegisterSensorEvent()"?
Japp!

Re: Assertion i mono med Switchking 3.0.0.13

Posted: Thu 28 Nov 2013, 18:44
by rune
Har fått samme problem. Kjører serveren på en Ubuntu 12.04.3 LTS.

Noen som har tips til hvordan jeg gjør endringer direkte i databasen for å legge inn dette:
UPDATE SystemSettings SET SystemSettingValue = 'False' WHERE SystemSettingName = 'TelldusCallbackSensorEventEnabled';

Prøver å koble meg opp med sqlite:
sqlite switchKing.server.db3
Unable to open database "switchKing.server.db3": file is encrypted or is not a database

Har googlet en del, og finner lite informasjon om krypterte db3 filer og hvordan koble seg opp til databasen.

Anyone?

Rune

Re: Assertion i mono med Switchking 3.0.0.13

Posted: Thu 28 Nov 2013, 19:04
by Martin
Databasen är inte krypterad. Det kan vara idé att försöka med annan programvara för sqlite.