axfelix
(Alex Garnett)
3 مايو 2022، 3:34م
1
فشل إعادة البناء التلقائي، يبدو أن هناك اختلافات حول هذه المشكلة:
2022-05-03 15:30:54.370 UTC [1262] discourse@discourse LOG: duration: 1707.909 ms statement: INSERT INTO post_hotlinked_media (post_id, url, status, upload_id, created_at, updated_at)
SELECT
post_id,
obj.key AS url,
'downloaded',
obj.value::bigint AS upload_id,
pcf.created_at,
pcf.updated_at
FROM post_custom_fields pcf
JOIN json_each_text(pcf.value::json) obj ON true
JOIN uploads ON obj.value::bigint = uploads.id
WHERE name='downloaded_images'
ERROR: duplicate key value violates unique constraint "index_post_hotlinked_media_on_post_id_and_url_md5"
لقد قمت بإعادة البناء قبل أقل من شهر دون أخطاء، لذا يبدو أن ما قدم هذه المشكلة كان حديثًا.
4 إعجابات
axfelix
(Alex Garnett)
3 مايو 2022، 4:09م
3
يبدو أن الأمر يتعلق بهذا الالتزام الأخير؟
# frozen_string_literal: true
class CreatePostHotlinkedMedia < ActiveRecord::Migration[6.1]
def change
reversible do |dir|
dir.up do
execute <<~SQL
CREATE TYPE hotlinked_media_status AS ENUM('downloaded', 'too_large', 'download_failed', 'upload_create_failed')
SQL
end
dir.down do
execute <<~SQL
DROP TYPE hotlinked_media_status
SQL
end
end
create_table :post_hotlinked_media do |t|
t.bigint :post_id, null: false
t.string :url, null: false
This file has been truncated. show original
@david
إعجابَين (2)
david
(David Taylor)
3 مايو 2022، 4:15م
4
نعم هذا صحيح. لدي إصلاح قيد الإعداد، ويجب دمجه في الدقائق القليلة القادمة. شكراً للإبلاغ @axfelix
main ← hotlinked-conflict
opened 03:54PM - 03 May 22 UTC
In the old custom_field-based system, it was possible for a url to be both 'down… loaded' and 'broken'. The new table enforces uniqueness, so we need to drop invalid data.
9 إعجابات
axfelix
(Alex Garnett)
3 مايو 2022، 4:39م
5
شكرًا، كان ذلك سريعًا!
هل أحتاج إلى القيام بأي شيء خاص لسحب هذا؟ ما زلت أحصل على Caused by:\nActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint \"index_post_hotlinked_media_on_post_id_and_url_md5\" عند تشغيل إعادة بناء المشغل، حتى بعد إجراء Docker prune.
david
(David Taylor)
3 مايو 2022، 4:48م
6
لقد وصل الإصلاح للتو إلى اختبارات-مرت قبل بضع ثوانٍ. إذا قمت بإعادة البناء الآن، فيجب أن يعمل بشكل أفضل بكثير. أخبرنا كيف سارت الأمور.
5 إعجابات
david
(David Taylor)
3 مايو 2022، 6:07م
7
وجدنا مكانًا آخر يمكن أن يسبب هذا الخطأ. لذا، إذا لم يساعد الإصلاح الأول، فيجب أن يساعد هذا الإصلاح
committed 05:51PM - 03 May 22 UTC
custom_field data on some sites has duplicate values for a given url key in the … JSON value. This is invalid, so we should drop the extra data.
(الآن مباشر في tests-passed)
4 إعجابات
pfaffman
(Jay Pfaffman)
3 مايو 2022، 7:31م
8
على مثيل التطوير الخاص بي، يقوم بترحيل قاعدة البيانات بنجاح، ولكن إذا قمت باستعادة نسخة احتياطية من 2022-04-27-153103-v20220407195246.tar.gz فإنها تفشل:
[361/9020]
ترحيل قاعدة البيانات... EXCEPTION: /home/pfaffman/src/discourse-repos/discourse/lib/discourse.rb:126:in `exec': فشل ترحيل
قاعدة البيانات.
تجاهل /home/pfaffman/src/discourse-repos/discourse/db/schema_cache.yml لأنه انتهت صلاحيته. الإصدار الحالي للمخطط هو 20220407195246، ولكن الإصدار الموجود في ملف ذاكرة التخزين المؤقت للمخطط هو 20220428094027.
تم إلغاء rake!
StandardError: حدث خطأ، تم إلغاء هذا الخطأ وجميع الأخطاء اللاحقة:
متبوعًا بالمزيد من ذلك مع بعض هذه:
ActiveRecord::StatementInvalid: PG::DuplicateObject: ERROR: type \"hotlinked_media_status\" already exist
إعجاب واحد (1)
axfelix
(Alex Garnett)
3 مايو 2022، 9:22م
9
يسعدني أن أقول إن الإصلاح الأول نجح معنا بعد اجتيازه للاختبارات!
إعجابَين (2)
david
(David Taylor)
3 مايو 2022، 9:30م
10
Alex Garnett:
أول إصلاح نجح
عظيم، شكراً للتأكيد!
لقد فتحت طلب سحب (PR) مع إصلاح لذلك:
main ← fix-restore-enums
opened 09:27PM - 03 May 22 UTC
c1db9687 introduced an postgres enum type. Our database restore logic did not ha… ndle custom types correctly, and would therefore raise a 'type already exists' error when restoring any backup.
This commit adds restore handling for enums, mirroring the similar logic for tables and views.
---
(This code is not tested by rspec, but it is tested by a regular internal job at CDCK, which correctly picked up on this issue)
4 إعجابات
pfaffman
(Jay Pfaffman)
4 مايو 2022، 2:05م
11
انتهى!
[نجاح]
تمت الاستعادة.
شكرا!
إعجابَين (2)