Skip to main content

SVN: Malformed File จะแก้ยังไง

เหตุมันเกิดจากเมื่อวาน (3/08/2011) กำลังนั่งทำงานกันอยู่ดีๆ เกิดไฟกระชากขึ้นมา ทำให้ Server ที่ใช้ทำ SVN ดับ พอไฟมาก็เดินไปเปิด Server ตามปกติจากนั้นก็ไม่ได้สนใจอะไร พอตอนเย็นๆ น้องๆ ก็มาบอกว่า SVN Commit Code ไม่ได้ ตอนแรกคิดว่าเกิด Conflict กันระหว่างน้องเค้าหรือเปล่า เลยไม่ได้สนใจ

พอเช้ามาจะมา Commit Code ขึ้น SVN พบว่า อ่าว เห้ย Commit ไม่ได้ ใน Eclipse ก็ไม่ได้แจ้งอะไร แจ้งเพียงว่าไม่สามารถ Connect SVN ได้ เลยไป restart SVN services พบว่ายังเหมือนเดิม คราวนี้เลยลองไปเปิด SVN Repository ผ่าน TortoiseSVN ดู พบว่ามัน Connect แล้วมันขึ้น Error มาว่า
SVN: Malformed File
คราวนี้เลยลองไปหาวิธีแก้ดู ไปเจอวิธีนี้มา http://stackoverflow.com/questions/4407638/svn-malformed-file-corrupt-repository เค้าบอกว่าน่าจะเป็นที่ file ของ revision property เสีย

file revision property นี้จะอยู่ใน directory ของ repository ของเรา โดยจะอยู่ที่
repository_path/db/revprops
ด้านในจะมี directory ที่ชื่อเป็นตัวเลขเริ่มต้นด้วย 0, 1, 2, ...


โดยในแต่ละ directory จะมี file ทั้งหมด 1000 file ในแต่ละ directory จะมีชื่อเป็นหมายเลขที่จะรันไปเรื่อยๆ ตามเลขของ version ที่เราได้ Commit Code ขึ้นไปบน SVN




โดยใน file เหล่านี้จะเป็นที่เก็บข้อมูลว่าใครเป็นคน Commit Code ใน version นั้นๆ ในเวลาไหน
K 10
svn:author
V 3
XXX
K 8
svn:date
V 27
2011-08-04T09:51:20.252836Z
K 7
svn:log
V 0

END

เอาหละมาเข้าเรื่องกัน การแก้ปัญหาของ SVN: Malformed File เราต้องค้นหาในบรรดา file revision property ว่าตัวไหนที่มันเสีย โดยทั่วไป file ที่จะเสียส่วนใหญ่จะเป็น file revision ล่าสุด อย่างกรณีผมที่มันเสียเพราะไฟกระชาก ทำให้ Server SVN ดับตาม - -' ทำให้ file revision property ตัวล่าสุดเจ๊ง วิธีแก้ก็ให้ copy ตัว file revision property ตัวก่อนหน้าเอามาทับตัวที่มันเสีย

วิธีที่จะตรวจว่ามันเสียหรือไม่เสียให้ลองเปิด file revision property ตัวนั้นดู ผ่าน Text Editor ตัวไหนก้ได้ถ้ามันไม่เสียจะต้องเปิดแล้วอ่านได้ตามรูปแบบด้านบน แต่ถ้ามันเสียจริงๆ มันจะเปิดอ่านแล้วไม่รู้เรื่อง

แต่ถ้าเปิดมาแล้วมันคงเป็นรูปแบบตามด้านบนแต่มีตัวอักษรบางตัวที่เน่า อาจจะเป็นเพราะ encoding ผิดให้ลอง convert file นั้นเป็น encoding UTF-8 ถ้ามันหายเพี้ยน ก็จะแก้ปัญหา SVN: Malformed File ได้เช่นกัน โดยปัญหานี้มันจะเกิดตอนที่เราทำการ Back up ย้าย Server อ้างอิงตามนี้ http://www.narisa.com/forums/index.php?app=blog&module=display&section=blog&blogid=5&showentry=193

