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  }