Some rows in a migration can be problematic.
Here is an example of a failed row in a migration.
Newspaper3k Failed to get (1) URL https://news.google.com/rss/articles/CBMipAFBVV95cUxNTENNa3EtZ182WEJURjRpZmJXelc3YklsLXFIWEludWlqNVBYZFBUbF81UW0xRDNwVW1WYVJGNDFmV3NTSWlBeXgwcGJCcExRc1EwUHJYZTlTV0x6M2lOQjROa21PYjNKTlhQbnZlNkZKd3FJRG5LYnFaSEZYRFhsc3l2bHZwbk9UZFpqb1BkY3kxeDZnSXd1b0lkMkJoM2NWd1UzWQ?oc=5 "The command "'python3' '../python/google_cloudscraper_new/ArticleScraping.py' 'https://news.google.com/rss/articles/CBMipAFBVV95cUxNTENNa3EtZ182WEJURjRpZmJXelc3YklsLXFIWEludWlqNVBYZFBUbF81UW0xRDNwVW1WYVJGNDFmV3NTSWlBeXgwcGJCcExRc1EwUHJYZTlTV0x6M2lOQjROa21PYjNKTlhQbnZlNkZKd3FJRG5LYnFaSEZYRFhsc3l2bHZwbk9UZFpqb1BkY3kxeDZnSXd1b0lkMkJoM2NWd1UzWQ?oc=5'" failed. Exit Code: 1(General error) Working directory: /var/www/vhosts/mydomain/httpdocs/web Output: ================ Error Output: ================ Traceback (most recent call last): File "/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 467, in _make_request self._validate_conn(conn) File "/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 1099, in _validate_conn conn.connect() File "/usr/local/lib/python3.9/site-packages/urllib3/connection.py", line 653, in connect sock_and_verified = _ssl_wrap_socket_and_match_hostname( File "/usr/local/lib/python3.9/site-packages/urllib3/connection.py", line 806, in _ssl_wrap_socket_and_match_hostname ssl_sock = ssl_wrap_socket( File "/usr/local/lib/python3.9/site-packages/urllib3/util/ssl_.py", line 465, in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) File "/usr/local/lib/python3.9/site-packages/urllib3/util/ssl_.py", line 509, in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock, server_hostname=server_hostname) File "/usr/local/lib/python3.9/site-packages/cloudscraper/__init__.py", line 100, in wrap_socket return self.ssl_context.orig_wrap_socket(*args, **kwargs) File "/usr/local/lib/python3.9/ssl.py", line 500, in wrap_socket return self.sslsocket_class._create( File "/usr/local/lib/python3.9/ssl.py", line 1040, in _create self.do_handshake() File "/usr/local/lib/python3.9/ssl.py", line 1309, in do_handshake self._sslobj.do_handshake() ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1123) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 793, in urlopen response = self._make_request( File "/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 491, in _make_request raise new_e urllib3.exceptions.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1123) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/usr/local/lib/python3.9/site-packages/requests/adapters.py", line 486, in send resp = conn.urlopen( File "/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 847, in urlopen retries = retries.increment( File "/usr/local/lib/python3.9/site-packages/urllib3/util/retry.py", line 515, in increment raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='www.londontheatre1.com', port=443): Max retries exceeded with url: /reviews/roots-overseas-and-is-any-body-home-at-streatham-space-project/ (Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1123)'))) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/var/www/vhosts/mydomain/httpdocs/web/../python/google_cloudscraper_new/ArticleScraping.py", line 64, in <module> scraped = scraper.get(newurl).text File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 602, in get return self.request("GET", url, **kwargs) File "/usr/local/lib/python3.9/site-packages/cloudscraper/__init__.py", line 259, in request self.perform_request(method, url, *args, **kwargs) File "/usr/local/lib/python3.9/site-packages/cloudscraper/__init__.py", line 192, in perform_request return super(CloudScraper, self).request(method, url, *args, **kwargs) File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 589, in request resp = self.send(prep, **send_kwargs) File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 703, in send r = adapter.send(request, **kwargs) File "/usr/local/lib/python3.9/site-packages/requests/adapters.py", line 517, in send raise SSLError(e, request=request) requests.exceptions.SSLError: HTTPSConnectionPool(host='www.londontheatre1.com', port=443): Max retries exceeded with url: /reviews/roots-overseas-and-is-any-body-home-at-streatham-space-project/ (Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1123)'))) ". 0
In this example the migration imported row is failing due to SSL: SSLV3_ALERT_HANDSHAKE_FAILURE
Now, in this case the item can remain in a feed for a long time (several months). I believe a single failing row could cause subsequent rows to fail. Even if subsequent rows are not skipped, this row will continue to fail.
I would like the ability to skip any failing rows as part of the migration.
In this case, the migration does exist in the migration map table. It has the following characteristics:
1. destination id is null
2. source row status is set to 3 (Indicates that the import of the row failed. const STATUS_FAILED = 3;
3, There is no record of this in the message table in this case. migrate_message_rss_google_node
4. When this fails, message is sent to global notices and can be viewed when enabling dblog
I am curious as to why this does not exist is migrate message table with some form of status, especially if this is in migrate_map_table although, as mentioned this is output to dblog if enabled I am aware that this is output to drupal Perhaps it would make sense to log failed rows in message table as well?