github.com/Cloud-Foundations/Dominator@v0.3.4/sub/rpcd/writeProber.go (about) 1 package rpcd 2 3 import ( 4 "fmt" 5 "os" 6 "time" 7 8 "github.com/Cloud-Foundations/Dominator/lib/errors" 9 ) 10 11 func (t *rpcType) startWriteProber() { 12 if t.params.SubdDirectory == "" { 13 return 14 } 15 var counter uint64 16 for { 17 errString := errors.ErrorToString(t.writeProbe(counter)) 18 t.rwLock.Lock() 19 t.lastWriteError = errString 20 t.rwLock.Unlock() 21 counter++ 22 time.Sleep(5 * time.Minute) 23 } 24 } 25 26 func (t *rpcType) writeProbe(counter uint64) (err error) { 27 filename := fmt.Sprintf("%s/write-probe.%d", 28 t.params.SubdDirectory, counter) 29 file, err := os.Create(filename) 30 if err != nil { 31 return 32 } 33 defer func() { 34 if e := os.Remove(filename); err == nil && e != nil { 35 err = e 36 } 37 }() 38 data := []byte(fmt.Sprintf("data.%d\n", counter)) 39 if _, err = file.Write(data); err != nil { 40 return 41 } 42 if err = file.Sync(); err != nil { 43 return 44 } 45 return 46 }