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