diff --git a/weed/pb/filer_pb/filer_client.pb.go b/weed/pb/filer_pb/filer_client.go similarity index 72% rename from weed/pb/filer_pb/filer_client.pb.go rename to weed/pb/filer_pb/filer_client.go index b2be614af..100e997b2 100644 --- a/weed/pb/filer_pb/filer_client.pb.go +++ b/weed/pb/filer_pb/filer_client.go @@ -92,3 +92,31 @@ func ReadDirAllEntries(filerClient FilerClient, fullDirPath util.FullPath, prefi return } + +func Exists(filerClient FilerClient, parentDirectoryPath string, entryName string, isDirectory bool) (exists bool, err error) { + + err = filerClient.WithFilerClient(func(client SeaweedFilerClient) error { + + request := &LookupDirectoryEntryRequest{ + Directory: parentDirectoryPath, + Name: entryName, + } + + glog.V(4).Infof("exists entry %v/%v: %v", parentDirectoryPath, entryName, request) + resp, err := LookupEntry(client, request) + if err != nil { + if err == ErrNotFound { + exists = false + return nil + } + glog.V(0).Infof("exists entry %v: %v", request, err) + return fmt.Errorf("exists entry %s/%s: %v", parentDirectoryPath, entryName, err) + } + + exists = resp.Entry.IsDirectory == isDirectory + + return nil + }) + + return +} diff --git a/weed/s3api/filer_util.go b/weed/s3api/filer_util.go index be985c893..2e738af50 100644 --- a/weed/s3api/filer_util.go +++ b/weed/s3api/filer_util.go @@ -153,30 +153,8 @@ func doDeleteEntry(client filer_pb.SeaweedFilerClient, parentDirectoryPath strin func (s3a *S3ApiServer) exists(parentDirectoryPath string, entryName string, isDirectory bool) (exists bool, err error) { - err = s3a.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error { + return filer_pb.Exists(s3a, parentDirectoryPath, entryName, isDirectory) - request := &filer_pb.LookupDirectoryEntryRequest{ - Directory: parentDirectoryPath, - Name: entryName, - } - - glog.V(4).Infof("exists entry %v/%v: %v", parentDirectoryPath, entryName, request) - resp, err := filer_pb.LookupEntry(client, request) - if err != nil { - if err == filer_pb.ErrNotFound { - exists = false - return nil - } - glog.V(0).Infof("exists entry %v: %v", request, err) - return fmt.Errorf("exists entry %s/%s: %v", parentDirectoryPath, entryName, err) - } - - exists = resp.Entry.IsDirectory == isDirectory - - return nil - }) - - return } func objectKey(key *string) *string { diff --git a/weed/s3api/s3api_handlers.go b/weed/s3api/s3api_handlers.go index d850cb088..05dd4b823 100644 --- a/weed/s3api/s3api_handlers.go +++ b/weed/s3api/s3api_handlers.go @@ -46,6 +46,10 @@ func (s3a *S3ApiServer) WithFilerClient(fn func(filer_pb.SeaweedFilerClient) err }, s3a.option.FilerGrpcAddress, s3a.option.GrpcDialOption) } +func (s3a *S3ApiServer) AdjustedUrl(hostAndPort string) string { + return hostAndPort +} + // If none of the http routes match respond with MethodNotAllowed func notFoundHandler(w http.ResponseWriter, r *http.Request) {