แต่ถ้าเกิดว่า file สุดท้ายมันไม่ได้เสียขึ้นมาทำจะยังไง ต้องใช้ command ช่วยหา file ที่มันเสียโดยใช้ command ของ svnadmin โดยเราจะใช้ในส่วน function ของ dump เข้ามาช่วย
svnadmin dump
โดยมีวิธีการใช้แบบนี้
svnadmin dump --quiet --revision <start_revision>:<end_revision> <repos_path> > nul

  • <start_revision> หมายถึง scope ของ revision เริ่มต้นที่จะ dump ข้อมูล (ในที่นี้หมายถึง scope ที่จะหา error file)
  • <end_revision> หมายถึง scope ของ revision สิ้นสุดที่จะ dump ข้อมูล (ในที่นี้หมายถึง scope ที่จะหา error file)
  • <repos_path> หมายถึง path ของ repository ที่มีเราต้องการจะหา error
จากนั้นก็รอให้มัน dump เสร็จ เพราะมันใช้เวลานานมา ถ้าอยากจะให้มันหาทั้งหมดก็ไม่ต้องใส่ option --revision เข้าไป ถ้ามันมีปัญหามันจะหยุด ณ ตำแหน่งที่มีปัญหาและ return error ออกมาเป็น SVN: Malformed File

อ้างอิงวิธีการใช้ command svnadmin จาก http://blogs.nuxeo.com/dev/2006/04/dump-load-svn-repositories-using-svnadmin-svndumpfilter.html

Comments

Popular posts from this blog

ลองเล่นและเรียนรู้พื้นฐานขั้นต้นของ Spring Framework

** สำหรับใครที่ไม่เคยเรียนรู้ในด้านของ Java EE หรือ J2EE อาจจะมึนงงกับศัพท์หน่อยครับ ทำไมต้อง Spring Spring เป็น framework ที่นิยมมากในการนำไปสร้างระบบในระดับ enterprise ในเริ่มแรกที่ Spring เกิดมา มีจุดมุ่งหมายเพื่อที่จะมาแทนที่มาตรฐานของ Java อย่าง J2EE (Java 2 Enterprise Edition) ที่มันทั้งหน่วงทั้งอืดและยุ่งยาก โดยเฉพาะในส่วนของ EJB (Enterprise Java Bean) ที่ถือว่าเป็นฝันร้ายของนักพัฒนา ทำให้กูรูสาย Java ในช่วงนั้นถึงกับแนะนำว่า ถ้าจำเป็นที่ต้องพัฒนาระบบด้วย J2EE จงอย่าใช้ EJB ถึงขั้นถึงกับมีหนังสือแนะแนวทางการพัฒนาระบบ J2EE โดยไม่ใช้ EJB อย่างไรก็ตามทาง Sun ผู้เป็นเจ้าของ Java ในสมัยนั้น ถึงกับต้องมาล้างระบบ J2EE ใหม่ในปี 2006 จัดการใน EJB ให้ใช้ง่ายขึ้น มีประสิทธิภาพมากขึ้น และมีการเปลี่ยนชื่อจาก J2EE เป็น Java EE (Java Enterprise Edition) เพื่อลบภาพอันเลวร้ายของเดิมให้หมด และได้มีการนำฟีเจอร์เด็ดๆ ของ open source framework หลายๆ ตัว อย่างเช่นแกนหลักของ Spring อย่าง IoC (Inversion of Control) หรือ OR Mapping (Object Relational Mapping) ที่เป็นที่นิยมอย่าง Hibernate แต่ก็ไ

ลองเล่น Lambda Expression ฟีเจอร์เด่นใน Java 8

