Cara terbaik untuk membuat SVN-Mirror?

8

Saat ini saya sedang mencari cara terbaik untuk mengatur mirror SVN. Saat ini saya melihat tiga kemungkinan semuanya dengan kelemahan mereka sendiri:

  • Miliki SVN post-commit-Hook yang memblokir dan menyinkronkan melalui svnsync. Masalahnya di sini jelas, bahwa komit itu memblokir sampai data ditransfer ke cermin.
  • Miliki SVN post-commit-Hook yang non-blocking dan sinkronisasi melalui svnsync. Di sini saya melihat masalah berikut yang lebih halus: Bayangkan seseorang memeriksa file BESAR, dan orang lain segera setelah itu memeriksa file kecil. Karena komit adalah non-pemblokiran, dua proses svnsync dapat berjalan pada waktu yang sama dan file kecil dapat menyalip file BIG dalam perjalanan ke mirror (ini tampaknya sangat kritis terhadap waktu dan tidak mungkin, meskipun pada prinsipnya mungkin). Revisi mereka akan ditukar.
  • Sinkronkan seperti setiap lima belas menit dengan cron-job. Masalah yang sama jika komit membutuhkan waktu lebih dari 15 menit dan jelas waktu tunda itu.

Apakah saya lupa kemungkinan? Apakah saya melakukan kesalahan? Ada ide? Sudah terima kasih

Mungkin saya harus mencatat bahwa kemungkinan kedua adalah yang disarankan oleh berbagai situs web. Misalnya, lihat http://www.kirkdesigns.co.uk/mirror-svn-repository-svnsync

roesslerj
sumber
Karena komit adalah non-pemblokiran, dua proses svnsync dapat berjalan pada saat yang sama dan file kecil dapat menyalip file BIG dalam perjalanan ke mirror (ini tampaknya sangat kritis terhadap waktu dan tidak mungkin, meskipun pada prinsipnya mungkin). Revisi mereka akan ditukar. Ini tidak mungkin, svnsync mereplikasi komit saat ditulis ke repositori. Mereka akan selalu muncul dalam urutan revisi.
Dave Cheney

Jawaban:

3

Anda bisa mencoba pendekatan yang mirip dengan yang kami gunakan di Atlassian

https://www.atlassian.com/blog/archives/subversion_replication_at_atla?_ga=2.217251286.1933127788.1517539727-1159165484.1517539727

disclaimer: Saya saat ini adalah karyawan Atlassian, tetapi tidak terlibat dalam mengimplementasikan solusi ini (hanya mempertahankannya)

Seperti yang saya katakan di atas dalam komentar, svnsync, dijalankan dari repositori jarak jauh berperilaku deterministik. Itu tidak dapat menerapkan perubahan yang rusak. Jadi satu-satunya masalah yang Anda miliki menggunakan repositori jarak jauh adalah jumlah jeda karena propagasi changeset.

Dave Cheney
sumber
+1 untuk pengamatan bahwa svnsync tidak dapat rusak, satu-satunya masalah adalah latensi potensial.
Jim T
Anda benar sekali ... Saya membuat kesalahan berpikir bodoh. Jadi hook post-commit SVN yang sederhana dan indah harus melakukannya dalam banyak kasus. Dalam hal latensi merupakan masalah, orang dapat melihat artikel Atlassian yang dirujuk. Terima kasih banyak!
roesslerj
Perlu diketahui bahwa kait komit posting akan memblokir committer sampai kait telah berjalan sampai selesai. Saya tidak yakin apa yang terjadi jika kait komit gagal, saya tidak berpikir komit dibatalkan, tetapi setidaknya akan membingungkan.
Dave Cheney
Nah, menggunakan kait pasca-komit, Anda dapat mengeluarkan perintah yang segera kembali (misalnya melalui 'command &' di linux), setelah itu non-blocking. Karena hook adalah post-commit, tidak dapat mengembalikan komit. Jika svnsync gagal, svnsync berikutnya harus menyinkronkan dua revisi, yang cukup dilakukannya. Masalah yang terjadi di sini saya akan mengajukan di bawah latensi topik.
roesslerj