History

fix: intrument os.OpenFile differently for Reads and Writes (#15449)

allows us to trace latency for READs or WRITEs

Harshavardhana committed 4 years ago

Commit 043aaa71 parent aad9cb28 files · +43 −36Browse files

Unified · Split

8 files
  1. cmd/common-main.go +3 −3
  2. cmd/data-update-tracker.go +1 −1
  3. cmd/disk-cache-backend.go +10 −10
  4. cmd/os-instrumented.go +8 −2
  5. cmd/osmetric_string.go +15 −14
  6. cmd/tier-journal.go +2 −2
  7. cmd/update.go +1 −1
  8. cmd/xl-storage.go +3 −3
cmd/common-main.go+3−3
@@ -535,7 +535,7 @@ func parsEnvEntry(envEntry string) (envKV, error) { · 534 unmodified lines
535535 // the environment values from a file, in the form "key, value".
536536 // in a structured form.
537537 func minioEnvironFromFile(envConfigFile string) ([]envKV, error) {
538− f, err := os.Open(envConfigFile)
538+ f, err := Open(envConfigFile)
539539 if err != nil {
540540 return nil, err
541541 }
@@ -916,7 +916,7 @@ func getTLSConfig() (x509Certs []*x509.Certificate, manager *certs.Manager, secu · 374 unmodified lines
916916 // Therefore, we read all filenames in the cert directory and check
917917 // for each directory whether it contains a public.crt and private.key.
918918 // If so, we try to add it to certificate manager.
919− root, err := os.Open(globalCertsDir.Get())
919+ root, err := Open(globalCertsDir.Get())
920920 if err != nil {
921921 return nil, nil, false, err
922922 }
@@ -935,7 +935,7 @@ func getTLSConfig() (x509Certs []*x509.Certificate, manager *certs.Manager, secu · 12 unmodified lines
935935 continue
936936 }
937937 if file.Mode()&os.ModeSymlink == os.ModeSymlink {
938− file, err = os.Stat(filepath.Join(root.Name(), file.Name()))
938+ file, err = Stat(filepath.Join(root.Name(), file.Name()))
939939 if err != nil {
940940 // not accessible ignore
941941 continue
cmd/data-update-tracker.go+1−1
@@ -227,7 +227,7 @@ func (d *dataUpdateTracker) load(ctx context.Context, drives ...string) { · 226 unmodified lines
227227 for _, drive := range drives {
228228
229229 cacheFormatPath := pathJoin(drive, dataUpdateTrackerFilename)
230− f, err := os.Open(cacheFormatPath)
230+ f, err := OpenFile(cacheFormatPath, readMode, 0o666)
231231 if err != nil {
232232 if osIsNotExist(err) {
233233 continue
cmd/disk-cache-backend.go+10−10
@@ -624,7 +624,7 @@ func (c *diskCache) saveMetadata(ctx context.Context, bucket, object string, met · 623 unmodified lines
624624 if err := os.MkdirAll(cachedPath, 0o777); err != nil {
625625 return err
626626 }
627− f, err := os.OpenFile(metaPath, os.O_RDWR|os.O_CREATE, 0o666)
627+ f, err := OpenFile(metaPath, os.O_RDWR|os.O_CREATE|writeMode, 0o666)
628628 if err != nil {
629629 return err
630630 }
@@ -687,7 +687,7 @@ func (c *diskCache) updateMetadata(ctx context.Context, bucket, object, etag str · 56 unmodified lines
687687 if err := os.MkdirAll(cachedPath, 0o777); err != nil {
688688 return err
689689 }
690− f, err := os.OpenFile(metaPath, os.O_RDWR, 0o666)
690+ f, err := OpenFile(metaPath, os.O_RDWR|writeMode, 0o666)
691691 if err != nil {
692692 return err
693693 }
@@ -1275,12 +1275,12 @@ func (c *diskCache) NewMultipartUpload(ctx context.Context, bucket, object, uID · 581 unmodified lines
12751275
12761276 cachePath := getMultipartCacheSHADir(c.dir, bucket, object)
12771277 uploadIDDir := path.Join(cachePath, uploadID)
1278− if err := os.MkdirAll(uploadIDDir, 0o777); err != nil {
1278+ if err := mkdirAll(uploadIDDir, 0o777); err != nil {
12791279 return uploadID, err
12801280 }
12811281 metaPath := pathJoin(uploadIDDir, cacheMetaJSONFile)
12821282
1283− f, err := os.OpenFile(metaPath, os.O_RDWR|os.O_CREATE, 0o666)
1283+ f, err := OpenFile(metaPath, os.O_RDWR|os.O_CREATE|writeMode, 0o666)
12841284 if err != nil {
12851285 return uploadID, err
12861286 }
@@ -1386,7 +1386,7 @@ func (c *diskCache) SavePartMetadata(ctx context.Context, bucket, object, upload · 99 unmodified lines
13861386 defer uploadLock.Unlock(ulkctx.Cancel)
13871387
13881388 metaPath := pathJoin(uploadDir, cacheMetaJSONFile)
1389− f, err := os.OpenFile(metaPath, os.O_RDWR, 0o666)
1389+ f, err := OpenFile(metaPath, os.O_RDWR|writeMode, 0o666)
13901390 if err != nil {
13911391 return err
13921392 }
@@ -1465,7 +1465,7 @@ func newCachePartEncryptReader(ctx context.Context, bucket, object string, partI · 72 unmodified lines
14651465 func (c *diskCache) uploadIDExists(bucket, object, uploadID string) (err error) {
14661466 mpartCachePath := getMultipartCacheSHADir(c.dir, bucket, object)
14671467 uploadIDDir := path.Join(mpartCachePath, uploadID)
1468− if _, err := os.Stat(uploadIDDir); err != nil {
1468+ if _, err := Stat(uploadIDDir); err != nil {
14691469 return err
14701470 }
14711471 return nil
@@ -1564,7 +1564,7 @@ func (c *diskCache) CompleteMultipartUpload(ctx context.Context, bucket, object, · 92 unmodified lines
15641564 uploadMeta.Hits++
15651565 metaPath := pathJoin(uploadIDDir, cacheMetaJSONFile)
15661566
1567− f, err := os.OpenFile(metaPath, os.O_RDWR|os.O_CREATE, 0o666)
1567+ f, err := OpenFile(metaPath, os.O_RDWR|os.O_CREATE|writeMode, 0o666)
15681568 if err != nil {
15691569 return oi, err
15701570 }
@@ -1634,7 +1634,7 @@ func (c *diskCache) cleanupStaleUploads(ctx context.Context) { · 63 unmodified lines
16341634 readDirFn(pathJoin(c.dir, minioMetaBucket, cacheMultipartDir), func(shaDir string, typ os.FileMode) error {
16351635 return readDirFn(pathJoin(c.dir, minioMetaBucket, cacheMultipartDir, shaDir), func(uploadIDDir string, typ os.FileMode) error {
16361636 uploadIDPath := pathJoin(c.dir, minioMetaBucket, cacheMultipartDir, shaDir, uploadIDDir)
1637− fi, err := os.Stat(uploadIDPath)
1637+ fi, err := Stat(uploadIDPath)
16381638 if err != nil {
16391639 return nil
16401640 }
@@ -1649,8 +1649,8 @@ func (c *diskCache) cleanupStaleUploads(ctx context.Context) { · 8 unmodified lines
16491649 readDirFn(pathJoin(c.dir, minioMetaBucket, cacheWritebackDir), func(shaDir string, typ os.FileMode) error {
16501650 wbdir := pathJoin(c.dir, minioMetaBucket, cacheWritebackDir, shaDir)
16511651 cachedir := pathJoin(c.dir, shaDir)
1652− if _, err := os.Stat(cachedir); os.IsNotExist(err) {
1653− fi, err := os.Stat(wbdir)
1652+ if _, err := Stat(cachedir); os.IsNotExist(err) {
1653+ fi, err := Stat(wbdir)
16541654 if err != nil {
16551655 return nil
16561656 }
cmd/os-instrumented.go+8−2
@@ -37,7 +37,8 @@ const ( · 36 unmodified lines
3737 osMetricMkdirAll
3838 osMetricMkdir
3939 osMetricRename
40− osMetricOpenFile
40+ osMetricOpenFileW
41+ osMetricOpenFileR
4142 osMetricOpen
4243 osMetricOpenFileDirectIO
4344 osMetricLstat
@@ -135,7 +136,12 @@ func Rename(src, dst string) error { · 91 unmodified lines
135136
136137 // OpenFile captures time taken to call os.OpenFile
137138 func OpenFile(name string, flag int, perm os.FileMode) (*os.File, error) {
138− defer updateOSMetrics(osMetricOpenFile, name)()
139+ switch flag & writeMode {
140+ case writeMode:
141+ defer updateOSMetrics(osMetricOpenFileW, name)()
142+ default:
143+ defer updateOSMetrics(osMetricOpenFileR, name)()
144+ }
139145 return os.OpenFile(name, flag, perm)
140146 }
141147
cmd/osmetric_string.go+15−14
@@ -12,23 +12,24 @@ func _() { · 11 unmodified lines
1212 _ = x[osMetricMkdirAll-1]
1313 _ = x[osMetricMkdir-2]
1414 _ = x[osMetricRename-3]
15− _ = x[osMetricOpenFile-4]
16− _ = x[osMetricOpen-5]
17− _ = x[osMetricOpenFileDirectIO-6]
18− _ = x[osMetricLstat-7]
19− _ = x[osMetricRemove-8]
20− _ = x[osMetricStat-9]
21− _ = x[osMetricAccess-10]
22− _ = x[osMetricCreate-11]
23− _ = x[osMetricReadDirent-12]
24− _ = x[osMetricFdatasync-13]
25− _ = x[osMetricSync-14]
26− _ = x[osMetricLast-15]
15+ _ = x[osMetricOpenFileW-4]
16+ _ = x[osMetricOpenFileR-5]
17+ _ = x[osMetricOpen-6]
18+ _ = x[osMetricOpenFileDirectIO-7]
19+ _ = x[osMetricLstat-8]
20+ _ = x[osMetricRemove-9]
21+ _ = x[osMetricStat-10]
22+ _ = x[osMetricAccess-11]
23+ _ = x[osMetricCreate-12]
24+ _ = x[osMetricReadDirent-13]
25+ _ = x[osMetricFdatasync-14]
26+ _ = x[osMetricSync-15]
27+ _ = x[osMetricLast-16]
2728 }
2829
29−const _osMetric_name = "RemoveAllMkdirAllMkdirRenameOpenFileOpenOpenFileDirectIOLstatRemoveStatAccessCreateReadDirentFdatasyncSyncLast"
30+const _osMetric_name = "RemoveAllMkdirAllMkdirRenameOpenFileWOpenFileROpenOpenFileDirectIOLstatRemoveStatAccessCreateReadDirentFdatasyncSyncLast"
3031
31−var _osMetric_index = [...]uint8{0, 9, 17, 22, 28, 36, 40, 56, 61, 67, 71, 77, 83, 93, 102, 106, 110}
32+var _osMetric_index = [...]uint8{0, 9, 17, 22, 28, 37, 46, 50, 66, 71, 77, 81, 87, 93, 103, 112, 116, 120}
3233
3334 func (i osMetric) String() string {
3435 if i >= osMetric(len(_osMetric_index)-1) {
cmd/tier-journal.go+2−2
@@ -237,7 +237,7 @@ func (jd *tierDiskJournal) Open() error { · 236 unmodified lines
237237 }
238238
239239 var err error
240− jd.file, err = os.OpenFile(jd.JournalPath(), os.O_APPEND|os.O_CREATE|os.O_WRONLY|writeMode, 0o666)
240+ jd.file, err = OpenFile(jd.JournalPath(), os.O_APPEND|os.O_CREATE|os.O_WRONLY|writeMode, 0o666)
241241 if err != nil {
242242 return err
243243 }
@@ -259,7 +259,7 @@ func (jd *tierDiskJournal) Open() error { · 15 unmodified lines
259259 }
260260
261261 func (jd *tierDiskJournal) OpenRO() (io.ReadCloser, error) {
262− file, err := os.Open(jd.ReadOnlyPath())
262+ file, err := Open(jd.ReadOnlyPath())
263263 if err != nil {
264264 return nil, err
265265 }
cmd/update.go+1−1
@@ -181,7 +181,7 @@ func IsBOSH() bool { · 180 unmodified lines
181181 // Check if this is Helm package installation and report helm chart version
182182 func getHelmVersion(helmInfoFilePath string) string {
183183 // Read the file exists.
184− helmInfoFile, err := os.Open(helmInfoFilePath)
184+ helmInfoFile, err := Open(helmInfoFilePath)
185185 if err != nil {
186186 // Log errors and return "" as MinIO can be deployed
187187 // without Helm charts as well.
cmd/xl-storage.go+3−3
@@ -394,7 +394,7 @@ func (s *xlStorage) readMetadataWithDMTime(ctx context.Context, itemPath string) · 393 unmodified lines
394394 return nil, time.Time{}, err
395395 }
396396
397− f, err := OpenFile(itemPath, readMode, 0)
397+ f, err := OpenFile(itemPath, readMode, 0o666)
398398 if err != nil {
399399 return nil, time.Time{}, err
400400 }
@@ -1547,7 +1547,7 @@ func (s *xlStorage) ReadFile(ctx context.Context, volume string, path string, of · 1146 unmodified lines
15471547 }
15481548
15491549 // Open the file for reading.
1550− file, err := Open(filePath)
1550+ file, err := OpenFile(filePath, readMode, 0o666)
15511551 if err != nil {
15521552 switch {
15531553 case osIsNotExist(err):
@@ -2515,7 +2515,7 @@ func (s *xlStorage) RenameFile(ctx context.Context, srcVolume, srcPath, dstVolum · 961 unmodified lines
25152515
25162516 func (s *xlStorage) bitrotVerify(ctx context.Context, partPath string, partSize int64, algo BitrotAlgorithm, sum []byte, shardSize int64) error {
25172517 // Open the file for reading.
2518− file, err := Open(partPath)
2518+ file, err := OpenFile(partPath, readMode, 0o666)
25192519 if err != nil {
25202520 return osErrToFileErr(err)
25212521 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t