ประวัติความเป็นมาของ Lambda expression Lambda expression ไม่ใช่สิ่งแปลกใหม่ในวงการ ภาษาโปรแกรม ( Programming Language ) เพราะ lambda มันเป็นแกนหลักของ การเขียนโปรแกรมเชิงฟังก์ชัน ( Functional Programming ) ซึ่งมีอายุมานานมากแล้ว แต่ Java เพิ่งนำเอาคุณสมบัตินี้เอามาใส่ลงในเวอร์ชัน 8 หากจะกล่าวถึงที่มาของ lambda คงต้องไปดูที่ถึงที่มาของ lambda calculus ซึ่งถูกสร้างขึ้นมาตั้งแต่ปี 1930 โดยนักคณิตศาสตร์ชาวอเมริกัน  Alonzo Church  เพื่อใช้ในการแก้โจทย์ปัญหาทางคณิตศาสตร์ที่มีความซับซ้อน ในบางครั้งสมการทางคณิตศาสตร์ที่ยาวไปอาจจะทำให้เกิดความซับซ้อนโดยใช่เหตุ lambda calculus จะทำการยุบบางส่วนของสมการนั้นออกมาเป็นฟังก์ชันย่อยๆ เพื่อทำให้สมการนั้นเข้าใจง่ายขึ้น ต่อมาหลักการของ lambda calculus ได้ถูกนำไปใช้ใน Turing Machine ซึ่งเป็นแบบจำลองในอุดมคติของ Alan Turing  ที่ต่อมากลายเป็นต้นแบบที่ถูกนำไปใช้ในการผลิต  Von Neumann Machine  ซึ่ง Von Neumann Machine ตัวนี้ได้กลายเป็นต้นแบบของคอมพิวเตอร์เครื่องแรกของโลกในเวลาต่อมา ท้ายที่สุดแนวคิดของ lambda calculus ก็ถูกนำมาแปลงเป็นภาษาโปรแกรมท

ลองเล่น SonarQube คลื่นโซนาร์ช่วยตรวจสอบคุณภาพของ code

SonarQube  คือเครื่องมือช่วยตรวจสอบคุณภาพของ source code ช่วยหาข้อบกพร่องใน source code ไม่ว่าจะเป็น Bug ที่น่าจะเกิดขึ้น ช่องโหว่ทางด้านความปลอดภัยหรือกลิ่นไม่ดีใน source code ของเรา (Code Smell) และ ช่วยตรวจสอบเราเขียน code ทดสอบครอบคลุมหรือดีแล้วยังยัง (code coverage) Code Smell ไม่ได้ใช้วัดว่า source code นี้สามารถทำงานได้ถูกต้อง มี bug หรือช่องโหว่หรือไม่ แต่ Code Smell ใช้วัดถึงคุณภาพของการออกแบบ เพื่อตรวจสอบว่า source code ที่เป็นอยู่ในปัจจุบันจะสามารถต่อเติม แก้ไขหรือทดสอบได้ง่ายหรือไม่ โดยหลักเกณฑ์ที่นำมาใช้วัดในส่วนของ Code Smell คือ ความซ้ำซ้อนของ code มี code แบบเดียวกันไปซ้ำกันในไฟล์ไหนบ้าง ตรวจสอบเงื่อนไขใน if ให้ ว่าเงื่อนไขตรงนี้มันมีโอกาสเป็นไปได้ไหม เพราะบางทีเงื่อนไขที่เราเขียนขึ้นมาเพื่อดักไว้ในบางครั้งมันแทบจะไม่มีโอกาสที่เวลามันทำงานแล้วเข้าเงื่อนไขในส่วนนั้น เป็นต้น สามารถไปอ่านรายละเอียดเพิ่มเติมได้ที่นี่ http://www.somkiat.cc/code-smell-internal-class/ นอกจาก SonarQube จะสามารถบอกถึงคุณภาพของ source code เราได้แล้ว ยังสามารถใช้ในการแจกแจงงานให