diff --git a/storage/metric/tiered.go b/storage/metric/tiered.go index 0197fe96e..1f7581be7 100644 --- a/storage/metric/tiered.go +++ b/storage/metric/tiered.go @@ -112,8 +112,12 @@ const ( const watermarkCacheLimit = 1024 * 1024 -func NewTieredStorage(appendToDiskQueueDepth, viewQueueDepth uint, flushMemoryInterval, memoryTTL time.Duration, root string) (*TieredStorage, error) { - diskStorage, err := NewLevelDBMetricPersistence(root) +func NewTieredStorage(appendToDiskQueueDepth, viewQueueDepth uint, flushMemoryInterval, memoryTTL time.Duration, rootDirectory string) (*TieredStorage, error) { + if isDir, _ := utility.IsDir(rootDirectory); !isDir { + return nil, fmt.Errorf("Could not find metrics directory %s", rootDirectory) + } + + diskStorage, err := NewLevelDBMetricPersistence(rootDirectory) if err != nil { return nil, err } diff --git a/utility/file_ext.go b/utility/file_ext.go new file mode 100644 index 000000000..f06eb8d5c --- /dev/null +++ b/utility/file_ext.go @@ -0,0 +1,33 @@ +// Copyright 2013 Prometheus Team +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Useful file/filesystem related functions. + +package utility + +import ( + "fmt" + "os" +) + +// Returns true iff dirPath is a valid directory path. +func IsDir(dirPath string) (bool, error) { + finfo, err := os.Stat(dirPath) + if err != nil { + return false, err + } + if !finfo.IsDir() { + return false, fmt.Errorf("%s not a directory", dirPath) + } + return true, nil +}