From 094c28fb28202ab6e78e5aece1610e8db13746a2 Mon Sep 17 00:00:00 2001 From: Shridhar Patil <shridharp@mkcl.org> Date: Sat, 6 Jul 2019 12:59:18 +0530 Subject: [PATCH] FDB changes for reindex, filepack, fast read and write changes FDB changes for reindex, filepack, fast read and write changes --- filemdl/filemdl.go | 22 +++++++++------------- filemdl/filemdl_linux.go | 1 + filemdl/filemdl_windows.go | 14 +++++--------- filemdl/filepack/filePack.go | 2 +- filemdl/filepack/filepack_test.go | 2 +- 5 files changed, 17 insertions(+), 24 deletions(-) diff --git a/filemdl/filemdl.go b/filemdl/filemdl.go index 5d3608d..d0d1605 100644 --- a/filemdl/filemdl.go +++ b/filemdl/filemdl.go @@ -2,7 +2,6 @@ package filemdl import ( "errors" - "fmt" "io" "io/ioutil" "os" @@ -649,17 +648,18 @@ func writeFileSafely(filePath string, data []byte, perm os.FileMode) error { } tmpFileName := tmpFile.Name() - // get the file mode from the original file and use that for the replacement - // file, too. info, err := os.Stat(filePath) - if os.IsNotExist(err) { - } else if err != nil { + if err != nil && !os.IsNotExist(err) { return err - } else { + } + // get the file mode from the original file and use that for the replacement + // file, too. + if err == nil { if err := os.Chmod(tmpFileName, info.Mode()); err != nil { - return fmt.Errorf("can't set filemode on tempfile %q: %v", tmpFileName, err) + return errormdl.Wrap("can't set filemode on tempfile: " + tmpFileName + ", error: " + err.Error()) } } + if err := AtomicReplaceFile(tmpFileName, filePath); err != nil { return errormdl.Wrap("cannot replace " + filePath + " with " + tmpFileName) } @@ -671,6 +671,7 @@ func writeFile(filename string, data []byte, perm os.FileMode) error { if err != nil { return err } + defer f.Close() n, err := f.Write(data) if err != nil { return err @@ -678,10 +679,5 @@ func writeFile(filename string, data []byte, perm os.FileMode) error { if n < len(data) { return errormdl.Wrap("short write") } - err = f.Sync() - if err != nil { - return err - } - - return f.Close() + return f.Sync() } diff --git a/filemdl/filemdl_linux.go b/filemdl/filemdl_linux.go index c5a5e2b..acd1877 100644 --- a/filemdl/filemdl_linux.go +++ b/filemdl/filemdl_linux.go @@ -1,3 +1,4 @@ +// TODO: Build flag needs to be passed while building exe/executable // +build !windows package filemdl diff --git a/filemdl/filemdl_windows.go b/filemdl/filemdl_windows.go index ba259bb..7708f99 100644 --- a/filemdl/filemdl_windows.go +++ b/filemdl/filemdl_windows.go @@ -7,14 +7,10 @@ import ( ) const ( - movefile_replace_existing = 0x1 - movefile_write_through = 0x8 - modkernel32 = syscall.NewLazyDLL("kernel32.dll") - - procMoveFileExW = modkernel32.NewProc("MoveFileExW") - modkernel32 = syscall.NewLazyDLL("kernel32.dll") - - procMoveFileExW = modkernel32.NewProc("MoveFileExW") + moveFileReplacExisting = 0x1 + moveFileWriteThrough = 0x8 + modkernel32 = syscall.NewLazyDLL("kernel32.dll") + procMoveFileExW = modkernel32.NewProc("MoveFileExW") ) //sys moveFileEx(lpExistingFileName *uint16, lpNewFileName *uint16, dwFlags uint32) (err error) = MoveFileExW @@ -33,7 +29,7 @@ func AtomicReplaceFile(source, destination string) error { } // see http://msdn.microsoft.com/en-us/library/windows/desktop/aa365240(v=vs.85).aspx - if err := moveFileEx(src, dest, movefile_replace_existing|movefile_write_through); err != nil { + if err := moveFileEx(src, dest, moveFileReplacExisting|moveFileWriteThrough); err != nil { return &os.LinkError{"replace", source, destination, err} } return nil diff --git a/filemdl/filepack/filePack.go b/filemdl/filepack/filePack.go index d477876..835cdb3 100644 --- a/filemdl/filepack/filePack.go +++ b/filemdl/filepack/filePack.go @@ -16,7 +16,7 @@ import ( "corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/filemdl" "corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/hashmdl" - //"corelab.mkcl.org\MKCLOS\coredevelopmentplatform\corepkgv2\securitymdl\securitymdl.go" + "github.com/tidwall/gjson" "github.com/tidwall/sjson" diff --git a/filemdl/filepack/filepack_test.go b/filemdl/filepack/filepack_test.go index 33bf70a..ba637e8 100644 --- a/filemdl/filepack/filepack_test.go +++ b/filemdl/filepack/filepack_test.go @@ -88,7 +88,7 @@ func BenchmarkGetFileDataFromPack(b *testing.B) { } func TestFastWriteFile(t *testing.T) { - err := filemdl.FastWriteFile("/home/vivekn/pqr", []byte("how are you"), false, false, true) + err := filemdl.FastWriteFile("C:/Users/shridharp/Desktop/Test/testF.txt", []byte("how are you"), true, true) if err != nil { log.Fatal(err) } -- GitLab