aboutsummaryrefslogtreecommitdiff
path: root/weed/command/s3.go
diff options
context:
space:
mode:
authorAmir H. Yeganemehr <yeganemehr@jeyserver.com>2023-06-27 01:22:45 +0200
committerGitHub <noreply@github.com>2023-06-26 16:22:45 -0700
commitf0d3c874b66282c1a9f825ba6731d8db628b3054 (patch)
treee539789be4e0cf40c312fee7a0b3140dec034996 /weed/command/s3.go
parent4d64bdba650f9809336c4ed236901accc9831ab9 (diff)
downloadseaweedfs-f0d3c874b66282c1a9f825ba6731d8db628b3054.tar.xz
seaweedfs-f0d3c874b66282c1a9f825ba6731d8db628b3054.zip
Unix Socket listener for S3 server (#4621)
Add localSocket option to s3 server
Diffstat (limited to 'weed/command/s3.go')
-rw-r--r--weed/command/s3.go28
1 files changed, 26 insertions, 2 deletions
diff --git a/weed/command/s3.go b/weed/command/s3.go
index 69f4ec270..f2dffd57e 100644
--- a/weed/command/s3.go
+++ b/weed/command/s3.go
@@ -4,12 +4,16 @@ import (
"context"
"crypto/tls"
"fmt"
+ "net"
+ "net/http"
+ "os"
+ "runtime"
+ "time"
+
"github.com/seaweedfs/seaweedfs/weed/s3api/s3err"
"google.golang.org/grpc/credentials/tls/certprovider"
"google.golang.org/grpc/credentials/tls/certprovider/pemfile"
"google.golang.org/grpc/reflection"
- "net/http"
- "time"
"github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
@@ -44,6 +48,7 @@ type S3Options struct {
auditLogConfig *string
localFilerSocket *string
dataCenter *string
+ localSocket *string
certProvider certprovider.Provider
}
@@ -64,6 +69,7 @@ func init() {
s3StandaloneOptions.allowEmptyFolder = cmdS3.Flag.Bool("allowEmptyFolder", true, "allow empty folders")
s3StandaloneOptions.allowDeleteBucketNotEmpty = cmdS3.Flag.Bool("allowDeleteBucketNotEmpty", true, "allow recursive deleting all entries along with bucket")
s3StandaloneOptions.localFilerSocket = cmdS3.Flag.String("localFilerSocket", "", "local filer socket path")
+ s3StandaloneOptions.localSocket = cmdS3.Flag.String("localSocket", "", "default to /tmp/seaweedfs-s3-<port>.sock")
}
var cmdS3 = &Command{
@@ -229,6 +235,24 @@ func (s3opt *S3Options) startS3Server() bool {
*s3opt.bindIp = "localhost"
}
+ if runtime.GOOS != "windows" {
+ localSocket := *s3opt.localSocket
+ if localSocket == "" {
+ localSocket = fmt.Sprintf("/tmp/seaweedfs-s3-%d.sock", *s3opt.port)
+ }
+ if err := os.Remove(localSocket); err != nil && !os.IsNotExist(err) {
+ glog.Fatalf("Failed to remove %s, error: %s", localSocket, err.Error())
+ }
+ go func() {
+ // start on local unix socket
+ s3SocketListener, err := net.Listen("unix", localSocket)
+ if err != nil {
+ glog.Fatalf("Failed to listen on %s: %v", localSocket, err)
+ }
+ httpS.Serve(s3SocketListener)
+ }()
+ }
+
listenAddress := fmt.Sprintf("%s:%d", *s3opt.bindIp, *s3opt.port)
s3ApiListener, s3ApiLocalListener, err := util.NewIpAndLocalListeners(*s3opt.bindIp, *s3opt.port, time.Duration(10)*time.Second)
if err != nil {