From 73cbead4c3c6ed285c1f0fd49e6f36ccb9589730 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Tue, 11 Mar 2014 18:01:29 -0400 Subject: [PATCH 1/5] CC-5729: Pypo race condition on show source kick event kills playout * Fixed a race condition in pypo which could kill playout. Input kick events and non-file/webstream events could result in an exception being thrown. Fixed the logic error behind this, caught the exception just in case, and added some code to prevent uncaught pypopush exceptions from terminating the thread. * Could prevent playout breakage in similar situations --- python_apps/pypo/pypoliquidsoap.py | 130 +++++++++++++++-------------- python_apps/pypo/pypopush.py | 10 ++- 2 files changed, 72 insertions(+), 68 deletions(-) diff --git a/python_apps/pypo/pypoliquidsoap.py b/python_apps/pypo/pypoliquidsoap.py index 93647b3b6..74211fddd 100644 --- a/python_apps/pypo/pypoliquidsoap.py +++ b/python_apps/pypo/pypoliquidsoap.py @@ -117,76 +117,79 @@ class PypoLiquidsoap(): #independent_event: true #}, + try: + scheduled_now_files = \ + filter(lambda x: x["type"] == eventtypes.FILE, scheduled_now) - scheduled_now_files = \ - filter(lambda x: x["type"] == eventtypes.FILE, scheduled_now) + scheduled_now_webstream = \ + filter(lambda x: x["type"] == eventtypes.STREAM_OUTPUT_START, \ + scheduled_now) - scheduled_now_webstream = \ - filter(lambda x: x["type"] == eventtypes.STREAM_OUTPUT_START, \ - scheduled_now) + schedule_ids = set(map(lambda x: x["row_id"], scheduled_now_files)) - schedule_ids = set(map(lambda x: x["row_id"], scheduled_now_files)) - - row_id_map = {} - liq_queue_ids = set() - for i in self.liq_queue_tracker: - mi = self.liq_queue_tracker[i] - if not self.is_media_item_finished(mi): - liq_queue_ids.add(mi["row_id"]) - row_id_map[mi["row_id"]] = mi - - to_be_removed = set() - to_be_added = set() - - #Iterate over the new files, and compare them to currently scheduled - #tracks. If already in liquidsoap queue still need to make sure they don't - #have different attributes - #if replay gain changes, it shouldn't change the amplification of the currently playing song - for i in scheduled_now_files: - if i["row_id"] in row_id_map: - mi = row_id_map[i["row_id"]] - correct = mi['start'] == i['start'] and \ - mi['end'] == i['end'] and \ - mi['row_id'] == i['row_id'] - - if not correct: - #need to re-add - self.logger.info("Track %s found to have new attr." % i) - to_be_removed.add(i["row_id"]) - to_be_added.add(i["row_id"]) - - - to_be_removed.update(liq_queue_ids - schedule_ids) - to_be_added.update(schedule_ids - liq_queue_ids) - - if to_be_removed: - self.logger.info("Need to remove items from Liquidsoap: %s" % \ - to_be_removed) - - #remove files from Liquidsoap's queue + row_id_map = {} + liq_queue_ids = set() for i in self.liq_queue_tracker: mi = self.liq_queue_tracker[i] - if mi is not None and mi["row_id"] in to_be_removed: - self.stop(i) + if not self.is_media_item_finished(mi): + liq_queue_ids.add(mi["row_id"]) + row_id_map[mi["row_id"]] = mi - if to_be_added: - self.logger.info("Need to add items to Liquidsoap *now*: %s" % \ - to_be_added) + to_be_removed = set() + to_be_added = set() - for i in scheduled_now: - if i["row_id"] in to_be_added: - self.modify_cue_point(i) - self.play(i) + #Iterate over the new files, and compare them to currently scheduled + #tracks. If already in liquidsoap queue still need to make sure they don't + #have different attributes + #if replay gain changes, it shouldn't change the amplification of the currently playing song + for i in scheduled_now_files: + if i["row_id"] in row_id_map: + mi = row_id_map[i["row_id"]] + correct = mi['start'] == i['start'] and \ + mi['end'] == i['end'] and \ + mi['row_id'] == i['row_id'] + + if not correct: + #need to re-add + self.logger.info("Track %s found to have new attr." % i) + to_be_removed.add(i["row_id"]) + to_be_added.add(i["row_id"]) + + + to_be_removed.update(liq_queue_ids - schedule_ids) + to_be_added.update(schedule_ids - liq_queue_ids) + + if to_be_removed: + self.logger.info("Need to remove items from Liquidsoap: %s" % \ + to_be_removed) + + #remove files from Liquidsoap's queue + for i in self.liq_queue_tracker: + mi = self.liq_queue_tracker[i] + if mi is not None and mi["row_id"] in to_be_removed: + self.stop(i) + + if to_be_added: + self.logger.info("Need to add items to Liquidsoap *now*: %s" % \ + to_be_added) + + for i in scheduled_now_files: + if i["row_id"] in to_be_added: + self.modify_cue_point(i) + self.play(i) + + #handle webstreams + current_stream_id = self.telnet_liquidsoap.get_current_stream_id() + if scheduled_now_webstream: + if int(current_stream_id) != int(scheduled_now_webstream[0]["row_id"]): + self.play(scheduled_now_webstream[0]) + elif current_stream_id != "-1": + #something is playing and it shouldn't be. + self.telnet_liquidsoap.stop_web_stream_buffer() + self.telnet_liquidsoap.stop_web_stream_output() + except KeyError as e: + self.logger.error("Error: Malformed event in schedule. " + str(e)) - #handle webstreams - current_stream_id = self.telnet_liquidsoap.get_current_stream_id() - if scheduled_now_webstream: - if int(current_stream_id) != int(scheduled_now_webstream[0]["row_id"]): - self.play(scheduled_now_webstream[0]) - elif current_stream_id != "-1": - #something is playing and it shouldn't be. - self.telnet_liquidsoap.stop_web_stream_buffer() - self.telnet_liquidsoap.stop_web_stream_output() def stop(self, queue): self.telnet_liquidsoap.queue_remove(queue) @@ -200,8 +203,7 @@ class PypoLiquidsoap(): self.liq_queue_tracker[i] = None def modify_cue_point(self, link): - if not self.is_file(link): - return + assert self.is_file(link) tnow = datetime.utcnow() diff --git a/python_apps/pypo/pypopush.py b/python_apps/pypo/pypopush.py index 8a5600258..75079ca1f 100644 --- a/python_apps/pypo/pypopush.py +++ b/python_apps/pypo/pypopush.py @@ -153,8 +153,10 @@ class PypoPush(Thread): self.telnet_lock.release() def run(self): - try: self.main() - except Exception, e: - top = traceback.format_exc() - self.logger.error('Pypo Push Exception: %s', top) + while True: + try: self.main() + except Exception, e: + top = traceback.format_exc() + self.logger.error('Pypo Push Exception: %s', top) + time.sleep(5) From 9a803b1da5eca9022f7c929eed4c2fa9247f66ec Mon Sep 17 00:00:00 2001 From: localizer Date: Wed, 12 Mar 2014 09:30:20 +0000 Subject: [PATCH 2/5] updated translation resources --- airtime_mvc/locale/de_DE/LC_MESSAGES/airtime.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/locale/de_DE/LC_MESSAGES/airtime.po b/airtime_mvc/locale/de_DE/LC_MESSAGES/airtime.po index 368321c48..cab178abf 100644 --- a/airtime_mvc/locale/de_DE/LC_MESSAGES/airtime.po +++ b/airtime_mvc/locale/de_DE/LC_MESSAGES/airtime.po @@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: Airtime\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-12-13 12:58-0500\n" -"PO-Revision-Date: 2014-02-12 10:53+0000\n" +"PO-Revision-Date: 2014-02-12 11:00+0000\n" "Last-Translator: danielhjames \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/airtime/language/de_DE/)\n" "MIME-Version: 1.0\n" @@ -2211,7 +2211,7 @@ msgstr "Admin Benutzer und Passwort, wird zur Abfrage der Zuhörerdaten in Iceca #: airtime_mvc/application/controllers/LocaleController.php:180 msgid "" "Warning: You cannot change this field while the show is currently playing" -msgstr "" +msgstr "Warnung: Dieses Feld kann nicht geändert werden, während die Sendung wiedergegeben wird." #: airtime_mvc/application/controllers/LocaleController.php:181 msgid "No result found" From e0386f9752fc8838a27752fc2f7803af94546d99 Mon Sep 17 00:00:00 2001 From: localizer Date: Wed, 12 Mar 2014 09:34:44 +0000 Subject: [PATCH 3/5] updated translation resources --- .../locale/de_DE/LC_MESSAGES/airtime.mo | Bin 67801 -> 67982 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/airtime_mvc/locale/de_DE/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/de_DE/LC_MESSAGES/airtime.mo index 833f4b18067149d01bcab81eb11bc3b0a2c8f552..f06c930fe8b649f01967189437920b5bf4384897 100644 GIT binary patch delta 14593 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 AIsgCw From f7602cadd8df50d99803ddb994165cf45b93b96d Mon Sep 17 00:00:00 2001 From: drigato Date: Wed, 12 Mar 2014 17:32:22 -0400 Subject: [PATCH 4/5] Fixed broken test --- .../services/database/ShowServiceDbTest.php | 2 +- .../datasets/test_weeklyToNoRepeat.xml | 87 +++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 airtime_mvc/tests/application/services/database/datasets/test_weeklyToNoRepeat.xml diff --git a/airtime_mvc/tests/application/services/database/ShowServiceDbTest.php b/airtime_mvc/tests/application/services/database/ShowServiceDbTest.php index 0cb424778..8a7f54f1b 100644 --- a/airtime_mvc/tests/application/services/database/ShowServiceDbTest.php +++ b/airtime_mvc/tests/application/services/database/ShowServiceDbTest.php @@ -687,7 +687,7 @@ class ShowServiceDbTest extends Zend_Test_PHPUnit_DatabaseTestCase $ds->addTable('cc_show_hosts', 'select * from cc_show_hosts'); $this->assertDataSetsEqual( - $this->createXmlDataSet(dirname(__FILE__)."/datasets/test_createNoRepeatNoRRShow.xml"), + $this->createXmlDataSet(dirname(__FILE__)."/datasets/test_weeklyToNoRepeat.xml"), $ds ); } diff --git a/airtime_mvc/tests/application/services/database/datasets/test_weeklyToNoRepeat.xml b/airtime_mvc/tests/application/services/database/datasets/test_weeklyToNoRepeat.xml new file mode 100644 index 000000000..d1522d546 --- /dev/null +++ b/airtime_mvc/tests/application/services/database/datasets/test_weeklyToNoRepeat.xml @@ -0,0 +1,87 @@ + + + + id + name + url + genre + description + color + background_color + live_stream_using_airtime_auth + live_stream_using_custom_auth + live_stream_user + live_stream_pass + linked + is_linkable + + 1 + test show + + + + ffffff + 364492 + + + + + + 1 + +
+ + + id + first_show + last_show + start_time + timezone + duration + day + repeat_type + next_pop_date + show_id + record + + 2 + 2016-01-01 + + 00:00:00 + UTC + 01:00 + 5 + -1 + 2016-01-01 + 1 + 0 + +
+ + + id + starts + ends + show_id + record + rebroadcast + instance_id + modified_instance + + 1 + 2016-01-01 00:00:00 + 2016-01-01 01:00:00 + 1 + 0 + 0 + + + +
+ + +
+ + +
+
\ No newline at end of file From 5b9ceb8d2d2f3549cbc1b270122c05c3e7e68734 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Wed, 12 Mar 2014 18:01:27 -0400 Subject: [PATCH 5/5] Made the runtests.sh script work regardless of CWD --- airtime_mvc/tests/runtests.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/airtime_mvc/tests/runtests.sh b/airtime_mvc/tests/runtests.sh index 31b8588dc..faf6628ef 100755 --- a/airtime_mvc/tests/runtests.sh +++ b/airtime_mvc/tests/runtests.sh @@ -27,5 +27,11 @@ export RABBITMQ_PASSWORD export RABBITMQ_VHOST export AIRTIME_UNIT_TEST="1" + +#Change the working directory to this script's directory +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +cd $DIR + +#Run the unit tests phpunit --log-junit test_results.xml