concurrency: file appending

ans: ssh มันจะเขียนไฟล์ .ssh/known_hosts2
ถ้า ssh หลายๆ process ไปหลายๆ เครื่องเป็นครั้งแรกพร้อมๆ กัน, มันจะเขียนไฟล์ known_hosts ทับกัน จนเจ๊ง มั้ยวะ
veer: โอว
ans: ผมลอง strace ssh version 2.9 ไม่เห็นมัน lock file known_hosts2 เลย.
veer: อ่อ

ans: แต่มัน open append mode
แล้วก็มัน เขียนแต่ละบรรทัด ด้วย write() ในครั้งเดียว
ถ้า write() ในครั้งเดียว ก็เป็น atomic อยู่แล้ว
ans: ก็ไม่เจ๊ง
ans: แต่อาจเกิดการเขียน key ซ้ำกัน พร้อมๆ กัน ทำให้มี บรรทัดซ้ำใน known_hosts ได้ (race condition?)
ans: แต่รู้สึกว่า append mode ใน windows จะไม่ใช่ real append, คือ แค่เปิดไฟล์ปกติแล้วเลื่อน cursor ไปท้ายสุด. ถ้าไม่ใช่ real append ก็ทำให้เกิดการเขียนทับกันได้, ถึงแม้ write() จะเป็น atomic ก็ตาม.
veer: โอว
veer: ผมเอาไปใส่ blog นะครับ
ans: yes

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s