| 3 | | DEBUG output uploading mp3 via lazyserver.sh (selective output .. solution below) |
| 4 | | {{{ |
| 5 | | 0:03:42.413651788 8461 0x81d844f0 WARN audioencoder gstaudioencoder.c:985:gst_audio_encoder_finish_frame:<enc> Can't copy metadata because input buffer disapp |
| 6 | | eared |
| 7 | | ... |
| 8 | | 0:04:15.901886228 8461 0x81d84980 WARN basesrc gstbasesrc.c:2400:gst_base_src_update_length:<filesrc> processing at or past EOS |
| 9 | | ... |
| 10 | | 2017-02-10 05:19:12,316 INFO [mediagoblin.media_types.audio.transcoders] 100% done... |
| 11 | | 2017-02-10 05:19:12,317 DEBUG [mediagoblin.media_types.audio.transcoders] <flags GST_MESSAGE_ELEMENT of type Gst.MessageType> |
| 12 | | 2017-02-10 05:19:12,349 INFO [mediagoblin.media_types.audio.transcoders] 100% done... |
| 13 | | 2017-02-10 05:19:12,351 DEBUG [mediagoblin.media_types.audio.transcoders] <flags GST_MESSAGE_EOS of type Gst.MessageType> |
| 14 | | 2017-02-10 05:19:12,352 INFO [mediagoblin.media_types.audio.transcoders] Done |
| 15 | | ... |
| 16 | | 2017-02-10 05:19:12,503 INFO [mediagoblin.media_types.audio.transcoders] Quitting MainLoop gracefully... |
| 17 | | ... |
| 18 | | 2017-02-10 05:19:12,602 DEBUG [mediagoblin.media_types.audio.processing] Saving medium... |
| 19 | | /srv/mediagoblin.latest/lib/python2.7/site-packages/SQLAlchemy-1.1.5-py2.7-linux-i686.egg/sqlalchemy/sql/sqltypes.py:219: SAWarning: Unicode type received non-unicode bin |
| 20 | | d param value 'webm_audio'. (this warning may be suppressed after 10 occurrences) |
| 21 | | 2017-02-10 05:19:12,866 INFO [mediagoblin.media_types.audio.processing] Creating OGG source for spectrogram |
| 22 | | 2017-02-10 05:19:12,867 INFO [mediagoblin.media_types.audio.transcoders] Transcoding /media/public/mgoblin/media/queue/media_entries/555c6ffa-7239-4022-ab5c-1f6105a61a |
| 23 | | e8/20150706-focuseuropan-w2575.mp3 into /srv/mediagoblin/user_dev/media/workbench/tmpgY2Avv/20150706..ogg |
| 24 | | ... |
| 25 | | 0:04:17.542465655 8461 0x81ee03c0 INFO filesrc gstfilesrc.c:465:gst_file_src_start:<filesrc> opening file /media/public/mgoblin/media/queue/media_entries |
| 26 | | /555c6ffa-7239-4022-ab5c-1f6105a61ae8..mp3 |
| 27 | | 0:04:17.542644098 8461 0x81ee03c0 WARN basesrc gstbasesrc.c:3491:gst_base_src_start_complete:<filesrc> pad not activated yet |
| 28 | | 0:04:17.542771208 8461 0x81ee03c0 INFO filesrc gstfilesrc.c:465:gst_file_src_start:<filesrc> opening file /media/public/mgoblin/media/queue/media_entries |
| 29 | | /555c6ffa-7239-4022-ab5c-1f6105a61ae8.mp3 |
| 30 | | 0:04:17.542914940 8461 0x81ee03c0 INFO task gsttask.c:456:gst_task_set_lock: setting stream lock 0xace7c8bc on task 0xace8ca48 |
| 31 | | 0 |
| 32 | | ... |
| 33 | | 2017-02-10 05:19:13,221 DEBUG [mediagoblin.media_types.audio.transcoders] <flags GST_MESSAGE_TAG of type Gst.MessageType> |
| 34 | | 0:04:17.754148124 8461 0x81d844f0 FIXME basesink gstbasesink.c:3077:gst_base_sink_default_event:<sink> stream-start event without group-id. Consider implem |
| 35 | | enting group-id handling in the upstream elements |
| 36 | | 2017-02-10 05:19:13,222 DEBUG [mediagoblin.media_types.audio.transcoders] <flags GST_MESSAGE_STREAM_START of type Gst.MessageType> |
| 37 | | |
| 38 | | ... |
| 39 | | 0:04:17.840180701 8461 0x81d844f0 INFO oggdemux gstoggstream.c:2678:gst_ogg_stream_setup_map_from_caps_headers: Found headers on caps, using those to determine type |
| 40 | | 0:04:17.840372344 8461 0x81d844f0 WARN audioencoder gstaudioencoder.c:985:gst_audio_encoder_finish_frame:<enc> Can't copy metadata because input buffer disappeared |
| 41 | | 0:04:17.758349604 8461 0x81d85030 INFO audiodecoder gstaudiodecoder.c:2320:gst_audio_decoder_sink_eventfunc:<mad1> upstream stream tags: taglist, has-crc=(boo |
| 42 | | lean)false, channel-mode=(string)joint-stereo, audio-codec=(string)"MPEG-1\ Layer\ 3\ \(MP3\)", nominal-bitrate=(uint)128000, minimum-bitrate=(uint)127706, maximum-bitrat |
| 43 | | e=(uint)128012, bitrate=(uint)127986; ... |
| 44 | | 0:04:15.901886228 8461 0x81d84980 WARN basesrc gstbasesrc.c:2400:gst_base_src_update_length:<filesrc> processing at or past EOS |
| 45 | | 2017-02-10 05:19:38,035 INFO [mediagoblin.media_types.audio.transcoders] 87% done... |
| 46 | | 0:04:45.789429989 8461 0x81d85030 WARN basesrc gstbasesrc.c:2400:gst_base_src_update_length:<filesrc> processing at or past EOS |
| 47 | | 2017-02-10 05:19:13,221 DEBUG [mediagoblin.media_types.audio.transcoders] <flags GST_MESSAGE_TAG of type Gst.MessageType> |
| 48 | | 0:04:17.754148124 8461 0x81d844f0 FIXME basesink gstbasesink.c:3077:gst_base_sink_default_event:<sink> stream-start event without group-id. Consider implem |
| 49 | | enting group-id handling in the upstream elements |
| 50 | | 2017-02-10 05:19:13,222 DEBUG [mediagoblin.media_types.audio.transcoders] <flags GST_MESSAGE_STREAM_START of type Gst.MessageType> |
| 51 | | ... |
| 52 | | |
| 53 | | ... |
| 54 | | 2017-02-10 05:19:41,405 DEBUG [mediagoblin.media_types.audio.transcoders] <flags GST_MESSAGE_ELEMENT of type Gst.MessageType> |
| 55 | | 2017-02-10 05:19:41,405 INFO [mediagoblin.media_types.audio.transcoders] 100% done... |
| 56 | | 2017-02-10 05:19:41,406 DEBUG [mediagoblin.media_types.audio.transcoders] <flags GST_MESSAGE_EOS of type Gst.MessageType> |
| 57 | | 2017-02-10 05:19:41,406 INFO [mediagoblin.media_types.audio.transcoders] Done |
| 58 | | 0:07:18.514617756 8461 0x81ee03c0 INFO GST_ELEMENT_PADS gstpad.c:2071:gst_pad_unlink: unlinking mpegaudioparse1:src(0xacee0bc8) and mad1:sink(0xb5f9d1d8) |
| 59 | | 0:07:18.514735089 8461 0x81ee03c0 INFO GST_ELEMENT_PADS gstpad.c:2125:gst_pad_unlink: unlinked mpegaudioparse1:src and mad1:sink |
| 60 | | 0:07:18.514895444 8461 0x81ee03c0 INFO GST_ELEMENT_PADS gstpad.c:2071:gst_pad_unlink: unlinking mad1:src(0xb5f9d318) and src_0:proxypad3(0xace70978) |
| 61 | | 0:07:18.515024021 8461 0x81ee03c0 INFO GST_ELEMENT_PADS gstpad.c:2125:gst_pad_unlink: unlinked mad1:src and src_0:proxypad3 |
| 62 | | 0:07:18.515141354 8461 0x81ee03c0 INFO GST_PARENTAGE gstbin.c:1816:gst_bin_remove_func:<decodebin> removed child "mad1" |
| 63 | | 0:07:18.515339842 8461 0x81ee03c0 INFO GST_ELEMENT_PADS gstpad.c:2071:gst_pad_unlink: unlinking typefind:src(0xace7c9b8) and mpegaudioparse1:sink(0xace7cd78) |
| 64 | | 0:07:18.515471352 8461 0x81ee03c0 INFO GST_ELEMENT_PADS gstpad.c:2125:gst_pad_unlink: unlinked typefind:src and mpegaudioparse1:sink |
| 65 | | 0:07:18.515606285 8461 0x81ee03c0 INFO GST_PARENTAGE gstbin.c:1816:gst_bin_remove_func:<decodebin> removed child "mpegaudioparse1" |
| 66 | | 0:07:18.515712862 8461 0x81ee03c0 INFO GST_ELEMENT_PADS gstelement.c:785:gst_element_remove_pad:<decodebin> removing pad 'src_0' |
| 67 | | 0:07:18.515837039 8461 0x81ee03c0 INFO GST_ELEMENT_PADS gstpad.c:2071:gst_pad_unlink: unlinking decodebin:src_0(0x810a9480) and queue:sink(0x810842e8) |
| 68 | | 0:07:18.515963661 8461 0x81ee03c0 INFO GST_ELEMENT_PADS gstpad.c:2125:gst_pad_unlink: unlinked decodebin:src_0 and queue:sink |
| 69 | | ... |
| 70 | | 0:07:18.586227429 8461 0x81ee03c0 INFO GST_STATES gstbin.c:2963:gst_bin_change_state_func:<pipeline1> child 'filesrc' changed state to 1(NULL) successfully |
| 71 | | 0:07:18.586445961 8461 0x81ee03c0 INFO GST_REFCOUNTING gstelement.c:2994:gst_element_dispose:<mpegaudioparse1> 0xb5f781f8 dispose |
| 72 | | 0:07:18.586483116 8461 0x81ee03c0 INFO GST_ELEMENT_PADS gstelement.c:785:gst_element_remove_pad:<mpegaudioparse1> removing pad 'sink' |
| 73 | | 0:07:18.586534450 8461 0x81ee03c0 INFO GST_ELEMENT_PADS gstelement.c:785:gst_element_remove_pad:<mpegaudioparse1> removing pad 'src' |
| 74 | | 0:07:18.586581383 8461 0x81ee03c0 INFO GST_REFCOUNTING gstelement.c:3040:gst_element_dispose:<mpegaudioparse1> 0xb5f781f8 parent class dispose |
| 75 | | 0:07:18.588930972 8461 0x81ee03c0 INFO GST_REFCOUNTING gstelement.c:3071:gst_element_finalize:<mpegaudioparse1> 0xb5f781f8 finalize |
| 76 | | 0:07:18.589075682 8461 0x81ee03c0 INFO GST_REFCOUNTING gstelement.c:3077:gst_element_finalize:<mpegaudioparse1> 0xb5f781f8 finalize parent |
| 77 | | 0:07:18.589188126 8461 0x81ee03c0 INFO GST_REFCOUNTING gstelement.c:2994:gst_element_dispose:<mad1> 0x810a0f08 dispose |
| 78 | | 0:07:18.589298615 8461 0x81ee03c0 INFO GST_ELEMENT_PADS gstelement.c:785:gst_element_remove_pad:<mad1> removing pad 'sink' |
| 79 | | 0:07:18.589413992 8461 0x81ee03c0 INFO GST_ELEMENT_PADS gstelement.c:785:gst_element_remove_pad:<mad1> removing pad 'src' |
| 80 | | 0:07:18.589517636 8461 0x81ee03c0 INFO GST_REFCOUNTING gstelement.c:3040:gst_element_dispose:<mad1> 0x810a0f08 parent class dispose |
| 81 | | 0:07:18.589623235 8461 0x81ee03c0 INFO GST_REFCOUNTING gstelement.c:3071:gst_element_finalize:<mad1> 0x810a0f08 finalize |
| 82 | | 0:07:18.589815368 8461 0x81ee03c0 INFO GST_REFCOUNTING gstelement.c:3077:gst_element_finalize:<mad1> 0x810a0f08 finalize parent |
| 83 | | 0:07:18.590644031 8461 0x81ee03c0 INFO GST_STATES gstelement.c:2419:gst_element_continue_state:<pipeline1> completed state change to NULL |
| 84 | | 2017-02-10 05:22:14,059 INFO [mediagoblin.media_types.audio.transcoders] Quitting MainLoop gracefully... |
| 85 | | [skipped gst output] |
| 86 | | 2017-02-10 05:22:17,321 ERROR [mediagoblin.processing.task] An unhandled exception was raised while processing <MediaEntry 34: 20150706-focuseuropan-w2575> |
| 87 | | 2017-02-10 05:22:17,323 WARNING [mediagoblin.processing] No idea what happened here, but it failed: IndexError('axis 1 out of bounds [0, 1)',) |
| 88 | | 2017-02-10 05:22:17,370 DEBUG [mediagoblin.tools.processing] No processing callback URL for <MediaEntry 34: 20150706-focuseuropan-w2575> |
| 89 | | 2017-02-10 05:22:17,373 WARNING [mediagoblin.processing] No idea what happened here, but it failed: IndexError('axis 1 out of bounds [0, 1)',) |
| 90 | | }}} |
| 91 | | |
| 92 | | {{{ |
| 93 | | 194:def halt(self): |
| 94 | | if getattr(self, 'pipeline', False): |
| 95 | | self.pipeline.set_state(Gst.State.NULL) |
| 96 | | del self.pipeline |
| 97 | | 198: _log.info('Quitting MainLoop gracefully...') |
| 98 | | GObject.idle_add(self._loop.quit) |
| 99 | | }}} |
| 100 | | |
| 101 | | mediagoblin/processing/task.py |
| 102 | | {{{ |
| 103 | | class ProcessMedia(celery.Task): |
| 104 | | ... |
| 105 | | # Try to process, and handle expected errors. |
| 106 | | try: |
| 107 | | processor_class = manager.get_processor(reprocess_action, entry) |
| 108 | | |
| 109 | | with processor_class(manager, entry) as processor: |
| 110 | | # Initial state change has to be here because |
| 111 | | # the entry.state gets recorded on processor_class init |
| 112 | | entry.state = u'processing' |
| 113 | | entry.save() |
| 114 | | |
| 115 | | _log.debug('Processing {0}'.format(entry)) |
| 116 | | |
| 117 | | try: |
| 118 | | processor.process(**reprocess_info) |
| 119 | | except Exception as exc: |
| 120 | | if processor.entry_orig_state == 'processed': |
| 121 | | _log.error( |
| 122 | | 'Entry {0} failed to process due to the following' |
| 123 | | ' error: {1}'.format(entry.id, exc)) |
| 124 | | _log.info( |
| 125 | | 'Setting entry.state back to "processed"') |
| 126 | | pass |
| 127 | | else: |
| 128 | | raise |
| 129 | | |
| 130 | | # We set the state to processed and save the entry here so there's |
| 131 | | # no need to save at the end of the processing stage, probably ;) |
| 132 | | entry.state = u'processed' |
| 133 | | entry.save() |
| 134 | | |
| 135 | | # Notify the PuSH servers as async task |
| 136 | | if mgg.app_config["push_urls"] and feed_url: |
| 137 | | handle_push_urls.subtask().delay(feed_url) |
| 138 | | |
| 139 | | json_processing_callback(entry) |
| 140 | | except BaseProcessingFail as exc: |
| 141 | | mark_entry_failed(entry.id, exc) |
| 142 | | json_processing_callback(entry) |
| 143 | | return |
| 144 | | |
| 145 | | except ImportError as exc: |
| 146 | | _log.error( |
| 147 | | 'Entry {0} failed to process due to an import error: {1}'\ |
| 148 | | .format( |
| 149 | | entry.title, |
| 150 | | exc)) |
| 151 | | |
| 152 | | mark_entry_failed(entry.id, exc) |
| 153 | | json_processing_callback(entry) |
| 154 | | |
| 155 | | except Exception as exc: |
| 156 | | 133: _log.error('An unhandled exception was raised while' |
| 157 | | + ' processing {0}'.format( |
| 158 | | entry)) |
| 159 | | |
| 160 | | mark_entry_failed(entry.id, exc) |
| 161 | | json_processing_callback(entry) |
| 162 | | raise |
| 163 | | }}} |
| 164 | | |
| 165 | | mediagoblin/tools/processing |
| 166 | | {{{ |
| 167 | | ef json_processing_callback(entry): |
| 168 | | ''' |
| 169 | | Send an HTTP post to the registered callback url, if any. |
| 170 | | ''' |
| 171 | | if not entry.processing_metadata: |
| 172 | | _log.debug('No processing callback URL for {0}'.format(entry)) |
| 173 | | return |
| 174 | | }}} |
| 175 | | |
| 176 | | mediagoblin/processing/__init__.py |
| 177 | | {{{ |
| 178 | | def mark_entry_failed(entry_id, exc): |
| 179 | | """ |
| 180 | | Mark a media entry as having failed in its conversion. |
| 181 | | |
| 182 | | Uses the exception that was raised to mark more information. If |
| 183 | | the exception is a derivative of BaseProcessingFail then we can |
| 184 | | store extra information that can be useful for users telling them |
| 185 | | why their media failed to process. |
| 186 | | |
| 187 | | :param entry_id: The id of the media entry |
| 188 | | :param exc: An instance of BaseProcessingFail |
| 189 | | |
| 190 | | """ |
| 191 | | # Was this a BaseProcessingFail? In other words, was this a |
| 192 | | # type of error that we know how to handle? |
| 193 | | if isinstance(exc, BaseProcessingFail): |
| 194 | | # Looks like yes, so record information about that failure and any |
| 195 | | # metadata the user might have supplied. |
| 196 | | atomic_update(mgg.database.MediaEntry, |
| 197 | | {'id': entry_id}, |
| 198 | | {u'state': u'failed', |
| 199 | | u'fail_error': six.text_type(exc.exception_path), |
| 200 | | u'fail_metadata': exc.metadata}) |
| 201 | | else: |
| 202 | | _log.warn("No idea what happened here, but it failed: %r", exc) |
| 203 | | # Looks like no, let's record it so that admin could ask us about the |
| 204 | | # reason |
| 205 | | atomic_update(mgg.database.MediaEntry, |
| 206 | | {'id': entry_id}, |
| 207 | | {u'state': u'failed', |
| 208 | | u'fail_error': u'Unhandled exception: {0}'.format( |
| 209 | | six.text_type(exc)), |
| 210 | | u'fail_metadata': {}}) |
| 211 | | }}} |
| 212 | | |
| 213 | | According to ticket:5457#comment:12 Numpy 1.11.2 and AudioLab 0.11.0 are incompatible (here numpy==1.12.0, scikits.audiolab==0.11.0). The proposed fix |
| | 3 | The workaround of ticket:5457#comment:12 |